源起
好多包无melpa
源的包还是得git
下来,但只用git submodule
对于个人来说有些麻烦了,而对于github
,在国内比较折腾,而有国内有两个可用的镜像:
研究了下quelpa
,发现git
源是焊死的,虽然可以用url
代替,但总觉得不太舒服。
更改函数
因为:feacher
指定源的时候是直接跳到函数的,所以可以直接重新定义函数quelpa-build--checkout-github
来达到修正的目的。
(defun quelpa-build--checkout-github (name config dir)
"Check package NAME with config CONFIG out of github into DIR."
(let ((url (format "https://github.com.cnpm.org/%s.git" (plist-get config :repo))))
(quelpa-build--checkout-git name (plist-put (copy-sequence config) :url url) dir)))
但自更新和melpa
的更新都还是默认的,那我外边也把变量焊死
(defconst quelpa-melpa-repo-url custom/melpa-repo-url)
;; 安装的时候
(unless (package-installed-p 'quelpa)
(with-temp-buffer
(url-insert-file-contents custom/quelpa-el-url)
(eval-buffer)
;; redef
(defun quelpa-build--checkout-github (name config dir)
"Check package NAME with config CONFIG out of github into DIR."
(let ((url (format "https://github.com.cnpm.org/%s.git" (plist-get config :repo))))
(quelpa-build--checkout-git name (plist-put (copy-sequence config) :url url) dir)))
(quelpa-self-upgrade)))
定义宏
而要整个新的源又有些麻烦,直接定义个宏:
(defmacro utils/quelpa-git-https-sources--set (source-name source-url)
"Add the source or modify default source."
`(progn
(defun ,(intern (format "quelpa-build--checkout-%s" source-name)) (name config dir)
(let ((url (format "https://%s/%s.git" ,source-url (plist-get config :repo))))
(quelpa-build--checkout-git name (plist-put (copy-sequence config) :url url) dir)))))
;; 这下可以很快添加源了
(utils/quelpa-git-https-sources--set "github" custom/github-com-cnpmjs-org)
(utils/quelpa-git-https-sources--set "gitee" "gitee.com")
把宏写在安装quelpa
的前面,就可以简化代码了:
(unless (package-installed-p 'quelpa)
(with-temp-buffer
(url-insert-file-contents custom/quelpa-el-url)
(eval-buffer)
;; redef
(utils/quelpa-git-https-sources--set "github" custom/github-com-cnpmjs-org)
(quelpa-self-upgrade)))
结束
折腾半天就搞了这个,发出来大家乐呵乐呵