在Emacs中打开太多分屏!

时间:2009-09-04 22:26:50

标签: emacs split grep buffer

自从我在新机器上安装了emacs以来,我看到了一个丑陋的行为。不幸的是,我的旧.emacs文件相当碎片,我无法确定我是否曾经使用elisp来处理这个问题。

问题是这样的:过去我执行的命令会打开一个新的缓冲区,例如grep'ing,或点击搜索结果中的文件名,会发生以下两种情况之一:

  1. 如果只显示一个缓冲区,屏幕将分割一次
  2. 如果显示多个缓冲区,则当前缓冲区窗口之后的缓冲区窗口将打开所需文件
  3. 我希望这种行为回归。我现在得到的是以下内容:

    Emacs将继续拆分窗口,直到打开四个缓冲区窗口。如果我不断地单击多个grep结果,它们打开的缓冲区窗口将循环通过另外三个(非grep-results)缓冲区窗口。如果他们只是在同一个位置打开,我会喜欢它:结果旁边/下面的“下一个”缓冲区窗口 - 每次都是相同的缓冲区窗口。

    有关如何实现此行为的任何想法?

3 个答案:

答案 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的帮助所示)有帮助。