From 4c91bc10d3b268129d06de04787d20fe3e1441a1 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Thu, 4 Apr 2024 12:01:00 +0200 Subject: [PATCH] Support changing completions sorting with via mouse clicks --- lisp/minibuffer.el | 49 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index 1e308136d84..139610d64d3 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2331,21 +2331,46 @@ completions." '(completions-category ("" (:eval (symbol-name completions-category)) " "))) +(defun completions-header-sort (e) + (interactive "e") + (with-current-buffer + (buffer-local-value + 'completion-reference-buffer + (window-buffer (posn-window (event-end e)))) + (minibuffer-sort-completions 1))) + +(defun completions-header-reverse (e) + (interactive "e") + (with-current-buffer + (buffer-local-value + 'completion-reference-buffer + (window-buffer (posn-window (event-end e)))) + (minibuffer-sort-completions -1))) + +(defvar-keymap completions-header-order-map + :doc "Keymap for modifying completions sorting with the mouse." + (key-description [header-line mouse-2]) #'completions-header-sort + (key-description [header-line mouse-3]) #'completions-header-reverse) + (defvar completions-header-order '("" (:eval - (let ((sd (or (nth 4 (seq-find - (lambda (order) - (eq - (nth 3 order) - (advice--cd*r - completions-sort-function))) - completions-sort-orders)) - "default")) - (rv (advice-function-member-p #'reverse completions-sort-function))) - (concat (if rv "↑" "↓") - sd - (if rv "↑" "↓")))) + (propertize + (let ((sd (or (nth 4 (seq-find + (lambda (order) + (eq + (nth 3 order) + (advice--cd*r + completions-sort-function))) + completions-sort-orders)) + "default")) + (rv (advice-function-member-p #'reverse completions-sort-function))) + (concat (if rv "↑" "↓") + sd + (if rv "↑" "↓"))) + 'mouse-face 'mode-line-highlight + 'help-echo "mouse-2: Change sort order\nmouse-3: Reverse order" + 'keymap completions-header-order-map)) " ")) (defvar completions-header-restriction -- 2.39.5