0

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

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

4

3 回答 3

1

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

;; 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)
于 2012-11-03T23:07:22.187 回答
1

看看split-height-thresholdsplit-height-threshold变量,两者都是可定制的。

有关他们采用什么值的更多信息,C-h f split-window-sensibly RET. 这个 Emacs Lisp肤浅地触及了这个话题。

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

于 2012-11-03T23:42:19.653 回答
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变量值,只是在两个拆分方向都可接受时更喜欢并排窗口。

于 2012-11-08T02:51:24.233 回答