Impostando Emacs diviso in orizzontale

Molte funzioni di Emacs dividono automaticamente lo schermo. Tuttavia, lo fanno tutti in verticale (cioè fanno due windows, una sopra l’altra). C’è un modo per renderli tutti divisi orizzontalmente (side-by-side) di default, invece?

(setq split-height-threshold nil) (setq split-width-threshold 0) 

GNU Emacs Lisp Manuale di riferimento: Scelta delle opzioni della finestra

Due soluzioni qui, usa quello che ti piace:

A: Verticalmente (sinistra / destra) per impostazione predefinita:

 (setq split-height-threshold nil) (setq split-width-threshold 0) 

B: Divide automaticamente la finestra verticalmente (sinistra / destra) se la finestra corrente è sufficientemente ampia

 (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) 

Metti qualcuno nel tuo .emacs/init.el Puoi cambiare il “100” al valore che ti piace, a seconda dello schermo.

Se hai due windows in un frame e vuoi cambiare il layout da verticale a orizzontale o viceversa, ecco una soluzione:

 (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) 

Inseriscilo nel tuo .emacs/init.el , usa Cx 4 t per cambiare il layout delle tue windows.

 (setq split-height-threshold 0) (setq split-width-threshold 0) 

è quello che dovevo usare per ottenere il comportamento desiderato (nessuna divisione orizzontale)

A volte abbiamo bisogno di cambiare tra orizzontale e verticale in base alla visualizzazione corrente e ai nostri requisiti (più righe o più colonne).

Raccomando l’ottimo ToggleWindowSplit e lego la chiave a “Cc y”

http://www.emacswiki.org/emacs/ToggleWindowSplit

la semplice risposta dell’impostazione di 2 variabili a zero e 0 non ha funzionato per me, quindi ho scritto 2 semplici funzioni: una suddivide la finestra in buffer verticali NX e apre i file denominati (ad esempio) file.1 file.2 .. . file.NX in ciascuno e un altro fa la stessa cosa, tranne farlo in 2D (righe NY per colonne NX per aprire i file f.1 f.2 … f. [NX * NY]). Per installare, aggiungi questo codice a .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) ) ) ) 

e poi per usare quello verticale, vado a * scratch * ( Cx b *scratch* RET , Cx 1 ), digita (grid-files-h 3 20 "file.") poi Cx Ce , o se vuoi prova il quadrato qrid one, Cx 1 , digita (grid-files-sq 2 15 3 20 "f.") e poi Cx Ce e dovresti vedere qualcosa come Griglia 2x3

Questo probabilmente può essere fatto meglio / in modo più efficiente, ma è un inizio e fa quello che mi serve per farlo (visualizzare una serie di piccoli file in sequenza). Sentiti libero di migliorare o riutilizzare.

Io uso più frame (windows OSX) in emacs regolarmente per diversi progetti. Ecco come ho impostato alcuni fotogrammi inizialmente suddivisi in una finestra sinistra e destra.

  (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")