解
为了在给定的包被加载后执行的东西,你需要把那以后:config
在use-package
。
这是在您的问题中使用摘要的示例:
片段1
(use-package helm
:config
(progn
(bind-key "M-Y" #'helm-end-of-buffer helm-map)
(bind-key "M-k" #'helm-next-line helm-find-files-map)))
(use-package gnus
:config
(bind-key "M-s" #'other-window gnus-summary-mode-map))
说明
可以在emacs init.el
或加载/需要的任何嵌套文件中的不同位置放置以下2个摘要。
片段2
(use-package gnus)
片段3
(use-package gnus
:config
(bind-key "M-s" #'other-window gnus-summary-mode-map))
原因是,首先执行以上两个片段中的哪个片段都没有关系。
这就是为什么..下面是代码片段3扩展到的内容。
M-x pp-macroexpand-last-sexp
当点(光标)在该代码段的最后一个右括号之后时,将得到以下结果。
摘要#4
(if (not (require 'gnus nil t))
(ignore (message (format "Could not load %s" 'gnus)))
(condition-case-unless-debug err
(bind-key "M-s" #'other-window gnus-summary-mode-map)
(error
(ignore
(display-warning 'use-package
(format "%s %s: %s" "gnus" ":config"
(error-message-string err))
:error))))
t)
上面的代码段基本上意味着
gnus
首先需要,然后bind-key
执行表单。
- 如果
gnus
未找到,则您将在* Messages *缓冲区中看到一条消息,指出无法加载该软件包。
- 如果执行中有任何问题,将会抛出错误
(bind-key "M-s" #'other-window gnus-summary-mode-map)
同样,如果上面gnus
的代码片段2已要求该代码,并且代码片段3再次需要该消息,也没关系,因为require
如果已经加载了软件包,则不会再次加载该软件包。
参考
从github 的use-package
基础知识来看,
:config
可以在加载包后用于执行代码。如果延迟进行加载(请参阅下面的有关自动加载的更多信息),则此执行将推迟到自动加载发生之后:
片段5
(use-package foo
:init
(setq foo-variable t)
:config
(foo-mode 1))
上面在加载包之前执行:init
((setq foo-variable t)
)部分。但是在该节被加载后执行。 foo
(foo-mode 1)
:config
foo