(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
(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)
(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)))
`(?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)))