all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
@ 2024-10-30 16:35 Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-10-31  9:46 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-10-31 10:04 ` Eli Zaretskii
  0 siblings, 2 replies; 6+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-30 16:35 UTC (permalink / raw)
  To: 74111

[-- Attachment #1: Type: text/plain, Size: 886 bytes --]

Tags: patch

Hi,

Here is patch that add a new display style for tmm-menubar shortcuts
where the shortcut character is inserted into the menu entry string and
highlighted with the `highlight' face.

This is controled by a new user option, `tmm-shortcut-inside-entry', and
off by default.

In GNU Emacs 31.0.50 (build 82, x86_64-unknown-openbsd7.6, X toolkit) of
 2024-10-30 built on computer
Repository revision: 679c0c7b940687a63937a361d0439c68b7bf4d51
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101013
System Description: OpenBSD computer 7.6 GENERIC.MP#394 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=lucid
 --with-toolkit-scroll-bars=no --without-cairo
 --without-compress-install'


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-New-tmm-menubar-shortcut-display-style.patch --]
[-- Type: text/patch, Size: 4990 bytes --]

From 2cfa06816f7238602bc4e0d6a358827214100f1f Mon Sep 17 00:00:00 2001
From: Manuel Giraud <manuel@ledu-giraud.fr>
Date: Wed, 30 Oct 2024 17:24:24 +0100
Subject: [PATCH] New `tmm-menubar' shortcut display style

* lisp/tmm.el (tmm-shortcut-inside-entry): New user option to
control if the shortcut character is placed inside the menu
entry's string.
(tmm-add-one-shortcut): Compute the new shortcut style.
(tmm-prompt): Adapt the prompt regexp.
(tmm-shortcut): Simplify and make it work with this change.
* etc/NEWS: Announce the option.
---
 etc/NEWS    |  6 ++++++
 lisp/tmm.el | 43 +++++++++++++++++++++++++++++++------------
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index d1c7303f976..c3fc8d46062 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -584,6 +584,12 @@ instead.
 *** A new shortcut to navigate to previous menu.
 The hardcoded '^' shortcut gets you back to the previous menu.
 
+---
+*** New user option 'tmm-shortcut-inside-entry'.
+When non-nil, insert the character shortcut of a menu entry inside its
+string.  This character is highlighted with a different face to help
+identifying it.
+
 ** Foldout
 
 ---
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 252c1e45afa..a9d32d85ebf 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -108,6 +108,13 @@ tmm-shortcut-words
 specify nil for this variable."
   :type '(choice integer (const nil)))
 
