我怎样才能让窗口移动命令忽略某个窗口?(How can I make window movement

2019-08-18 17:36发布

所以我一般有3个缓冲区在Emacs开放。

  1. 一个缓冲器,用于实际的代码我写。
  2. 用于单元测试一个缓冲所述代码。
  3. 第三缓冲器,显示单元测试的结果。 该缓冲区应运而生其他两个缓冲区以下运行我的单元测试CX空间

如何禁用这个第三缓冲,这样当我按下CXØ我只是缓冲1之间切换缓存2? 目前,我缓冲器1之间切换,然后缓冲区2中,那么缓冲器3,然后缓冲液1,等等。具体地讲,我想CX O操作缓冲器1和2之间只有开关。

谢谢。

Answer 1:

一般解决这个(可以看看)像下面这样:

(defvar ignore-windows-containing-buffers-matching-res '("\\*Help")
      "List of regular expressions specifying windows to skip (if window contains buffer that matches, skip)")

(defadvice other-window (before other-window-ignore-windows-containing activate)
  "skip over windows containing buffers which match regular expressions in 'ignore-windows-containing-buffers-matching-res"
  (if (and (= 1 (ad-get-arg 0)) (interactive-p))
      (let* ((win (next-window))
             (bname (buffer-name (window-buffer win))))
        (when (some 'identity (mapcar '(lambda (re)
                                        (string-match re bname))
                                     ignore-windows-containing-buffers-matching-res))
          (ad-set-arg 0 2)))))

自定义变量是一个正则表达式匹配你想跳过缓冲区名字。



Answer 2:

Trey的回答会做正是你想要的(至少它看起来会;我还没有尝试过)。 一个更通用的解决方案是使用swbuff有两种swbuff-x或我自己swbuff-advice 。 关于这三个信息可以在上找到的Emacs维基swbuff页 。



文章来源: How can I make window movement commands ignore a certain window?