]> git.eshelyaron.com Git - emacs.git/commitdiff
Support changing completions sorting with via mouse clicks
authorEshel Yaron <me@eshelyaron.com>
Thu, 4 Apr 2024 10:01:00 +0000 (12:01 +0200)
committerEshel Yaron <me@eshelyaron.com>
Thu, 4 Apr 2024 10:01:00 +0000 (12:01 +0200)
lisp/minibuffer.el

index 1e308136d8422f69be4e2a53228ddc588559b468..139610d64d38e43bb1cbbd1f72114cf51fcf49a5 100644 (file)
@@ -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