GNU bug report logs - #32738
26.1.50; 'read-answer' allows only single characters as short answers

Previous Next

Package: emacs;

Reported by: Eli Zaretskii <eliz <at> gnu.org>

Date: Sat, 15 Sep 2018 09:05:02 UTC

Severity: wishlist

Tags: fixed

Found in version 26.1.50

Fixed in version 27.0.50

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 32738 in the body.
You can then email your comments to 32738 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#32738; Package emacs. (Sat, 15 Sep 2018 09:05:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Eli Zaretskii <eliz <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 15 Sep 2018 09:05:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 26.1.50; 'read-answer' allows only single characters as short answers
Date: Sat, 15 Sep 2018 12:04:27 +0300
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))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#32738; Package emacs. (Sat, 15 Sep 2018 22:48:01 GMT) Full text and rfc822 format available.

Message #8 received at 32738 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 32738 <at> debbugs.gnu.org
Subject: Re: bug#32738: 26.1.50;
 'read-answer' allows only single characters as short answers
Date: Sun, 16 Sep 2018 01:42:37 +0300
> 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")




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#32738; Package emacs. (Sun, 16 Sep 2018 16:53:02 GMT) Full text and rfc822 format available.

Message #11 received at 32738 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 32738 <at> debbugs.gnu.org
Subject: Re: bug#32738: 26.1.50;
 'read-answer' allows only single characters as short answers
Date: Sun, 16 Sep 2018 19:51:54 +0300
> From: Juri Linkov <juri <at> linkov.net>
> Cc: 32738 <at> 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.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#32738; Package emacs. (Sun, 16 Sep 2018 23:39:02 GMT) Full text and rfc822 format available.

Message #14 received at 32738 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 32738 <at> debbugs.gnu.org
Subject: Re: bug#32738: 26.1.50;
 'read-answer' allows only single characters as short answers
Date: Mon, 17 Sep 2018 02:00:25 +0300
>> -                                   (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.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#32738; Package emacs. (Sun, 08 Dec 2019 23:29:02 GMT) Full text and rfc822 format available.

Message #17 received at 32738 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 32738 <at> debbugs.gnu.org
Subject: Re: bug#32738: 26.1.50; 'read-answer' allows only single characters
 as short answers
Date: Mon, 09 Dec 2019 01:28:13 +0200
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.




Added tag(s) fixed. Request was from Juri Linkov <juri <at> linkov.net> to control <at> debbugs.gnu.org. (Sun, 08 Dec 2019 23:29:02 GMT) Full text and rfc822 format available.

bug marked as fixed in version 27.0.50, send any further explanations to 32738 <at> debbugs.gnu.org and Eli Zaretskii <eliz <at> gnu.org> Request was from Juri Linkov <juri <at> linkov.net> to control <at> debbugs.gnu.org. (Sun, 08 Dec 2019 23:29:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 06 Jan 2020 12:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 117 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.