From 2c8ed53856868a6d294de75a013c8dc6c6220872 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Mon, 13 Feb 2006 16:18:46 +0000 Subject: [PATCH] (describe-key-briefly, describe-key): Do all arg-reading inside `interactive' spec. (describe-key-briefly-internal, describe-key-internal): Functions merged back into their callers. --- lisp/ChangeLog | 7 ++++ lisp/help.el | 112 +++++++++++++++++++++++++------------------------ 2 files changed, 65 insertions(+), 54 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b65f1d554c..eb7094bb37 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2006-02-13 Richard M. Stallman + + * help.el (describe-key-briefly, describe-key): Do all arg-reading + inside `interactive' spec. + (describe-key-briefly-internal, describe-key-internal): + Functions merged back into their callers. + 2006-02-13 Martin Rudalics (tiny change) * info.el (info-xref-visited): Inherit from info-xref too. diff --git a/lisp/help.el b/lisp/help.el index bea404f511..76aeac0ef6 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -565,31 +565,30 @@ the last key hit are used. If KEY is a menu item or a tool-bar button that is disabled, this command temporarily enables it to allow getting help on disabled items and buttons." - (interactive) - (let ((enable-disabled-menus-and-buttons t) - (save-yank-menu)) - (if key - ;; Non-interactive invocation - (describe-key-briefly-internal key insert untranslated) - ;; If yank-menu is empty, populate it temporarily, so that - ;; "Select and Paste" menu can generate a complete event - (if (null (cdr yank-menu)) - (unwind-protect - (progn - (setq save-yank-menu (copy-sequence yank-menu)) - (menu-bar-update-yank-menu "(any string)" nil) - (call-interactively 'describe-key-briefly-internal)) - (progn (setq yank-menu (copy-sequence save-yank-menu)) - (fset 'yank-menu (cons 'keymap yank-menu)))) - (call-interactively 'describe-key-briefly-internal))))) - -(defun describe-key-briefly-internal (key &optional insert untranslated) - "Print the name of the function KEY invokes. KEY is a string. -If INSERT (the prefix arg) is non-nil, insert the message in the buffer. -If non-nil UNTRANSLATED is a vector of the untranslated events. -It can also be a number in which case the untranslated events from -the last key hit are used." - (interactive "kDescribe key briefly: \nP\np") + (interactive + (let ((enable-disabled-menus-and-buttons t) + (cursor-in-echo-area t) + saved-yank-menu) + (unwind-protect + (let (key) + ;; If yank-menu is empty, populate it temporarily, so that + ;; "Select and Paste" menu can generate a complete event. + (when (null (cdr yank-menu)) + (setq saved-yank-menu (copy-sequence yank-menu)) + (menu-bar-update-yank-menu "(any string)" nil)) + (setq key (read-key-sequence "Describe key (or click or menu item): ")) + (list + key + (prefix-numeric-value current-prefix-arg) + ;; If KEY is a down-event, read the corresponding up-event + ;; and use it as the third argument. + (if (and (consp key) (symbolp (car key)) + (memq 'down (cdr (get (car key) 'event-symbol-elements)))) + (read-event)))) + ;; Put yank-menu back as it was, if we changed it. + (when saved-yank-menu + (setq yank-menu (copy-sequence saved-yank-menu)) + (fset 'yank-menu (cons 'keymap yank-menu)))))) (if (numberp untranslated) (setq untranslated (this-single-command-raw-keys))) (save-excursion @@ -611,6 +610,11 @@ the last key hit are used." (let ((defn (or (string-key-binding key) (key-binding key t))) key-desc) + ;; Handle the case where we faked an entry in "Select and Paste" menu. + (if (and (eq defn nil) + (stringp (aref key (1- (length key)))) + (eq (key-binding (substring key 0 -1)) 'yank-menu)) + (setq defn 'menu-bar-select-yank)) ;; Don't bother user with strings from (e.g.) the select-paste menu. (if (stringp (aref key (1- (length key)))) (aset key (1- (length key)) "(any string)")) @@ -641,35 +645,30 @@ UP-EVENT is the up-event that was discarded by reading KEY, or nil. If KEY is a menu item or a tool-bar button that is disabled, this command temporarily enables it to allow getting help on disabled items and buttons." - (interactive) - (let ((enable-disabled-menus-and-buttons t) - (save-yank-menu)) - (if key - ;; Non-interactive invocation - (describe-key-internal key untranslated up-event) - ;; If yank-menu is empty, populate it temporarily, so that - ;; "Select and Paste" menu can generate a complete event - (if (null (cdr yank-menu)) - (unwind-protect - (progn - (setq save-yank-menu (copy-sequence yank-menu)) - (menu-bar-update-yank-menu "(any string)" nil) - (call-interactively 'describe-key-internal)) - (progn (setq yank-menu (copy-sequence save-yank-menu)) - (fset 'yank-menu (cons 'keymap yank-menu)))) - (call-interactively 'describe-key-internal))))) - -(defun describe-key-internal (key &optional untranslated up-event) - "Display documentation of the function invoked by KEY. -KEY can be any kind of a key sequence; it can include keyboard events, -mouse events, and/or menu events. When calling from a program, -pass KEY as a string or a vector. - -If non-nil, UNTRANSLATED is a vector of the corresponding untranslated events. -It can also be a number, in which case the untranslated events from -the last key sequence entered are used. -UP-EVENT is the up-event that was discarded by reading KEY, or nil." - (interactive "kDescribe key (or click or menu item): \np\nU") + (interactive + (let ((enable-disabled-menus-and-buttons t) + (cursor-in-echo-area t) + saved-yank-menu) + (unwind-protect + (let (key) + ;; If yank-menu is empty, populate it temporarily, so that + ;; "Select and Paste" menu can generate a complete event. + (when (null (cdr yank-menu)) + (setq saved-yank-menu (copy-sequence yank-menu)) + (menu-bar-update-yank-menu "(any string)" nil)) + (setq key (read-key-sequence "Describe key (or click or menu item): ")) + (list + key + (prefix-numeric-value current-prefix-arg) + ;; If KEY is a down-event, read the corresponding up-event + ;; and use it as the third argument. + (if (and (consp key) (symbolp (car key)) + (memq 'down (cdr (get (car key) 'event-symbol-elements)))) + (read-event)))) + ;; Put yank-menu back as it was, if we changed it. + (when saved-yank-menu + (setq yank-menu (copy-sequence saved-yank-menu)) + (fset 'yank-menu (cons 'keymap yank-menu)))))) (if (numberp untranslated) (setq untranslated (this-single-command-raw-keys))) (save-excursion @@ -686,6 +685,11 @@ UP-EVENT is the up-event that was discarded by reading KEY, or nil." (set-buffer (window-buffer window)) (goto-char position)) (let ((defn (or (string-key-binding key) (key-binding key t)))) + ;; Handle the case where we faked an entry in "Select and Paste" menu. + (if (and (eq defn nil) + (stringp (aref key (1- (length key)))) + (eq (key-binding (substring key 0 -1)) 'yank-menu)) + (setq defn 'menu-bar-select-yank)) (if (or (null defn) (integerp defn) (equal defn 'undefined)) (message "%s is undefined" (help-key-description key untranslated)) (help-setup-xref (list #'describe-function defn) (interactive-p)) -- 2.20.1