Emacs - 在多个窗口中查找光标

Emacs - 在多个窗口中查找光标

我已经开始将我的 emacs 框架分成两个并排的窗口,但通常我无法一眼看出光标当前位于哪个窗口。我已将 other-window 命令绑定到一个特殊的键,所以很容易击中这一点——是否有一种方法可以在切换到另一个窗口后立即使光标闪烁三次?或者也许人们想到了更好的解决方案?

答案1

我发现让 emacs 突出显示当前行很有帮助。小调模式hl 线路模式这样做。您可以在当前缓冲区中启用它MX hl-line-mode,或从您的 emacs 配置全局:

(global-hl-line-mode 1)

看看Emacswiki:突出显示当前行。它还提到了您可能更感兴趣的其他次要模式。


编辑:

当我自己浏览维基时,我发现了十字线模式。我想我会自己尝试一下:

(crosshairs-mode 1)
(setq col-highlight-vline-face-flag  t
      col-highlight-face             hl-line-face)

编辑2:

我喜欢水平线,但我发现恒定的垂直线会分散注意力。幸运的是crosshairs还提供了闪光功能flash-crosshairs和空闲模式toggle-crosshairs-when-idle

要在空闲时显示十字准线,我的配置中有以下内容:

(require 'crosshairs)
(toggle-crosshairs-when-idle 1)
(setq col-highlight-vline-face-flag  t
      col-highlight-face             hl-line-face)

但这不会在缓冲区/窗口开关上闪烁,不幸的是没有钩子。但至少 emacs lisp 给了我们咨询职能,这使我们能够扩展现有的功能。尽管这可能相当棘手。

这将在缓冲区切换后闪烁十字准线:

(defadvice switch-to-buffer (after switch-to-buffer-flash-crosshairs activate)
  "Call `flash-crosshairs' after `switch-to-buffer'"
  (flash-crosshairs))

这应该在大多数情况下有效(当切换完成时没有switch-to-buffer

窗口切换更加困难,因为迷你缓冲区(打开文件等)会导致一些问题。因此,只有当我们切换到另一个缓冲区时才会闪烁:

(defadvice select-window (around select-window-flash-crosshairs activate)
  "Call `flash-crosshairs' after `select-window', if switching to another buffer.
The check is necessary to prevent issues with mini-buffer switching."
  (let (cons (cur-buffer-name (buffer-name (current-buffer)))
             ad-arg-bindings)
    ad-do-it
    (unless (string= (buffer-name (window-buffer window))
                     cur-buffer-name)
      (flash-crosshairs))))

ad-arg-bindings是建议函数的参数并ad-do-it执行原始函数。

要停用建议,请使用:

(ad-remove-advice 'select-window 'around 'select-window-flash-crosshairs)
(ad-remove-advice 'switch-to-buffer 'after 'switch-to-buffer-flash-crosshairs)

我认为这涵盖了大多数情况,尽管就像我说的那样,提供建议很棘手......

答案2

我正在寻找一个名为的旧 Emacs 包e-other-window,并在网上搜索时发现了这个问题。最后,我不得不在我以前的电脑上挖掘并再次找到它,所以我只是将其上传到Github上分享给大家(这是我能做的最好的备份)。

https://github.com/N-Mi/e-other-window

e-other-window.el --- 当您更改为窗口时闪烁窗口

这是 Kevin A. Burton 开发的一个有用的小 Emacs 包,当使用键绑定从一个窗口切换到另一个窗口时,它会闪烁当前窗口。

结合hl 线路模式,我发现在 2、3 或 4 个窗口框架中很容易找到光标在哪里。

相关内容