如何在Emacs中切换特定模式的开/关?

3

假设我想绑定一个按键来启用/关闭某个模式。我猜,我需要的功能应该看起来像:

(defun toggle-some-mode ()
  (if (some-mode-is-active)
    (some-mode 0)
  (some-mode 1)))

(global-set-key (kbd "some key") 'toggle-some-mode)

问题是什么是“某种模式处于活动状态”的样子?我怎么知道模式是活动的/非活动的?我不相信没有标准函数可以解决这个有用的情况。
有什么想法吗?

1
只需使用 some-mode 进行切换,即 (global-set-key (kbd "some key") 'some-mode)some-mode 的参数应该是可选的,如果没有提供参数,则应该自动切换。 - Tobias
1
关于你的问题如何检测模式是否处于活动状态:如果define-minor-mode定义了some-mode,它将作为函数和变量存在。如果该模式处于活动状态,则变量为t;否则为nil - Tobias
@Tobias 谢谢!工作得很好!不知道为什么我以前没想到这个选项 :) - avli
好的,我已经将其编写为答案。这样,在stackoverflow的概述中,该问题就会被标记为已回答。 - Tobias
1个回答

3

只需使用some-mode进行切换,例如:(global-set-key (kbd "some key") 'some-mode)。some-mode的参数是可选的,如果在函数调用中没有传入参数,则函数默认切换模式。

关于您如何检测模式是否处于活动状态的问题:如果some-mode是由define-minor-mode定义的,则它存在为函数和变量。变量some-mode在模式处于活动状态时评估为t,否则为nil


1
有一些东西起初可能会让人感到困惑 - 如果你从elisp中调用(some-mode)(例如从函数中或通过在缓冲区中评估文本),它将始终打开该模式,而如果你交互地调用它(例如从键盘绑定或使用M-x),它将切换它。 - Brian Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接