feat(windows): use new windmove-swap-* functions on Emacs 27 and later

Fallback onto buffer-move package for Emacs versions prior to 27.
This commit is contained in:
2020-08-20 22:12:49 +01:00
parent dc23ff532f
commit dccb57747e
2 changed files with 22 additions and 2 deletions

View File

@@ -6,6 +6,9 @@
;;; Code:
(when (version< emacs-version "27.0")
(require 'siren-buffer-move))
(use-package windmove
:straight (:type built-in)
@@ -14,6 +17,10 @@
("M-k" . siren-windmove-down)
("M-j" . siren-windmove-left)
("M-l" . siren-windmove-right)
("M-K" . siren-windmove-swap-down)
("M-I" . siren-windmove-swap-up)
("M-J" . siren-windmove-swap-left)
("M-L" . siren-windmove-swap-right)
:custom
(siren-windmove-tmux-fallback (if (getenv "TMUX") t nil))
@@ -41,7 +48,21 @@
(interactive)
(if (and (not (ignore-errors (windmove-right)))
siren-windmove-tmux-fallback)
(shell-command "tmux select-pane -R"))))
(shell-command "tmux select-pane -R")))
(defun siren-windmove-swap-defun (direction)
"Define window swap function for DIRECTION.
On Emacs 27.0 or later use windmove, on earlier use buffer-move package."
`(defun ,(intern (format "siren-windmove-swap-%s" direction)) ()
(interactive)
(,(intern (format (if (version< emacs-version "27.0")
"buf-move-%s"
"windmove-swap-states-%s")
direction)))))
(defmacro siren-windmove-swap-defuns (directions)
`(progn ,@(mapcar 'siren-windmove-swap-defun directions)))
(siren-windmove-swap-defuns (up down left right)))
(provide 'siren-windmove)
;;; siren-windmove.el ends here