为use-package添加创建临时钩子的关键字

厉害了, 这个我是真的没有注意过.

很方便, 我天天都在用.

真的吗!太好了!开心!

我是碰到这样一个问题,我准备在org-mode中使用LaTeX-math-mode,所以我用了以下配置,

(use-package org
  :init
  (add-hook 'org-mode-hook 'LaTeX-math-mode))

由于LaTeX-math-mode本身没有载入,我这样做,

(use-package tex
  :commands
  LaTeX-math-mode)

到现在为止一切正常。问题在于,我在tex中添加了一些pretty symbol,换言之,我用以下的配置

(use-package tex
   :commands
    LaTeX-math-mode
   :config
    (add-to-list 'tex--prettify-symbols-alist '("\\varpi" . 982))
)

现在麻烦就出现了,如果我事先没有打开过其他tex文件,直接打开一个org文件的话,会提示我找不到tex--prettify-symbols-alist这个符号。但是直接使用tex的话,是没有这种错误的。我只能猜测这种情况下,tex的相关el文件并没有完全加载。

检查一下,tex--prettify-symbols-alist这个变量是定义在tex-mode.el这个主模式中,也许加载LaTeX-math-mode这个minor mode不会自动加载tex-mode,但奇怪的是不知为何会用到这里面的符号。

可以试试把(add-to-list 'tex--prettify-symbols-alist '("\\varpi" . 982)) 加到tex-mode-hook 里,或者放到 tex-mode 加载之后?

(with-eval-after-load 'tex-mode
 (add-to-list 'tex--prettify-symbols-alist '("\\varpi" . 982)))

这只是例子,你可以使用合适的 hook (e.g. eshell-first-time-mode-hook)或者 advice。 另外,其他人给出的 toggle 函数也很方便。

谢谢帮助。我现在是直接用boundp检测这个符号是否存在,如果不存在直接跳过add-to-list的步骤。