mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Update to Transient v0.7.2-1-gf273c0c8
This fixes two bugs, one of them restoring compatibility with the version that ships with Emacs 29, making emoji-insert usable again. The other changes are of cosmetic nature. The only exception is a new command, whose creation lead to the discovery of one of the bugs, and remains unused until a package author actually binds it in a prefix. I.e., unless someone actually uses this, the risk of a regression is close to zero, and even if it is used, it can only affect the prefix that binds it.
This commit is contained in:
parent
b7d5ca3a8f
commit
4fcc38966b
2 changed files with 56 additions and 10 deletions
|
|
@ -31,7 +31,7 @@ General Public License for more details.
|
||||||
@finalout
|
@finalout
|
||||||
@titlepage
|
@titlepage
|
||||||
@title Transient User and Developer Manual
|
@title Transient User and Developer Manual
|
||||||
@subtitle for version 0.7.0
|
@subtitle for version 0.7.2
|
||||||
@author Jonas Bernoulli
|
@author Jonas Bernoulli
|
||||||
@page
|
@page
|
||||||
@vskip 0pt plus 1filll
|
@vskip 0pt plus 1filll
|
||||||
|
|
@ -53,7 +53,7 @@ resource to get over that hurdle is Psionic K's interactive tutorial,
|
||||||
available at @uref{https://github.com/positron-solutions/transient-showcase}.
|
available at @uref{https://github.com/positron-solutions/transient-showcase}.
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
This manual is for Transient version 0.7.0.
|
This manual is for Transient version 0.7.2.
|
||||||
|
|
||||||
@insertcopying
|
@insertcopying
|
||||||
@end ifnottex
|
@end ifnottex
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
;; Author: Jonas Bernoulli <jonas@bernoul.li>
|
;; Author: Jonas Bernoulli <jonas@bernoul.li>
|
||||||
;; URL: https://github.com/magit/transient
|
;; URL: https://github.com/magit/transient
|
||||||
;; Keywords: extensions
|
;; Keywords: extensions
|
||||||
;; Version: 0.7.0
|
;; Version: 0.7.2
|
||||||
|
|
||||||
;; SPDX-License-Identifier: GPL-3.0-or-later
|
;; SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
|
@ -835,6 +835,11 @@ Technically a suffix object with no associated command.")
|
||||||
All remaining arguments are treated as files.
|
All remaining arguments are treated as files.
|
||||||
They become the value of this argument.")
|
They become the value of this argument.")
|
||||||
|
|
||||||
|
(defclass transient-value-preset (transient-suffix)
|
||||||
|
((transient :initform t)
|
||||||
|
(set :initarg := :initform nil))
|
||||||
|
"Class used by the `transient-preset' suffix command.")
|
||||||
|
|
||||||
;;;; Group
|
;;;; Group
|
||||||
|
|
||||||
(defclass transient-group (transient-child)
|
(defclass transient-group (transient-child)
|
||||||
|
|
@ -1075,7 +1080,10 @@ commands are aliases for."
|
||||||
(and val (not (eq val 'transient--default-infix-command)) val)))
|
(and val (not (eq val 'transient--default-infix-command)) val)))
|
||||||
|
|
||||||
(eval-and-compile ;transient--expand-define-args
|
(eval-and-compile ;transient--expand-define-args
|
||||||
(defun transient--expand-define-args (args arglist form &optional nobody)
|
(defun transient--expand-define-args (args &optional arglist form nobody)
|
||||||
|
;; ARGLIST and FORM are only optional for backward compatibility.
|
||||||
|
;; This is necessary because "emoji.el" from Emacs 29 calls this
|
||||||
|
;; function directly, with just one argument.
|
||||||
(unless (listp arglist)
|
(unless (listp arglist)
|
||||||
(error "Mandatory ARGLIST is missing"))
|
(error "Mandatory ARGLIST is missing"))
|
||||||
(let (class keys suffixes docstr declare (interactive-only t))
|
(let (class keys suffixes docstr declare (interactive-only t))
|
||||||
|
|
@ -2020,7 +2028,7 @@ transient. In that case NAME is mandatory, LAYOUT and EDIT must
|
||||||
be nil and PARAMS may be (but usually is not) used to set, e.g.,
|
be nil and PARAMS may be (but usually is not) used to set, e.g.,
|
||||||
the \"scope\" of the transient (see `transient-define-prefix').
|
the \"scope\" of the transient (see `transient-define-prefix').
|
||||||
|
|
||||||
This function is also called internally in which case LAYOUT and
|
This function is also called internally, in which case LAYOUT and
|
||||||
EDIT may be non-nil."
|
EDIT may be non-nil."
|
||||||
(transient--debug 'setup)
|
(transient--debug 'setup)
|
||||||
(transient--with-emergency-exit :setup
|
(transient--with-emergency-exit :setup
|
||||||
|
|
@ -2275,6 +2283,12 @@ value. Otherwise return CHILDREN as is."
|
||||||
(transient--pop-keymap 'transient--predicate-map)
|
(transient--pop-keymap 'transient--predicate-map)
|
||||||
(transient--pop-keymap 'transient--transient-map)
|
(transient--pop-keymap 'transient--transient-map)
|
||||||
(transient--pop-keymap 'transient--redisplay-map)
|
(transient--pop-keymap 'transient--redisplay-map)
|
||||||
|
(if (eq transient--refreshp 'updated-value)
|
||||||
|
;; Preserve the prefix value this once, because the
|
||||||
|
;; invoked suffix indicates that it has updated that.
|
||||||
|
(setq transient--refreshp (oref transient--prefix refresh-suffixes))
|
||||||
|
;; Otherwise update the prefix value from suffix values.
|
||||||
|
(oset transient--prefix value (transient-get-value)))
|
||||||
(transient--init-objects)
|
(transient--init-objects)
|
||||||
(transient--init-keymaps)
|
(transient--init-keymaps)
|
||||||
(transient--push-keymap 'transient--transient-map)
|
(transient--push-keymap 'transient--transient-map)
|
||||||
|
|
@ -3081,6 +3095,12 @@ transient is active."
|
||||||
(oset obj value (nth pos hst))
|
(oset obj value (nth pos hst))
|
||||||
(mapc #'transient-init-value transient--suffixes))))
|
(mapc #'transient-init-value transient--suffixes))))
|
||||||
|
|
||||||
|
(transient-define-suffix transient-preset ()
|
||||||
|
"Put this preset into action."
|
||||||
|
:class transient-value-preset
|
||||||
|
(interactive)
|
||||||
|
(transient-prefix-set (oref (transient-suffix-object) set)))
|
||||||
|
|
||||||
;;;; Auxiliary
|
;;;; Auxiliary
|
||||||
|
|
||||||
(defun transient-toggle-common ()
|
(defun transient-toggle-common ()
|
||||||
|
|
@ -3258,7 +3278,7 @@ it\", in which case it is pointless to preserve history.)"
|
||||||
(reader (oref obj reader))
|
(reader (oref obj reader))
|
||||||
(choices (if (functionp choices) (funcall choices) choices))
|
(choices (if (functionp choices) (funcall choices) choices))
|
||||||
(prompt (transient-prompt obj))
|
(prompt (transient-prompt obj))
|
||||||
(value (if multi-value (mapconcat #'identity value ",") value))
|
(value (if multi-value (string-join value ",") value))
|
||||||
(history-key (or (oref obj history-key)
|
(history-key (or (oref obj history-key)
|
||||||
(oref obj command)))
|
(oref obj command)))
|
||||||
(transient--history (alist-get history-key transient-history))
|
(transient--history (alist-get history-key transient-history))
|
||||||
|
|
@ -3405,10 +3425,10 @@ prompt."
|
||||||
;;;; Set
|
;;;; Set
|
||||||
|
|
||||||
(cl-defgeneric transient-infix-set (obj value)
|
(cl-defgeneric transient-infix-set (obj value)
|
||||||
"Set the value of infix object OBJ to value.")
|
"Set the value of infix object OBJ to VALUE.")
|
||||||
|
|
||||||
(cl-defmethod transient-infix-set ((obj transient-infix) value)
|
(cl-defmethod transient-infix-set ((obj transient-infix) value)
|
||||||
"Set the value of infix object OBJ to value."
|
"Set the value of infix object OBJ to VALUE."
|
||||||
(oset obj value value))
|
(oset obj value value))
|
||||||
|
|
||||||
(cl-defmethod transient-infix-set :after ((obj transient-argument) value)
|
(cl-defmethod transient-infix-set :after ((obj transient-argument) value)
|
||||||
|
|
@ -3438,8 +3458,16 @@ prompt."
|
||||||
(member arg incomp)))))
|
(member arg incomp)))))
|
||||||
(transient-infix-set obj nil)))))
|
(transient-infix-set obj nil)))))
|
||||||
|
|
||||||
|
(defun transient-prefix-set (value)
|
||||||
|
"Set the value of the active transient prefix to VALUE.
|
||||||
|
Intended for use by transient suffix commands."
|
||||||
|
(oset transient--prefix value value)
|
||||||
|
(setq transient--refreshp 'updated-value))
|
||||||
|
|
||||||
(cl-defgeneric transient-set-value (obj)
|
(cl-defgeneric transient-set-value (obj)
|
||||||
"Set the value of the transient prefix OBJ.")
|
"Persist the value of the transient prefix OBJ.
|
||||||
|
Only intended for use by `transient-set'.
|
||||||
|
Also see `transient-prefix-set'.")
|
||||||
|
|
||||||
(cl-defmethod transient-set-value ((obj transient-prefix))
|
(cl-defmethod transient-set-value ((obj transient-prefix))
|
||||||
(oset (oref obj prototype) value (transient-get-value))
|
(oset (oref obj prototype) value (transient-get-value))
|
||||||
|
|
@ -3495,7 +3523,7 @@ the set, saved or default value for PREFIX."
|
||||||
(and (or (not (slot-exists-p obj 'unsavable))
|
(and (or (not (slot-exists-p obj 'unsavable))
|
||||||
(not (oref obj unsavable)))
|
(not (oref obj unsavable)))
|
||||||
(transient--get-wrapped-value obj)))
|
(transient--get-wrapped-value obj)))
|
||||||
transient-current-suffixes)))
|
(or transient--suffixes transient-current-suffixes))))
|
||||||
|
|
||||||
(defun transient--get-wrapped-value (obj)
|
(defun transient--get-wrapped-value (obj)
|
||||||
(and-let* ((value (transient-infix-value obj)))
|
(and-let* ((value (transient-infix-value obj)))
|
||||||
|
|
@ -3954,6 +3982,24 @@ called inside the correct buffer (see `transient--insert-group')
|
||||||
and its value is returned to the caller."
|
and its value is returned to the caller."
|
||||||
(transient--get-description obj))
|
(transient--get-description obj))
|
||||||
|
|
||||||
|
(cl-defmethod transient-format-description ((obj transient-value-preset))
|
||||||
|
(pcase-let* (((eieio description key set) obj)
|
||||||
|
((eieio value) transient--prefix)
|
||||||
|
(active (seq-set-equal-p set value)))
|
||||||
|
(format
|
||||||
|
"%s %s"
|
||||||
|
(propertize (or description (format "Preset %s" key))
|
||||||
|
'face (and active 'transient-argument))
|
||||||
|
(format (propertize "(%s)" 'face 'transient-delimiter)
|
||||||
|
(mapconcat (lambda (arg)
|
||||||
|
(propertize
|
||||||
|
arg 'face (cond (active 'transient-argument)
|
||||||
|
((member arg value)
|
||||||
|
'((:weight demibold)
|
||||||
|
transient-inactive-argument))
|
||||||
|
('transient-inactive-argument))))
|
||||||
|
set " ")))))
|
||||||
|
|
||||||
(cl-defmethod transient-format-description ((obj transient-group))
|
(cl-defmethod transient-format-description ((obj transient-group))
|
||||||
"Format the description by calling the next method. If the result
|
"Format the description by calling the next method. If the result
|
||||||
doesn't use the `face' property at all, then apply the face
|
doesn't use the `face' property at all, then apply the face
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue