emacs-diffs
[Top][All Lists]
Advanced

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

master 2d97fe2710: * lisp/minibuffer.el (minibuffer-complete-history): D


From: Juri Linkov
Subject: master 2d97fe2710: * lisp/minibuffer.el (minibuffer-complete-history): Define sorting by metadata
Date: Mon, 18 Jul 2022 03:24:07 -0400 (EDT)

branch: master
commit 2d97fe271039358d24a779e5468a313ffcf6059a
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    * lisp/minibuffer.el (minibuffer-complete-history): Define sorting by 
metadata
    
    (minibuffer-complete-history, minibuffer-complete-defaults):
    Use completion metadata to disable sorting of the completion table
    (bug#56613)
---
 lisp/minibuffer.el | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el
index 5389e0b9ad..d139e094eb 100644
--- a/lisp/minibuffer.el
+++ b/lisp/minibuffer.el
@@ -4408,8 +4408,7 @@ minibuffer, but don't quit the completions window."
 Like `minibuffer-complete' but completes on the history items
 instead of the default completion table."
   (interactive)
-  (let* ((completions-sort nil)
-         (history (symbol-value minibuffer-history-variable))
+  (let* ((history (symbol-value minibuffer-history-variable))
          (completions
           (if (listp history)
               ;; Support e.g. `C-x ESC ESC TAB' as
@@ -4419,21 +4418,31 @@ instead of the default completion table."
                       history)
             (user-error "No history available"))))
     ;; FIXME: Can we make it work for CRM?
-    (completion-in-region (minibuffer--completion-prompt-end) (point-max)
-                          completions nil)))
+    (completion-in-region
+     (minibuffer--completion-prompt-end) (point-max)
+     (lambda (string pred action)
+       (if (eq action 'metadata)
+           '(metadata (display-sort-function . identity)
+                      (cycle-sort-function . identity))
+         (complete-with-action action completions string pred))))))
 
 (defun minibuffer-complete-defaults ()
   "Complete minibuffer defaults as far as possible.
 Like `minibuffer-complete' but completes on the default items
 instead of the completion table."
   (interactive)
-  (let ((completions-sort nil))
-    (when (and (not minibuffer-default-add-done)
-               (functionp minibuffer-default-add-function))
-      (setq minibuffer-default-add-done t
-            minibuffer-default (funcall minibuffer-default-add-function)))
-    (completion-in-region (minibuffer--completion-prompt-end) (point-max)
-                          (ensure-list minibuffer-default) nil)))
+  (when (and (not minibuffer-default-add-done)
+             (functionp minibuffer-default-add-function))
+    (setq minibuffer-default-add-done t
+          minibuffer-default (funcall minibuffer-default-add-function)))
+  (let ((completions (ensure-list minibuffer-default)))
+    (completion-in-region
+     (minibuffer--completion-prompt-end) (point-max)
+     (lambda (string pred action)
+       (if (eq action 'metadata)
+           '(metadata (display-sort-function . identity)
+                      (cycle-sort-function . identity))
+         (complete-with-action action completions string pred))))))
 
 (define-key minibuffer-local-map [?\C-x up] 'minibuffer-complete-history)
 (define-key minibuffer-local-map [?\C-x down] 'minibuffer-complete-defaults)



reply via email to

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