emacs-diffs
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]