emacs-diffs
[Top][All Lists]
Advanced

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

scratch/gnus-search 3d333b1 2/3: Provide completion of search keys when


From: Eric Abrahamsen
Subject: scratch/gnus-search 3d333b1 2/3: Provide completion of search keys when reading the query
Date: Fri, 9 Oct 2020 01:59:28 -0400 (EDT)

branch: scratch/gnus-search
commit 3d333b146a2f5af1e1cb5c41c79877c6fe47b89f
Author: Eric Abrahamsen <eric@ericabrahamsen.net>
Commit: Eric Abrahamsen <eric@ericabrahamsen.net>

    Provide completion of search keys when reading the query
    
    * 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 | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/lisp/gnus/gnus-search.el b/lisp/gnus/gnus-search.el
index cf1cb7f..bad2b90 100644
--- a/lisp/gnus/gnus-search.el
+++ b/lisp/gnus/gnus-search.el
@@ -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))))



reply via email to

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