From 8d4d84839e23ac513025000f8882203450063c69 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Sun, 14 Mar 2021 19:18:32 -0500 Subject: Change `:map-after' behavior --- init.el | 4 +++- lisp/acdw.el | 27 ++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/init.el b/init.el index 8836991..466c280 100644 --- a/init.el +++ b/init.el @@ -432,7 +432,9 @@ indicator in the mode-line." (org-export-with-smart-quotes t) (org-export-with-sub-superscripts t)) :hooks ((before-save-hook acdw/hook--org-mode-fix-blank-lines)) - :binds (("RET" unpackaged/org-return-dwim :map org-mode-map))) + :binds (("RET" unpackaged/org-return-dwim + :map org-mode-map :map-after 'org))) + ;;; Programming languages diff --git a/lisp/acdw.el b/lisp/acdw.el index 84fcb99..e25de43 100644 --- a/lisp/acdw.el +++ b/lisp/acdw.el @@ -145,20 +145,37 @@ otherwise it's wrapped in `kbd'. The following keywords are recognized: :after ARGS .. call `autoload' on COMMAND using ARGS before - binding the key. ARGS can be just the filename to - load; in that case it's wrapped in a list. + binding the key. ARGS can be just the filename to + load; in that case it's wrapped in a list. + :map KEYMAP .. define KEY in KEYMAP instead of the - default `acdw/bind-default-map'." + default `acdw/bind-default-map'. If `:after' is also supplied, + run `autoload' on KEYMAP (except when using `:map-after', see). + +:map-after FILE .. run the underlying `define-key' command in an + `with-eval-after-load'. For the rare occasion when the keymap is + defined in a different file than the command it binds (looking + at you, `org-mode')." (let ((after (when-let (sym (plist-get args :after)) (if (not (listp sym)) (list sym) sym))) + (map-after (plist-get args :map-after)) (keymap (or (plist-get args :map) acdw/bind-default-map)) (keycode (if (vectorp key) key (kbd key))) (command-list)) - (push `(define-key ,keymap ,keycode ',command) command-list) + (let ((define-key-command `(define-key ,keymap ,keycode ',command))) + (if map-after + (push `(with-eval-after-load ,map-after + ,define-key-command) + command-list) + (push define-key-command command-list))) (when after - (push `(autoload ',command ,@after) command-list)) + (unless (fboundp command) + (push `(autoload ',command ,@after) command-list)) + (unless (or map-after + (eq keymap acdw/bind-default-map)) + (push `(autoload ',keymap ,(car after) nil nil 'keymap) command-list))) `(progn ,@command-list))) -- cgit 1.4.1-21-gabe81