2009-10-02 18 views
9

Tengo 2 ventanas abiertas en Emacs y me gustaría cambiar sus posiciones.Con emacs, ¿Cómo se cambia la posición de 2 ventanas?

Ie Considere tener un REPL sobre el archivo fuente y me gustaría cambiar sus ubicaciones para que el REPL esté debajo del archivo fuente.

También me gustaría preservar los tamaños de las ventanas

Respuesta

7

me robé descaradamente esto desde Steve Yegge's .emacs

(defun swap-windows() 
    "If you have 2 windows, it swaps them." 
    (interactive) 
    (cond ((not (= (count-windows) 2)) (message "You need exactly 2 windows to do this.")) 
     (t 
     (let* ((w1 (first (window-list))) 
       (w2 (second (window-list))) 
       (b1 (window-buffer w1)) 
       (b2 (window-buffer w2)) 
       (s1 (window-start w1)) 
       (s2 (window-start w2))) 
      (set-window-buffer w1 b2) 
      (set-window-buffer w2 b1) 
      (set-window-start w1 s2) 
      (set-window-start w2 s1))))) 

Probado en Emacs 23.1.1 en Gentoo. Esto sí preserva los tamaños de ventana.

También encontré esto que es un poco más limpio.

(defun transpose-windows() 
    (interactive) 
    (let ((this-buffer (window-buffer (selected-window))) 
     (other-buffer (prog2 
          (other-window +1) 
          (window-buffer (selected-window)) 
         (other-window -1)))) 
    (switch-to-buffer other-buffer) 
    (switch-to-buffer-other-window this-buffer) 
    (other-window -1))) 

también a prueba en Emacs 23.1.1

+0

Acabo de ver la publicación de Stevey :) – chollida

4

La siguiente versión funciona con cualquier número de ventanas. Cuando hay más de dos ventanas, las invocaciones repetidas harán que el buffer seleccionado aparezca en cada ventana sucesivamente.

 
(defun swap-buffer() 
    (interactive) 
    (cond ((one-window-p) (display-buffer (other-buffer))) 
     ((let* ((buffer-a (current-buffer)) 
       (window-b (cadr (window-list))) 
       (buffer-b (window-buffer window-b))) 
      (set-window-buffer window-b buffer-a) 
      (switch-to-buffer buffer-b) 
      (other-window 1))))) 
2

La biblioteca TransposeFrame me parece útil. I en su mayoría usarlo para el intercambio de dos ventanas, según esta pregunta; pero proporciona una funcionalidad más general que solo eso.

Siga el enlace para ver diagramas ascii de las diversas transformaciones.

Cuestiones relacionadas