[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master a73b046c7d5: Merge from origin/emacs-29
From: |
Stefan Kangas |
Subject: |
master a73b046c7d5: Merge from origin/emacs-29 |
Date: |
Tue, 31 Jan 2023 00:46:06 -0500 (EST) |
branch: master
commit a73b046c7d5cb1d0eb2a69f2c96646d71dfbf66e
Merge: e7d0aa248e6 1684e254a3b
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>
Merge from origin/emacs-29
1684e254a3b Update to Transient v0.3.7-196-gb91f509
327941b2112 CC Mode: Fix a coding bug in c-make-keywords-re. This sh...
2f3683cd4dc * lisp/isearch.el (isearch-emoji-by-name): Disable derive...
86b03046c00 Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
e866490a077 Fix keymap inheritance in descendants of 'c-ts-base-mode'
f67a9a12b7b Fix interactive use of `keymap-local-set' and `keymap-glo...
---
doc/misc/transient.texi | 20 +++++++++++++++++++-
lisp/isearch.el | 9 ++++++++-
lisp/progmodes/c-ts-mode.el | 6 +++---
lisp/progmodes/cc-defs.el | 7 +++----
lisp/transient.el | 40 ++++++++++++++++++++++++++--------------
5 files changed, 59 insertions(+), 23 deletions(-)
diff --git a/doc/misc/transient.texi b/doc/misc/transient.texi
index 62ab0ff3fcf..8ac5df9904c 100644
--- a/doc/misc/transient.texi
+++ b/doc/misc/transient.texi
@@ -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:
diff --git a/lisp/isearch.el b/lisp/isearch.el
index bb46c89ae20..22e27764127 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -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)))))
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 8e9852ed4ee..884fe6c3f15 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -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.
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index bdbc03e7c94..aa6f33e9cab 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -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)
diff --git a/lisp/transient.el b/lisp/transient.el
index 42268aedab7..0b41bc44adb 100644
--- a/lisp/transient.el
+++ b/lisp/transient.el
@@ -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.