在Emacs中重新排列Windows?

时间:2012-11-03 22:00:48

标签: emacs

Emacs倾向于打开两个水平分离的窗口,一个在另一个上面(我认为windows是正确的emacs术语)。由于我正在使用宽屏幕,因此我发现使用两个垂直分离的窗口更容易,更好,在emacs框架中并排排列。

我知道如何使用C-x 3打开一个新的垂直分离窗口,但是如何重新排列emacs打开的窗口(例如,当调用M-x compile打开编译/调试窗口时)从水平到垂直?

3 个答案:

答案 0 :(得分:1)

我有同样的问题,这是我目前使用的。只需将其放入您的Emacs init文件中:

;; 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)

答案 1 :(得分:1)

查看split-height-thresholdsplit-height-threshold变量,两者都可自定义。

有关他们采取什么值的更多信息, C-h f split-window-sensibly RET This Emacs Lisp表面上触及了这个话题。

这会影响display-buffer的工作方式,可能compile和许多其他命令都会使用。

答案 2 :(得分:0)

这是我的解决方案:

(defun split-window-prefer-side-by-side (&optional window)
  (let ((split-height-threshold (and (< (window-width window)
                                        split-width-threshold)
                                     split-height-threshold)))
    (split-window-sensibly window)))

(setq split-window-preferred-function 'split-window-prefer-side-by-side)

这仍然可以查询split-*-threshold个变量值,当两个分割方向都可以接受时,只需要并排窗口。