Come modificare le dimensioni delle finestre emacs con schermo diviso?


172

Ho emacs diviso orizzontalmente - in cima sto modificando il codice Perl, il fondo è la shell. Di default emacs rende le due finestre uguali in termini di dimensioni, ma vorrei che il buffer della shell fosse più piccolo (forse la metà delle dimensioni?). Mi chiedevo come avrei potuto farlo.

Risposte:


294

Con il mouse puoi trascinare le dimensioni della finestra.

Fare clic in un punto qualsiasi della riga della modalità che non sia altrimenti "attivo" (il nome del buffer è sicuro o qualsiasi area inutilizzata sul lato destro) e si può trascinare verso l'alto o verso il basso.

Il trascinamento laterale richiede un clic molto preciso sul punto in cui si uniscono le due linee della modalità.

C-x -( shrink-window-if-larger-than-buffer) ridurrà una finestra per adattarla al suo contenuto.

C-x +( balance-windows) renderà Windows le stesse altezze e larghezze.

C-x ^( enlarge-window) aumenta l'altezza di 1 riga o il valore arg del prefisso. Un argomento negativo restringe la finestra. ad esempio si C-- C-1 C-6 C-x ^restringe di 16 righe, così come C-u - 1 6 C-x ^.

(Non esiste un'associazione predefinita per shrink-window.)

C-x }( enlarge-window-horizontally) fa allo stesso modo, in orizzontale.
C-x {( shrink-window-horizontally) è anche associato per impostazione predefinita.

Seguire uno di questi comandi con repeat( C-x zper iniziare e solo zper la ripetizione continua) rende abbastanza facile raggiungere la dimensione esatta desiderata.

Se vuoi farlo regolarmente con un valore specifico, puoi registrare una macro di tastiera per farlo o usare qualcosa del genere
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

O questo:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Che è un smidgen hacky, quindi sarebbe meglio:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

Tangenzialmente, adoro anche il fatto winner-modeche ti consente di "annullare" ripetutamente qualsiasi modifica alle configurazioni delle finestre con C-c left(se la modifica è la dimensione / numero / disposizione delle finestre o solo quale buffer viene visualizzato). C-c rightritorna alla configurazione più recente. Impostalo a livello globale con(winner-mode 1)


3
Fantastico, esattamente quello che avrei voluto! Grazie mille!
Steve,

1
+1: grazie per il suggerimento sulla modalità vincitore "annulla". a proposito, nel mio caso un clic sul nome del buffer apre il buffer successivo. Ma è facile vedere quando è possibile ridimensionare guardando la forma del cursore del mouse.
jfs

34

Ho inserito questi nel mio .emacs:

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

I primi due non funzionano per me in Emacs 24.3.1 su Mac OSX 10.9.1
Oskar Persson

1
@OskarPersson Potrebbe essere il conflitto con le scorciatoie globali. Scoprilo in preferenza o rimappa il controllo al blocco maiuscole (a modo mio), allora dovrebbe funzionare.
Wilbeibi,

Ho avuto lo stesso problema e ho scoperto che C-sinistra e C-destra erano in conflitto con le scorciatoie di Mission Control nelle Preferenze di Sistema di OS X, come descritto da @Wilbeibi.
Doug Richardson,

1
Questi tasti sono già definiti, per prima cosa disinserisci i tasti con (global-set-key (kbd "<C-up>") nil)prima di impostarli, ma sarebbe meglio usarli M-leftinvece
Mauricio Cortazar

@MauricioCortazar Non uso Emacs da anni. Questa risposta potrebbe non essere applicabile ora. Sentiti libero di aggiornarlo.
Wilbeibi,

14

proviamo a usare il documento di aiuto di emacs.

C-h a

Quindi digitare "ingrandire" o "finestra"

Troverai quello che vuoi.

Godere!


È possibile che si stia lavorando in un ambiente in cui C-hnon è disponibile. Cosa poi?
Derrell Durrett,

1
Se hai rovinati la mappa standard di aiuto vincolante, allora si dovrebbe sicuramente essere consapevoli di ciò che hai rovinati esso con . (In caso <f1>
contrario

6

C-x oalla finestra di cui desideri espandere la dimensione. Da lì, C-x ^per espanderlo.


3
Nel caso in cui le associazioni siano diverse (le mie sono), il comando è enlarge-window. Un ulteriore suggerimento è usare un prefisso arg per controllare la quantità di espansione.
Joseph Gay,

Eccezionale! Grazie mille!
Steve,

6

C-x ^accetta argomenti numerici positivi e negativi. In particolare, se desideri ridurre la finestra in cui il cursore si trova attualmente di quattro righe, puoi premere C-u -4 C-x ^.


2

Questa non è la risposta esatta che stai cercando, ma mi sono imbattuto in questa domanda quando ho cercato la funzionalità spacemacs, quindi scriverò la mia risposta solo per completezza.

L'opzione è di usare <SPC> + w + .(funziona in spacemacs alla vaniglia)

Questo apre una finestra temporanea in cui è possibile utilizzare []{}per ridimensionare a livello granulare.

Non è necessario Cx o Mouse ...

Stato transitorio di manipolazione della finestra


se c'è qualcosa di simile negli emacs regolari?
krokodil,

Probabilmente non è lì, motivo per cui Drew ha posto questa domanda in primo luogo ...
Yesh,

0

Ho la stessa domanda. Ecco la mia soluzione
Per prima cosa definisco una nuova funzione:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

Ad esempio, voglio eseguire lo schema in un buffer, quindi lo riscrivo.
Ed ecco la definizione, con la funzione definita in precedenza:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

Quindi ora quando entro: Mx run-schema-qui, il buffer viene ridimensionato!
Ed ecco il mio file di configurazione, sperando che questo possa aiutare. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
il tuo collegamento è interrotto :(
Ciprian Tomoiagă
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.