[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/transient f086cb6 04/18: transient--insert-suffix: Allo
From: |
Jonas Bernoulli |
Subject: |
[elpa] externals/transient f086cb6 04/18: transient--insert-suffix: Allow same key with different predicates |
Date: |
Sat, 27 Feb 2021 09:20:09 -0500 (EST) |
branch: externals/transient
commit f086cb620b4c3cb99b5d1a885cf534718d0367d9
Author: Jonas Bernoulli <jonas@bernoul.li>
Commit: Jonas Bernoulli <jonas@bernoul.li>
transient--insert-suffix: Allow same key with different predicates
Previously it was not possible to add two bindings that use the
same key but different predicates using `transient-insert-suffix'.
Such only superficially conflicting bindings had to be added when
the prefix was defined using `transient-define-prefix'.
Now we use a heuristic to allow `transient-insert-suffix' to add
such bindings as well.
If both bindings define a predicate and these predicates are not
equal, then the two bindings are assumed to be distinct. If on
the other hand at least one of the bindings lacks a predicate or
the predicates are equal, then the new binding is considered a
replacement for the old binding, as before.
Closes #106.
---
lisp/transient.el | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/lisp/transient.el b/lisp/transient.el
index 5f6b509..cbd5ec4 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -1065,7 +1065,15 @@ example, sets a variable use `transient-define-infix'
instead.
;; We must keep `mem' until after we have inserted
;; behind it, which `transient-remove-suffix' does
;; not allow us to do.
- (setq action 'replace)
+ (let ((spred (transient--suffix-predicate suf))
+ (epred (transient--suffix-predicate elt)))
+ ;; If both suffixes have a predicate and they
+ ;; are not identical, then the probability is
+ ;; high that we want to keep both.
+ (when (or (not spred)
+ (not epred)
+ (equal spred epred))
+ (setq action 'replace)))
(transient-remove-suffix prefix key))))
(cl-ecase action
(insert (setcdr mem (cons elt (cdr mem)))
@@ -1801,6 +1809,20 @@ value. Otherwise return CHILDREN as is."
(apply #'derived-mode-p if-not-derived))))
(t default)))
+(defun transient--suffix-predicate (spec)
+ (let ((plist (nth 2 spec)))
+ (seq-some (lambda (prop)
+ (when-let ((pred (plist-get plist prop)))
+ (list prop pred)))
+ '( :if :if-not
+ :if-nil :if-non-nil
+ :if-mode :if-not-mode
+ :if-derived :if-not-derived
+ :inapt-if :inapt-if-not
+ :inapt-if-nil :inapt-if-non-nil
+ :inapt-if-mode :inapt-if-not-mode
+ :inapt-if-derived :inapt-if-not-derived))))
+
;;; Flow-Control
(defun transient--init-transient ()
- [elpa] externals/transient 94582a3 08/18: license: Update URLs and cleanup whitespace, (continued)
- [elpa] externals/transient 94582a3 08/18: license: Update URLs and cleanup whitespace, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient d555d26 01/18: transient-format-description(lisp-variable): Return string, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 90e640f 05/18: Bump copyright years, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 7811dcf 06/18: Add /docs/*.info to .gitignore, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 8ad5fb8 07/18: Remove async-bytecomp kludge, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 7065e1c 09/18: manual: Various small improvements, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 4fc9aa5 10/18: manual: Fix small typo, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient d48f245 12/18: transient--pre-exit: Don't log clearing of minibuffer, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 691d10f 11/18: Fix doc-string typo, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient e91ad31 14/18: transient--debug: Show this-command-keys, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient f086cb6 04/18: transient--insert-suffix: Allow same key with different predicates,
Jonas Bernoulli <=
- [elpa] externals/transient eb39c96 13/18: transient--debug: Always show symbol representing command, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient d85eb79 15/18: transient-read-directory: Pass read value through file-local-name, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 48238bf 16/18: Allow invoking arbitrary prefixes as non-suffixes, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 48335f8 17/18: transient-status: Prevent use while minibuffer is active, Jonas Bernoulli, 2021/02/27
- [elpa] externals/transient 9ca983b 18/18: Release version 0.3.0, Jonas Bernoulli, 2021/02/27