你怎么列的活性微小的模式在emacs?

有帮助吗?

解决方案

C-h mM-x describe-mode显示了所有的活性次要模式(和主要模式),并且每个的一个简要说明。

其他提示

一个列表中的所有小的模式的命令是存在的可变 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)))

注:这仅适用于当前的缓冲器(因为轻微的模式,可能只有启用了某些缓冲区).

describe-mode能以某种方式拿出启用次要模式的列表,为什么我不能?所以,阅读它的源代码后,我意识到,这会从两个minor-mode-listminor-mode-alist活跃次要模式的列表。使用第三方 dash.el 列表操作库时,我用这个代码:

(--filter (and (boundp it) (symbol-value it)) minor-mode-list)

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

(--each (--filter (and (boundp it) (symbol-value it)) minor-mode-list)
        (funcall it -1))

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

下面是类似的一些已经被在其他的答案解决的方法的简单替代片段:

  
(delq nil
  (mapcar
    (lambda (x)
      (let ((car-x (car x)))
        (when (and (symbolp car-x) (symbol-value car-x))
          x)))
    minor-mode-alist))

如果你想要 编程方式 做了些什么所有的缓冲区,有一定的模式的活动,那么最好,最简单、最清洁、建立解决方案如下:

(dolist ($buf (buffer-list (current-buffer)))
  (with-current-buffer $buf
    (when some-buffer-local-minor-or-major-mode-variable-you-want-to-find
      (message "x %s" $buf))))

它并如下:

  1. 检索的一个列表中的所有通过缓冲区 buffer-list, 与当前活动的缓冲器的清单(所以它处理第一,通常是你想要的,但离开了 current-buffer 参数如果你不在乎).
  2. 环穿过缓冲区清单和分配的每一个缓冲区名称的变量 $buf.
  3. 使用 with-current-buffer $buf 告诉Emacs的所有代码内的机构应当运行,如果它运行的内部缓冲区 $buf 而不是什么缓冲你真的显示在屏幕上。
  4. when <some mode variable> 是正确的方式检查,如果一个模式的启用;你也可以使用 if 和其他这样的方法。无论哪种方式,目标是检查,如果未成年人或主要模式的主要模式变量设的缓冲区。几乎所有的模式定义的一个变量通过的"定义"一个模式,该模式 自动 导致他们创建一个缓冲区地方命名的可变后的模式,它是如何运作的。如果他们没有一个标准的变量,看自己的源代码怎么看他们的"拨"的代码确定如何切换他们开启和关闭。99%的人使用了存在的其modename的变量(如果他们不这样做,我建议报告说,作为一个错误的模式是作者).例如,检查,如果一个缓冲区有空白模式活动的,你会说 when whitespace-mode.
  5. 在这之后,它就输出的信息的消息缓冲区,与一个"x"和名称的缓冲区有模式的活动。这就是你会把你自己的代码,做任何你想要做的发缓冲器。

享受!起更大的和更清洁的舌头的代码!

scroll top