将Emacs分割为水平
很多Emacsfunction自动分割屏幕。 但是,他们都是垂直的(即:他们做两个窗口,一个在另一个之上)。 有没有办法使它们全部水平(并排),而不是默认的?
(setq split-height-threshold nil) (setq split-width-threshold 0)
GNU Emacs Lisp参考手册: select窗口选项
(setq split-height-threshold 0) (setq split-width-threshold 0)
是我不得不用来获得所需的行为(没有横向分裂)
两个解决scheme在这里,使用任何你喜欢的:
答:垂直(左/右)默认:
(setq split-height-threshold nil) (setq split-width-threshold 0)
B:如果当前窗口足够宽,则自动垂直分割窗口(左/右)
(defun display-new-buffer (buffer force-other-window) "If BUFFER is visible, select it. If it's not visible and there's only one window, split the current window and select BUFFER in the new window. If the current window (before the split) is more than 100 columns wide, split horizontally(left/right), else split vertically(up/down). If the current buffer contains more than one window, select BUFFER in the least recently used window. This function returns the window which holds BUFFER. FORCE-OTHER-WINDOW is ignored." (or (get-buffer-window buffer) (if (one-window-p) (let ((new-win (if (> (window-width) 100) (split-window-horizontally) (split-window-vertically)))) (set-window-buffer new-win buffer) new-win) (let ((new-win (get-lru-window))) (set-window-buffer new-win buffer) new-win)))) ;; use display-buffer-alist instead of display-buffer-function if the following line won't work (setq display-buffer-function 'display-new-buffer)
把任何一个你的.emacs/init.el
文件。 您可以将“100”更改为您喜欢的值,具体取决于您的屏幕。
如果您在一个框架中有两个窗口,并且您想要将布局从垂直改为水平或者反之,这里是一个解决scheme:
(defun toggle-window-split () (interactive) (if (= (count-windows) 2) (let* ((this-win-buffer (window-buffer)) (next-win-buffer (window-buffer (next-window))) (this-win-edges (window-edges (selected-window))) (next-win-edges (window-edges (next-window))) (this-win-2nd (not (and (<= (car this-win-edges) (car next-win-edges)) (<= (cadr this-win-edges) (cadr next-win-edges))))) (splitter (if (= (car this-win-edges) (car (window-edges (next-window)))) 'split-window-horizontally 'split-window-vertically))) (delete-other-windows) (let ((first-win (selected-window))) (funcall splitter) (if this-win-2nd (other-window 1)) (set-window-buffer (selected-window) this-win-buffer) (set-window-buffer (next-window) next-win-buffer) (select-window first-win) (if this-win-2nd (other-window 1)))))) ;; Cx 4 t 'toggle-window-split (define-key ctl-x-4-map "t" 'toggle-window-split)
把它放在你的.emacs/init.el
文件中,使用Cx 4 t
来切换你的窗口的布局。
有时我们需要根据当前显示和我们的需求(更多行或更多列)在“水平”和“垂直”之间进行更改。
我推荐伟大的ToggleWindowSplit ,而我把键绑定到“Cc y”
设置2个variables为零和0的简单答案并不适用于我,所以我编写了两个简单的函数:一个只是将窗口拆分成NX垂直缓冲区,并打开名为(例如)file.1 file.2的文件。 file.NX在每个和另外一个做同样的想法,除了它在二维(NY行由NX列打开文件f.1 f.2 … f。[NX * NY])。 要安装,请将此代码添加到.emacs:
(defun grid-files-h (nx wx pfx) "Using dotimes, split the window into NX side-by-side buffers of width WX and load files starting with prefix PFX and ending in numbers 1 through NX" (let (ox fn k) ; ox is not used, but fn is used to store the filename, and k to store the index string (dotimes (x (- nx 1) ox) ; go through buffers, x goes from 0 to nx-2 and ox is not used here ; (print x) (setq k (number-to-string (+ x 1) ) ) ; k is a string that goes from "1" to "nx-1" ; (print k) (setq fn (concat pfx k) ) ; fn is filename - concatenate prefix with k ; (print fn) (find-file fn) ; open the filename in current buffer (split-window-horizontally wx) ; split window (current buffer gets wx-columns) (other-window 1) ; switch to the next (right) buffer ) (setq k (number-to-string nx )) ; last (rightmost) buffer gets the "nx" file (setq fn (concat pfx k) ) ; fn = "pfx"+"nx" (find-file fn ) ; open fn (other-window 1) ; go back to the first buffer ) ) (defun grid-files-sq (ny wy nx wx pfx) "Using dotimes, split the window into NX columns of width WX and NY rows of height WY and load files starting with prefix PFX and ending in numbers 1 through NX*NY" (let (oy ox fn k) (dotimes (y ny oy) ; go through rows, y goes from 0 to ny-1 and oy is not used here (split-window-vertically wy) ; create this row (dotimes (x (- nx 1) ox) ; go through columns, x goes from 0 to nx-2 and ox is not used here (setq k (number-to-string (+ 1 (+ x (* y nx) ) ) ) ) ; k must convert 2 indecies (x,y) into one linear one (like sub2ind in matlab) (setq fn (concat pfx k) ) ; filename (find-file fn ) ; open (split-window-horizontally wx) ; create this column in this row (this "cell") (other-window 1) ; go to the next buffer on the right ) (setq k (number-to-string (+ nx (* y nx) ) ) ) ; rightmost buffer in this row needs a file too (setq fn (concat pfx k) ) ; filename (find-file fn ) ; open (other-window 1) ; go to next row (one buffer down) ) ) )
然后使用垂直的,我去* scratch *( Cx b *scratch* RET
, Cx 1
),input(grid-files-h 3 20 "file.")
然后Cx Ce
,或者如果你想testing出方块qrid一,cx Cx 1
,input(grid-files-sq 2 15 3 20 "f.")
然后Cx Ce
,你应该看到类似
这可能会做得更好/更有效率,但这是一个开始,它做我需要做的事情(显示一串顺序命名的小文件)。 随意改进或重用。
我经常在emacs中为不同的项目使用多个框架(OSX窗口)。 以下是我如何设置最初拆分到左右窗口的几个帧。
(defun make-maximized-split-frame (name) (let (( f (make-frame (list (cons 'name name))) )) (maximize-frame f) (split-window (frame-root-window f) nil t) )) (make-maximized-split-frame "DocRaptor") (make-maximized-split-frame "Gauges") (make-maximized-split-frame "Instrumental")