branch: externals/bufferlo
commit de018418d7f9d1510b6e56643d1bfea8f17045e5
Author: shipmints <shipmi...@gmail.com>
Commit: shipmints <shipmi...@gmail.com>

    Fix bufferlo--bookmark-completing-read for vanilla Emacs completion
---
 bufferlo.el | 32 ++++++++++++++++++++------------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/bufferlo.el b/bufferlo.el
index c7539c1707..99838abbce 100644
--- a/bufferlo.el
+++ b/bufferlo.el
@@ -2486,24 +2486,32 @@ the message after successfully restoring the bookmark."
   (bookmark-prop-set bookmark-name-or-record 'location (or location ""))
   bookmark-name-or-record)
 
-(defun bufferlo--bookmark-completing-read (prompt candidates)
+(defun bufferlo--bookmark-completion-table (candidates &optional no-sort)
+  "Completing read helper.
+CANDIDATES should be a list from which to select candidates.
+When non-nil, NO-SORT uses the natural order of the CANDIDATES list."
+  (lambda (string pred action)
+    (cond
+     ((eq action 'metadata)
+      `(metadata . ,(cons '(category . bookmark)
+                          (when no-sort
+                            '((display-sort-function . identity))))))
+     (t
+      (complete-with-action action candidates string pred)))))
+
+(defun bufferlo--bookmark-completing-read (prompt candidates &optional no-sort)
   "Common bufferlo bookmark completing read.
 PROMPT is the prompt text ending with a space.
-CANDIDATES are the prompt options to select."
+CANDIDATES are the prompt options to select.
+When non-nil, NO-SORT uses the natural order of the CANDIDATES list."
   (let* ((comps
           (completion-all-completions
            (completing-read prompt
-                            (lambda (str pred flag)
-                              (pcase flag
-                                ('metadata
-                                 '(metadata (category . bookmark)))
-                                (_
-                                 (all-completions str candidates pred)))))
+                            (bufferlo--bookmark-completion-table candidates 
no-sort))
            candidates nil nil))
-         (base-size (cdr (last comps))))
-    (when base-size (setcdr (last comps) nil))
-    (setq comps (seq-uniq (mapcar (lambda (x) (substring-no-properties x))
-                                  comps)))))
+         (_ (when (cdr (last comps)) (setcdr (last comps) nil)))
+         (comps (seq-uniq (mapcar (lambda (x) (substring-no-properties x)) 
comps))))
+    comps))
 
 ;; filter out vs. frameset-persistent-filter-alist
 (defvar bufferlo--frameset-save-filter

Reply via email to