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

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

[elpa] externals/crdt 6726c7f2d0 30/44: Add special cases for completion


From: ELPA Syncer
Subject: [elpa] externals/crdt 6726c7f2d0 30/44: Add special cases for completions when there are 0 or 1 candidates
Date: Sat, 2 Jul 2022 22:57:34 -0400 (EDT)

branch: externals/crdt
commit 6726c7f2d07092b04964bb13b1cf4bb5c8ce29b9
Author: Qiantan Hong <qhong@alum.mit.edu>
Commit: Qiantan Hong <qhong@alum.mit.edu>

    Add special cases for completions when there are 0 or 1 candidates
---
 crdt.el | 56 ++++++++++++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 24 deletions(-)

diff --git a/crdt.el b/crdt.el
index 31bb761cf1..c3aea42877 100644
--- a/crdt.el
+++ b/crdt.el
@@ -688,26 +688,35 @@ Otherwise, return the list of names for client sessions."
   (cl-find name crdt--session-list
            :test 'equal :key #'crdt--session-urlstr))
 
+(defsubst crdt--completing-read (prompt collection &optional initial-input)
+  "Like (completing-read PROMPT COLLECTION nil t INITIAL-INPUT).
+Do better when there are 0 or 1 candidates."
+  (if collection
+      (if (cdr collection)
+          (completing-read prompt collection nil t initial-input)
+        (car collection))
+    (signal 'quit "No candidates")))
+
 (defun crdt--read-session (&optional filter)
   "Prompt for a session name and return the corresponding session.
 FILTER can be nil, 'server or 'client."
   (crdt--get-session
-   (completing-read (format "Choose a%s session: "
-                            (cl-ecase filter
-                              ((server) " server")
-                              ((client) " client")
-                              ((nil) "")))
-                    (cl-ecase filter
-                      ((server) (crdt--get-session-names t))
-                      ((client) (crdt--get-session-names nil))
-                      ((nil) (mapcar #'crdt--session-urlstr 
crdt--session-list)))
-                    nil t
-                    (when (and crdt--session
-                               (cl-ecase filter
-                                 ((server) (crdt--server-p))
-                                 ((client) (not (crdt--server-p)))
-                                 ((nil) t)))
-                      (crdt--session-urlstr crdt--session)))))
+   (crdt--completing-read
+    (format "Choose a%s session: "
+            (cl-ecase filter
+              ((server) " server")
+              ((client) " client")
+              ((nil) "")))
+    (cl-ecase filter
+      ((server) (crdt--get-session-names t))
+      ((client) (crdt--get-session-names nil))
+      ((nil) (mapcar #'crdt--session-urlstr crdt--session-list)))
+    (when (and crdt--session
+               (cl-ecase filter
+                 ((server) (crdt--server-p))
+                 ((client) (not (crdt--server-p)))
+                 ((nil) t)))
+      (crdt--session-urlstr crdt--session)))))
 
 (defun crdt--read-session-maybe (&optional filter)
   "Prompt for a session name and return the corresponding session.
@@ -782,12 +791,12 @@ If DISPLAY-BUFFER is provided, display the output there."
 
 (defun crdt--read-buffer (session)
   "Prompt for a buffer network name in SESSION."
-  (completing-read "Choose a buffer: "
-                   (hash-table-keys (crdt--session-buffer-table session))
-                   nil t
-                   (when (and (eq crdt--session session)
-                              crdt--buffer-network-name)
-                     crdt--buffer-network-name)))
+  (crdt--completing-read
+   "Choose a buffer: "
+   (hash-table-keys (crdt--session-buffer-table session))
+   (when (and (eq crdt--session session)
+              crdt--buffer-network-name)
+     crdt--buffer-network-name)))
 
 (defun crdt--read-buffer-maybe (session)
   "Prompt for a buffer network name in SESSION.
@@ -876,8 +885,7 @@ Directly return the buffer network name under point if in 
the buffer menu."
        (push (format "%s %s" k (crdt--contact-metadata-name v)) candidates))
      (crdt--session-contact-table session))
     (let ((name
-           (completing-read "Choose a user: "
-                            candidates nil t)))
+           (crdt--completing-read "Choose a user: " candidates)))
       (string-to-number (car (split-string name))))))
 
 (defun crdt--read-user-maybe (session)



reply via email to

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