Banyak fungsi Emacs yang secara otomatis membagi layar. Namun, mereka semua melakukannya sedemikian rupa sehingga jendelanya berada satu di atas yang lain. Apakah ada cara untuk membuatnya terpisah sedemikian rupa sehingga mereka berdampingan secara default?
92
Jawaban:
(setq split-height-threshold nil) (setq split-width-threshold 0)
GNU Emacs Lisp Reference Manual: Memilih Opsi Jendela
sumber
Dua solusi di sini, gunakan salah satu yang Anda suka:
J: Secara vertikal (kiri / kanan) secara default:
(setq split-height-threshold nil) (setq split-width-threshold 0)
B: Secara otomatis membagi jendela secara vertikal (kiri / kanan) jika jendela saat ini cukup lebar
(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)
Taruh siapa pun di
.emacs/init.el
file Anda . Anda dapat mengubah "100" ke nilai yang Anda suka, tergantung pada layar Anda.Jika Anda memiliki dua jendela dalam satu bingkai, dan Anda ingin mengubah tata letak dari vertikal ke horizontal atau sebaliknya, berikut solusinya:
(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)
Taruh di
.emacs/init.el
file Anda , GunakanC-x 4 t
untuk mengubah tata letak jendela Anda.sumber
undo-tree
menekanq
tidak menutup buffer(setq split-height-threshold 0) (setq split-width-threshold 0)
adalah apa yang harus saya gunakan untuk mendapatkan perilaku yang diinginkan (tidak ada pemisahan horizontal)
sumber
Terkadang kita perlu mengubah antara Horizontal dan Vertikal sesuai tampilan saat ini dan kebutuhan kita (lebih banyak baris atau lebih banyak kolom).
Saya merekomendasikan ToggleWindowSplit yang hebat , Dan saya mengikat kunci ke "Cc y"
http://www.emacswiki.org/emacs/ToggleWindowSplit
sumber
jawaban sederhana dari pengaturan 2 variabel menjadi nil dan 0 tidak berhasil untuk saya, jadi saya menulis 2 fungsi sederhana: satu hanya membagi jendela menjadi buffer vertikal NX dan membuka file bernama (misalnya) file.1 file.2 .. .file.NX satu sama lain melakukan hal yang sama, kecuali dalam 2D (baris NY oleh kolom NX untuk membuka file f.1 f.2 ... f. [NX * NY]). Untuk menginstal, tambahkan kode ini ke .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) ) ) )
dan kemudian untuk menggunakan yang vertikal, saya pergi ke * scratch * (
C-x b *scratch* RET
,C-x 1
), ketik(grid-files-h 3 20 "file.")
laluC-x C-e
, atau jika Anda ingin menguji qrid persegi,,C-x 1
ketik(grid-files-sq 2 15 3 20 "f.")
laluC-x C-e
dan Anda akan melihat sesuatu sepertiIni mungkin dapat dilakukan dengan lebih baik / lebih efisien, tetapi ini adalah permulaan dan melakukan apa yang saya perlukan (tampilkan banyak file kecil yang diberi nama secara berurutan). Jangan ragu untuk meningkatkan atau menggunakan kembali.
sumber
Saya menggunakan banyak frame (OSX windows) di emacs secara teratur untuk proyek yang berbeda. Inilah cara saya mengatur beberapa bingkai yang awalnya dibagi ke jendela kiri dan kanan.
(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")
sumber