summary refs log tree commit diff stats
path: root/lisp/acdw-consult.el
blob: 84a7fea2e9962b073e79c6dab8519359b1cd336f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
;;; acdw-consult.el -*- lexical-binding: t; coding: utf-8-unix -*-

;; Customization for consult.

(require 'consult)

(defun acdw-consult/sensible-grep (&optional arg)
  "Perform `consult-git-grep' if in a git project, otherwise `consult-ripgrep'
if ripgrep is installed, otherwise `consult-grep'."
  (interactive "P")
  (call-interactively
   (cond ((executable-find "rg")
          (if (fboundp 'affe-grep)
              #'affe-grep
            #'consult-ripgrep))
         ((string-equal (vc-backend buffer-file-name) "Git")
          #'consult-git-grep)
         (t #'consult-grep))))

(defun acdw-consult/sensible-find (&optional arg)
  "Peform `consult-locate' if locate is installed, otehrwise `consult-find'."
  (interactive "P")
  (call-interactively
   (cond ((executable-find "locate")
          #'consult-locate)
         ((fboundp 'affe-find)
          (when (executable-find "fd")
            (setq affe-find-command "fd -HI -t f"))
          #'affe-find)
         (t #'consult-find))))

;; Orderless Regexp Compiler! -- from Consult Wiki
(defun consult--orderless-regexp-compiler (input type)
  (setq input (orderless-pattern-compiler input))
  (cons
   (mapcar (lambda (r) (consult--convert-regexp r type)) input)
   (lambda (str) (orderless--highlight input str))))

(defun acdw-consult/complete-in-region (&rest args)
  (apply (if vertico-mode
             #'consult-completion-in-region
           #'completion--in-region)
         args))

(defmacro consult-history-to-modes (map-hook-alist)
  (let (defuns)
    (dolist (map-hook map-hook-alist)
      (let ((map-name (symbol-name (car map-hook)))
            (key-defs `(progn (define-key
                                ,(car map-hook)
                                (kbd "M-r")
                                (function consult-history))
                              (define-key ,(car map-hook)
                                (kbd "M-s") nil))))
        (push (if (cdr map-hook)
                  `(add-hook ',(cdr map-hook)
                             (defun
                                 ,(intern (concat map-name
                                                  "@consult-history-bind"))
                                 nil
                               ,(concat
                                 "Bind `consult-history' to M-r in "
                                 map-name ".\n"
                                 "Defined by `consult-history-to-modes'.")
                               ,key-defs))
                key-defs)
              defuns)))
    `(progn ,@ (nreverse defuns))))

;;; Circe buffers source

(require 'cl-lib)
(autoload 'circe-server-buffers "circe")
(autoload 'circe-server-chat-buffers "circe")

(defun circe-all-buffers ()
  (cl-loop with servers = (circe-server-buffers)
           for server in servers
           collect server
           nconc
           (with-current-buffer server
             (cl-loop for buf in (circe-server-chat-buffers)
                      collect buf))))

(defvar circe-buffer-source
  `(:name     "circe"
              :hidden   t
              :narrow   ?c
              :category buffer
              :state    ,#'consult--buffer-state
              :items    ,(lambda () (mapcar #'buffer-name (circe-all-buffers)))))

(provide 'acdw-consult)