]> git.eshelyaron.com Git - emacs.git/commitdiff
Provide completion of search keys when reading the query
authorEric Abrahamsen <eric@ericabrahamsen.net>
Fri, 9 Oct 2020 05:25:37 +0000 (22:25 -0700)
committerEric Abrahamsen <eric@ericabrahamsen.net>
Fri, 9 Oct 2020 05:36:24 +0000 (22:36 -0700)
* lisp/gnus/gnus-search.el (gnus-search-minibuffer-map): Keymap for
use in reading the query.
(gnus-search-complete-key): Completion function bound to TAB.
(gnus-search-make-specs): Use `read-from-minibuffer', with our new
keymap.

lisp/gnus/gnus-search.el

index cf1cb7f6462ebc713671481bb5335090f1a28bd3..bad2b909c36de6d5dedf2a5b1169703ed5e88f81 100644 (file)
@@ -2233,6 +2233,25 @@ article came from is also searched."
 (defvar gnus-group-marked)
 (defvar gnus-topic-alist)
 
+(defvar gnus-search-minibuffer-map
+  (let ((km (make-sparse-keymap)))
+    (set-keymap-parent km minibuffer-local-map)
+    (define-key km (kbd "SPC") #'self-insert-command)
+    (define-key km (kbd "TAB") #'gnus-search-complete-key)
+    km))
+
+(defun gnus-search-complete-key ()
+  "Complete a search key at point.
+Used when reading a search query from the minibuffer."
+  (interactive)
+  (when (completion-in-region
+        (save-excursion
+          (if (re-search-backward " " (minibuffer-prompt-end) t)
+              (1+ (point))
+            (minibuffer-prompt-end)))
+        (point) gnus-search-expandable-keys)
+    (insert ":")))
+
 (defun gnus-search-make-specs (arg &optional specs)
   (let* ((group-spec
          (or (cdr (assq 'search-group-spec specs))
@@ -2247,7 +2266,9 @@ article came from is also searched."
         (query-spec
          (or (cdr (assq 'search-query-spec specs))
              (list (cons 'query
-                         (read-string "Query: " nil 'gnus-search-history))
+                         (read-from-minibuffer
+                          "Query: " nil gnus-search-minibuffer-map
+                          nil 'gnus-search-history))
                    (cons 'no-parse arg)))))
     (list (cons 'search-query-spec query-spec)
          (cons 'search-group-spec group-spec))))