From: Juri Linkov <juri@linkov.net>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Lars Ingebrigtsen <larsi@gnus.org>,
Katsumi Yamaoka <yamaoka@jpl.org>,
51173@debbugs.gnu.org
Subject: bug#51173: 28.0.60; gnus-article-describe-key doesn't work
Date: Mon, 18 Oct 2021 19:20:00 +0300 [thread overview]
Message-ID: <87ilxumi07.fsf@mail.linkov.net> (raw)
In-Reply-To: <jwv35p0lppe.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Sat, 16 Oct 2021 15:53:03 -0400")
[-- Attachment #1: Type: text/plain, Size: 1346 bytes --]
>> There is still something missing: `gnus-article-describe-key`
>> already selects the required buffer with `with-current-buffer`.
>> Then why should it provide the same buffer as an argument
>> to `describe-key` to select it again in `describe-key`?
>
> Because `describe-key` otherwise uses the buffer of the window
> associated with the event (this is in done in `help--analyse-key` where
> we currently use `mouse-set-point`). So we need to pass an explicit
> buffer to tell `describe-key` to ignore the event's window (and we need
> to change this part of `describe-key/help--analyse-key` to obey such a
> buffer argument).
>
>> (defn (if (not buffer)
>> (save-excursion (mouse-set-point event) (key-binding key t))
>> (key-binding key t)))
>>
>> IOW, the semantics of `buffer` is not clear here.
>
> If nil it means "defaults to the (window-buffer (posn-window (event-end event)))"
>
>>> OTOH we should probably try and change the `key` arg to use the new
>>> key-list format expected by `describe-key` (i.e. a list of (SEQ
>>> . RAW-SEQ) pairs).
>>
>> `gnus-article-describe-key` just passes down the value
>> that `read-key-sequence` returns.
>
> I know. This is the old calling convention of `describe-key`; we
> should move to the new one.
Is seems everything is covered by this patch:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: help--analyze-key.patch --]
[-- Type: text/x-diff, Size: 5139 bytes --]
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index bb466b9400..930c739a73 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -6865,7 +6865,9 @@ gnus-article-describe-key
unread-command-events))
(let ((cursor-in-echo-area t)
gnus-pick-mode)
- (describe-key (read-key-sequence nil t))))
+ (describe-key (cons (read-key-sequence nil t)
+ (this-single-command-raw-keys))
+ (current-buffer))))
(describe-key key)))
(defun gnus-article-describe-key-briefly (key &optional insert)
@@ -6888,7 +6890,9 @@ gnus-article-describe-key-briefly
unread-command-events))
(let ((cursor-in-echo-area t)
gnus-pick-mode)
- (describe-key-briefly (read-key-sequence nil t) insert)))
+ (describe-key-briefly (cons (read-key-sequence nil t)
+ (this-single-command-raw-keys))
+ insert (current-buffer))))
(describe-key-briefly key insert)))
;;`gnus-agent-mode' in gnus-agent.el will define it.
diff --git a/lisp/help.el b/lisp/help.el
index 9666ef9805..a7084d29ce 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -677,9 +677,11 @@ help-key-description
(defun help--binding-undefined-p (defn)
(or (null defn) (integerp defn) (equal defn 'undefined)))
-(defun help--analyze-key (key untranslated)
+(defun help--analyze-key (key untranslated &optional buffer)
"Get information about KEY its corresponding UNTRANSLATED events.
-Returns a list of the form (BRIEF-DESC DEFN EVENT MOUSE-MSG)."
+Returns a list of the form (BRIEF-DESC DEFN EVENT MOUSE-MSG).
+When BUFFER is nil, it defaults to the
+`(window-buffer (posn-window (event-end event)))'."
(if (numberp untranslated)
(error "Missing `untranslated'!"))
(let* ((event (when (> (length key) 0)
@@ -699,9 +701,8 @@ help--analyze-key
;; is selected from the context menu that should describe KEY
;; at the position of mouse click that opened the context menu.
;; When no mouse was involved, don't use `mouse-set-point'.
- (defn (if (consp event)
- (save-excursion (mouse-set-point event) (key-binding key t))
- (key-binding key t))))
+ (defn (if buffer (key-binding key t)
+ (save-excursion (mouse-set-point event) (key-binding key t)))))
;; Handle the case where we faked an entry in "Select and Paste" menu.
(when (and (eq defn nil)
(stringp (aref key (1- (length key))))
@@ -731,7 +732,7 @@ help--filter-info-list
;; If nothing left, then keep one (the last one).
(last info-list)))
-(defun describe-key-briefly (&optional key-list insert untranslated)
+(defun describe-key-briefly (&optional key-list insert buffer)
"Print the name of the functions KEY-LIST invokes.
KEY-LIST is a list of pairs (SEQ . RAW-SEQ) of key sequences, where
RAW-SEQ is the untranslated form of the key sequence SEQ.
@@ -739,8 +740,10 @@ describe-key-briefly
While reading KEY-LIST interactively, this command temporarily enables
menu items or tool-bar buttons that are disabled to allow getting help
-on them."
- (declare (advertised-calling-convention (key-list &optional insert) "27.1"))
+on them.
+
+BUFFER is the buffer in which to lookup those keys; it defaults to the
+current buffer."
(interactive
;; Ignore mouse movement events because it's too easy to miss the
;; message while moving the mouse.
@@ -748,15 +751,13 @@ describe-key-briefly
`(,key-list ,current-prefix-arg)))
(when (arrayp key-list)
;; Old calling convention, changed
- (setq key-list (list (cons key-list
- (if (numberp untranslated)
- (this-single-command-raw-keys)
- untranslated)))))
- (let* ((info-list (mapcar (lambda (kr)
- (help--analyze-key (car kr) (cdr kr)))
- key-list))
- (msg (mapconcat #'car (help--filter-info-list info-list 1) "\n")))
- (if insert (insert msg) (message "%s" msg))))
+ (setq key-list (list (cons key-list nil))))
+ (with-current-buffer (if (buffer-live-p buffer) buffer (current-buffer))
+ (let* ((info-list (mapcar (lambda (kr)
+ (help--analyze-key (car kr) (cdr kr) buffer))
+ key-list))
+ (msg (mapconcat #'car (help--filter-info-list info-list 1) "\n")))
+ (if insert (insert msg) (message "%s" msg)))))
(defun help--key-binding-keymap (key &optional accept-default no-remap position)
"Return a keymap holding a binding for KEY within current keymaps.
@@ -916,7 +917,7 @@ describe-key
(mapcar (lambda (x)
(pcase-let* ((`(,seq . ,raw-seq) x)
(`(,brief-desc ,defn ,event ,_mouse-msg)
- (help--analyze-key seq raw-seq))
+ (help--analyze-key seq raw-seq buffer))
(locus
(help--binding-locus
seq (event-start event))))
next prev parent reply other threads:[~2021-10-18 16:20 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-13 1:05 bug#51173: 28.0.60; gnus-article-describe-key doesn't work Katsumi Yamaoka
2021-10-13 11:59 ` Lars Ingebrigtsen
2021-10-13 16:33 ` Juri Linkov
2021-10-13 17:24 ` Juri Linkov
2021-10-13 18:49 ` Lars Ingebrigtsen
2021-10-13 19:18 ` Juri Linkov
2021-10-13 20:01 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-14 16:16 ` Juri Linkov
2021-10-14 18:41 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-15 6:49 ` Juri Linkov
2021-10-15 18:32 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-16 17:55 ` Juri Linkov
2021-10-16 19:53 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-10-18 16:20 ` Juri Linkov [this message]
2021-10-20 17:55 ` Juri Linkov
2021-10-21 16:43 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-11-29 18:49 ` Juri Linkov
2021-11-29 20:57 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-11-30 3:26 ` Eli Zaretskii
2021-11-30 13:06 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-11-30 8:54 ` Juri Linkov
2021-12-01 17:36 ` Juri Linkov
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=87ilxumi07.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=51173@debbugs.gnu.org \
--cc=larsi@gnus.org \
--cc=monnier@iro.umontreal.ca \
--cc=yamaoka@jpl.org \
/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).