summaryrefslogtreecommitdiff
path: root/config/completion.el
blob: f723966a1a6251ac6374b49712fed6a82aa1f994 (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
;; Completion Framework - Vertico + Consult + Marginalia + Orderless
;; Modern, minimal completion system based on Emacs' built-in completing-read

;; =====================================
;; Vertico - Vertical completion UI
;; =====================================
(use-package vertico
  :init
  (vertico-mode 1)
  :config
  ;; Cycle through candidates
  (setq vertico-cycle t)
  ;; Number of candidates to display
  (setq vertico-count 15))

;; =====================================
;; Orderless - Flexible completion style
;; =====================================
(use-package orderless
  :config
  ;; Use orderless for completion
  (setq completion-styles '(orderless basic)
		completion-category-defaults nil
		completion-category-overrides '((file (styles partial-completion)))))

;; =====================================
;; Marginalia - Rich annotations
;; =====================================
(use-package marginalia
  :init
  (marginalia-mode 1)
  :config
  ;; Bind in minibuffer to toggle annotations
  (define-key minibuffer-local-map (kbd "M-A") 'marginalia-cycle))

;; =====================================
;; Consult - Enhanced commands
;; =====================================
(use-package consult
  :bind
  (;; C-c bindings (mode-specific-map)
   ("C-c h" . consult-history)
   ("C-c m" . consult-mode-command)
   ("C-c k" . consult-kmacro)

   ;; C-x bindings (ctl-x-map)
   ("C-x M-:" . consult-complex-command)
   ("C-x b" . consult-buffer)				;; Replace switch-to-buffer
   ("C-x 4 b" . consult-buffer-other-window)
   ("C-x 5 b" . consult-buffer-other-frame)
   ("C-x r b" . consult-bookmark)

   ;; M-g bindings (goto-map)
   ("M-g e" . consult-compile-error)
   ("M-g f" . consult-flymake)
   ("M-g g" . consult-goto-line)
   ("M-g M-g" . consult-goto-line)
   ("M-g o" . consult-outline)
   ("M-g m" . consult-mark)
   ("M-g k" . consult-global-mark)
   ("M-g i" . consult-imenu)
   ("M-g I" . consult-imenu-multi)

   ;; M-s bindings (search-map)
   ("M-s d" . consult-find)
   ("M-s D" . consult-locate)
   ("M-s g" . consult-grep)
   ("M-s G" . consult-git-grep)
   ("M-s r" . consult-ripgrep)
   ("M-s l" . consult-line)
   ("M-s L" . consult-line-multi)
   ("M-s k" . consult-keep-lines)
   ("M-s u" . consult-focus-lines)

   ;; Isearch integration
   ("M-s e" . consult-isearch-history)
   :map isearch-mode-map
   ("M-e" . consult-isearch-history)
   ("M-s e" . consult-isearch-history)
   ("M-s l" . consult-line)
   ("M-s L" . consult-line-multi)

   ;; Minibuffer history
   :map minibuffer-local-map
   ("M-s" . consult-history)
   ("M-r" . consult-history))

  :config
  ;; Preview configuration
  (setq consult-preview-key 'any)			;; Preview as you type

  ;; Narrowing configuration
  (setq consult-narrow-key "<"))			;; Use < to narrow

;; =====================================
;; Embark - Actions on candidates
;; =====================================
(use-package embark
  :bind
  (("C-." . embark-act)			;; Pick an action using completion
   ("C-;" . embark-dwim)		;; Good alternative: M-.
   ("C-h B" . embark-bindings))	;; Alternative for `describe-bindings'
  :config
  ;; Hide the mode line of the Embark live/completions buffers
  (add-to-list 'display-buffer-alist
			   '("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
				 nil
				 (window-parameters (mode-line-format . none)))))

;; Embark + Consult integration
(use-package embark-consult
  :after (embark consult)
  :hook
  (embark-collect-mode . consult-preview-at-point-mode))

(provide 'completion)