From c3be74139a6a7489d6ca167519900fbe248f7fe3 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 2 Aug 2020 17:44:41 -0400 Subject: [PATCH] Add eval-and-replace support to evil-mc And refactor evil-mc-custom-known-commands init --- .../multiple-cursors/autoload/evil-mc.el | 9 +++++++ modules/editor/multiple-cursors/config.el | 25 +++++++++++-------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/modules/editor/multiple-cursors/autoload/evil-mc.el b/modules/editor/multiple-cursors/autoload/evil-mc.el index da4a00fd2..d0af0d5df 100644 --- a/modules/editor/multiple-cursors/autoload/evil-mc.el +++ b/modules/editor/multiple-cursors/autoload/evil-mc.el @@ -120,3 +120,12 @@ FLAGS can be g and/or i; which mean the same thing they do in :key #'evil-mc-get-cursor-start)) (message "No cursors to undo in region")) (evil-mc-undo-last-added-cursor))) + + +;;;###autoload (autoload '+multiple-cursors-execute-default-operator-fn "editor/multiple-cursors/autoload/evil-mc" nil t) + +(after! evil-mc + (evil-mc-define-handler +multiple-cursors-execute-default-operator-fn () + :cursor-clear region + (evil-mc-with-region-or-execute-macro region t + (funcall (evil-mc-get-command-name) region-start region-end)))) diff --git a/modules/editor/multiple-cursors/config.el b/modules/editor/multiple-cursors/config.el index 6880e80d0..9ff5a18bc 100644 --- a/modules/editor/multiple-cursors/config.el +++ b/modules/editor/multiple-cursors/config.el @@ -64,23 +64,26 @@ ;; Whitelist more commands (dolist (fn '((delete-char) (backward-kill-word) + (undo-fu-only-undo . evil-mc-execute-default-undo) + (undo-fu-only-redo . evil-mc-execute-default-redo) (company-complete-common . evil-mc-execute-default-complete) (doom/backward-to-bol-or-indent . evil-mc-execute-default-call) (doom/forward-to-last-non-comment-or-eol . evil-mc-execute-default-call) + ;; :editor evil (evil-delete-back-to-indentation . evil-mc-execute-default-call) - ;; Have evil-mc work with explicit `evil-escape' (on C-g) - (evil-escape . evil-mc-execute-default-evil-normal-state) - ;; Add `evil-org' support + (evil-escape . evil-mc-execute-default-evil-normal-state) ; C-g + (evil-numbers/inc-at-pt-incremental) + (evil-numbers/dec-at-pt-incremental) + ;; :tools eval commands + (+eval:replace-region . +multiple-cursors-execute-default-operator-fn) + ;; :lang org (evil-org-delete . evil-mc-execute-default-evil-delete) (evil-org-delete-char . evil-mc-execute-default-evil-delete) - (evil-org-delete-backward-char . evil-mc-execute-default-evil-delete) - ;; `evil-numbers' - (evil-numbers/inc-at-pt-incremental) - (evil-numbers/dec-at-pt-incremental))) - (cl-pushnew `(,(car fn) (:default . ,(or (cdr fn) #'evil-mc-execute-default-call-with-count))) - evil-mc-custom-known-commands - :test #'eq - :key #'car)) + (evil-org-delete-backward-char . evil-mc-execute-default-evil-delete))) + (setf (alist-get (car fn) evil-mc-custom-known-commands) + (list (cons :default + (or (cdr fn) + #'evil-mc-execute-default-call-with-count))))) ;; HACK Allow these commands to be repeated by prefixing them with a numerical ;; argument. See gabesoft/evil-mc#110