From 2d97fe271039358d24a779e5468a313ffcf6059a Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Mon, 18 Jul 2022 10:23:41 +0300 Subject: [PATCH] * 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 5389e0b9adb..d139e094eb2 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) -- 2.39.5