branch: elpa/evil commit a941e89a8cdd743eeccc0eabb5b833f51bf51cd1 Author: Tom Dalziel <tom...@hotmail.com> Commit: Tom Dalziel <33435574+tomd...@users.noreply.github.com>
Add evil-window-exchange Fixes #1385 --- evil-commands.el | 20 ++++++++++++++++++++ evil-maps.el | 2 ++ 2 files changed, 22 insertions(+) diff --git a/evil-commands.el b/evil-commands.el index 0c6945d42c..6c5da915c7 100644 --- a/evil-commands.el +++ b/evil-commands.el @@ -4555,6 +4555,26 @@ If ARG is empty, maximize the current window height." slist (cdr slist))) (select-window (cadr (window-list)))))) +(evil-define-command evil-window-exchange (count) + "Without COUNT: exchange current window with next one. +With COUNT: Exchange current window with COUNTth window." + :repeat nil + (interactive "<c>") + (let ((this-buffer (window-buffer))) + (if (not count) + (let ((next-buffer (window-buffer (next-window)))) + (switch-to-buffer next-buffer nil t) + (select-window (next-window)) + (switch-to-buffer this-buffer nil t)) + (let (other-window other-buffer) + (save-window-excursion + (evil-window-next count) + (setq other-window (selected-window) + other-buffer (window-buffer))) + (switch-to-buffer other-buffer nil t) + (select-window other-window) + (switch-to-buffer this-buffer nil t))))) + (evil-define-command evil-window-move-very-top () "Closes the current window, splits the upper-left one horizontally and redisplays the current buffer there." diff --git a/evil-maps.el b/evil-maps.el index 63f52f9eb6..3afb46da97 100644 --- a/evil-maps.el +++ b/evil-maps.el @@ -142,6 +142,7 @@ (define-key evil-window-map "v" 'evil-window-vsplit) (define-key evil-window-map "w" 'evil-window-next) (define-key evil-window-map "W" 'evil-window-prev) +(define-key evil-window-map "x" 'evil-window-exchange) (define-key evil-window-map "+" 'evil-window-increase-height) (define-key evil-window-map "-" 'evil-window-decrease-height) (define-key evil-window-map ":" 'evil-ex) @@ -177,6 +178,7 @@ (define-key evil-window-map "\C-v" 'evil-window-vsplit) (define-key evil-window-map "\C-w" 'evil-window-next) (define-key evil-window-map (kbd "C-S-W") 'evil-window-prev) +(define-key evil-window-map "\C-x" 'evil-window-exchange) (define-key evil-window-map "\C-_" 'evil-window-set-height) (define-key evil-window-map [C-down] 'evil-window-down) (define-key evil-window-map [C-up] 'evil-window-up)