2017-06-08 11:47:56 +02:00
|
|
|
;;; completion/ivy/config.el -*- lexical-binding: t; -*-
|
2017-02-13 04:54:12 -05:00
|
|
|
|
2017-08-21 21:54:04 +02:00
|
|
|
(defvar +ivy-buffer-icons nil
|
|
|
|
"If non-nil, show buffer mode icons in `ivy-switch-buffer' and the like.")
|
|
|
|
|
2017-06-08 11:47:56 +02:00
|
|
|
(defvar +ivy-task-tags
|
|
|
|
'(("TODO" . warning)
|
|
|
|
("FIXME" . error))
|
2017-05-10 06:13:14 +02:00
|
|
|
"An alist of tags for `+ivy/tasks' to include in its search, whose CDR is the
|
|
|
|
face to render it with.")
|
|
|
|
|
2017-05-10 08:38:32 +02:00
|
|
|
(defmacro +ivy-do-action! (action)
|
2017-09-15 14:35:18 +02:00
|
|
|
"Returns an interactive lambda that sets the current ivy action and
|
|
|
|
immediately runs it on the current candidate (ending the ivy session)."
|
2017-05-10 05:20:54 +02:00
|
|
|
`(lambda ()
|
2017-02-13 04:54:12 -05:00
|
|
|
(interactive)
|
2017-05-10 05:20:54 +02:00
|
|
|
(ivy-set-action ,action)
|
2017-02-13 04:54:12 -05:00
|
|
|
(setq ivy-exit 'done)
|
|
|
|
(exit-minibuffer)))
|
|
|
|
|
2017-02-13 21:11:54 -05:00
|
|
|
|
|
|
|
;;
|
|
|
|
;; Packages
|
|
|
|
;;
|
|
|
|
|
2017-06-08 11:47:56 +02:00
|
|
|
(def-package! ivy
|
2017-09-04 02:38:29 +02:00
|
|
|
:init
|
|
|
|
(add-hook 'doom-post-init-hook #'ivy-mode)
|
2017-02-22 04:27:23 -05:00
|
|
|
:config
|
2017-05-10 14:05:52 +02:00
|
|
|
(setq ivy-height 12
|
2017-02-13 04:54:12 -05:00
|
|
|
ivy-do-completion-in-region nil
|
|
|
|
ivy-wrap t
|
|
|
|
ivy-fixed-height-minibuffer t
|
2017-02-22 04:27:23 -05:00
|
|
|
projectile-completion-system 'ivy
|
|
|
|
smex-completion-method 'ivy
|
2017-03-08 21:34:52 -05:00
|
|
|
;; Don't use ^ as initial input
|
|
|
|
ivy-initial-inputs-alist nil
|
2017-02-22 04:27:23 -05:00
|
|
|
;; highlight til EOL
|
2017-05-19 05:45:11 -04:00
|
|
|
ivy-format-function #'ivy-format-function-line
|
|
|
|
;; disable magic slash on non-match
|
|
|
|
ivy-magic-slash-non-match-action nil)
|
2017-02-13 04:54:12 -05:00
|
|
|
|
2017-05-29 00:58:12 +02:00
|
|
|
(after! magit (setq magit-completing-read-function #'ivy-completing-read))
|
|
|
|
(after! yasnippet (push #'+ivy-yas-prompt yas-prompt-functions))
|
2017-02-22 04:27:23 -05:00
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(map! :map ivy-mode-map
|
2017-06-09 13:38:54 +02:00
|
|
|
[remap apropos] #'counsel-apropos
|
2017-04-17 02:17:10 -04:00
|
|
|
[remap describe-face] #'counsel-describe-face
|
|
|
|
[remap find-file] #'counsel-find-file
|
2017-08-21 21:54:04 +02:00
|
|
|
[remap switch-to-buffer] #'ivy-switch-buffer
|
2017-04-17 02:17:10 -04:00
|
|
|
[remap persp-switch-to-buffer] #'+ivy/switch-workspace-buffer
|
2017-09-04 02:37:24 +02:00
|
|
|
[remap recentf-open-files] #'counsel-recentf
|
2017-04-17 02:17:10 -04:00
|
|
|
[remap imenu] #'counsel-imenu
|
|
|
|
[remap bookmark-jump] #'counsel-bookmark
|
|
|
|
[remap projectile-switch-project] #'counsel-projectile-switch-project
|
|
|
|
[remap projectile-find-file] #'counsel-projectile-find-file
|
|
|
|
[remap imenu-anywhere] #'ivy-imenu-anywhere
|
2017-05-10 05:28:50 +02:00
|
|
|
[remap execute-extended-command] #'counsel-M-x
|
|
|
|
[remap describe-face] #'counsel-describe-face)
|
2017-02-22 04:27:23 -05:00
|
|
|
|
2017-08-21 21:54:04 +02:00
|
|
|
;; Show more buffer information in switch-buffer commands
|
2017-09-17 22:24:19 +02:00
|
|
|
(ivy-set-display-transformer #'ivy-switch-buffer #'+ivy-buffer-transformer)
|
|
|
|
(ivy-set-display-transformer #'ivy-switch-buffer-other-window #'+ivy-buffer-transformer)
|
|
|
|
(ivy-set-display-transformer #'+ivy/switch-workspace-buffer #'+ivy-buffer-transformer)
|
2017-12-08 22:57:08 -05:00
|
|
|
(ivy-set-display-transformer #'counsel-recentf #'abbreviate-file-name))
|
2017-02-13 04:54:12 -05:00
|
|
|
|
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(def-package! swiper :commands (swiper swiper-all))
|
2017-02-21 16:03:44 -05:00
|
|
|
|
|
|
|
|
2017-02-23 00:06:12 -05:00
|
|
|
(def-package! counsel
|
2017-12-08 22:33:12 -05:00
|
|
|
:requires ivy
|
2017-02-13 21:11:54 -05:00
|
|
|
:config
|
2017-05-10 05:20:54 +02:00
|
|
|
(require 'counsel-projectile)
|
2017-02-13 04:54:12 -05:00
|
|
|
(setq counsel-find-file-ignore-regexp "\\(?:^[#.]\\)\\|\\(?:[#~]$\\)\\|\\(?:^Icon?\\)")
|
|
|
|
|
2017-05-12 11:50:05 +02:00
|
|
|
;; Configure `counsel-rg', `counsel-ag' & `counsel-pt'
|
2017-05-15 14:07:12 +02:00
|
|
|
(set! :popup 'ivy-occur-grep-mode :size (+ 2 ivy-height) :regexp t :autokill t)
|
2017-05-12 11:50:05 +02:00
|
|
|
(dolist (cmd '(counsel-ag counsel-rg counsel-pt))
|
|
|
|
(ivy-add-actions
|
|
|
|
cmd
|
|
|
|
'(("O" +ivy-git-grep-other-window-action "open in other window"))))
|
2017-02-13 04:54:12 -05:00
|
|
|
|
2017-06-08 11:47:56 +02:00
|
|
|
;; 1. Remove character limit from `counsel-ag-function'
|
|
|
|
;; 2. Disable ivy's over-zealous parentheses quoting behavior (if i want
|
|
|
|
;; literal parentheses, I'll escape them myself).
|
|
|
|
;; 3. This may need to be updated frequently, to meet changes upstream
|
|
|
|
;; 4. counsel-ag, counsel-rg and counsel-pt all use this function
|
2017-05-06 16:41:17 +02:00
|
|
|
(advice-add #'counsel-ag-function :override #'+ivy*counsel-ag-function))
|
2017-02-13 04:54:12 -05:00
|
|
|
|
2017-02-19 18:41:37 -05:00
|
|
|
|
|
|
|
;; Used by `counsel-M-x'
|
2017-02-23 00:06:12 -05:00
|
|
|
(def-package! smex
|
2017-02-19 18:41:37 -05:00
|
|
|
:commands (smex smex-major-mode-commands)
|
|
|
|
:config
|
|
|
|
(setq smex-save-file (concat doom-cache-dir "/smex-items"))
|
|
|
|
(smex-initialize))
|
|
|
|
|
2017-09-23 16:26:30 +02:00
|
|
|
|
|
|
|
(def-package! ivy-hydra
|
|
|
|
:commands (+ivy@coo/body ivy-dispatching-done-hydra)
|
|
|
|
:init
|
|
|
|
(map! :map ivy-minibuffer-map
|
|
|
|
"C-o" #'+ivy@coo/body
|
|
|
|
"M-o" #'ivy-dispatching-done-hydra)
|
|
|
|
:config
|
|
|
|
(def-hydra! +ivy@coo (:hint nil :color pink)
|
|
|
|
"
|
|
|
|
Move ^^^^^^^^^^ | Call ^^^^ | Cancel^^ | Options^^ | Action _w_/_s_/_a_: %s(ivy-action-name)
|
|
|
|
----------^^^^^^^^^^-+--------------^^^^-+-------^^-+--------^^-+---------------------------------
|
|
|
|
_g_ ^ ^ _k_ ^ ^ _u_ | _f_orward _o_ccur | _i_nsert | _c_alling: %-7s(if ivy-calling \"on\" \"off\") _C_ase-fold: %-10`ivy-case-fold-search
|
|
|
|
^↨^ _h_ ^+^ _l_ ^↕^ | _RET_ done ^^ | _q_uit | _m_atcher: %-7s(ivy--matcher-desc) _t_runcate: %-11`truncate-lines
|
|
|
|
_G_ ^ ^ _j_ ^ ^ _d_ | _TAB_ alt-done ^^ | ^ ^ | _<_/_>_: shrink/grow
|
|
|
|
"
|
|
|
|
;; arrows
|
|
|
|
("j" ivy-next-line)
|
|
|
|
("k" ivy-previous-line)
|
|
|
|
("l" ivy-alt-done)
|
|
|
|
("h" ivy-backward-delete-char)
|
|
|
|
("g" ivy-beginning-of-buffer)
|
|
|
|
("G" ivy-end-of-buffer)
|
|
|
|
("d" ivy-scroll-up-command)
|
|
|
|
("u" ivy-scroll-down-command)
|
|
|
|
("e" ivy-scroll-down-command)
|
|
|
|
;; actions
|
|
|
|
("q" keyboard-escape-quit :exit t)
|
|
|
|
("C-g" keyboard-escape-quit :exit t)
|
|
|
|
("<escape>" keyboard-escape-quit :exit t)
|
|
|
|
("C-o" nil)
|
|
|
|
("i" nil)
|
|
|
|
("TAB" ivy-alt-done :exit nil)
|
|
|
|
("C-j" ivy-alt-done :exit nil)
|
|
|
|
("RET" ivy-done :exit t)
|
|
|
|
("C-m" ivy-done :exit t)
|
2017-12-08 22:53:45 -05:00
|
|
|
("C-SPC" ivy-call-and-recenter :exit nil)
|
2017-09-23 16:26:30 +02:00
|
|
|
("f" ivy-call)
|
|
|
|
("c" ivy-toggle-calling)
|
|
|
|
("m" ivy-toggle-fuzzy)
|
|
|
|
(">" ivy-minibuffer-grow)
|
|
|
|
("<" ivy-minibuffer-shrink)
|
|
|
|
("w" ivy-prev-action)
|
|
|
|
("s" ivy-next-action)
|
|
|
|
("a" ivy-read-action)
|
|
|
|
("t" (setq truncate-lines (not truncate-lines)))
|
|
|
|
("C" ivy-toggle-case-fold)
|
|
|
|
("o" ivy-occur :exit t)))
|