From 8cb38434801b5e364abc1e160021c6f1d1a0a006 Mon Sep 17 00:00:00 2001 From: condy Date: Sat, 30 Jul 2022 23:59:03 +0800 Subject: [PATCH] unimpaired: repeat-mode integration Fix #665 --- .../unimpaired/evil-collection-unimpaired.el | 51 ++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/modes/unimpaired/evil-collection-unimpaired.el b/modes/unimpaired/evil-collection-unimpaired.el index 006cec6..0ed4e9d 100644 --- a/modes/unimpaired/evil-collection-unimpaired.el +++ b/modes/unimpaired/evil-collection-unimpaired.el @@ -37,6 +37,11 @@ "Evil port of unimpaired for `evil-collection'." :group 'evil-collection) +(defcustom evil-collection-unimpaired-want-repeat-mode-integration nil + "Whether or not to enable `repeat-mode' integration." + :type 'boolean + :group 'evil-collection) + (defconst evil-collection-unimpaired-maps '(evil-collection-unimpaired-mode-map)) (defvar evil-collection-unimpaired-mode-map (make-sparse-keymap) @@ -224,6 +229,41 @@ (interactive "*p") (evil-collection-unimpaired--move-text (- arg))) +;;; 'repeat-mode' integration. Emacs 28+ +(defmacro evil-collection-unimpaired-defvar-keymap (name &rest bindings) + "Define NAME a keymap with BINDINGS." + (declare (indent 1)) + (cl-assert (cl-evenp (length bindings))) + `(progn + (defvar ,name + (let ((map (make-sparse-keymap))) + map)) + (evil-collection-define-key nil ',name ,@bindings))) + +;; "[b" and "]b" +(evil-collection-unimpaired-defvar-keymap evil-prev-buffer-repeat-map + "b" #'evil-prev-buffer + "B" #'evil-next-buffer) +(evil-collection-unimpaired-defvar-keymap evil-next-buffer-repeat-map + "b" #'evil-next-buffer + "B" #'evil-prev-buffer) + +;; "[e" and "]e" +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-move-text-up-repeat-map + "e" #'evil-collection-unimpaired-move-text-up + "E" #'evil-collection-unimpaired-move-text-down) +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-move-text-down-repeat-map + "e" #'evil-collection-unimpaired-move-text-down + "E" #'evil-collection-unimpaired-move-text-up) + +;; "[q" and "]q" +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-previous-error-repeat-map + "q" #'evil-collection-unimpaired-previous-error + "Q" #'evil-collection-unimpaired-next-error) +(evil-collection-unimpaired-defvar-keymap evil-collection-unimpaired-next-error-repeat-map + "q" #'evil-collection-unimpaired-next-error + "Q" #'evil-collection-unimpaired-previous-error) + ;;;###autoload (defun evil-collection-unimpaired-setup () "Set up unimpaired-like bindings." @@ -258,7 +298,16 @@ "[u" 'evil-collection-unimpaired-url-encode "]u" 'evil-collection-unimpaired-url-decode "[6" 'evil-collection-unimpaired-b64-encode - "]6" 'evil-collection-unimpaired-b64-decode)) + "]6" 'evil-collection-unimpaired-b64-decode) + + (when evil-collection-unimpaired-want-repeat-mode-integration + (dolist (cmd '(evil-prev-buffer + evil-next-buffer + evil-collection-unimpaired-move-text-up + evil-collection-unimpaired-move-text-down + evil-collection-unimpaired-previous-error + evil-collection-unimpaired-next-error)) + (put cmd 'repeat-map (intern (format "%s-repeat-map" cmd)))))) (provide 'evil-collection-unimpaired) ;;; evil-collection-unimpaired.el ends here