看了一下Borg的文档,这个方案留待后面直接用git submodule用着不顺利的时候再试试
可以看看我目前的方法,把所有的包当作一个 submodule,绕开依赖管理。
项目地址更改为
这个方法看着是比较新颖,没这么尝试过
Borg 严重依赖 magit,在Liunx 上体验应该会很好。但在Windows 下 magit 太慢。楼主如果主力系统是 Linux的话,推荐用 Borg,否则不建议。
我是主力用 macOS,其次是 Windows,配置主要在 macOS上更新。
我是属于,Windows和Linux都用,五五开那种,magit在Windows下的性能不行这个我还是清楚的,之前还没开始重新组织配置的时候,也是听的陈斌先生的建议,用的vc
来个文不对题(不使用git submodule)的回复:
可以看看我写的一个包:新包:pie - package installer for Emacs
不依赖package.el,支持git clone仓库或者http下载单个文件,支持定制化构建包。不过我不用windows,不确定在win上会不会有啥问题。
依赖Magit吗?
不依赖magit,依赖vc(对于git仓库,一开始用的是vc,后来改成直接使用git这个命令行工具,对于hg之类的其他类型仓库,依赖vc,不过其他仓库我没测过。。。)
出现一个新问题:我按照use-package的说明,将use-apckage通过git submodule add到我设定的插件目录,在使用git submodule add另一个插件(如markdown-mode),用use-package加载的时候,我的插件路径:load-path是对的,但是还是在打开Emacs的时候,给我直接从elpa上查找markdown-mode,而不是直接使用我本地的文件,这样的问题怎么解决?
我使用的是 use-package+quelpa+git submodule
管理我自己写的一些package
首先所有的子模块我都放在 .emacs.d/site-lisp
目录下,所以需要添加 site-lisp
路径到 load-path
https://github.com/honmaple/maple-emacs/blob/master/core/core.el#L126
然后是使用 use-package+quelpa
, 其中的 quelpa
关键词是我自定义的
https://github.com/honmaple/maple-emacs/blob/master/core/core-use-package.el#L197
其中关键的地方就在于会优先查找本地的package,如果没有才会下载远程的包
(defun use-package-handler/:quelpa (name _keyword args rest state)
"NAME KEYWORD ARGS REST STATE."
(use-package-concat
`((unless (or (locate-library ,(format "%s" name))
(package-installed-p ',(pcase (car args)
((pred listp) (caar args))
((pred symbolp) (car args)))))
(apply 'quelpa ',args)))
(use-package-process-keywords name rest state)))
如果我在其它地方使用emacs(非我本机),可以选择是否克隆子模块,不克隆的话会使用quelpa下载package。
如果不想使用子模块,而是一个独立的本地包,和emacs配置一起管理,同样可以放到site-lisp目录下,只需要添加:ensure nil
即可,具体这些都可以在我的配置里找到
我用magit加submodule,按提示就搞定了,什么都没学的
前不久换成了straight,现在是elpa+少量straight,straight相比submodule好处是原样给你目录,可以直接git/magit操作。不过默认只认elisp文件,找了好久怎么把lsp-bridge的py文件放进去。
昨天试了一天把use-package用上,失败了,还是暂时考虑直接require了
use-package没什么坑,只要注意 always-ensure always-defer 和 demand 应该就可以了。搞好之后已经require了的不用动,加新插件再用use-package就行
我是当时面对的问题是这样,use-package的load-path读取的路径,我按照插件的绝对路径写的,但是似乎它还是给我搞的是相对路径,这就是我不得不暂时放弃使用use-package的原因
use-package
里的 load-path
是配合和 user-emacs-directory
展开的,有什么理由一定要用绝对路径咧?
3.7 Setting a custom ‘load-path’
================================
If a package resides in some directory that is not in your ‘load-path’,
use the ‘:load-path’ keyword to add it. It takes a symbol, a function,
a string or a list of strings. If the path is relative, it is expanded
within ‘user-emacs-directory’.
在init.el重新定义user-emacs-directory, 这个方法不错,试试
更新:在这几天组织配置的过程下,目前采取的方案是以git submodule为主,一些包在github没有找到的直接去elpa和melpa下载直接package-install-from-buffer,后面还要想办法用回use-package,因为确实还是方便
其实用 git submodules 管理给我的最大感觉就是 自由
一个包什么时候加载,如何加载,加载时干什么,这些都是完全由你自己控制的,不用再去为 use-package 的各种用法操心,只需要掌握最基础的 elisp 语法就行了
(纯属个人观点,请理性讨论)
主要也是因为之前有人说use-package用着方便,这几天只不过是手写这些配置,use-package本身只是个宏,到时候也要展开执行
git submodule 和 use-package 并不矛盾,两者可以同时使用。