「GNU Emacs」- 快速切换窗口(Window)

问题描述

在 GNU Emacs 中,切换窗口(Window)是件麻烦的事情(20.3 Using Other Windows),因为我们希望按下快捷键,直接切换到特定窗口(Window),而不是快捷键组合。

该笔记将记录:在 GNU Emacs 中,在窗口(Window)间快速切换的方法。

解决方案

我们有两个选择:EmacsWiki: Numbered WindowsEmacsWiki: 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