+(defcustom tmm-shortcut-inside-entry nil
+  "Place the shortcut character into the menu entry's string.
+When non-nil, the shortcut character will be inserted into its menu
+entry string with a different face to help identifying it.  The
+`tmm-mid-prompt' string is not used then."
+  :type 'boolean)
+
 (defface tmm-inactive
   '((t :inherit shadow))
   "Face used for inactive menu items.")
@@ -198,7 +205,8 @@ tmm-prompt
 		     (setq tail (cdr tail)))))
              (let ((prompt
                     (concat "^"
-                            (if (stringp tmm-mid-prompt)
+                            (if (and (stringp tmm-mid-prompt)
+                                     (not tmm-shortcut-inside-entry))
                                 (concat "."
                                         (regexp-quote tmm-mid-prompt))))))
                (setq tmm--history
@@ -283,7 +291,7 @@ tmm-add-one-shortcut
    (t
     (let* ((str (car elt))
            (paren (string-search "(" str))
-           (pos 0) (word 0) char)
+           (word 0) pos char)
       (catch 'done                             ; ??? is this slow?
         (while (and (or (not tmm-shortcut-words)   ; no limit on words
                         (< word tmm-shortcut-words)) ; try n words
@@ -299,17 +307,32 @@ tmm-add-one-shortcut
                 (if (not (memq char tmm-short-cuts)) (throw 'done char))))
           (setq word (1+ word))
           (setq pos (match-end 0)))
+        ;; A nil value for pos means that the shortcut is not inside the
+        ;; string of the menu entry
+        (setq pos nil)
         (while (<= tmm-next-shortcut-digit ?9) ; no letter shortcut, pick a digit
           (setq char tmm-next-shortcut-digit)
           (setq tmm-next-shortcut-digit (1+ tmm-next-shortcut-digit))
           (if (not (memq char tmm-short-cuts)) (throw 'done char)))
         (setq char nil))
       (if char (setq tmm-short-cuts (cons char tmm-short-cuts)))
-      (cons (concat (if char (concat (char-to-string char) tmm-mid-prompt)
-                      ;; keep them lined up in columns
-                      (make-string (1+ (length tmm-mid-prompt)) ?\s))
-                    str)
-            (cdr elt))))))
+      (cons
+       (if tmm-shortcut-inside-entry
+           (if char
+               (if pos
+                   ;; A character inside the menu entry
+                   (let ((res (copy-sequence str)))
+                     (aset res pos char)
+                     (add-text-properties pos (1+ pos) '(face highlight) res)
+                     res)
+                 ;; A fallback digit character: place it in front of the menu entry
+                 (concat (propertize (char-to-string char) 'face 'highlight) " " str))
+             (make-string 2 ?\s))
+         (concat (if char (concat (char-to-string char) tmm-mid-prompt)
+                   ;; keep them lined up in columns
+                   (make-string (1+ (length tmm-mid-prompt)) ?\s))
+                 str))
+       (cdr elt))))))
 
 ;; This returns the old map.
 (defun tmm-define-keys (minibuffer)
@@ -407,11 +430,7 @@ tmm-shortcut
 	  ;; In minibuffer
 	  (delete-region (minibuffer-prompt-end) (point-max))
 	  (dolist (elt tmm-km-list)
-            (if (string=
-                 (substring (car elt) 0
-                            (min (1+ (length tmm-mid-prompt))
-                                 (length (car elt))))
-                 (concat (char-to-string c) tmm-mid-prompt))
+            (if (= (aref (car elt) 0) c)
                 (setq s (car elt))))
 	  (insert s)
 	  (exit-minibuffer)))))
-- 
2.47.0


[-- Attachment #3: Type: text/plain, Size: 19 bytes --]


-- 
Manuel Giraud

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
  2024-10-30 16:35 bug#74111: [PATCH] New `tmm-menubar' shortcut display style Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-10-31  9:46 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-10-31 10:04 ` Eli Zaretskii
  1 sibling, 0 replies; 6+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-31  9:46 UTC (permalink / raw)
  To: 74111

[-- Attachment #1: Type: text/plain, Size: 103 bytes --]

Sorry, my previous patch misses a lots of cases to correctly match a
shortcut.  This new one fixes it.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-New-tmm-menubar-shortcut-display-style.patch --]
[-- Type: text/x-patch, Size: 5467 bytes --]

From 2cc969daae5505e2bd13fa6ef978325cd312ff89 Mon Sep 17 00:00:00 2001
From: Manuel Giraud <manuel@ledu-giraud.fr>
Date: Wed, 30 Oct 2024 17:24:24 +0100
Subject: [PATCH] New `tmm-menubar' shortcut display style

Bug#74111

* lisp/tmm.el (tmm-shortcut-inside-entry): New user option to
control if the shortcut character is placed inside the menu
entry's string.
(tmm-add-one-shortcut): Compute the new shortcut style.
(tmm-prompt): Adapt the prompt regexp.
(tmm-shortcut): Simplify and make it work with this change.
* etc/NEWS: Announce the option.
---
 etc/NEWS    |  6 ++++++
 lisp/tmm.el | 54 +++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index d1c7303f976..c3fc8d46062 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -584,6 +584,12 @@ instead.
 *** A new shortcut to navigate to previous menu.
 The hardcoded '^' shortcut gets you back to the previous menu.
 
+---
+*** New user option 'tmm-shortcut-inside-entry'.
+When non-nil, insert the character shortcut of a menu entry inside its
+string.  This character is highlighted with a different face to help
+identifying it.
+
 ** Foldout
 
 ---
diff --git a/lisp/tmm.el b/lisp/tmm.el
index 252c1e45afa..fa6afbf4baf 100644
--- a/lisp/tmm.el
+++ b/lisp/tmm.el
@@ -108,6 +108,13 @@ tmm-shortcut-words
 specify nil for this variable."
   :type '(choice integer (const nil)))
 
+(defcustom tmm-shortcut-inside-entry nil
+  "Place the shortcut character into the menu entry's string.
+When non-nil, the shortcut character will be inserted into its menu
+entry string with a different face to help identifying it.  The
+`tmm-mid-prompt' string is not used then."
+  :type 'boolean)
+
 (defface tmm-inactive
   '((t :inherit shadow))
   "Face used for inactive menu items.")
@@ -198,7 +205,8 @@ tmm-prompt
 		     (setq tail (cdr tail)))))
              (let ((prompt
                     (concat "^"
-                            (if (stringp tmm-mid-prompt)
+                            (if (and (stringp tmm-mid-prompt)
+                                     (not tmm-shortcut-inside-entry))
                                 (concat "."
                                         (regexp-quote tmm-mid-prompt))))))
                (setq tmm--history
@@ -283,7 +291,7 @@ tmm-add-one-shortcut
    (t
     (let* ((str (car elt))
            (paren (string-search "(" str))
-           (pos 0) (word 0) char)
+           (word 0) pos char)
       (catch 'done                             ; ??? is this slow?
         (while (and (or (not tmm-shortcut-words)   ; no limit on words
                         (< word tmm-shortcut-words)) ; try n words
@@ -299,17 +307,32 @@ tmm-add-one-shortcut
                 (if (not (memq char tmm-short-cuts)) (throw 'done char))))
           (setq word (1+ word))
           (setq pos (match-end 0)))
+        ;; A nil value for pos means that the shortcut is not inside the
+        ;; string of the menu entry
+        (setq pos nil)
         (while (<= tmm-next-shortcut-digit ?9) ; no letter shortcut, pick a digit
           (setq char tmm-next-shortcut-digit)
           (setq tmm-next-shortcut-digit (1+ tmm-next-shortcut-digit))
           (if (not (memq char tmm-short-cuts)) (throw 'done char)))
         (setq char nil))
       (if char (setq tmm-short-cuts (cons char tmm-short-cuts)))
-      (cons (concat (if char (concat (char-to-string char) tmm-mid-prompt)
-                      ;; keep them lined up in columns
-                      (make-string (1+ (length tmm-mid-prompt)) ?\s))
-                    str)
-            (cdr elt))))))
+      (cons
+       (if tmm-shortcut-inside-entry
+           (if char
+               (if pos
+                   ;; A character inside the menu entry
+                   (let ((res (copy-sequence str)))
+                     (aset res pos char)
+                     (add-text-properties pos (1+ pos) '(face highlight) res)
+                     res)
+                 ;; A fallback digit character: place it in front of the menu entry
+                 (concat (propertize (char-to-string char) 'face 'highlight) " " str))
+             (make-string 2 ?\s))
+         (concat (if char (concat (char-to-string char) tmm-mid-prompt)
+                   ;; keep them lined up in columns
+                   (make-string (1+ (length tmm-mid-prompt)) ?\s))
+                 str))
+       (cdr elt))))))
 
 ;; This returns the old map.
 (defun tmm-define-keys (minibuffer)
@@ -406,13 +429,16 @@ tmm-shortcut
 	      (choose-completion))
 	  ;; In minibuffer
 	  (delete-region (minibuffer-prompt-end) (point-max))
-	  (dolist (elt tmm-km-list)
-            (if (string=
-                 (substring (car elt) 0
-                            (min (1+ (length tmm-mid-prompt))
-                                 (length (car elt))))
-                 (concat (char-to-string c) tmm-mid-prompt))
-                (setq s (car elt))))
+          (dolist (elt tmm-km-list)
+            (let ((str (car elt))
+                  (index 0))
+              (when tmm-shortcut-inside-entry
+                (if (get-char-property 0 'face str)
+                    (setq index 0)
+                  (let ((next (next-single-char-property-change 0 'face str)))
+                    (setq index (if (= (length str) next) 0 next)))))
+              (if (= (aref str index) c)
+                  (setq s str))))
 	  (insert s)
 	  (exit-minibuffer)))))
 
-- 
2.47.0


[-- Attachment #3: Type: text/plain, Size: 18 bytes --]

-- 
Manuel Giraud

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
  2024-10-30 16:35 bug#74111: [PATCH] New `tmm-menubar' shortcut display style Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-10-31  9:46 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-10-31 10:04 ` Eli Zaretskii
  2024-10-31 10:28   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2024-10-31 10:04 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: 74111

> Date: Wed, 30 Oct 2024 17:35:46 +0100
> From:  Manuel Giraud via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
> 
> Here is patch that add a new display style for tmm-menubar shortcuts
> where the shortcut character is inserted into the menu entry string and
> highlighted with the `highlight' face.

When this option is turned on, we should use a different default value
of tmm-completion-prompt, no?  Because otherwise the instructions
there make no sense with this new display style.

Thanks.





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
  2024-10-31 10:04 ` Eli Zaretskii
@ 2024-10-31 10:28   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-10-31 10:50     ` Eli Zaretskii
  0 siblings, 1 reply; 6+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-31 10:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74111

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Wed, 30 Oct 2024 17:35:46 +0100
>> From:  Manuel Giraud via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>> 
>> Here is patch that add a new display style for tmm-menubar shortcuts
>> where the shortcut character is inserted into the menu entry string and
>> highlighted with the `highlight' face.
>
> When this option is turned on, we should use a different default value
> of tmm-completion-prompt, no?  Because otherwise the instructions
> there make no sense with this new display style.

I don't think so.  The Up/Down keys work the same whether this option is
active or not.  And with this option activated, the "marked letters" are
the ones highlighted.
-- 
Manuel Giraud





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
  2024-10-31 10:28   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-10-31 10:50     ` Eli Zaretskii
  2024-10-31 11:48       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2024-10-31 10:50 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: 74111

> From: Manuel Giraud <manuel@ledu-giraud.fr>
> Cc: 74111@debbugs.gnu.org
> Date: Thu, 31 Oct 2024 11:28:52 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > When this option is turned on, we should use a different default value
> > of tmm-completion-prompt, no?  Because otherwise the instructions
> > there make no sense with this new display style.
> 
> I don't think so.  The Up/Down keys work the same whether this option is
> active or not.  And with this option activated, the "marked letters" are
> the ones highlighted.

Are we sure users will understand what "marked letters" mean in that
case?





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#74111: [PATCH] New `tmm-menubar' shortcut display style
  2024-10-31 10:50     ` Eli Zaretskii
@ 2024-10-31 11:48       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 6+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-10-31 11:48 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 74111

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Manuel Giraud <manuel@ledu-giraud.fr>
>> Cc: 74111@debbugs.gnu.org
>> Date: Thu, 31 Oct 2024 11:28:52 +0100
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> > When this option is turned on, we should use a different default value
>> > of tmm-completion-prompt, no?  Because otherwise the instructions
>> > there make no sense with this new display style.
>> 
>> I don't think so.  The Up/Down keys work the same whether this option is
>> active or not.  And with this option activated, the "marked letters" are
>> the ones highlighted.
>
> Are we sure users will understand what "marked letters" mean in that
> case?

Maybe we could change it to "highlighted letters (or digits)".  But
FWIW, "marked letters" was not really more clear before this patch.  So
I think we could try to rewrite tmm-completion-prompt with something
clearer that work for both options.  WDYT?
-- 
Manuel Giraud





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-10-31 11:48 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-30 16:35 bug#74111: [PATCH] New `tmm-menubar' shortcut display style Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-31  9:46 ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-31 10:04 ` Eli Zaretskii
2024-10-31 10:28   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-10-31 10:50     ` Eli Zaretskii
2024-10-31 11:48       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.