b3c78297fb
For introspection purposes it can be nice to have this functionality. Also this function can be used to discover which ex-commands are available.
417 lines
15 KiB
EmacsLisp
417 lines
15 KiB
EmacsLisp
;;; packages.el --- Ivy Layer packages File
|
|
;;
|
|
;; Copyright (c) 2012-2021 Sylvain Benner & Contributors
|
|
;;
|
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
|
;; URL: https://github.com/syl20bnr/spacemacs
|
|
;;
|
|
;; This file is not part of GNU Emacs.
|
|
;;
|
|
;; This program is free software; you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
;;
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
(setq ivy-packages
|
|
'(
|
|
auto-highlight-symbol
|
|
bookmark
|
|
counsel
|
|
counsel-projectile
|
|
evil
|
|
flx
|
|
helm-make
|
|
imenu
|
|
ivy
|
|
ivy-avy
|
|
ivy-hydra
|
|
(ivy-rich :toggle ivy-enable-advanced-buffer-information)
|
|
(ivy-spacemacs-help :location local)
|
|
ivy-xref
|
|
org
|
|
persp-mode
|
|
projectile
|
|
recentf
|
|
smex
|
|
swiper
|
|
wgrep
|
|
))
|
|
|
|
(defun ivy/pre-init-auto-highlight-symbol ()
|
|
(spacemacs|use-package-add-hook auto-highlight-symbol
|
|
:post-init
|
|
;; add some functions to ahs transient states
|
|
(setq spacemacs--symbol-highlight-transient-state-doc
|
|
(concat
|
|
spacemacs--symbol-highlight-transient-state-doc
|
|
" Search: [_s_] swiper [_b_] buffers [_f_] files [_/_] project"))
|
|
(spacemacs/transient-state-register-add-bindings 'symbol-highlight
|
|
'(("s" swiper-thing-at-point :exit t)
|
|
("b" swiper-all-thing-at-point :exit t)
|
|
("f" spacemacs/search-auto-region-or-symbol :exit t)
|
|
("/" spacemacs/search-project-auto-region-or-symbol :exit t)))))
|
|
|
|
(defun ivy/post-init-bookmark ()
|
|
(spacemacs/set-leader-keys "fb" 'counsel-bookmark))
|
|
|
|
(defun ivy/init-counsel ()
|
|
(use-package counsel
|
|
:init
|
|
(progn
|
|
(spacemacs/set-leader-keys
|
|
dotspacemacs-emacs-command-key 'counsel-M-x
|
|
;; files
|
|
"ff" 'spacemacs/counsel-find-file
|
|
"fel" 'counsel-find-library
|
|
"fL" 'counsel-locate
|
|
;; help
|
|
"?" 'counsel-descbinds
|
|
"gff" 'counsel-git
|
|
"hda" 'counsel-apropos
|
|
"hdf" 'counsel-describe-function
|
|
"hdF" 'counsel-describe-face
|
|
"hdm" 'spacemacs/describe-mode
|
|
"hdv" 'counsel-describe-variable
|
|
"hdx" 'spacemacs/describe-ex-command
|
|
"hi" 'counsel-info-lookup-symbol
|
|
"hm" (if (spacemacs/system-is-mswindows) 'woman 'man)
|
|
"hR" 'spacemacs/counsel-search-docs
|
|
;; insert
|
|
"iu" 'counsel-unicode-char
|
|
;; jump
|
|
;; register/ring
|
|
"ry" 'counsel-yank-pop
|
|
"rm" 'counsel-mark-ring
|
|
;; jumping
|
|
"sj" 'spacemacs/counsel-jump-in-buffer
|
|
;; themes
|
|
"Ts" 'counsel-load-theme
|
|
;; search
|
|
"/" 'spacemacs/search-project-auto
|
|
"*" 'spacemacs/search-project-auto-region-or-symbol
|
|
"sd" 'spacemacs/search-dir-auto
|
|
"sD" 'spacemacs/search-dir-auto-region-or-symbol
|
|
"sf" 'spacemacs/search-auto
|
|
"sF" 'spacemacs/search-auto-region-or-symbol
|
|
"sp" 'spacemacs/search-project-auto
|
|
"sP" 'spacemacs/search-project-auto-region-or-symbol
|
|
"sad" 'spacemacs/search-dir-ag
|
|
"saD" 'spacemacs/search-dir-ag-region-or-symbol
|
|
"saf" 'spacemacs/search-ag
|
|
"saF" 'spacemacs/search-ag-region-or-symbol
|
|
"sap" 'spacemacs/search-project-ag
|
|
"saP" 'spacemacs/search-project-ag-region-or-symbol
|
|
"sgd" 'spacemacs/search-dir-grep
|
|
"sgD" 'spacemacs/search-dir-grep-region-or-symbol
|
|
"sgf" 'spacemacs/search-grep
|
|
"sgF" 'spacemacs/search-grep-region-or-symbol
|
|
"sgp" 'counsel-git-grep
|
|
"sgP" 'spacemacs/counsel-git-grep-region-or-symbol
|
|
"skd" 'spacemacs/search-dir-ack
|
|
"skD" 'spacemacs/search-dir-ack-region-or-symbol
|
|
"skf" 'spacemacs/search-ack
|
|
"skF" 'spacemacs/search-ack-region-or-symbol
|
|
"skp" 'spacemacs/search-project-ack
|
|
"skP" 'spacemacs/search-project-ack-region-or-symbol
|
|
"srd" 'spacemacs/search-dir-rg
|
|
"srD" 'spacemacs/search-dir-rg-region-or-symbol
|
|
"srf" 'spacemacs/search-rg
|
|
"srF" 'spacemacs/search-rg-region-or-symbol
|
|
"srp" 'spacemacs/search-project-rg
|
|
"srP" 'spacemacs/search-project-rg-region-or-symbol
|
|
"std" 'spacemacs/search-dir-pt
|
|
"stD" 'spacemacs/search-dir-pt-region-or-symbol
|
|
"stf" 'spacemacs/search-pt
|
|
"stF" 'spacemacs/search-pt-region-or-symbol
|
|
"stp" 'spacemacs/search-project-pt
|
|
"stP" 'spacemacs/search-project-pt-region-or-symbol))
|
|
:config
|
|
(progn
|
|
;; Temporarily handle older versions of ivy
|
|
;; https://github.com/abo-abo/swiper/pull/1863/files
|
|
(unless (fboundp 'counsel--elisp-to-pcre)
|
|
(defalias 'counsel--elisp-to-pcre 'counsel-unquote-regex-parens))
|
|
|
|
;; set additional ivy actions
|
|
(ivy-set-actions
|
|
'counsel-find-file
|
|
spacemacs--ivy-file-actions)
|
|
|
|
(when (or (eq 'vim dotspacemacs-editing-style)
|
|
(and (eq 'hybrid dotspacemacs-editing-style)
|
|
hybrid-style-enable-hjkl-bindings))
|
|
(define-key counsel-find-file-map (kbd "C-h") 'counsel-up-directory))
|
|
|
|
(define-key read-expression-map (kbd "C-r") 'counsel-minibuffer-history)
|
|
(spacemacs//counsel-search-add-extra-bindings counsel-ag-map)
|
|
;; remaps built-in commands that have a counsel replacement
|
|
(counsel-mode 1)
|
|
(spacemacs|hide-lighter counsel-mode)
|
|
;; TODO Commands to port
|
|
(spacemacs//ivy-command-not-implemented-yet "jI")
|
|
;; Set syntax highlighting for counsel search results
|
|
(ivy-set-display-transformer 'spacemacs/counsel-search
|
|
'counsel-git-grep-transformer)
|
|
;; Enable better auto completion of counsel-find-file
|
|
;; by recognizing file at point.
|
|
(setq counsel-find-file-at-point t))))
|
|
|
|
(defun ivy/pre-init-counsel-projectile ()
|
|
;; overwrite projectile settings
|
|
(spacemacs|use-package-add-hook projectile
|
|
:post-init
|
|
(progn
|
|
(setq projectile-switch-project-action 'counsel-projectile-find-file)
|
|
|
|
(ivy-set-actions
|
|
'counsel-projectile-find-file
|
|
(append spacemacs--ivy-file-actions
|
|
'(("R" (lambda (arg)
|
|
(interactive)
|
|
(call-interactively
|
|
#'projectile-invalidate-cache)
|
|
(ivy-resume)) "refresh list")
|
|
)))
|
|
|
|
(spacemacs/set-leader-keys
|
|
"p SPC" 'counsel-projectile
|
|
"pb" 'counsel-projectile-switch-to-buffer
|
|
"pd" 'counsel-projectile-find-dir
|
|
"pp" 'counsel-projectile-switch-project
|
|
"pf" 'counsel-projectile-find-file))))
|
|
|
|
(defun ivy/post-init-evil ()
|
|
(spacemacs/set-leader-keys
|
|
"re" 'spacemacs/ivy-evil-registers))
|
|
|
|
(defun ivy/init-flx ()
|
|
(use-package flx))
|
|
|
|
(defun ivy/init-helm-make ()
|
|
(use-package helm-make
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(setq helm-make-completion-method 'ivy)
|
|
(spacemacs/set-leader-keys
|
|
"cc" 'helm-make-projectile
|
|
"cm" 'helm-make))))
|
|
|
|
(defun ivy/post-init-imenu ()
|
|
(spacemacs/set-leader-keys "ji" 'spacemacs/counsel-jump-in-buffer))
|
|
|
|
(defun ivy/init-ivy ()
|
|
(use-package ivy
|
|
:init
|
|
(progn
|
|
;; Key bindings
|
|
(spacemacs/set-leader-keys
|
|
"a'" 'spacemacs/ivy-available-repls
|
|
"Ce" 'counsel-colors-emacs
|
|
"Cf" 'counsel-faces
|
|
"Cw" 'counsel-colors-web
|
|
"fr" 'spacemacs/counsel-recentf
|
|
"rl" 'ivy-resume
|
|
"sl" 'ivy-resume
|
|
"bb" 'ivy-switch-buffer)
|
|
;; Common Ctrl-TAB buffer switch behavior
|
|
(with-eval-after-load 'evil
|
|
(evil-global-set-key 'motion (kbd "<C-tab>") 'ivy-switch-buffer)
|
|
(evil-global-set-key 'motion (kbd "<C-iso-lefttab>") 'ivy-switch-buffer))
|
|
(define-key ivy-mode-map (kbd "<C-tab>") 'ivy-next-line-and-call)
|
|
(define-key ivy-mode-map (kbd "<C-iso-lefttab>") 'ivy-previous-line-and-call)
|
|
;; Moved C-k to C-M-k
|
|
(define-key ivy-switch-buffer-map (kbd "C-M-k") 'ivy-switch-buffer-kill)
|
|
(define-key ivy-reverse-i-search-map
|
|
(kbd "C-M-k") 'ivy-reverse-i-search-kill))
|
|
:config
|
|
(progn
|
|
;; custom actions for recentf
|
|
(ivy-set-actions
|
|
'counsel-recentf
|
|
spacemacs--ivy-file-actions)
|
|
|
|
;; add spacemacs/counsel-search command to ivy-highlight-grep-commands
|
|
(add-to-list 'ivy-highlight-grep-commands 'spacemacs/counsel-search)
|
|
|
|
;; mappings to quit minibuffer or enter transient state
|
|
(define-key ivy-minibuffer-map [escape] 'minibuffer-keyboard-quit)
|
|
(define-key ivy-minibuffer-map (kbd "M-SPC") 'hydra-ivy/body)
|
|
(define-key ivy-minibuffer-map (kbd "C-<return>") #'ivy-alt-done)
|
|
(define-key ivy-minibuffer-map (kbd "C-SPC") #'ivy-call-and-recenter)
|
|
|
|
(when ivy-ret-visits-directory
|
|
(define-key ivy-minibuffer-map (kbd "RET") #'ivy-alt-done)
|
|
(define-key ivy-minibuffer-map (kbd "C-j") #'ivy-done))
|
|
|
|
(ivy-mode 1)
|
|
(global-set-key (kbd "C-c C-r") 'ivy-resume)
|
|
(global-set-key (kbd "<f6>") 'ivy-resume)
|
|
;; Occur
|
|
(evil-set-initial-state 'ivy-occur-grep-mode 'normal)
|
|
(evil-make-overriding-map ivy-occur-mode-map 'normal)
|
|
(dolist (mode-map (list ivy-occur-mode-map ivy-occur-grep-mode-map))
|
|
(define-key mode-map "g" nil)
|
|
(define-key mode-map "U" 'ivy-occur-revert-buffer))
|
|
(ivy-set-occur 'spacemacs/counsel-search
|
|
'spacemacs//counsel-occur)
|
|
(spacemacs/set-leader-keys-for-major-mode 'ivy-occur-grep-mode
|
|
"w" 'spacemacs/ivy-wgrep-change-to-wgrep-mode
|
|
"s" 'wgrep-save-all-buffers)
|
|
|
|
;; emacs 27 extend line for ivy highlight
|
|
(setf (alist-get 't ivy-format-functions-alist)
|
|
#'ivy-format-function-line)
|
|
|
|
;; Why do we do this ?
|
|
(ido-mode -1)
|
|
|
|
;; allow to select prompt in some ivy functions
|
|
(setq ivy-use-selectable-prompt t))))
|
|
|
|
(defun ivy/init-ivy-avy ()
|
|
(use-package ivy-avy
|
|
:after ivy))
|
|
|
|
(defun ivy/init-ivy-hydra ()
|
|
(use-package ivy-hydra
|
|
:after ivy
|
|
:config
|
|
(define-key hydra-ivy/keymap [escape] 'hydra-ivy/keyboard-escape-quit-and-exit)))
|
|
|
|
(defun ivy/init-ivy-rich ()
|
|
(use-package ivy-rich
|
|
;; if `counsel' loads after `ivy-rich', it overrides some of `ivy-rich''s
|
|
;; transformers
|
|
:after counsel
|
|
:init
|
|
(progn
|
|
(setq ivy-rich-path-style 'abbrev
|
|
ivy-virtual-abbreviate 'full))
|
|
:config
|
|
(progn
|
|
(ivy-rich-mode)
|
|
(ivy-rich-project-root-cache-mode))))
|
|
|
|
(defun ivy/init-ivy-spacemacs-help ()
|
|
(use-package ivy-spacemacs-help
|
|
:commands (ivy-spacemacs-help-dotspacemacs
|
|
ivy-spacemacs-help
|
|
ivy-spacemacs-help-faq
|
|
ivy-spacemacs-help-layers
|
|
ivy-spacemacs-help-packages
|
|
ivy-spacemacs-help-docs
|
|
ivy-spacemacs-help-toggles)
|
|
:init (spacemacs/set-leader-keys
|
|
"h ." 'ivy-spacemacs-help-dotspacemacs
|
|
"h SPC" 'ivy-spacemacs-help
|
|
"h f" 'ivy-spacemacs-help-faq
|
|
"h l" 'ivy-spacemacs-help-layers
|
|
"h p" 'ivy-spacemacs-help-packages
|
|
"h r" 'ivy-spacemacs-help-docs
|
|
"h t" 'ivy-spacemacs-help-toggles)))
|
|
|
|
(defun ivy/init-ivy-xref ()
|
|
(use-package ivy-xref
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(setq xref-prompt-for-identifier '(not xref-find-definitions
|
|
xref-find-definitions-other-window
|
|
xref-find-definitions-other-frame
|
|
xref-find-references
|
|
spacemacs/jump-to-definition))
|
|
|
|
;; Use ivy-xref to display `xref.el' results.
|
|
(setq xref-show-xrefs-function #'ivy-xref-show-xrefs))))
|
|
|
|
(defun ivy/post-init-org ()
|
|
(add-hook 'org-ctrl-c-ctrl-c-hook 'spacemacs//counsel-org-ctrl-c-ctrl-c-org-tag))
|
|
|
|
(defun ivy/pre-init-persp-mode ()
|
|
(spacemacs|use-package-add-hook persp-mode
|
|
:post-config
|
|
(setq
|
|
spacemacs--persp-display-buffers-func 'spacemacs/ivy-spacemacs-layout-buffer
|
|
spacemacs--persp-display-perspectives-func 'spacemacs/ivy-spacemacs-layouts)))
|
|
|
|
(defun ivy/post-init-persp-mode ()
|
|
;; based on https://gist.github.com/Bad-ptr/1aca1ec54c3bdb2ee80996eb2b68ad2d#file-persp-ivy-el
|
|
(add-hook 'ivy-ignore-buffers #'spacemacs//layout-not-contains-buffer-p)
|
|
(setq ivy-sort-functions-alist
|
|
(append ivy-sort-functions-alist
|
|
'((persp-kill-buffer . nil)
|
|
(persp-remove-buffer . nil)
|
|
(persp-add-buffer . nil)
|
|
(persp-switch . nil)
|
|
(persp-window-switch . nil)
|
|
(persp-frame-switch . nil))))
|
|
|
|
(ivy-set-actions
|
|
'spacemacs/ivy-spacemacs-layouts
|
|
'(("c" persp-kill-without-buffers "Close layout(s)")
|
|
("k" persp-kill "Kill layout(s)")
|
|
("n" persp-copy "Copy Current Layout")
|
|
("p" spacemacs//create-persp-with-current-project-buffers
|
|
"Create Project Layout")))
|
|
;; TODO: better handling of C and X bindings for ivy
|
|
;; check ivy/pre-init-persp-mode
|
|
(spacemacs/transient-state-register-remove-bindings 'layouts
|
|
'("C" "X"))
|
|
(spacemacs/transient-state-register-add-bindings 'layouts
|
|
'(("C" spacemacs/ivy-spacemacs-layout-close-other :exit t)
|
|
("X" spacemacs/ivy-spacemacs-layout-kill-other :exit t))))
|
|
|
|
(defun ivy/post-init-projectile ()
|
|
(setq projectile-completion-system 'ivy)
|
|
(spacemacs/set-leader-keys
|
|
"pv" 'projectile-vc))
|
|
|
|
(defun ivy/post-init-recentf ()
|
|
;; custom actions for recentf
|
|
(ivy-set-actions
|
|
'counsel-recentf
|
|
(append spacemacs--ivy-file-actions
|
|
'(("R" (lambda (arg)
|
|
(interactive)
|
|
(recentf-cleanup)
|
|
(counsel-recentf)) "refresh list")
|
|
("D" (lambda (arg)
|
|
(interactive)
|
|
(setq recentf-list (delete arg recentf-list))
|
|
(counsel-recentf)) "delete from list"))))
|
|
;; merge recentf and bookmarks into buffer switching. If we set this
|
|
(setq ivy-use-virtual-buffers t))
|
|
|
|
(defun ivy/init-smex ()
|
|
(use-package smex
|
|
:defer t
|
|
:init (setq-default smex-history-length 32
|
|
smex-save-file (concat spacemacs-cache-directory
|
|
".smex-items"))))
|
|
|
|
(defun ivy/init-swiper ()
|
|
(use-package swiper
|
|
:config
|
|
(progn
|
|
(spacemacs/set-leader-keys
|
|
"ss" 'swiper
|
|
"sS" 'swiper-thing-at-point
|
|
"sb" 'swiper-all
|
|
"sB" 'swiper-all-thing-at-point)
|
|
(global-set-key "\C-s" 'swiper))))
|
|
|
|
(defun ivy/init-wgrep ()
|
|
(evil-define-key 'normal wgrep-mode-map ",," 'wgrep-finish-edit)
|
|
(evil-define-key 'normal wgrep-mode-map ",c" 'wgrep-finish-edit)
|
|
(evil-define-key 'normal wgrep-mode-map ",a" 'wgrep-abort-changes)
|
|
(evil-define-key 'normal wgrep-mode-map ",k" 'wgrep-abort-changes))
|