spacemacs/layers/+completion/helm/packages.el
Junxuan 6b2f849efd update helm-xref to set the correct xref-show-xrefs-function
helm-xref currently provides two functions and the user is expected
to use the correct one based on their emacs version. The lazy loading
logic has to be updated to set the correct xref-show-xrefs-function.
2019-08-05 20:34:04 +02:00

436 lines
18 KiB
EmacsLisp

;;; packages.el --- Helm Layer packages File
;;
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
(setq helm-packages
'(
ace-jump-helm-line
auto-highlight-symbol
bookmark
helm
helm-ag
helm-descbinds
helm-flx
helm-make
helm-mode-manager
helm-projectile
helm-swoop
helm-themes
(helm-spacemacs-help :location local)
(helm-spacemacs-faq :location local)
helm-xref
imenu
persp-mode
popwin
projectile
))
;; Initialization of packages
(defun helm/init-ace-jump-helm-line ()
(use-package ace-jump-helm-line
:defer (spacemacs/defer)
:init
(with-eval-after-load 'helm
(define-key helm-map (kbd "C-q") 'ace-jump-helm-line))))
(defun helm/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_] swoop [_b_] buffers [_f_] files [_/_] project"))
(spacemacs/transient-state-register-add-bindings 'symbol-highlight
'(("s" spacemacs/helm-swoop-region-or-symbol :exit t)
("b" spacemacs/helm-buffers-smart-do-search-region-or-symbol :exit t)
("f" spacemacs/helm-files-smart-do-search-region-or-symbol :exit t)
("/" spacemacs/helm-project-smart-do-search-region-or-symbol :exit t)))))
(defun helm/post-init-bookmark ()
(spacemacs/set-leader-keys "fb" 'helm-filtered-bookmarks))
(defun helm/init-helm ()
(use-package helm
:defer (spacemacs/defer)
:init
(progn
(spacemacs|add-transient-hook completing-read
(lambda (&rest _args) (require 'helm))
lazy-load-helm-for-completing-read)
(spacemacs|add-transient-hook completion-at-point
(lambda (&rest _args) (require 'helm))
lazy-load-helm-for-completion-at-point)
(spacemacs|add-transient-hook read-file-name
(lambda (&rest _args) (require 'helm))
lazy-load-helm-for-read-file-name)
(add-hook 'helm-cleanup-hook #'spacemacs//helm-cleanup)
;; key bindings
;; Use helm to provide :ls, unless ibuffer is used
(unless (configuration-layer/package-used-p 'ibuffer)
(evil-ex-define-cmd "buffers" 'helm-buffers-list))
;; use helm by default for M-x, C-x C-f, and C-x b
(unless (configuration-layer/layer-usedp 'smex)
(global-set-key (kbd "M-x") 'helm-M-x))
(global-set-key (kbd "C-x C-f") 'spacemacs/helm-find-files)
(global-set-key (kbd "C-x b") 'helm-buffers-list)
;; use helm everywhere
(spacemacs||set-helm-key "<f1>" helm-apropos)
(spacemacs||set-helm-key "a'" helm-available-repls)
(spacemacs||set-helm-key "bb" helm-mini)
(spacemacs||set-helm-key "Cl" helm-colors)
(spacemacs||set-helm-key "ff" spacemacs/helm-find-files)
(spacemacs||set-helm-key "fF" helm-find-files)
(spacemacs||set-helm-key "fL" helm-locate)
(spacemacs||set-helm-key "fr" helm-recentf)
(spacemacs||set-helm-key "hda" helm-apropos)
(spacemacs||set-helm-key "hdF" spacemacs/helm-faces)
(spacemacs||set-helm-key "hi" helm-info-at-point)
(spacemacs||set-helm-key "hm" helm-man-woman)
(spacemacs||set-helm-key "iu" helm-ucs)
(spacemacs||set-helm-key "jI" helm-imenu-in-all-buffers)
(spacemacs||set-helm-key "rm" helm-all-mark-rings)
(spacemacs||set-helm-key "rl" helm-resume)
(spacemacs||set-helm-key "rr" helm-register)
(spacemacs||set-helm-key "rs" spacemacs/resume-last-search-buffer)
(spacemacs||set-helm-key "ry" helm-show-kill-ring)
(spacemacs||set-helm-key "sl" spacemacs/resume-last-search-buffer)
(spacemacs||set-helm-key "sj" spacemacs/helm-jump-in-buffer)
;; search with grep
(spacemacs||set-helm-key "sgb" spacemacs/helm-buffers-do-grep)
(spacemacs||set-helm-key "sgB" spacemacs/helm-buffers-do-grep-region-or-symbol)
(spacemacs||set-helm-key "sgf" spacemacs/helm-files-do-grep)
(spacemacs||set-helm-key "sgF" spacemacs/helm-files-do-grep-region-or-symbol)
(spacemacs||set-helm-key "sgg" spacemacs/helm-file-do-grep)
(spacemacs||set-helm-key "sgG" spacemacs/helm-file-do-grep-region-or-symbol)
;; various key bindings
(spacemacs||set-helm-key "fel" helm-locate-library)
(spacemacs||set-helm-key "hdm" describe-mode)
(spacemacs||set-helm-key "swg" helm-google-suggest)
(with-eval-after-load 'helm-files
(define-key helm-find-files-map
(kbd "C-c C-e") 'spacemacs/helm-find-files-edit))
;; Add minibuffer history with `helm-minibuffer-history'
(define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history)
;; Delay this key bindings to override the defaults
(add-hook 'emacs-startup-hook
(lambda ()
(spacemacs||set-helm-key "hdb" describe-bindings)
(spacemacs||set-helm-key "hdc" describe-char)
(spacemacs||set-helm-key "hdf" describe-function)
(spacemacs||set-helm-key "hdk" describe-key)
(spacemacs||set-helm-key "hdl" spacemacs/describe-last-keys)
(spacemacs||set-helm-key "hdp" describe-package)
(spacemacs||set-helm-key "hdP" configuration-layer/describe-package)
(spacemacs||set-helm-key "hds" spacemacs/describe-system-info)
(spacemacs||set-helm-key "hdt" describe-theme)
(spacemacs||set-helm-key "hdv" describe-variable)
(spacemacs||set-helm-key "hI" spacemacs/report-issue)
(spacemacs||set-helm-key "hn" view-emacs-news)
(spacemacs||set-helm-key "hPs" profiler-start)
(spacemacs||set-helm-key "hPk" profiler-stop)
(spacemacs||set-helm-key "hPr" profiler-report)
(spacemacs||set-helm-key "hPw" profiler-report-write-profile)
;; define the key binding at the very end in order to allow the user
;; to overwrite any key binding
(unless (configuration-layer/layer-usedp 'smex)
(spacemacs/set-leader-keys
dotspacemacs-emacs-command-key 'helm-M-x)))))
:config
(progn
(helm-mode)
(spacemacs|hide-lighter helm-mode)
(advice-add 'helm-grep-save-results-1 :after 'spacemacs//gne-init-helm-grep)
;; helm-locate uses es (from everything on windows which doesnt like fuzzy)
(helm-locate-set-command)
(setq helm-locate-fuzzy-match (string-match "locate" helm-locate-command))
;; alter helm-bookmark key bindings to be simpler
(defun simpler-helm-bookmark-keybindings ()
(define-key helm-bookmark-map (kbd "C-d") 'helm-bookmark-run-delete)
(define-key helm-bookmark-map (kbd "C-e") 'helm-bookmark-run-edit)
(define-key helm-bookmark-map
(kbd "C-f") 'helm-bookmark-toggle-filename)
(define-key helm-bookmark-map
(kbd "C-o") 'helm-bookmark-run-jump-other-window)
(define-key helm-bookmark-map (kbd "C-/") 'helm-bookmark-help))
(with-eval-after-load 'helm-bookmark
(simpler-helm-bookmark-keybindings))
(when (configuration-layer/package-used-p 'winum)
(define-key helm-buffer-map
(kbd "RET") 'spacemacs/helm-find-buffers-windows)
(define-key helm-generic-files-map
(kbd "RET") 'spacemacs/helm-find-files-windows)
(define-key helm-find-files-map
(kbd "RET") 'spacemacs/helm-find-files-windows)))))
(defun helm/init-helm-ag ()
(use-package helm-ag
:defer (spacemacs/defer)
:init
(progn
(setq helm-ag-use-grep-ignore-list t)
;; This overrides the default C-s action in helm-projectile-switch-project
;; to search using rg/ag/pt/whatever instead of just grep
(with-eval-after-load 'helm-projectile
(define-key helm-projectile-projects-map
(kbd "C-s") 'spacemacs/helm-projectile-grep))
;; evilify the helm-grep buffer
(evilified-state-evilify helm-grep-mode helm-grep-mode-map
(kbd "RET") 'helm-grep-mode-jump-other-window
(kbd "q") 'quit-window)
(spacemacs/set-leader-keys
;; helm-ag marks
"s`" 'helm-ag-pop-stack
;; opened buffers scope
"sb" 'spacemacs/helm-buffers-smart-do-search
"sB" 'spacemacs/helm-buffers-smart-do-search-region-or-symbol
"sab" 'helm-do-ag-buffers
"saB" 'spacemacs/helm-buffers-do-ag-region-or-symbol
"skb" 'spacemacs/helm-buffers-do-ack
"skB" 'spacemacs/helm-buffers-do-ack-region-or-symbol
"srb" 'spacemacs/helm-buffers-do-rg
"srB" 'spacemacs/helm-buffers-do-rg-region-or-symbol
"stb" 'spacemacs/helm-buffers-do-pt
"stB" 'spacemacs/helm-buffers-do-pt-region-or-symbol
;; current file scope
"ss" 'spacemacs/helm-file-smart-do-search
"sS" 'spacemacs/helm-file-smart-do-search-region-or-symbol
"saa" 'helm-ag-this-file
"saA" 'spacemacs/helm-file-do-ag-region-or-symbol
;; files scope
"sf" 'spacemacs/helm-files-smart-do-search
"sF" 'spacemacs/helm-files-smart-do-search-region-or-symbol
"saf" 'helm-do-ag
"saF" 'spacemacs/helm-files-do-ag-region-or-symbol
"skf" 'spacemacs/helm-files-do-ack
"skF" 'spacemacs/helm-files-do-ack-region-or-symbol
"srf" 'spacemacs/helm-files-do-rg
"srF" 'spacemacs/helm-files-do-rg-region-or-symbol
"stf" 'spacemacs/helm-files-do-pt
"stF" 'spacemacs/helm-files-do-pt-region-or-symbol
;; current dir scope
"sd" 'spacemacs/helm-dir-smart-do-search
"sD" 'spacemacs/helm-dir-smart-do-search-region-or-symbol
"sad" 'spacemacs/helm-dir-do-ag
"saD" 'spacemacs/helm-dir-do-ag-region-or-symbol
"skd" 'spacemacs/helm-dir-do-ack
"skD" 'spacemacs/helm-dir-do-ack-region-or-symbol
"srd" 'spacemacs/helm-dir-do-rg
"srD" 'spacemacs/helm-dir-do-rg-region-or-symbol
"std" 'spacemacs/helm-dir-do-pt
"stD" 'spacemacs/helm-dir-do-pt-region-or-symbol
;; current project scope
"/" 'spacemacs/helm-project-smart-do-search
"*" 'spacemacs/helm-project-smart-do-search-region-or-symbol
"sp" 'spacemacs/helm-project-smart-do-search
"sP" 'spacemacs/helm-project-smart-do-search-region-or-symbol
"sap" 'spacemacs/helm-project-do-ag
"saP" 'spacemacs/helm-project-do-ag-region-or-symbol
"skp" 'spacemacs/helm-project-do-ack
"skP" 'spacemacs/helm-project-do-ack-region-or-symbol
"srp" 'spacemacs/helm-project-do-rg
"srP" 'spacemacs/helm-project-do-rg-region-or-symbol
"stp" 'spacemacs/helm-project-do-pt
"stP" 'spacemacs/helm-project-do-pt-region-or-symbol))
:config
(progn
(advice-add 'helm-ag--save-results :after 'spacemacs//gne-init-helm-ag)
(evil-define-key 'normal helm-ag-map "SPC" spacemacs-default-map)
(evilified-state-evilify helm-ag-mode helm-ag-mode-map
(kbd "RET") 'helm-ag-mode-jump-other-window
(kbd "gr") 'helm-ag--update-save-results
(kbd "q") 'quit-window))))
(defun helm/init-helm-descbinds ()
(use-package helm-descbinds
:defer (spacemacs/defer)
:init
(progn
(setq helm-descbinds-window-style 'split)
(add-hook 'helm-mode-hook 'helm-descbinds-mode)
(spacemacs/set-leader-keys "?" 'helm-descbinds))))
(defun helm/pre-init-helm-flx ()
(spacemacs|use-package-add-hook helm
:pre-config
(progn
;; Disable for helm-find-files until performance issues are sorted
;; https://github.com/PythonNut/helm-flx/issues/9
(setq helm-flx-for-helm-find-files nil)
(helm-flx-mode))))
(defun helm/init-helm-flx ()
(use-package helm-flx
:defer (spacemacs/defer)))
(defun helm/init-helm-make ()
(use-package helm-make
:defer t
:init
(spacemacs/set-leader-keys
"cc" 'helm-make-projectile
"cm" 'helm-make)))
(defun helm/init-helm-mode-manager ()
(use-package helm-mode-manager
:defer t
:init
(spacemacs/set-leader-keys
"hM" 'helm-switch-major-mode
;; "hm" 'helm-disable-minor-mode
"h C-m" 'helm-enable-minor-mode)))
(defun helm/pre-init-helm-projectile ()
;; overwrite projectile settings
(spacemacs|use-package-add-hook projectile
:post-init
(progn
(setq projectile-switch-project-action 'helm-projectile)
(spacemacs/set-leader-keys
"pb" 'helm-projectile-switch-to-buffer
"pd" 'helm-projectile-find-dir
"pf" 'helm-projectile-find-file
"pF" 'helm-projectile-find-file-dwim
"ph" 'helm-projectile
"pp" 'helm-projectile-switch-project
"pr" 'helm-projectile-recentf
"sgp" 'helm-projectile-grep))))
(defun helm/init-helm-projectile ()
(use-package helm-projectile
:commands (helm-projectile-switch-to-buffer
helm-projectile-find-dir
helm-projectile-dired-find-dir
helm-projectile-recentf
helm-projectile-find-file
helm-projectile-grep
helm-projectile
helm-projectile-switch-project)
:init
(progn
;; needed for smart search if user's default tool is grep
(defalias 'spacemacs/helm-project-do-grep 'helm-projectile-grep)
(defalias
'spacemacs/helm-project-do-grep-region-or-symbol
'helm-projectile-grep))
:config (when (configuration-layer/package-used-p 'winum)
(define-key helm-projectile-find-file-map
(kbd "RET") 'spacemacs/helm-find-files-windows))))
(defun helm/init-helm-spacemacs-help ()
(use-package helm-spacemacs-help
:commands (helm-spacemacs-help-dotspacemacs
helm-spacemacs-help
helm-spacemacs-help-faq
helm-spacemacs-help-layers
helm-spacemacs-help-packages
helm-spacemacs-help-docs
helm-spacemacs-help-toggles)
:init (spacemacs/set-leader-keys
"h ." 'helm-spacemacs-help-dotspacemacs
"h SPC" 'helm-spacemacs-help
"h f" 'helm-spacemacs-help-faq
"h l" 'helm-spacemacs-help-layers
"h p" 'helm-spacemacs-help-packages
"h r" 'helm-spacemacs-help-docs
"h t" 'helm-spacemacs-help-toggles)))
(defun helm/init-helm-spacemacs-faq ()
(use-package helm-spacemacs-faq
:commands helm-spacemacs-help-faq
:init (spacemacs/set-leader-keys "h f" 'helm-spacemacs-help-faq)))
(defun helm/init-helm-swoop ()
(use-package helm-swoop
:defer (spacemacs/defer)
:init
(progn
(setq helm-swoop-split-with-multiple-windows t
helm-swoop-split-direction 'split-window-vertically
helm-swoop-speed-or-color t
helm-swoop-split-window-function 'helm-default-display-buffer
helm-swoop-pre-input-function (lambda () ""))
(defun spacemacs/helm-swoop-region-or-symbol ()
"Call `helm-swoop' with default input."
(interactive)
(let ((helm-swoop-pre-input-function
(lambda ()
(if (region-active-p)
(buffer-substring-no-properties (region-beginning)
(region-end))
(let ((thing (thing-at-point 'symbol t)))
(if thing thing ""))))))
(call-interactively 'helm-swoop)))
(defun spacemacs/helm-swoop-clear-cache ()
"Call `helm-swoop--clear-cache' to clear the cache"
(interactive)
(helm-swoop--clear-cache)
(message "helm-swoop cache cleaned."))
(spacemacs/set-leader-keys
"sC" 'spacemacs/helm-swoop-clear-cache
"ss" 'helm-swoop
"sS" 'spacemacs/helm-swoop-region-or-symbol
"s C-s" 'helm-multi-swoop-all)
(defadvice helm-swoop (before add-evil-jump activate)
(evil-set-jump)))))
(defun helm/init-helm-themes ()
(use-package helm-themes
:defer t
:init
(spacemacs/set-leader-keys
"Ts" 'spacemacs/helm-themes)))
(defun helm/init-helm-xref ()
(use-package helm-xref
:commands (helm-xref-show-xrefs-27 helm-xref-show-xrefs)
:init
(progn
;; This is required to make `xref-find-references' not give a prompt.
;; `xref-find-references' asks the identifier (which has no text property)
;; and then passes it to `lsp-mode', which requires the text property at
;; point to locate the references.
;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=29619
(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 helm-xref to display `xref.el' results.
(setq xref-show-xrefs-function (if (< emacs-major-version 27)
#'helm-xref-show-xrefs
#'helm-xref-show-xrefs-27)))))
(defun helm/post-init-imenu ()
(spacemacs/set-leader-keys "ji" 'spacemacs/helm-jump-in-buffer))
(defun helm/post-init-popwin ()
;; disable popwin-mode while Helm session is running
(add-hook 'helm-after-initialize-hook #'spacemacs//helm-prepare-display)
;; Restore popwin-mode after a Helm session finishes.
(add-hook 'helm-cleanup-hook #'spacemacs//helm-restore-display))
(defun helm/pre-init-persp-mode ()
(spacemacs|use-package-add-hook persp-mode
:post-config
(setq
spacemacs--persp-display-buffers-func 'spacemacs/persp-helm-mini
spacemacs--persp-display-perspectives-func 'spacemacs/helm-perspectives)))
(defun helm/post-init-projectile ()
(setq projectile-completion-system 'helm))