diff --git a/core/core-debug.el b/core/core-debug.el index 1f9cfceba..1ff889c82 100644 --- a/core/core-debug.el +++ b/core/core-debug.el @@ -22,19 +22,14 @@ :n "c" 'realgud:cmd-continue) ;; Temporary Ex commands for the debugger - ;; TODO Turn temporary ex commands into macro - (defun narf*debug-init (&rest _) - (exmap "n[ext]" 'realgud:cmd-next) - (exmap "s[tep]" 'realgud:cmd-step) - (exmap "b[reak]" 'narf:debug-toggle-breakpoint) - (exmap "c[ontinue]" 'realgud:cmd-continue)) - (defun narf*debug-quit (&rest _) - (narf/evil-ex-undefine-cmd "n[ext]") - (narf/evil-ex-undefine-cmd "s[tep]") - (narf/evil-ex-undefine-cmd "b[reak]") - (narf/evil-ex-undefine-cmd "c[ontinue]")) - (advice-add 'realgud-cmdbuf-init :after 'narf*debug-init) - (advice-add 'realgud:cmd-quit :after 'narf*debug-quit)) + (define-temp-ex-cmd! narf:def-debug-on narf:def-debug-off + ("n[ext]" . realgud:cmd-next) + ("s[tep]" . realgud:cmd-step) + ("b[reak]" . narf:debug-toggle-breakpoint) + ("c[ontinue]" . realgud:cmd-continue)) + + (advice-add 'realgud-cmdbuf-init :after 'narf:def-debug-on) + (advice-add 'realgud:cmd-quit :after 'narf:def-debug-off)) (provide 'core-debug) ;;; core-debug.el ends here diff --git a/core/defuns/defuns-evil.el b/core/defuns/defuns-evil.el index 9f94250bb..e92e645fb 100644 --- a/core/defuns/defuns-evil.el +++ b/core/defuns/defuns-evil.el @@ -75,18 +75,6 @@ (single-key-description (or macro (read-char "@-")))))) -;;;###autoload -(defmacro define-text-object! (key start-regex end-regex) - (let ((inner-name (make-symbol "narf--inner-name")) - (outer-name (make-symbol "narf--outer-name"))) - `(progn - (evil-define-text-object ,inner-name (count &optional beg end type) - (evil-select-paren ,start-regex ,end-regex beg end type count nil)) - (evil-define-text-object ,outer-name (count &optional beg end type) - (evil-select-paren ,start-regex ,end-regex beg end type count t)) - (define-key evil-inner-text-objects-map ,key (quote ,inner-name)) - (define-key evil-outer-text-objects-map ,key (quote ,outer-name))))) - ;;; Custom argument handlers ;;;###autoload (defun narf/-ex-match-init (name &optional face update-hook) diff --git a/core/defuns/macros-evil.el b/core/defuns/macros-evil.el new file mode 100644 index 000000000..edda354cb --- /dev/null +++ b/core/defuns/macros-evil.el @@ -0,0 +1,28 @@ +;;; macros-evil.el + +;;;###autoload +(defmacro define-text-object! (key start-regex end-regex) + (let ((inner-name (make-symbol "narf--inner-name")) + (outer-name (make-symbol "narf--outer-name"))) + `(progn + (evil-define-text-object ,inner-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count nil)) + (evil-define-text-object ,outer-name (count &optional beg end type) + (evil-select-paren ,start-regex ,end-regex beg end type count t)) + (define-key evil-inner-text-objects-map ,key (quote ,inner-name)) + (define-key evil-outer-text-objects-map ,key (quote ,outer-name))))) + +;;;###autoload +(defmacro define-temp-ex-cmd! (cmd-on cmd-off &rest commands) + "Creates on-off defuns for a set of ex commands, named CMD-ON and CMD-OFF." + (declare (indent 2)) + `(progn + (defun ,cmd-on (&rest _) + (mapc (lambda (cmd) (evil-ex-define-cmd (car cmd) (cdr cmd))) + ',commands)) + (defun ,cmd-off (&rest _) + (mapc (lambda (cmd) (narf/evil-ex-undefine-cmd (car cmd))) + ',commands)))) + +(provide 'macros-evil) +;;; macros-evil.el ends here diff --git a/modules/module-lisp.el b/modules/module-lisp.el index ea3a9d804..864a11bc2 100644 --- a/modules/module-lisp.el +++ b/modules/module-lisp.el @@ -61,7 +61,7 @@ "define-env-command" "define-text-object" "add-yas-minor-mode" "define-docset" "define-org-link!" "define-company-backend" - "define-org-section")) + "define-org-section" "define-temp-ex-cmd")) "!\\)") (1 font-lock-keyword-face append)) ;; Ert