关于Emacs use-package中:hook与:config的差异及变量配置问题
问题1:use-package中
:hook与:config的区别及配置失效原因 核心区别
:hook:绑定指定模式的钩子函数,每次该模式激活(如打开对应类型buffer)时执行函数,属于局部buffer级别的触发逻辑。:config:在package加载完成后仅执行一次,用于全局化的配置生效,属于初始化阶段的一次性设置。
配置失效原因
org-startup-with-inline-images 是控制Org文件初始化时是否加载图片的变量,它的读取时机在Org buffer创建、模式激活的早期阶段。你把设置放在:hook (org-mode . my/org-mode-startup)里,函数会在org-mode完全激活后才执行,此时Org已经完成启动初始化逻辑,变量设置无法影响已完成的启动流程。
修正方案(二选一)
- 用
:custom块配置变量(符合use-package最佳实践):
(use-package org :custom (org-startup-with-inline-images t) (org-image-actual-width '(100)) )
- 用
:init块提前设置全局变量:
(use-package org :init (setq org-startup-with-inline-images t org-image-actual-width '(100)) )
问题2:
buffer-face-mode-face配置中变量失效的原因 你用单引号'包裹整个属性列表,导致my/default-font-size被当成符号字面量,而非变量的实际值(150)。Emacs Lisp中,单引号会阻止内部表达式的求值,需要用反引号+逗号实现变量插值:
(defvar my/default-font-size 150) (setq buffer-face-mode-face `(:family "Courier New" :height ,my/default-font-size :width normal))
反引号`保留列表字面结构,逗号,强制求值后续变量,这样就能正确将150赋值给:height属性。
内容的提问来源于stack exchange,提问作者viscroad
相关产品推荐
相关产品推荐

