emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/embark 273261b717: Generalize embark-keymap-alist to al


From: ELPA Syncer
Subject: [elpa] externals/embark 273261b717: Generalize embark-keymap-alist to allow lists of keymaps
Date: Fri, 6 May 2022 20:57:34 -0400 (EDT)

branch: externals/embark
commit 273261b717fbc12ff8e46392a4ce813158877fa2
Author: Omar Antolín <omar.antolin@gmail.com>
Commit: Omar Antolín <omar.antolin@gmail.com>

    Generalize embark-keymap-alist to allow lists of keymaps
---
 embark-org.el | 28 +++++++---------------
 embark.el     | 77 ++++++++++++++++++++++++++++++++++-------------------------
 2 files changed, 53 insertions(+), 52 deletions(-)

diff --git a/embark-org.el b/embark-org.el
index 63778b7f5f..ee532e67aa 100644
--- a/embark-org.el
+++ b/embark-org.el
@@ -289,15 +289,6 @@ also the whole target.")
   ("'" org-insert-link)
   ("w" 'embark-org-copy-map))
 
-(defmacro embark-org--define-link-keymap (type)
-  "Define a keymap for Org link of given TYPE.
-The keymap will inherit from `embark-org-link-map' and from
-`embark-TYPE-map' in that order."
-  `(defvar ,(intern (format "embark-org-%s-link-map" type))
-     (make-composed-keymap embark-org-link-map
-                           ,(intern (format "embark-%s-map" type)))
-     ,(format "Keymap for Embark actions on Org %s links" type)))
-
 ;; The reason for this is left as an exercise to the reader.
 ;; Solution: Na ryvfc gnetrg znl cebzcg gur hfre sbe fbzrguvat!
 (push 'embark--ignore-target
@@ -306,17 +297,16 @@ The keymap will inherit from `embark-org-link-map' and 
from
 (push 'embark--ignore-target
       (alist-get 'org-insert-link embark-target-injection-hooks))
 
-(embark-org--define-link-keymap url)
-(embark-org--define-link-keymap file)
-(embark-org--define-link-keymap email)
-(embark-org--define-link-keymap expression)
-
-(add-to-list 'embark-keymap-alist '(org-link . embark-org-link-map))
-(add-to-list 'embark-keymap-alist '(org-url-link . embark-org-url-link-map))
-(add-to-list 'embark-keymap-alist '(org-email-link . 
embark-org-email-link-map))
-(add-to-list 'embark-keymap-alist '(org-file-link . embark-org-file-link-map))
 (add-to-list 'embark-keymap-alist
-             '(org-expression-link . embark-org-expression-link-map))
+             '(org-link embark-org-link-map))
+(add-to-list 'embark-keymap-alist
+             '(org-url-link embark-org-link-map embark-url-map))
+(add-to-list 'embark-keymap-alist
+             '(org-email-link embark-org-link-map embark-email-map))
+(add-to-list 'embark-keymap-alist
+             '(org-file-link embark-org-link-map embark-file-map))
+(add-to-list 'embark-keymap-alist
+             '(org-expression-link embark-org-link-map embark-expression-map))
 
 ;;; Source blocks and babel calls
 
diff --git a/embark.el b/embark.el
index bab357c81d..e8c9d9c85c 100644
--- a/embark.el
+++ b/embark.el
@@ -122,35 +122,38 @@
   :group 'minibuffer)
 
 (defcustom embark-keymap-alist
-  `((file . embark-file-map)
-    (library . embark-library-map)
-    (environment-variables . embark-file-map) ; they come up in file completion
-    (url . embark-url-map)
-    (email . embark-email-map)
-    (buffer . embark-buffer-map)
-    (tab . embark-tab-map)
-    (expression . embark-expression-map)
-    (identifier . embark-identifier-map)
-    (,'defun . embark-defun-map)  ;; Avoid package-lint warning
-    (symbol . embark-symbol-map)
-    (face . embark-face-map)
-    (command . embark-command-map)
-    (variable . embark-variable-map)
-    (function . embark-function-map)
-    (minor-mode . embark-command-map)
-    (unicode-name . embark-unicode-name-map)
-    (package . embark-package-map)
-    (bookmark . embark-bookmark-map)
-    (region . embark-region-map)
-    (sentence . embark-sentence-map)
-    (paragraph . embark-paragraph-map)
-    (kill-ring . embark-kill-ring-map)
-    (heading . embark-heading-map)
-    (t . embark-general-map))
+  '((file embark-file-map)
+    (library embark-library-map)
+    (environment-variables embark-file-map) ; they come up in file completion
+    (url embark-url-map)
+    (email embark-email-map)
+    (buffer embark-buffer-map)
+    (tab embark-tab-map)
+    (expression embark-expression-map)
+    (identifier embark-identifier-map)
+    (defun embark-defun-map)
+    (symbol embark-symbol-map)
+    (face embark-face-map)
+    (command embark-command-map)
+    (variable embark-variable-map)
+    (function embark-function-map)
+    (minor-mode embark-command-map)
+    (unicode-name embark-unicode-name-map)
+    (package embark-package-map)
+    (bookmark embark-bookmark-map)
+    (region embark-region-map)
+    (sentence embark-sentence-map)
+    (paragraph embark-paragraph-map)
+    (kill-ring embark-kill-ring-map)
+    (heading embark-heading-map)
+    (t embark-general-map))
   "Alist of action types and corresponding keymaps.
-For any type not listed here, `embark-act' will use
-`embark-general-map'."
-  :type '(alist :key-type symbol :value-type variable))
+The special key `t' is associated with the default keymap to use.
+Each value can be either a single symbol whose value is a keymap,
+or a list of such symbols."
+  :type '(alist :key-type (symbol :tag "Target type")
+                :value-type (choice (variable :tag "Keymap")
+                             (repeat :tag "Keymaps" variable))))
 
 (defcustom embark-target-finders
   '(embark-target-top-minibuffer-completion
@@ -976,6 +979,17 @@ their own target finder.  See for example
   "Return the key to use for `embark-cycle'."
   (or embark-cycle-key (car (where-is-internal #'embark-act))))
 
+(defun embark--raw-action-keymap (type)
+  "Return raw action map for targets of given TYPE.
+This does not take into account the default action, help key or
+cycling bindings, just what's registered in
+`embark-keymap-alist'."
+  (make-composed-keymap
+   (mapcar #'symbol-value
+           (let ((actions (or (alist-get type embark-keymap-alist)
+                              (alist-get t embark-keymap-alist))))
+             (if (consp actions) actions (list actions))))))
+
 (defun embark--action-keymap (type cycle)
   "Return action keymap for targets of given TYPE.
 If CYCLE is non-nil bind `embark-cycle'."
@@ -988,8 +1002,7 @@ If CYCLE is non-nil bind `embark-cycle'."
      (when embark-help-key
        (define-key map embark-help-key #'embark-keymap-help))
      map)
-   (symbol-value (or (alist-get type embark-keymap-alist)
-                     (alist-get t embark-keymap-alist)))))
+   (embark--raw-action-keymap type)))
 
 (defun embark--truncate-target (target)
   "Truncate TARGET string."
@@ -1986,9 +1999,7 @@ keymap for the given type."
       (alist-get type embark-default-action-overrides)
       (alist-get t embark-default-action-overrides)
       embark--command
-      (lookup-key (symbol-value (or (alist-get type embark-keymap-alist)
-                                    (alist-get t embark-keymap-alist)))
-                  (kbd "RET"))))
+      (lookup-key (embark--raw-action-keymap type) (kbd "RET"))))
 
 (defun embark--rotate (list k)
   "Rotate LIST by K elements and return the rotated list."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]