Emacs 倾向于打开两个水平分隔的窗口,一个在另一个之上(我认为 windows 是正确的 emacs 术语)。由于我使用的是宽屏幕,我发现使用两个垂直分离的窗口更容易更好,它们并排排列在 emacs 框架内。
我知道如何使用打开一个新的垂直分隔窗口,C-x 3
但是如何将emacs打开的窗口(例如,当M-x compile
调用打开编译/调试窗口时)从水平重新排列到垂直?
Emacs 倾向于打开两个水平分隔的窗口,一个在另一个之上(我认为 windows 是正确的 emacs 术语)。由于我使用的是宽屏幕,我发现使用两个垂直分离的窗口更容易更好,它们并排排列在 emacs 框架内。
我知道如何使用打开一个新的垂直分隔窗口,C-x 3
但是如何将emacs打开的窗口(例如,当M-x compile
调用打开编译/调试窗口时)从水平重新排列到垂直?
我有同样的问题,这是我目前使用的。只需将其放入您的 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)
看看split-height-threshold
和split-height-threshold
变量,两者都是可定制的。
有关他们采用什么值的更多信息,C-h f split-window-sensibly
RET. 这个 Emacs Lisp肤浅地触及了这个话题。
这会影响display-buffer
工作方式,这可能compile
和许多其他命令都使用。
这是我的解决方案:
(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
变量值,只是在两个拆分方向都可接受时更喜欢并排窗口。