如何在 Elisp 中使用 Emacs 确定当前是否启用了特定模式?

How to figure out whether or not a particular mode is currently enabled using Emacs in Elisp?

我想写一个 Elisp 脚本

如何查看 Elisp 中当前是否启用了此模式?

更新 1: M-x describe-mode 显示所有启用的次要模式的列表。

更新 2: 根据 this answer,您可以使用以下代码显示所有活动次要模式的列表:

(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)))

(which-active-modes)

更新 3: 似乎有效的最终版本:

(if auto-save-visited-mode
    (message "The mode is on")
    (message "The mode is off")
)

您可以通过简单地评估变量 auto-save-visited-mode 来测试它是否启用,如其文档中所述,C-h vauto-save-visited-mode.

要启用它,只需调用 (auto-save-visited-mode 1)。这将启用它或什么也不做。

编辑: (auto-save-visited-mode 1) 本身可能会完成您想要的,但它会 运行 设置代码/再次调用模式挂钩,即使它之前已设置。因此,您可以使用(unless auto-save-visited-mode (auto-save-visited-mode))来避免这种情况。

如果模式开启则其模式变量的值是非nil。如果关闭则值为 nil.