自从我在新机器上安装了emacs以来,我看到了一个丑陋的行为。不幸的是,我的旧.emacs文件相当碎片,我无法确定我是否曾经使用elisp来处理这个问题。
问题是这样的:过去我执行的命令会打开一个新的缓冲区,例如grep'ing,或点击搜索结果中的文件名,会发生以下两种情况之一:
我希望这种行为回归。我现在得到的是以下内容:
Emacs将继续拆分窗口,直到打开四个缓冲区窗口。如果我不断地单击多个grep结果,它们打开的缓冲区窗口将循环通过另外三个(非grep-results)缓冲区窗口。如果他们只是在同一个位置打开,我会喜欢它:结果旁边/下面的“下一个”缓冲区窗口 - 每次都是相同的缓冲区窗口。
有关如何实现此行为的任何想法?
答案 0 :(得分:9)
考虑将split-height-threshold
设置为比帧高更大的值;这将防止不必要的垂直分裂。
(setq split-height-threshold 999)
如果您希望垂直拆分而不是水平拆分,请改为自定义split-width-threshold
。
要更精细地控制新缓冲区的显示方式,请自定义display-buffer-function
;这将允许您完全替换指示缓冲区显示策略的默认display-buffer
函数。
答案 1 :(得分:3)
这是我一直在使用的东西:
;;;---------------------------------------------------------------------
;;; display-buffer
;; The default behaviour of `display-buffer' is to always create a new
;; window. As I normally use a large display sporting a number of
;; side-by-side windows, this is a bit obnoxious.
;;
;; The code below will make Emacs reuse existing windows, with the
;; exception that if have a single window open in a large display, it
;; will be split horisontally.
(setq pop-up-windows nil)
(defun my-display-buffer-function (buf not-this-window)
(if (and (not pop-up-frames)
(one-window-p)
(or not-this-window
(not (eq (window-buffer (selected-window)) buf)))
(> (frame-width) 162))
(split-window-horizontally))
;; Note: Some modules sets `pop-up-windows' to t before calling
;; `display-buffer' -- Why, oh, why!
(let ((display-buffer-function nil)
(pop-up-windows nil))
(display-buffer buf not-this-window)))
(setq display-buffer-function 'my-display-buffer-function)
答案 2 :(得分:1)
从emacs 22切换到23时遇到了这个问题。
如果您已在缓冲区中打开文件,我发现将display-buffer-reuse-frames
设置为非零(如display-buffer
的帮助所示)有帮助。