emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/compat 2c331ee067 1/2: compat-tests: Fix and test read-


From: ELPA Syncer
Subject: [elpa] externals/compat 2c331ee067 1/2: compat-tests: Fix and test read-multiple-choice
Date: Sat, 7 Jan 2023 13:57:30 -0500 (EST)

branch: externals/compat
commit 2c331ee0675714da7458bf4c04b57f183692b16e
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    compat-tests: Fix and test read-multiple-choice
---
 NEWS.org        |  1 +
 compat-26.el    | 44 +++++++++++++++-----------------------------
 compat-tests.el | 23 +++++++++++++++++++++++
 compat.texi     | 12 +-----------
 4 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/NEWS.org b/NEWS.org
index 9255ee57cb..f1539c3fdd 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -16,6 +16,7 @@
   recent Emacs 29 the byte compiled files are empty and not loaded, such that
   Compat does not any cost to the Emacs process.
 - compat-26: Fix and test ~image-property~ setter.
+- compat-26: Fix and test ~read-multiple-choice~.
 - compat-28: Fix and test ~with-existing-directory~.
 - compat-29: Drop broken functions ~string-pixel-width~ and
   ~buffer-text-pixel-size~. These functions had poor performance which lead to 
a
diff --git a/compat-26.el b/compat-26.el
index e645371ec0..c3893ec6ca 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -481,8 +481,7 @@ If VALUE is nil, PROPERTY is removed from IMAGE."
 
 ;;;; Defined in rmc.el
 
-(compat-defun read-multiple-choice ;; <UNTESTED>
-    (prompt choices &optional _help-string _show-help long-form)
+(compat-defun read-multiple-choice (prompt choices) ;; <OK>
   "Ask user to select an entry from CHOICES, promting with PROMPT.
 This function allows to ask the user a multiple-choice question.
 
@@ -491,36 +490,23 @@ KEY is a character the user should type to select the 
entry.
 NAME is a short name for the entry to be displayed while prompting
 \(if there's no room, it might be shortened).
 
-If LONG-FORM, do a `completing-read' over the NAME elements in
-CHOICES instead.
-
 NOTE: This is a partial implementation of `read-multiple-choice', that
 among other things doesn't offer any help and ignores the
 optional DESCRIPTION field."
-  (if long-form
-      (let ((options (mapconcat #'cadr choices "/"))
-            choice)
-        (setq prompt (concat prompt " (" options "): "))
-        (setq choice (completing-read prompt (mapcar #'cadr choices) nil t))
-        (catch 'found
-          (dolist (option choices)
-            (when (string= choice (cadr option))
-              (throw 'found option)))
-          (error "Invalid choice")))
-    (let ((options
-           (mapconcat
-            (lambda (opt)
-              (format
-               "[%s] %s"
-               (key-description (string (car opt)))
-               (cadr opt)))
-            choices " "))
-          choice)
-      (setq prompt (concat prompt " (" options "): "))
-      (while (not (setq choice (assq (read-char prompt) choices)))
-        (message "Invalid choice")
-        (sit-for 1))
-      choice)))
+  (let ((options
+         (mapconcat
+          (lambda (opt)
+            (format
+             "[%s] %s"
+             (key-description (string (car opt)))
+             (cadr opt)))
+          choices " "))
+        choice)
+    (setq prompt (concat prompt " (" options "): "))
+    (while (not (setq choice (assq (read-event prompt) choices)))
+      (message "Invalid choice")
+      (sit-for 1))
+    choice))
 
 (provide 'compat-26)
 ;;; compat-26.el ends here
diff --git a/compat-tests.el b/compat-tests.el
index c70a0c06a2..9fa7c0fa20 100644
--- a/compat-tests.el
+++ b/compat-tests.el
@@ -79,6 +79,29 @@
     (setf (image-property image :width) nil)
     (should-equal image '(image))))
 
+(ert-deftest read-multiple-choice ()
+  (let ((orig-re (symbol-function #'read-event))
+        (orig-rc (symbol-function #'read-char))
+        ;;(orig-cr completing-read-function)
+        )
+    (unwind-protect
+        (dolist (test '(("Choose"
+                         (?a "first" "first description")
+                         (?b "second" "second description")
+                         (?c "third"))
+                        ("Do it?" (?y "yes") (?n "no"))))
+          (dolist (choice (cdr test))
+            (fset #'read-char (lambda (&rest _) (car choice)))
+            (fset #'read-event (lambda (&rest _) (car choice)))
+            ;; TODO long form support
+            ;;(setq completing-read-function (lambda (&rest _) (cadr choice)))
+            ;;(should-equal choice (read-multiple-choice (car test) (cdr test) 
nil nil 'long))
+            (should-equal choice (read-multiple-choice (car test) (cdr 
test)))))
+      (fset #'read-event orig-re)
+      (fset #'read-char orig-rc)
+      ;;(setq completing-read-function orig-cr)
+      )))
+
 (ert-deftest with-environment-variables ()
   (let ((A "COMPAT_TESTS__VAR") (B "/foo/bar"))
     (should-not (getenv A))
diff --git a/compat.texi b/compat.texi
index 5ee16cf51e..0fa277e900 100644
--- a/compat.texi
+++ b/compat.texi
@@ -590,7 +590,7 @@ Processes,,,elisp}), and as the program to run on the 
remote host.  If
 @xref{Magic File Names,,,elisp}.
 @end defun
 
-@defun read-multiple-choice prompt choices &optional help-string show-help 
long-form
+@defun read-multiple-choice prompt choices
 Ask user a multiple choice question.  @var{prompt} should be a string
 that will be displayed as the prompt.
 
@@ -600,16 +600,6 @@ entry to be displayed while prompting (if there's room, it 
might be
 shortened), and the third, optional entry is a longer explanation that
 will be displayed in a help buffer if the user requests more help.
 
-If optional argument @var{long-form} is non-@code{nil}, the user
-will have to type in long-form answers (using @code{completing-read})
-instead of hitting a single key.  The answers must be among the second
-elements of the values in the @var{choices} list.
-
-@b{Note:} The Compat implementation of this function ignores the
-optional arguments @var{help-string} and @var{show-help}.  Therefore the
-optional third element in each @var{choices} entry will also be
-disregarded.
-
 See @ref{Reading One Event,Reading One Event,,elisp,}.
 @end defun
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]