如何控制将哪个窗口用于Emacs中的新内容



我经常在一个框架内精心安排多个窗口。

然而,某些命令,比如M-x man RET会抓取一个可见窗口来显示它自己的内容。有时这很烦人,因为被拿走的窗口是我需要保持可见的。

。我在屏幕上有3个窗口,一个有用的源代码窗口和两个无用的窗口。我想保持源代码窗口可见,同时检查man页。但是Emacs经常会把新打开的手册页的代码窗口拿走。

我能想到的一种方法是显示每个窗口的(按时间顺序)打开顺序,这样我就可以将重点放在第n个窗口上,并确信Emacs将抓住(n+1)个窗口来获取新内容。

是否有一种方法来显示这样的顺序,例如在每个窗口的模式行?

或者是否有另一种方法更好地控制显示新窗口?

有点晚了,但正如评论中讨论的那样,使用专用窗口是控制新内容显示位置的好方法(@lawlist +1用于显示它,@phils +1用于提及切换!)

我很确定你现在可以自己实现一个切换奉献性的命令,但是因为我手边有这个代码,所以我还是要分享它:

(defun toggle-window-dedicated ()
  "Control whether or not Emacs is allowed to display another
buffer in current window."
  (interactive)
  (message
   (if (let (window (get-buffer-window (current-buffer)))
         ; set-window-dedicated-p returns FLAG that was passed as
         ; second argument, thus can be used as COND for if:
         (set-window-dedicated-p window (not (window-dedicated-p window))))
       "%s: Can't touch this!"
     "%s is up for grabs.")
   (current-buffer)))
(global-set-key (kbd "C-c d") 'toggle-window-dedicated)

现在,在多窗口设置中,您可以简单地按C-c d在每个窗口您想要"保护"。

考虑到评论中提到的display-buffer-alist的用法,我将把这个例子扔到混合中,并且确实是控制缓冲区显示的方式和位置的一般机制(尽管,正如Drew指出的那样,它远非微不足道)。

从变量本身的帮助开始:
碳氢键 v display-buffer-alist RET

从那里你会得到display-buffer的帮助,毫无疑问,获得一些复杂性的想法:)

无论如何,下面是一个使用自定义函数来决定如何显示名为*Buffer List*的缓冲区的示例。

你可以很容易地看到,如果你可以写一个函数来计算如何显示一个缓冲区,那么你可以使用display-buffer-alist来实现它。

(defun my-display-buffer-pop-up-same-width-window (buffer alist)
  "A `display-buffer' ACTION forcing a vertical window split.
    See `split-window-sensibly' and `display-buffer-pop-up-window'."
  (let ((split-width-threshold nil)
        (split-height-threshold 0))
    (display-buffer-pop-up-window buffer alist)))
(add-to-list 'display-buffer-alist
             '("\*Buffer List\*" my-display-buffer-pop-up-same-width-window))

关于ACTION函数的关键引号是:

每个这样的函数都应该接受两个参数显示和一个列表。基于这些论点,应该是这样显示缓冲区并返回窗口。

最新更新