如何在emacs中列出活动的次要模式?

Rea*_*nly 104 emacs minor-mode

如何在emacs中列出活动的次要模式?

Phi*_*hil 121

C-h mM-x describe-mode显示所有活动的次要模式(和主要模式)以及每种模式的简要说明.


Tre*_*son 20

所有次要模式命令的列表都存储在变量中minor-mode-list.通常通过检查相同名称的变量来确定它们是否处于活动状态.所以你可以这样做:

(defun which-active-modes ()
  "Give a message of which minor modes are enabled in the current buffer."
  (interactive)
  (let ((active-modes))
    (mapc (lambda (mode) (condition-case nil
                             (if (and (symbolp mode) (symbol-value mode))
                                 (add-to-list 'active-modes mode))
                           (error nil) ))
          minor-mode-list)
    (message "Active modes are %s" active-modes)))
Run Code Online (Sandbox Code Playgroud)

注意:这仅适用于当前缓冲区(因为次要模式可能仅在某些缓冲区中启用).

  • @jrockway不是我最自豪的lisp时刻. (4认同)

Mir*_*lov 5

describe-mode可以以某种方式提出启用的次要模式列表,为什么我不能?因此,在阅读其源代码后,我意识到它从minor-mode-listminor-mode-alist. 使用第 3 方dash.el列表操作库,我提供了以下代码:

(--filter (and (boundp it) (symbol-value it)) minor-mode-list)
Run Code Online (Sandbox Code Playgroud)

因此,例如,要禁用所有次要模式,请使用-each

(--each (--filter (and (boundp it) (symbol-value it)) minor-mode-list)
        (funcall it -1))
Run Code Online (Sandbox Code Playgroud)

不要忘记将次要模式列表保存在变量中,否则您将不得不重新启动 Emacs 或通过内存启用它们。