问题描述
在 GNU Emacs 中,切换窗口(Window)是件麻烦的事情(20.3 Using Other Windows),因为我们希望按下快捷键,直接切换到特定窗口(Window),而不是快捷键组合。
该笔记将记录:在 GNU Emacs 中,在窗口(Window)间快速切换的方法。
解决方案
我们有两个选择:EmacsWiki: Numbered Windows 与 EmacsWiki: Window Numbering Mode 插件
Numbered Windows
window-number-mode is an interactive compiled Lisp function in ‘window-number.el’.
nikolas/window-number: Select windows by M-1, M-2, etc in Emacs
安装该插件以后,需要修改配置进行启用:
(require 'window-number) (window-number-mode 1)
显示位置,如下截图(红底 [1] 位置)。似乎没有直接可以直接调整的参数,除非修改 Mode Line 配置(因此我们不使用它):
Window Numbering Mode(推荐)
window-numbering-mode is an interactive autoloaded compiled Lisp function in ‘window-numbering.el’.
nschum/window-numbering.el: Emacs: Numbered window shortcuts
我们使用 window-numbering.el 插件,通过 M-x window-numbering-mode 开启。
它将在模式行(Mode Line)的最开始显示数字(这是我们选择该扩展的原因),来指示当前窗口的序号,然后使用 M-<number> 进行窗口切换。
选型没有什么特别的原因,可能是因为我们一直都在使用 Window Numbering Mode 插件,还有就是 Numbered Windows 显示数字样式及位置不符合我们的审美 :-)
我们的配置参数:
(require 'window-numbering) (defun window-numbering-get-number-string (&optional window) (let ((s (int-to-string (window-numbering-get-number window)))) (propertize (concat " " s " ") 'face 'window-numbering-face))) (window-numbering-mode 1)
我们重新定义 window-numbering-get-number-string 函数,使显示在模式行(Mode Line)的数字左右两边为空格,这样会更宽、更显眼。
如上函数定义(defun)复制于 window-numbering.el 文件,并修改 s 为 (concat ” ” s ” “) 以追加空格。如果想明白这些东西,需要学习 Emacs Lisp 编程。
参考文献
EmacsWiki: Numbered Windows
EmacsWiki: Window Numbering Mode