branch: externals/do-at-point
commit c8d61e8ed51b666e86732ec5bed1039096debd04
Author: Philip Kaludercic <[email protected]>
Commit: Philip Kaludercic <[email protected]>
Allow for actions to refer to actions of other things
---
do-at-point.el | 51 +++++++++++++++++++++++++++------------------------
1 file changed, 27 insertions(+), 24 deletions(-)
diff --git a/do-at-point.el b/do-at-point.el
index 136bab8c3e..769b3f5189 100644
--- a/do-at-point.el
+++ b/do-at-point.el
@@ -204,14 +204,15 @@ interpret as function that is invoked without any
arguments, or
with a buffer substring or the bounds of THING. Actions listed
under the \"thing\" `region' are shared among all \"things\". An
entry in ACTIONS can omit NAME and FUNC, and it will instead
-fallback into the entry for `region'. This is why a an entry
-does not require any actions to be associated with it, if it just
-serves as a specific kind of region worth selecting. The order
-of element in the list correspond to the order in which
-`do-at-point' will prompt the user for possible things at point.
-Note that the user option `do-at-point-user-actions' and the
-variable `do-at-point-local-actions' take precedence over this
-user option."
+fallback into the entry for `region'. If an element of ACTIONS has
+the form (KEY . THING), it it will fall back to the entry of KEY in
+THING instead of `region'. This is why a an entry does not require
+any actions to be associated with it, if it just serves as a
+specific kind of region worth selecting. The order of element in
+the list correspond to the order in which `do-at-point' will prompt
+the user for possible things at point. Note that the user option
+`do-at-point-user-actions' and the variable
+`do-at-point-local-actions' take precedence over this user option."
:type do-at-point--actions-type)
(defcustom do-at-point-quick-bindings t
@@ -238,22 +239,24 @@ The function consults `do-at-point-user-actions',
`do-at-point-local-actions' and the user option
`do-at-point-actions' in this order and inherits actions from
more to less specific entries."
- (seq-reduce
- (lambda (accum ent)
- (let ((prev (assq (car ent) accum)))
- (cons (list (car ent)
- (or (cadr ent) (cadr prev))
- (or (caddr ent) (caddr prev))
- (or (cadddr ent) (cadddr prev)))
- (delq prev accum))))
- (reverse (append
- (alist-get thing do-at-point-user-actions)
- (alist-get 'region do-at-point-user-actions)
- (alist-get thing do-at-point-local-actions)
- (alist-get 'region do-at-point-local-actions)
- (alist-get thing do-at-point-actions)
- (alist-get 'region do-at-point-actions)))
- '()))
+ (mapcan
+ (lambda (ent)
+ (pcase-exhaustive ent
+ (`(,key . ,(and (pred symbolp) thing))
+ (list (assoc key (do-at-point--actions (or thing 'region)))))
+ (`(,key ,desc ,func)
+ (and key desc func
+ (list (list key desc func))))))
+ (append
+ (and (not (eq thing 'region))
+ (alist-get thing do-at-point-actions))
+ (alist-get 'region do-at-point-actions)
+ (and (not (eq thing 'region))
+ (alist-get thing do-at-point-local-actions))
+ (alist-get 'region do-at-point-local-actions)
+ (and (not (eq thing 'region))
+ (alist-get thing do-at-point-user-actions))
+ (alist-get 'region do-at-point-user-actions))))
(defvar-local do-at-point--overlay nil
"Buffer-local overlay object to display the selection overlay.