如何定义键绑定以在 emacs 中的次要模式之间切换?

Posted

技术标签:

【中文标题】如何定义键绑定以在 emacs 中的次要模式之间切换?【英文标题】:How to define keybinding to toggle between minor modes in emacs? 【发布时间】:2013-12-29 04:59:57 【问题描述】:

编辑:从 cmets 中,我了解到 org-mode 不是次要模式。所以这个问题与 org-mode 无关。但如果有人想在 emacs 中切换黑白次要模式,这将很有用。

我在缓冲区操作时必须经常切换到 org-mode,我懒得打字 M-x org-mode 一直都是。

有没有办法可以在我的 init.el 文件中指定一个键绑定来切换缓冲区的模式?我想使用类似 F12

的东西

【问题讨论】:

出于好奇,您的 org 文件需要使用哪些其他主要模式? 另外,正如已经指出的那样,org-mode 不是次要模式。您需要编辑您的问题,使标题和正文相互一致。 @phils 我经常手动打开的其他模式是 linum-mode、font-lock(用于语法突出显示)等。我发现我对主要/次要模式的了解是部分的。我会再看一遍手册。 【参考方案1】:

你可以使用类似的东西

(defvar previous-major-mode nil)
(make-variable-buffer-local 'previous-major-mode)
(put 'previous-major-mode 'permanent-local t)

(defun toggle-org-mode ()
  (interactive)
  (cond
   (previous-major-mode
    (call-interactively previous-major-mode)
    (setq previous-major-mode nil))
   (t
    (setq previous-major-mode major-mode)
    (call-interactively 'org-mode))))

(global-set-key (kbd "<f12>") #'toggle-org-mode)

但是如果你经常需要这个,这是一个很好的迹象,表明你做错了,并且可能误解了主要模式的概念。

【讨论】:

【参考方案2】:

(global-set-key (kbd "&lt;f12&gt;") 'org-mode) 应该可以解决问题。

【讨论】:

这不会在组织模式设置后切换。一旦启用 org-mode,我就无法将其关闭。 嗯。约定是调用次要模式函数来切换:不过,org-mode 似乎并非如此。我去看看。 嗯,看来org-mode 不是次要模式。因此,您将无法切换它。

以上是关于如何定义键绑定以在 emacs 中的次要模式之间切换?的主要内容,如果未能解决你的问题,请参考以下文章

在 Emacs 中全局覆盖键绑定

在 emacs 中定义键绑定

emacs smartscan 更改键绑定

如何定义emacs keybinding'C-c C-c'?

如何在 emacs 启动时默认启用非全局次要模式?

在 Emacs 中,如何根据缓冲区名称自动启用次要模式?