mac comandos emacs

comandos - emacs ubuntu



Cómo intercambiar los búferes en 2 ventanas emacs (8)

Estoy usando emacs. Encuentro que a veces tengo 2 archivos separados en 2 ventanas.

Por ejemplo: abro 1 archivo usando Cx Cf file1.c RET

y dividí el marco en dos ventanas: Cx 3

A continuación, abro otro archivo Cx Cf file2.c RET

Entonces tengo 2 archivos:

ventana 1 (izquierda) file1.c

ventana 2 (derecha) file2.c

Me pregunto si existe alguna combinación de teclas para intercambiar los archivos. Normalmente me gusta trabajar en la ventana izquierda cuando tengo 2 ventanas. Sé que puedo hacer Cx o para mover el cursor a la ventana derecha.

Sin embargo, me pregunto si puedo intercambiar los archivos para que el file2.c esté en la ventana izquierda y el file1.c esté en la ventana derecha.


El siguiente fragmento de código puede cambiar de buffer.

(defun ab/switch-buffer-each-other (arg) "switch current buffer with other window buffer right-2-left and up-2-down" (interactive "p") (cond ((windmove-find-other-window ''right) (buf-move-right)) ((windmove-find-other-window ''left) (buf-move-left)) ((windmove-find-other-window ''up) (buf-move-up)) ((windmove-find-other-window ''down) (buf-move-down))) (message "switch buffer done"))


En el archivo Emacs 26.1 NEWS hay la siguiente entrada:

+++ *** New command ''window-swap-states'' swaps the states of two live windows.

¿Qué parece ofrecer una funcionalidad similar a crux-transpose-windows pero también puede hacer algunas transposiciones de altura / ancho?


La biblioteca de transpose-frame proporciona un conjunto bastante completo de funciones para voltear o girar los arreglos de ventana en marcos.

Mx flop-frame RET hace lo que necesita esta pregunta en particular.

Los siguientes diagramas son del comentario en la biblioteca (y su página de EmacsWiki):

‘transpose-frame’ … Swap x-direction and y-direction +------------+------------+ +----------------+--------+ | | B | | A | | | A +------------+ | | | | | C | => +--------+-------+ D | +------------+------------+ | B | C | | | D | | | | | +-------------------------+ +--------+-------+--------+ ‘flip-frame’ … Flip vertically +------------+------------+ +------------+------------+ | | B | | D | | A +------------+ +------------+------------+ | | C | => | | C | +------------+------------+ | A +------------+ | D | | | B | +-------------------------+ +------------+------------+ ‘flop-frame’ … Flop horizontally +------------+------------+ +------------+------------+ | | B | | B | | | A +------------+ +------------+ A | | | C | => | C | | +------------+------------+ +------------+------------+ | D | | D | +-------------------------+ +-------------------------+ ‘rotate-frame’ … Rotate 180 degrees +------------+------------+ +-------------------------+ | | B | | D | | A +------------+ +------------+------------+ | | C | => | C | | +------------+------------+ +------------+ A | | D | | B | | +-------------------------+ +------------+------------+ ‘rotate-frame-clockwise’ … Rotate 90 degrees clockwise +------------+------------+ +-------+-----------------+ | | B | | | A | | A +------------+ | | | | | C | => | D +--------+--------+ +------------+------------+ | | B | C | | D | | | | | +-------------------------+ +-------+--------+--------+ ‘rotate-frame-anti-clockwise’ … Rotate 90 degrees anti-clockwise +------------+------------+ +--------+--------+-------+ | | B | | B | C | | | A +------------+ | | | | | | C | => +--------+--------+ D | +------------+------------+ | A | | | D | | | | +-------------------------+ +-----------------+-------+


Me las arreglaría para abrir el archivo # 2 en la ubicación deseada, es decir, después de presionar cx 3, mueva el cursor con cx o antes de navegar al segundo archivo.


No estoy al tanto de ninguna función incorporada haciendo esto.

Sin embargo, no parece demasiado difícil aumentar algo de elisp por hacerlo. El diablo está en los detalles sin embargo.

(defun swap-buffers-in-windows () "Put the buffer from the selected window in next window, and vice versa" (interactive) (let* ((this (selected-window)) (other (next-window)) (this-buffer (window-buffer this)) (other-buffer (window-buffer other))) (set-window-buffer other this-buffer) (set-window-buffer this other-buffer) ) )

Notablemente, esto puede no estar haciendo lo que desea con respecto a dónde termina el interrogatorio. Sin embargo, primero debes decir lo que quieres: p


Si está usando Prelude , puede usar Cc s ( prelude-swap-windows ). De la documentación de Prelude:

Cc s ejecuta el comando crux-swap-windows (que se encuentra en prelude-mode-map ), que es un alias para crux-transpose-windows en crux.el


Si tiene preludio, puede usar ace-window con Sw . Desde allí, puede hacer muchas cosas enumeradas en sus docs .

También puede comenzar llamando a ace-window y luego decidir cambiar la acción para eliminar o intercambiar, etc. De forma predeterminada, los enlaces son:

x - borrar ventana

m - ventana de intercambio (movimiento)

c - dividir la ventana de manera justa, ya sea vertical u horizontalmente

v - Ventana dividida verticalmente

b - ventana dividida horizontalmente

n - seleccione la ventana anterior

...

Entonces sería Sw m


Yo uso buffer-move para esto. Ahora, si está trabajando en el búfer en el lado izquierdo, al llamar ''buf-move-right'' lo intercambiará con el de la derecha. Supongo que esto es lo que quieres.