¿Cómo cambiar el tamaño de las ventanas de emacs de pantalla dividida?

172

Tengo emacs dividido horizontalmente: en la parte superior estoy editando el código Perl, la parte inferior es el shell. Por defecto, emacs hace que las dos ventanas tengan el mismo tamaño, pero me gustaría que el búfer de shell sea más pequeño (¿quizás la mitad del tamaño?). Me preguntaba cómo podría hacer eso.

Steve
fuente

Respuestas:

294

Con el mouse, puede arrastrar los tamaños de las ventanas.

Haga clic en cualquier parte de la línea de modo que no esté 'activa' (el nombre del búfer es seguro o cualquier área no utilizada en el lado derecho), y puede arrastrar hacia arriba o hacia abajo.

El arrastre de lado a lado requiere un clic muy preciso en el lugar donde se unen las dos líneas de modo.

C-x -( shrink-window-if-larger-than-buffer) reducirá una ventana para que se ajuste a su contenido.

C-x +( balance-windows) hará que las ventanas tengan las mismas alturas y anchos.

C-x ^( enlarge-window) aumenta la altura en 1 línea, o el prefijo arg valor. Un argumento negativo encoge la ventana. por ejemplo, C-- C-1 C-6 C-x ^se reduce por 16 filas, como lo hace C-u - 1 6 C-x ^.

(No hay un enlace predeterminado para shrink-window).

C-x }( enlarge-window-horizontally) hace lo mismo, horizontalmente.
C-x {( shrink-window-horizontally) también está vinculado por defecto.

Seguir uno de estos comandos con repeat( C-x zpara iniciar, y soloz para la repetición continua) hace que sea bastante fácil llegar al tamaño exacto que desea.

Si regularmente desea hacer esto con un valor específico, puede grabar una macro de teclado para hacerlo, o usar algo como
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

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

Que es un smidgen hacky, así que esto sería mejor:

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

Tangencialmente, también me encanta lo winner-modeque le permite 'deshacer' repetidamente cualquier cambio en la configuración de la ventana C-c left(ya sea que el cambio sea el tamaño / número / disposición de las ventanas, o simplemente qué búfer se muestra). C-c rightle devuelve a la configuración más reciente. Establecerlo globalmente con(winner-mode 1)

phils
fuente
3
Impresionante, ¡precisamente lo que quería! Muchas gracias!
Steve
1
+1: gracias por la sugerencia 'deshacer' en modo ganador. por cierto, en mi caso, al hacer clic en el nombre del búfer se abre el siguiente búfer. Pero es fácil ver cuándo puede cambiar el tamaño mirando la forma del cursor del mouse.
jfs
34

Puse estos en mi .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)
wilbeibi
fuente
Los dos primeros no me funcionan en Emacs 24.3.1 en Mac OSX 10.9.1
Oskar Persson el
1
@OskarPersson Podría ser el conflicto con los atajos globales. Descúbrelo con preferencia o vuelve a asignar el control al bloqueo de mayúsculas (a mi manera), debería funcionar entonces.
wilbeibi
Tuve el mismo problema y descubrí que C-izquierda y C-derecha entraban en conflicto con los atajos de Control de misión en las Preferencias del sistema OS X, según lo descrito por @Wilbeibi.
Doug Richardson
1
Estas teclas ya están definidas, primero desarme las teclas (global-set-key (kbd "<C-up>") nil)antes de configurarlas, pero sería mejor usarlas M-leften su lugar
Mauricio Cortazar
@MauricioCortazar No he usado Emacs en años. Es posible que esta respuesta no se aplique ahora. Siéntase libre de actualizarlo.
wilbeibi
14

tratemos de usar el documento de ayuda de emacs.

C-h a

Luego escriba "agrandar" o "ventana"

Encontrarás lo que buscas.

¡Disfrutar!

maoyang
fuente
Es posible que uno esté trabajando en un entorno en el que C-hno está disponible. ¿Entonces que?
Derrell Durrett
1
Si ha Demolí la unión mapa de ayuda estándar, entonces seguramente debe ser consciente de lo que has Demolí que con . (De no ser así, tratar <f1>, que es la otra unión mapa de ayuda estándar.)
PHILS
6

C-x oa la ventana cuyo tamaño desea expandir. A partir de ahí, C-x ^para ampliarlo.

vpit3833
fuente
3
En caso de que los enlaces sean diferentes (los míos son), el comando es enlarge-window. Un consejo adicional es utilizar un prefijo arg para controlar la cantidad de expansión.
Joseph Gay
¡Increíble! ¡Muchas gracias!
Steve
6

C-x ^toma argumentos numéricos positivos y negativos. En particular, si desea reducir la ventana donde está actualmente su cursor en cuatro líneas, puede presionar C-u -4 C-x ^.

justinpc
fuente
2

Esta no es la respuesta exacta que está buscando, pero me topé con esta pregunta cuando busqué la funcionalidad spacemacs, así que escribiré mi respuesta solo por el bien de la integridad.

La opción es usar <SPC> + w + .(funciona en los spacemacs de vainilla)

Esto abre una ventana transitoria donde se puede usar []{}para cambiar el tamaño a nivel granular.

No hay necesidad de Cx o Mouse ...

Estado transitorio de manipulación de ventanas

Si
fuente
si hay algo similar en emacs regulares?
krokodil
Probablemente no esté allí, por lo que Drew hizo esta pregunta en primer lugar ...
Yesh
0

Tengo la misma pregunta Aquí está mi solución.
Primero defino una nueva función:

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

Por ejemplo, quiero ejecutar-esquema en un búfer, así que lo reescribo.
Y aquí está la definición, con la función definida anteriormente:

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

Así que ahora cuando entro: Mx run-esquema-aquí, ¡el búfer cambia de tamaño!
Y aquí está mi archivo de configuración, esperando que esto ayude. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


fuente
3
su enlace está roto :(
Ciprian Tomoiagă