You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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已经完成启动初始化逻辑,变量设置无法影响已完成的启动流程。

修正方案(二选一)

  1. 用:custom块配置变量(符合use-package最佳实践):
(use-package org
  :custom
  (org-startup-with-inline-images t)
  (org-image-actual-width '(100))
  )
  1. 用: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:54:33