* bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers
@ 2018-09-15 9:04 Eli Zaretskii
2018-09-15 22:42 ` Juri Linkov
0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2018-09-15 9:04 UTC (permalink / raw)
To: 32738
This is a feature request.
The new function read-answer allows only single-character short answers,
and formats them with %c in the prompt displayed to the user. This has
several disadvantages:
. Function keys cannot be used as short answers. For example, it
would be good to be able to use F1 for "help", but it is currently
impossible.
. Character events that aren't valid characters, such as C-M-h,
cannot be used, because %c barfs when it sees a character event
with modifiers (it doesn't pass the 'characterp' test).
. Control characters, like C-h, are shown as raw bytes, with their
special face, thus standing out unnecessarily.
It would be nice if these restrictions could be lifted.
In GNU Emacs 26.1.50 (build 205, i686-pc-mingw32)
of 2018-09-15 built on HOME-C4E4A596F7
Repository revision: 20ecc5266e1ffb1cff3e31475631b5c76b99e997
Windowing system distributor 'Microsoft Corp.', version 5.1.2600
Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Configured using:
'configure --prefix=/d/usr --with-wide-int --with-modules
--enable-checking=yes,glyphs --enable-check-lisp-object-type
'CFLAGS=-O0 -gdwarf-4 -g3''
Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY ACL GNUTLS LIBXML2 ZLIB
TOOLKIT_SCROLL_BARS MODULES THREADS LCMS2
Important settings:
value of $LANG: ENU
locale-coding-system: cp1255
Major mode: Lisp Interaction
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv
bytecomp byte-compile cconv cl-loaddefs cl-lib dired dired-loaddefs
format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg
epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils elec-pair time-date
mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win
w32-vars term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow isearch timer select
scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite charscript charprop case-table epa-hook jka-cmpr-hook
help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote threads w32notify w32 lcms2 multi-tty make-network-process
emacs)
Memory information:
((conses 16 102100 11497)
(symbols 56 21325 1)
(miscs 48 42 98)
(strings 16 31711 1931)
(string-bytes 1 773712)
(vectors 16 14876)
(vector-slots 8 505915 15424)
(floats 8 55 115)
(intervals 40 279 103)
(buffers 880 11))
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers
2018-09-15 9:04 bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers Eli Zaretskii
@ 2018-09-15 22:42 ` Juri Linkov
2018-09-16 16:51 ` Eli Zaretskii
0 siblings, 1 reply; 5+ messages in thread
From: Juri Linkov @ 2018-09-15 22:42 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 32738
> This is a feature request.
>
> The new function read-answer allows only single-character short answers,
> and formats them with %c in the prompt displayed to the user. This has
> several disadvantages:
>
> . Function keys cannot be used as short answers. For example, it
> would be good to be able to use F1 for "help", but it is currently
> impossible.
>
> . Character events that aren't valid characters, such as C-M-h,
> cannot be used, because %c barfs when it sees a character event
> with modifiers (it doesn't pass the 'characterp' test).
>
> . Control characters, like C-h, are shown as raw bytes, with their
> special face, thus standing out unnecessarily.
>
> It would be nice if these restrictions could be lifted.
Do you think it should support only characters with modifiers like C-M-h,
or also key sequences? I guess the latter since this will lift all
restrictions on the KEY arg of define-key. Since read-answer should
still support single-character for backward-compatibility, this means
adding key sequences as a new feature, so all of these will work:
(read-answer "Question: "
`(("help0" ?h "show help")
("help1" ,(kbd "<f1>") "show help")
("help2" ,(kbd "C-M-h") "show help")
("help3" ,(kbd "C-h") "show help")))
diff --git a/lisp/emacs-lisp/map-ynp.el b/lisp/emacs-lisp/map-ynp.el
index a61c0adc8f..262284aaf1 100644
--- a/lisp/emacs-lisp/map-ynp.el
+++ b/lisp/emacs-lisp/map-ynp.el
@@ -308,14 +308,18 @@ read-answer
(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
@@ -325,13 +329,15 @@ read-answer
(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)
@@ -370,7 +376,10 @@ read-answer
(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")
^ permalink raw reply related [flat|nested] 5+ messages in thread
* bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers
2018-09-15 22:42 ` Juri Linkov
@ 2018-09-16 16:51 ` Eli Zaretskii
2018-09-16 23:00 ` Juri Linkov
2019-12-08 23:28 ` Juri Linkov
0 siblings, 2 replies; 5+ messages in thread
From: Eli Zaretskii @ 2018-09-16 16:51 UTC (permalink / raw)
To: Juri Linkov; +Cc: 32738
> From: Juri Linkov <juri@linkov.net>
> Cc: 32738@debbugs.gnu.org
> Date: Sun, 16 Sep 2018 01:42:37 +0300
>
> Do you think it should support only characters with modifiers like C-M-h,
> or also key sequences? I guess the latter since this will lift all
> restrictions on the KEY arg of define-key.
Yes, I agree.
> - (format "%c" (nth 1 a))
> + (if (characterp (nth 1 a))
> + (format "%c" (nth 1 a))
> + (key-description (nth 1 a)))
This will still display C-a s ^A. I suggest to use
single-key-description instead.
Thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers
2018-09-16 16:51 ` Eli Zaretskii
@ 2018-09-16 23:00 ` Juri Linkov
2019-12-08 23:28 ` Juri Linkov
1 sibling, 0 replies; 5+ messages in thread
From: Juri Linkov @ 2018-09-16 23:00 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 32738
>> - (format "%c" (nth 1 a))
>> + (if (characterp (nth 1 a))
>> + (format "%c" (nth 1 a))
>> + (key-description (nth 1 a)))
>
> This will still display C-a s ^A. I suggest to use
> single-key-description instead.
I tried single-key-description but it displays ^A,
whereas key-description displays C-a.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers
2018-09-16 16:51 ` Eli Zaretskii
2018-09-16 23:00 ` Juri Linkov
@ 2019-12-08 23:28 ` Juri Linkov
1 sibling, 0 replies; 5+ messages in thread
From: Juri Linkov @ 2019-12-08 23:28 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 32738
tags 32738 fixed
close 32738 27.0.50
quit
>> Do you think it should support only characters with modifiers like C-M-h,
>> or also key sequences? I guess the latter since this will lift all
>> restrictions on the KEY arg of define-key.
>
> Yes, I agree.
So this is pushed to master and closed.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-12-08 23:28 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-15 9:04 bug#32738: 26.1.50; 'read-answer' allows only single characters as short answers Eli Zaretskii
2018-09-15 22:42 ` Juri Linkov
2018-09-16 16:51 ` Eli Zaretskii
2018-09-16 23:00 ` Juri Linkov
2019-12-08 23:28 ` Juri Linkov
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.