Palace Chan
Palace Chan

Reputation: 9213

Emacs shortcut to switch from a horizontal split to a vertical split in one move?

I often find myself switching from a horizontal view of two windows in emacs to a vertical view. This requires me to first do C-x 1 and then C-x 3 and then C-x o followed by C-x b <RET> to switch to the other buffer or something like that. I would like to only have to type C-x | (analogous to how, in Ediff, you hit | to toggle the split view).

I found this in the emacs wiki site: http://www.emacswiki.org/emacs/ToggleWindowSplit

But how do I map that to the key combo I want? Or whether there is a simpler way to do it (taking less .emacs space).

Upvotes: 35

Views: 12407

Answers (2)

marcelocra
marcelocra

Reputation: 2513

Making it easier for other people that also happened to be looking for the script (in this link), already modified with the other answer's keybinding:

(defun toggle-window-split ()
  (interactive)
  (if (= (count-windows) 2)
      (let* ((this-win-buffer (window-buffer))
         (next-win-buffer (window-buffer (next-window)))
         (this-win-edges (window-edges (selected-window)))
         (next-win-edges (window-edges (next-window)))
         (this-win-2nd (not (and (<= (car this-win-edges)
                     (car next-win-edges))
                     (<= (cadr this-win-edges)
                     (cadr next-win-edges)))))
         (splitter
          (if (= (car this-win-edges)
             (car (window-edges (next-window))))
          'split-window-horizontally
        'split-window-vertically)))
    (delete-other-windows)
    (let ((first-win (selected-window)))
      (funcall splitter)
      (if this-win-2nd (other-window 1))
      (set-window-buffer (selected-window) this-win-buffer)
      (set-window-buffer (next-window) next-win-buffer)
      (select-window first-win)
      (if this-win-2nd (other-window 1))))))

(global-set-key (kbd "C-x |") 'toggle-window-split)

Upvotes: 29

Daniel Mart&#237;n
Daniel Mart&#237;n

Reputation: 7845

The last line is where the key combo is defined. It should be (global-set-key (kbd "C-x |") 'toggle-window-split)

Upvotes: 24

Related Questions