Skip to content

Commit a941e89

Browse files
committed
Add evil-window-exchange
Fixes #1385
1 parent a58e44f commit a941e89

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

evil-commands.el

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4555,6 +4555,26 @@ If ARG is empty, maximize the current window height."
45554555
slist (cdr slist)))
45564556
(select-window (cadr (window-list))))))
45574557

4558+
(evil-define-command evil-window-exchange (count)
4559+
"Without COUNT: exchange current window with next one.
4560+
With COUNT: Exchange current window with COUNTth window."
4561+
:repeat nil
4562+
(interactive "<c>")
4563+
(let ((this-buffer (window-buffer)))
4564+
(if (not count)
4565+
(let ((next-buffer (window-buffer (next-window))))
4566+
(switch-to-buffer next-buffer nil t)
4567+
(select-window (next-window))
4568+
(switch-to-buffer this-buffer nil t))
4569+
(let (other-window other-buffer)
4570+
(save-window-excursion
4571+
(evil-window-next count)
4572+
(setq other-window (selected-window)
4573+
other-buffer (window-buffer)))
4574+
(switch-to-buffer other-buffer nil t)
4575+
(select-window other-window)
4576+
(switch-to-buffer this-buffer nil t)))))
4577+
45584578
(evil-define-command evil-window-move-very-top ()
45594579
"Closes the current window, splits the upper-left one horizontally
45604580
and redisplays the current buffer there."

evil-maps.el

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
(define-key evil-window-map "v" 'evil-window-vsplit)
143143
(define-key evil-window-map "w" 'evil-window-next)
144144
(define-key evil-window-map "W" 'evil-window-prev)
145+
(define-key evil-window-map "x" 'evil-window-exchange)
145146
(define-key evil-window-map "+" 'evil-window-increase-height)
146147
(define-key evil-window-map "-" 'evil-window-decrease-height)
147148
(define-key evil-window-map ":" 'evil-ex)
@@ -177,6 +178,7 @@
177178
(define-key evil-window-map "\C-v" 'evil-window-vsplit)
178179
(define-key evil-window-map "\C-w" 'evil-window-next)
179180
(define-key evil-window-map (kbd "C-S-W") 'evil-window-prev)
181+
(define-key evil-window-map "\C-x" 'evil-window-exchange)
180182
(define-key evil-window-map "\C-_" 'evil-window-set-height)
181183
(define-key evil-window-map [C-down] 'evil-window-down)
182184
(define-key evil-window-map [C-up] 'evil-window-up)

0 commit comments

Comments
 (0)