1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

Merge from origin/emacs-29

1684e254a3 Update to Transient v0.3.7-196-gb91f509
327941b211 CC Mode: Fix a coding bug in c-make-keywords-re.  This sh...
2f3683cd4d * lisp/isearch.el (isearch-emoji-by-name): Disable derive...
86b03046c0 Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
e866490a07 Fix keymap inheritance in descendants of 'c-ts-base-mode'
f67a9a12b7 Fix interactive use of `keymap-local-set' and `keymap-glo...
This commit is contained in:
Stefan Kangas 2023-01-31 06:30:26 +01:00
commit a73b046c7d
5 changed files with 59 additions and 23 deletions

View file

@ -64,6 +64,15 @@ reading a new value in the minibuffer.
Calling a suffix command usually causes the transient to be exited
but suffix commands can also be configured to not exit the transient.
@quotation
The second part of this manual, which describes how to modify existing
transients and create new transients from scratch, can be hard to
digest if you are just getting started. A useful resource to get over
that hurdle is Psionic K's interactive tutorial, available at
@uref{https://github.com/positron-solutions/transient-showcase}.
@end quotation
@noindent
This manual is for Transient version 0.3.7.50.
@ -893,7 +902,16 @@ same customization.
To an extent, transients can be customized interactively, see
@ref{Enabling and Disabling Suffixes}. This section explains how existing
transients can be further modified non-interactively.
transients can be further modified non-interactively. Let's begin
with an example:
@lisp
(transient-append-suffix 'magit-patch-apply "-3"
'("-R" "Apply in reverse" "--reverse"))
@end lisp
This inserts a new infix argument to toggle the @code{--reverse} argument
after the infix argument that toggles @code{-3} in @code{magit-patch-apply}.
The following functions share a few arguments:

View file

@ -2774,6 +2774,7 @@ With argument, add COUNT copies of the character."
(mapconcat 'isearch-text-char-description
string ""))))))))
(defvar emoji--derived)
(defun isearch-emoji-by-name (&optional count)
"Read an Emoji name and add it to the search string COUNT times.
COUNT (interactively, the prefix argument) defaults to 1.
@ -2782,7 +2783,13 @@ The command accepts Unicode names like \"smiling face\" or
(interactive "p")
(with-isearch-suspended
(let ((emoji (with-temp-buffer
(emoji-search)
;; Derived emoji not supported yet (bug#60740).
;; So first load `emoji--labels', then `emoji--init'
;; will not fill `emoji--derived' that is set
;; to an empty hash table below.
(ignore-errors (require 'emoji-labels))
(let ((emoji--derived (make-hash-table :test #'equal)))
(emoji-search))
(if (and (integerp count) (> count 1))
(apply 'concat (make-list count (buffer-string)))
(buffer-string)))))

View file

@ -697,8 +697,8 @@ the semicolon. This function skips the semicolon."
;;; Modes
(defvar-keymap c-ts-mode-map
:doc "Keymap for the C language with tree-sitter"
(defvar-keymap c-ts-base-mode-map
:doc "Keymap for C and C-like languages with tree-sitter"
:parent prog-mode-map
"C-c C-q" #'c-ts-mode-indent-defun
"C-c ." #'c-ts-mode-set-style)
@ -707,7 +707,7 @@ the semicolon. This function skips the semicolon."
(define-derived-mode c-ts-base-mode prog-mode "C"
"Major mode for editing C, powered by tree-sitter.
\\{c-ts-mode-map}"
\\{c-ts-base-mode-map}"
:syntax-table c-ts-mode--syntax-table
;; Navigation.

View file

@ -1994,7 +1994,7 @@ when it's needed. The default is the current language taken from
;; doesn't occur in any word in LIST. Append it to all
;; the alternatives where we want to add \>. Run through
;; `regexp-opt' and then replace it with \>.
(let ((unique "") pos)
(let ((unique "") (list1 (copy-tree list)) pos)
(while (let (found)
(setq unique (concat unique "@")
pos list)
@ -2005,13 +2005,12 @@ when it's needed. The default is the current language taken from
t))
(setq pos (cdr pos)))
found))
(setq pos (copy-tree list)
)
(setq pos list1)
(while pos
(if (string-match "\\w\\'" (car pos))
(setcar pos (concat (car pos) unique)))
(setq pos (cdr pos)))
(setq re (regexp-opt list))
(setq re (regexp-opt list1))
(setq pos 0)
(while (string-match unique re pos)
(setq pos (+ (match-beginning 0) 2)

View file

@ -798,8 +798,8 @@ They become the value of this argument.")
(defclass transient-columns (transient-group) ()
"Group class that displays elements organized in columns.
Direct elements have to be groups whose elements have to be
commands or string. Each subgroup represents a column. This
class takes care of inserting the subgroups' elements.")
commands or strings. Each subgroup represents a column.
This class takes care of inserting the subgroups' elements.")
(defclass transient-subgroups (transient-group) ()
"Group class that wraps other groups.
@ -860,7 +860,7 @@ to the setup function:
(indent defun)
(doc-string 3))
(pcase-let ((`(,class ,slots ,suffixes ,docstr ,body)
(transient--expand-define-args args)))
(transient--expand-define-args args arglist)))
`(progn
(defalias ',name
,(if body
@ -913,7 +913,7 @@ ARGLIST. The infix arguments are usually accessed by using
(indent defun)
(doc-string 3))
(pcase-let ((`(,class ,slots ,_ ,docstr ,body)
(transient--expand-define-args args)))
(transient--expand-define-args args arglist)))
`(progn
(defalias ',name (lambda ,arglist ,@body))
(put ',name 'interactive-only t)
@ -921,7 +921,7 @@ ARGLIST. The infix arguments are usually accessed by using
(put ',name 'transient--suffix
(,(or class 'transient-suffix) :command ',name ,@slots)))))
(defmacro transient-define-infix (name _arglist &rest args)
(defmacro transient-define-infix (name arglist &rest args)
"Define NAME as a transient infix command.
ARGLIST is always ignored and reserved for future use.
@ -962,7 +962,7 @@ keyword.
(indent defun)
(doc-string 3))
(pcase-let ((`(,class ,slots ,_ ,docstr ,_)
(transient--expand-define-args args)))
(transient--expand-define-args args arglist)))
`(progn
(defalias ',name ,(transient--default-infix-command))
(put ',name 'interactive-only t)
@ -980,7 +980,9 @@ example, sets a variable use `transient-define-infix' instead.
\(fn NAME ARGLIST [DOCSTRING] [KEYWORD VALUE]...)")
(defun transient--expand-define-args (args)
(defun transient--expand-define-args (args &optional arglist)
(unless (listp arglist)
(error "Mandatory ARGLIST is missing"))
(let (class keys suffixes docstr)
(when (stringp (car args))
(setq docstr (pop args)))
@ -1150,7 +1152,7 @@ example, sets a variable use `transient-define-infix' instead.
PREFIX is a prefix command, a symbol.
SUFFIX is a suffix command or a group specification (of
the same forms as expected by `transient-define-prefix').
Intended for use in PREFIX's `:setup-children' function."
Intended for use in a group's `:setup-children' function."
(eval (car (transient--parse-child prefix suffix))))
(defun transient-parse-suffixes (prefix suffixes)
@ -1158,7 +1160,7 @@ Intended for use in PREFIX's `:setup-children' function."
PREFIX is a prefix command, a symbol.
SUFFIXES is a list of suffix command or a group specification
(of the same forms as expected by `transient-define-prefix').
Intended for use in PREFIX's `:setup-children' function."
Intended for use in a group's `:setup-children' function."
(mapcar (apply-partially #'transient-parse-suffix prefix) suffixes))
;;; Edit
@ -1469,14 +1471,24 @@ probably use this instead:
(cl-check-type command command))
(if (or transient--prefix
transient-current-prefix)
(cl-find-if (lambda (obj)
(eq (transient--suffix-command obj)
(let ((suffixes
(cl-remove-if-not
(lambda (obj)
(eq (transient--suffix-command obj)
(or command
;; When `this-command' is `transient-set-level',
;; its reader needs to know what command is being
;; configured.
(or command this-original-command)))
(or transient--suffixes
transient-current-suffixes))
this-original-command)))
(or transient--suffixes
transient-current-suffixes))))
(or (and (cdr suffixes)
(cl-find-if
(lambda (obj)
(equal (listify-key-sequence (transient--kbd (oref obj key)))
(listify-key-sequence (this-command-keys))))
suffixes))
(car suffixes)))
(when-let* ((obj (get (or command this-command) 'transient--suffix))
(obj (clone obj)))
;; Cannot use and-let* because of debbugs#31840.