Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

With emacs, How do you swap the position of 2 windows

Tags:

emacs

I've got 2 windows open in Emacs and I'd like to swap their positions.

Ie Consider having a REPL above the source file and I'd like to swap their locations so that the REPL is below the source file.

I'd also like to preserve the sizes of the windows

like image 715
chollida Avatar asked Oct 02 '09 15:10

chollida


1 Answers

I shamelessly stole this from 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)))))

Tested on Emacs 23.1.1 on Gentoo. This does preserve window sizes.

I also found this which is a little cleaner.

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

Also tested on Emacs 23.1.1

like image 60
baudtack Avatar answered Oct 01 '22 12:10

baudtack