unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dmitry@gutov.dev>
To: Juri Linkov <juri@linkov.net>
Cc: Spencer Baugh <sbaugh@janestreet.com>,
	63648@debbugs.gnu.org, sbaugh@catern.com
Subject: bug#63648: 29.0.90; project.el: with switch-use-entire-map, switch-project errors on non-project commands
Date: Fri, 20 Oct 2023 22:25:06 +0300	[thread overview]
Message-ID: <8562bdad-e487-886a-af49-7f67d8d14b7a@gutov.dev> (raw)
In-Reply-To: <865y31onju.fsf@mail.linkov.net>

On 20/10/2023 09:44, Juri Linkov wrote:
>> 'C-x d' will result in a warning echo, though, instead of just using
>> 'd'. If you really prefer that, try experimenting with the below addition,
>> but I'm wary of edge cases, since we want to keep supporting sub-maps like
>> in bug#47620. It also might feel a little too "magical" now that there are
>> more details printed (it also doesn't handle extremes like 'C-c C-x C-c'
>> still).
>>
>> @@ -2003,7 +2003,9 @@ project--switch-project-command
>>                                          (help-key-description choice
>>                                          nil)))))
>>           (setq choice (read-key-sequence (concat "Choose: " prompt)))
>>           (when (setq command (lookup-key commands-map choice))
>> -          (when (numberp command) (setq command nil))
>> +          (when (numberp command)
>> +            (setq command
>> +                  (lookup-key commands-map (substring choice command))))
> Wow, it works nicely for 'C-x p p C-x d'.
> But strange it fails for 'C-x p p C-x v d'
> with the same error:
> 
>    (wrong-type-argument commandp 1)

That's because (lookup-key ... "vd") also returns 1.

I haven't been able to find a solution that works like we would expect. 
The most trivial would be to loop cutting off invalid prefixes, but then 
we end up with 'd', not 'v'. That's probably not what you want.

Ideally, 'read-key-sequence' would stop at the user pressing 'v' and 
return "^Xv", then the rest would work out okay. But I haven't managed 
to have it do that, even when using overriding-terminal-local-map and 
temporarily altering the global map. My experimental patch is below, you 
can try tweaking it.

And overall I'm not sure it's a constructive approach because you might 
have been going for 'C-x v d' (where the 'v' translation is correct), 
but you might have been going for 'C-x v D' or 'C-x v v' instead, very 
different commands. It might be better to report unknown key sequence 
and let the user make an explicit choice, like it works now. Depends on 
whether you notice the key sequence echoing while doing that input.

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index fda1081eb62..09d7e1025ca 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -1983,7 +1983,6 @@ project--switch-project-command
             project-switch-commands))
           (commands-map
            (let ((temp-map (make-sparse-keymap)))
-            (set-keymap-parent temp-map project-prefix-map)
              (dolist (row commands-menu temp-map)
                (when-let ((cmd (nth 0 row))
                           (keychar (nth 2 row)))
@@ -1991,7 +1990,15 @@ project--switch-project-command
           command
           choice)
      (while (not command)
-      (let* ((overriding-local-map commands-map)
+      (let* ((map
+              (let ((map (make-sparse-keymap)))
+                (set-keymap-parent map (if project-switch-use-entire-map
+                                           project-prefix-map
+                                         commands-map))
+                (define-key map "\e\e\e" 'keyboard-escape-quit)
+                (define-key map "\C-g" 'keyboard-quit)
+                map))
+             (overriding-terminal-local-map map)
               (prompt (if project-switch-use-entire-map
                           (project--keymap-prompt)
                         (project--menu-prompt))))
@@ -2001,16 +2008,20 @@ project--switch-project-command
                                         (propertize "Unrecognized input"
                                                     'face 'warning)
                                         (help-key-description choice 
nil)))))
-        (setq choice (read-key-sequence (concat "Choose: " prompt)))
-        (when (setq command (lookup-key commands-map choice))
-          (when (numberp command) (setq command nil))
+        (unwind-protect
+            (progn
+              (use-global-map map)
+              (setq choice (read-key-sequence (concat "Choose: " 
prompt) nil t nil t)))
+          (use-global-map global-map))
+        (when (setq command (lookup-key map choice))
+          (while (numberp command)
+            (setq choice (substring choice command))
+            (setq command (lookup-key map choice)))
+          (when (memq command '(keyboard-quit keyboard-escape-quit))
+            (call-interactively command))
            (unless (or project-switch-use-entire-map
                        (assq command commands-menu))
-            (setq command nil)))
-        (let ((global-command (lookup-key (current-global-map) choice)))
-          (when (memq global-command
-                      '(keyboard-quit keyboard-escape-quit))
-            (call-interactively global-command)))))
+            (setq command nil)))))
      (message nil)
      command))







  reply	other threads:[~2023-10-20 19:25 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-22 16:27 bug#63648: 29.0.90; project.el: with switch-use-entire-map, switch-project errors on non-project commands Spencer Baugh
2023-05-22 17:51 ` Juri Linkov
2023-05-24  1:14   ` Dmitry Gutov
2023-05-24  6:20     ` Juri Linkov
2023-05-24 15:46       ` Dmitry Gutov
2023-05-24 16:20         ` Juri Linkov
2023-05-24 17:37           ` Juri Linkov
2023-05-24 17:44             ` Juri Linkov
2023-06-01 16:05               ` Juri Linkov
2023-06-02  1:40                 ` Dmitry Gutov
2023-06-02  6:40                   ` Juri Linkov
2023-06-03  1:30                     ` Dmitry Gutov
2023-08-10 11:56                     ` sbaugh
2023-08-23 13:53                       ` Spencer Baugh
2023-08-23 17:54                         ` Juri Linkov
2023-08-29 20:36                           ` Spencer Baugh
2023-08-29 20:40                           ` Dmitry Gutov
2023-08-29 21:47                             ` Spencer Baugh
2023-08-29 22:32                               ` Dmitry Gutov
2023-08-30 16:27                             ` Juri Linkov
2023-08-31  2:01                               ` Dmitry Gutov
2023-08-31  6:47                                 ` Juri Linkov
2023-08-31 11:13                                   ` Dmitry Gutov
2023-08-31 16:36                                     ` Juri Linkov
2023-09-01  1:11                                       ` Dmitry Gutov
2023-09-01  6:46                                         ` Juri Linkov
2023-09-01  9:53                                           ` Dmitry Gutov
2023-09-01 15:59                                             ` Spencer Baugh
2023-09-02  1:47                                               ` Dmitry Gutov
2023-09-03 17:11                                               ` Juri Linkov
2023-09-11 20:16                                                 ` Spencer Baugh
2023-09-12  6:55                                                   ` Juri Linkov
2023-09-10 15:30                                             ` Juri Linkov
2023-09-12 23:47                                               ` Dmitry Gutov
2023-09-13  6:47                                                 ` Juri Linkov
2023-09-18  0:12                                                   ` Dmitry Gutov
2023-09-18  6:51                                                     ` Juri Linkov
2023-09-18 11:00                                                       ` Dmitry Gutov
2023-09-18 13:56                                                         ` Dmitry Gutov
2023-09-19 17:57                                                           ` Juri Linkov
2023-09-20  0:39                                                             ` Dmitry Gutov
2023-09-20 17:10                                                               ` Juri Linkov
2023-09-21  1:16                                                                 ` Dmitry Gutov
2023-09-21  6:58                                                                   ` Juri Linkov
2023-09-22 15:52                                                                     ` Juri Linkov
2023-10-19  0:42                                                                       ` Dmitry Gutov
2023-10-19  4:46                                                                         ` Eli Zaretskii
2023-10-19  6:43                                                                           ` Juri Linkov
2023-10-19  7:51                                                                             ` Eli Zaretskii
2023-10-19  9:46                                                                           ` Dmitry Gutov
2023-10-19 11:05                                                                             ` Eli Zaretskii
2023-10-19 11:34                                                                               ` Dmitry Gutov
2023-10-19 12:22                                                                         ` sbaugh
2023-10-19 12:49                                                                           ` Dmitry Gutov
2023-10-19 14:00                                                                             ` Spencer Baugh
2023-10-19 17:17                                                                               ` Dmitry Gutov
2023-10-19 19:30                                                                                 ` Spencer Baugh
2023-10-19 23:25                                                                                   ` Dmitry Gutov
2023-10-21 16:09                                                                                     ` Spencer Baugh
2023-10-21 18:43                                                                                       ` Dmitry Gutov
2023-10-19 18:03                                                                               ` Juri Linkov
2023-10-19 19:38                                                                                 ` Spencer Baugh
2023-10-19 17:56                                                                         ` Juri Linkov
2023-10-19 22:39                                                                           ` Dmitry Gutov
2023-10-20  6:44                                                                             ` Juri Linkov
2023-10-20 19:25                                                                               ` Dmitry Gutov [this message]
2023-10-23  6:58                                                                                 ` Juri Linkov
2023-10-23 17:24                                                                                   ` Dmitry Gutov
2023-10-23 17:34                                                                                     ` Juri Linkov
2023-10-23 17:36                                                                                       ` Dmitry Gutov
2023-10-23 18:42                                                                                         ` Juri Linkov
2023-10-23 18:49                                                                                           ` Dmitry Gutov
2023-10-25 16:53                                                                                     ` Juri Linkov
2023-10-25 22:26                                                                                       ` Dmitry Gutov
2023-10-27  6:50                                                                                         ` Juri Linkov
2023-10-27  9:38                                                                                           ` Dmitry Gutov
2023-10-28 16:56                                                                                             ` Juri Linkov
2023-11-01 21:12                                                                                               ` Dmitry Gutov
2023-11-02 17:20                                                                                                 ` Juri Linkov
2023-11-02 21:33                                                                                                   ` Dmitry Gutov
2023-11-04 17:28                                                                                                     ` Juri Linkov
2023-11-05  0:55                                                                                                       ` Dmitry Gutov
2023-11-06  7:16                                                                                                         ` Juri Linkov
2023-11-06 22:49                                                                                                           ` Dmitry Gutov
2023-10-21 13:27                                                                         ` sbaugh
2023-10-21 18:41                                                                           ` Dmitry Gutov
2023-10-21 13:14                                                                       ` sbaugh
2023-08-28 22:44                         ` Dmitry Gutov
2023-08-29 20:34                           ` Spencer Baugh
2023-06-02 12:46                   ` Eli Zaretskii
2023-06-02 16:09                     ` Juri Linkov
2023-06-02  6:32                 ` Eli Zaretskii
2023-06-02  6:55                   ` Juri Linkov
2023-06-02 11:39                     ` Eli Zaretskii
2023-06-02 16:11                       ` Juri Linkov
2023-06-05  6:53                       ` Juri Linkov
2023-06-02 17:07                 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-05  6:50                   ` Juri Linkov
2023-06-05 14:44                     ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-06-05 16:31                       ` Juri Linkov
2023-05-24 14:55   ` Spencer Baugh
2023-05-24 16:24     ` Juri Linkov
2023-05-26 15:16       ` Spencer Baugh
2023-05-30 17:48         ` Juri Linkov
2023-06-01 20:31           ` Spencer Baugh
2023-06-01 21:09             ` Drew Adams
2023-06-02  6:33               ` Eli Zaretskii
2023-06-02  6:46             ` Juri Linkov
2023-08-10 11:52               ` sbaugh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8562bdad-e487-886a-af49-7f67d8d14b7a@gutov.dev \
    --to=dmitry@gutov.dev \
    --cc=63648@debbugs.gnu.org \
    --cc=juri@linkov.net \
    --cc=sbaugh@catern.com \
    --cc=sbaugh@janestreet.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).