diff options
author | Juri Linkov <juri@linkov.net> | 2019-12-09 01:27:29 +0200 |
---|---|---|
committer | Juri Linkov <juri@linkov.net> | 2019-12-09 01:27:29 +0200 |
commit | 51176ee81e8e773d8b6ac06dd153846abee0c0f4 (patch) | |
tree | 9c7cbb7b9f8ede0dd7988d7ee8e21b84828be25e /lisp/emacs-lisp | |
parent | 7c2c24a1aa0df7cc683dbe5ab261a0b0f11b2fc0 (diff) | |
download | emacs-51176ee81e8e773d8b6ac06dd153846abee0c0f4.tar.gz emacs-51176ee81e8e773d8b6ac06dd153846abee0c0f4.tar.bz2 emacs-51176ee81e8e773d8b6ac06dd153846abee0c0f4.zip |
* lisp/emacs-lisp/map-ynp.el (read-answer): Allow more SHORT-ANSWER types.
Treat SHORT-ANSWER as a character is characterp returns non-nil.
Otherwise, use key-description to print it.
Use catch-all [t] in keymap instead of [remap self-insert-command].
(bug#32738)
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/map-ynp.el | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el index 5c0e28eac9c..a83e2f1bfd0 100644 --- a/lisp/emacs-lisp/map-ynp.el +++ b/lisp/emacs-lisp/map-ynp.el @@ -287,6 +287,10 @@ where SHORT-ANSWER is an abbreviated one-character answer, HELP-MESSAGE is a string describing the meaning of the answer. +SHORT-ANSWER is not necessarily a single character answer. It can be +also a function key like F1, a character event such as C-M-h, or +a control character like C-h. + Example: \\='((\"yes\" ?y \"perform the action\") (\"no\" ?n \"skip to the next\") @@ -312,14 +316,18 @@ When `use-dialog-box' is t, pop up a dialog window to get user input." (format "%s(%s) " question (mapconcat (lambda (a) (if short - (format "%c" (nth 1 a)) + (if (characterp (nth 1 a)) + (format "%c" (nth 1 a)) + (key-description (nth 1 a))) (nth 0 a))) answers-with-help ", "))) (message (format "Please answer %s." (mapconcat (lambda (a) (format "`%s'" (if short - (string (nth 1 a)) + (if (characterp (nth 1 a)) + (string (nth 1 a)) + (key-description (nth 1 a))) (nth 0 a)))) answers-with-help " or "))) (short-answer-map @@ -329,13 +337,15 @@ When `use-dialog-box' is t, pop up a dialog window to get user input." (let ((map (make-sparse-keymap))) (set-keymap-parent map minibuffer-local-map) (dolist (a answers-with-help) - (define-key map (vector (nth 1 a)) + (define-key map (if (characterp (nth 1 a)) + (vector (nth 1 a)) + (nth 1 a)) (lambda () (interactive) (delete-minibuffer-contents) (insert (nth 0 a)) (exit-minibuffer)))) - (define-key map [remap self-insert-command] + (define-key map [t] (lambda () (interactive) (delete-minibuffer-contents) @@ -374,7 +384,10 @@ When `use-dialog-box' is t, pop up a dialog window to get user input." (mapconcat (lambda (a) (format "`%s'%s to %s" - (if short (string (nth 1 a)) (nth 0 a)) + (if short (if (characterp (nth 1 a)) + (string (nth 1 a)) + (key-description (nth 1 a))) + (nth 0 a)) (if short (format " (%s)" (nth 0 a)) "") (nth 2 a))) answers-with-help ",\n") |