多くのEmacs関数は自動的に画面を分割します。ただし、これらはすべて、ウィンドウが上下に重なるように行われます。代わりに、デフォルトで並んでいるように分割する方法はありますか?
多くのEmacs関数は自動的に画面を分割します。ただし、これらはすべて、ウィンドウが上下に重なるように行われます。代わりに、デフォルトで並んでいるように分割する方法はありますか?
回答:
(setq split-height-threshold nil)
(setq split-width-threshold 0)
GNU Emacs Lispリファレンスマニュアル:ウィンドウオプションの選択
ここでは2つの解決策があります。好きなものを使用してください。
A:デフォルトで垂直(左/右):
(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」を好きな値に変更できます。
1つのフレームに2つのウィンドウがあり、レイアウトを垂直から水平に、またはその逆に変更したい場合は、次の解決策があります。
(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))))))
;; C-x 4 t 'toggle-window-split
(define-key ctl-x-4-map "t" 'toggle-window-split)
.emacs/init.el
ファイルに入れて、C-x 4 t
ウィンドウのレイアウトを切り替えます。
undo-tree
押すと、q
バッファをcluseていません
時々、現在の表示と要件(より多くの行またはより多くの列)に応じて、水平と垂直の間の変更が必要になります。
素晴らしいToggleWindowSplitを推奨し、キーを「Cc y」にバインドします
2つの変数をnilと0に設定するという単純な答えは機能しなかったため、2つの単純な関数を作成しました。1つはウィンドウをNX垂直バッファーに分割し、(たとえば)file.1 file.2という名前のファイルを開くだけです。 .file.NXは、2D(ファイルを開くためのNY行x NX列)で行うことを除いて、同じ考え方をしています。f.1f.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 *(C-x b *scratch* RET
、C-x 1
)に移動し、(grid-files-h 3 20 "file.")
次に入力しC-x C-e
ます。または、正方形のqridをテストしたい場合はC-x 1
、入力し(grid-files-sq 2 15 3 20 "f.")
てからC-x C-e
、次のように表示されます。
これはおそらくより効率的に/より効率的に実行できますが、それは開始であり、私が実行するために必要なことを実行します(連続して名前が付けられた小さなファイルの束を表示します)。自由に改善または再利用してください。
さまざまなプロジェクトで、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")