更新包之后 diminish 会失效

package.el 更新包时,会再次加载包,进一步会让 diminish 失效。

(diminish 'ivy-mode),然后 M-x package-reinstall ivyivy 会重新出现在 Mode Line 上。

之前我被此事困扰过(不清楚怎么回事),有机会看了看 package.el 代码才有些头绪。

原因是?光看这里代码不明白

噢,确实漏掉了。后边还有看 define-minor-mode 的效果,把 (define-minor-mode ivy-mode ... 展开,会得到:

(with-no-warnings
    (add-minor-mode 'ivy-mode '" ivy" ivy-mode-map nil nil))

再看 add-minor-mode 的实现:

(let ((existing (assq toggle minor-mode-alist)))
  (if existing
      (setcdr existing (list name))
    ...))

最后会归咎于 setcdr 覆盖了 diminish 的效果。

那是不是应该改进一下diminish,让它advice add-minor-mode?

不清楚,我还没考虑过,或许可以先看看跟 diminish 同类的包有没有考虑这个(印象中 Magit 的作者有个同类的包)。

我倒觉得就这么放着就好……


话说回来,你们真的平常不怎么开关Emacs?

windows和mac下都偶尔会卡死,然后有时改配置也会重启