From 40dcf9c2abd62425e599f30548dc53fa58fe2202 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sun, 26 Dec 2021 06:47:15 +0100 Subject: [PATCH] read-multiple-choice: Display "SPC" instead of " " * lisp/emacs-lisp/rmc.el (rmc--add-key-description): Improve display of the keys TAB, RET, SPC, DEL, and ESC. This fixes a bug where " " was highlighted in the description in a confusing way. * test/lisp/emacs-lisp/rmc-tests.el (test-rmc--add-key-description) (test-rmc--add-key-description/with-attributes): Update tests for the above change. --- lisp/emacs-lisp/rmc.el | 24 +++++++++++++----------- test/lisp/emacs-lisp/rmc-tests.el | 9 +++++++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/lisp/emacs-lisp/rmc.el b/lisp/emacs-lisp/rmc.el index 90fd8b370e8..522d395eba7 100644 --- a/lisp/emacs-lisp/rmc.el +++ b/lisp/emacs-lisp/rmc.el @@ -26,21 +26,23 @@ (require 'seq) (defun rmc--add-key-description (elem) - (let* ((name (cadr elem)) - (pos (seq-position name (car elem))) + (let* ((char (car elem)) + (name (cadr elem)) + (pos (seq-position name char)) + (desc (key-description (char-to-string char))) (graphical-terminal (display-supports-face-attributes-p '(:underline t) (window-frame))) (altered-name (cond - ;; Not in the name string. - ((not pos) - (let ((ch (char-to-string (car elem)))) - (format "[%s] %s" - (if graphical-terminal - (propertize ch 'face 'read-multiple-choice-face) - ch) - name))) + ;; Not in the name string, or a special character. + ((or (not pos) + (member desc '("ESC" "TAB" "RET" "DEL" "SPC"))) + (format "[%s] %s" + (if graphical-terminal + (propertize desc 'face 'read-multiple-choice-face) + desc) + name)) ;; The prompt character is in the name, so highlight ;; it on graphical terminals. (graphical-terminal @@ -57,7 +59,7 @@ (upcase (substring name pos (1+ pos))) "]" (substring name (1+ pos))))))) - (cons (car elem) altered-name))) + (cons char altered-name))) (defun rmc--show-help (prompt help-string show-help choices altered-names) (let* ((buf-name (if (stringp show-help) diff --git a/test/lisp/emacs-lisp/rmc-tests.el b/test/lisp/emacs-lisp/rmc-tests.el index a97254c46dc..5a79c505ae2 100644 --- a/test/lisp/emacs-lisp/rmc-tests.el +++ b/test/lisp/emacs-lisp/rmc-tests.el @@ -34,7 +34,9 @@ (should (equal (rmc--add-key-description '(?y "yes")) '(?y . "yes"))) (should (equal (rmc--add-key-description '(?n "foo")) - '(?n . "[n] foo"))))) + '(?n . "[n] foo"))) + (should (equal (rmc--add-key-description '(?\s "foo bar")) + `(?\s . "[SPC] foo bar"))))) (ert-deftest test-rmc--add-key-description/with-attributes () (cl-letf (((symbol-function 'display-supports-face-attributes-p) (lambda (_ _) t))) @@ -43,7 +45,10 @@ `(?y . ,(concat (propertize "y" 'face 'read-multiple-choice-face) "es")))) (should (equal-including-properties (rmc--add-key-description '(?n "foo")) - `(?n . ,(concat "[" (propertize "n" 'face 'read-multiple-choice-face) "] foo")))))) + `(?n . ,(concat "[" (propertize "n" 'face 'read-multiple-choice-face) "] foo")))) + (should (equal-including-properties + (rmc--add-key-description '(?\s "foo bar")) + `(?\s . ,(concat "[" (propertize "SPC" 'face 'read-multiple-choice-face) "] foo bar")))))) (ert-deftest test-rmc--add-key-description/non-graphical-display () (cl-letf (((symbol-function 'display-supports-face-attributes-p) (lambda (_ _) nil))) -- 2.39.2