This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+completion/auto-completion/packages.el

345 lines
15 KiB
EmacsLisp
Raw Normal View History

;;; packages.el --- Auto-completion Layer packages File for Spacemacs
;;
2020-09-16 21:34:40 +00:00
;; Copyright (c) 2012-2020 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 auto-completion-packages
2015-05-06 07:28:50 +00:00
'(
auto-yasnippet
2015-05-06 07:28:50 +00:00
auto-complete
ac-ispell
2015-05-06 07:28:50 +00:00
company
(company-box :toggle auto-completion-use-company-box)
(all-the-icons :toggle auto-completion-use-company-box)
2016-08-29 12:58:17 +00:00
(company-quickhelp :toggle auto-completion-enable-help-tooltip)
(company-statistics :toggle auto-completion-enable-sort-by-usage)
counsel
fuzzy
2017-07-03 07:52:54 +00:00
(helm-company :requires helm)
(helm-c-yasnippet :requires helm)
2015-05-06 07:28:50 +00:00
hippie-exp
(ivy-yasnippet :requires ivy)
smartparens
yasnippet
2018-01-14 21:51:20 +00:00
yasnippet-snippets
2015-05-06 07:28:50 +00:00
))
2015-08-14 03:02:16 +00:00
;; TODO replace by company-ispell which comes with company
;; to be moved to spell-checking layer as well
(defun auto-completion/init-ac-ispell ()
(use-package ac-ispell
:defer t
:init
(progn
(setq ac-ispell-requires 4)
(with-eval-after-load 'auto-complete
(ac-ispell-setup))
;; (add-hook 'markdown-mode-hook 'ac-ispell-ac-setup)
)))
(defun auto-completion/init-auto-complete ()
(use-package auto-complete
:defer t
:init
(setq ac-auto-start 0
ac-delay auto-completion-idle-delay
ac-quick-help-delay 1.
ac-use-fuzzy t
ac-fuzzy-enable t
ac-comphist-file (concat spacemacs-cache-directory "ac-comphist.dat")
;; use 'complete when auto-complete is disabled
tab-always-indent 'complete
ac-dwim t)
:config
(progn
(require 'auto-complete-config)
(setq-default ac-sources '(ac-source-abbrev
ac-source-dictionary
ac-source-words-in-same-mode-buffers))
(when (configuration-layer/package-used-p 'yasnippet)
(add-to-list 'ac-sources 'ac-source-yasnippet))
(add-to-list 'completion-styles 'initials t)
(define-key ac-completing-map (kbd "C-j") 'ac-next)
(define-key ac-completing-map (kbd "C-k") 'ac-previous)
(define-key ac-completing-map (kbd "<S-tab>") 'ac-previous)
(spacemacs|diminish auto-complete-mode "" " a"))))
(defun auto-completion/init-auto-yasnippet ()
(use-package auto-yasnippet
:defer t
:init
(progn
(setq aya-persist-snippets-dir
(or auto-completion-private-snippets-directory
(concat spacemacs-private-directory "snippets/")))
(spacemacs/declare-prefix "iS" "auto-yasnippet")
(spacemacs/set-leader-keys
"iSc" 'aya-create
"iSe" 'spacemacs/auto-yasnippet-expand
"iSw" 'aya-persist-snippet))))
(defun auto-completion/init-company ()
(use-package company
:defer t
:init
2015-04-06 20:49:53 +00:00
(progn
(setq company-idle-delay auto-completion-idle-delay
company-minimum-prefix-length auto-completion-minimum-prefix-length
2015-04-06 20:49:53 +00:00
company-require-match nil
company-dabbrev-ignore-case nil
company-dabbrev-downcase nil)
(add-hook 'company-completion-started-hook 'company-turn-off-fci)
(add-hook 'company-completion-finished-hook 'company-maybe-turn-on-fci)
(add-hook 'company-completion-cancelled-hook 'company-maybe-turn-on-fci))
:config
(progn
(spacemacs|diminish company-mode "" " a")
;; key bindings
(defun spacemacs//company-complete-common-or-cycle-backward ()
"Complete common prefix or cycle backward."
(interactive)
(company-complete-common-or-cycle -1))
(spacemacs//auto-completion-set-RET-key-behavior 'company)
(spacemacs//auto-completion-set-TAB-key-behavior 'company)
(spacemacs//auto-completion-setup-key-sequence 'company)
(let ((map company-active-map))
(define-key map (kbd "C-/") 'company-search-candidates)
(define-key map (kbd "C-M-/") 'company-filter-candidates)
(define-key map (kbd "C-d") 'company-show-doc-buffer))
(add-hook 'spacemacs-editing-style-hook 'spacemacs//company-active-navigation)
;; ensure that the correct bindings are set at startup
(spacemacs//company-active-navigation dotspacemacs-editing-style)
(setq company-transformers '(spacemacs//company-transformer-cancel
company-sort-by-occurrence)))))
2015-05-06 07:28:50 +00:00
(defun auto-completion/init-company-statistics ()
(use-package company-statistics
:defer t
2015-05-06 07:28:50 +00:00
:init
(progn
(setq company-statistics-file (concat spacemacs-cache-directory
"company-statistics-cache.el"))
2015-05-06 07:28:50 +00:00
(add-hook 'company-mode-hook 'company-statistics-mode))))
(defun auto-completion/pre-init-counsel ()
(spacemacs|use-package-add-hook company
:post-config
(define-key company-active-map (kbd "C-/") 'counsel-company)))
(defun auto-completion/init-fuzzy ()
(use-package fuzzy :defer t))
(defun auto-completion/init-company-quickhelp ()
(use-package company-quickhelp
:commands company-quickhelp-manual-begin
:init
2016-08-29 12:58:17 +00:00
(spacemacs|do-after-display-system-init
(with-eval-after-load 'company
(setq company-frontends (delq 'company-echo-metadata-frontend company-frontends))
(define-key company-active-map (kbd "M-h") #'company-quickhelp-manual-begin)
(unless (eq auto-completion-enable-help-tooltip 'manual)
(company-quickhelp-mode))))))
(defun auto-completion/init-all-the-icons ()
(use-package all-the-icons
:after company
:config
(progn
(eval-and-compile
;; Icons selected by liguangsheng
;; https://github.com/liguangsheng/emacsd/blob/master/lisp/init-completion.el
(defun my-company-box-icon (family icon &rest args)
"Defines icons using `all-the-icons' for `company-box'."
(when icon
(let ((icon (pcase family
('octicon (all-the-icons-octicon icon :height 0.8 :v-adjust -0.05 args))
('faicon (all-the-icons-faicon icon :height 0.8 :v-adjust -0.0575))
('material (all-the-icons-material icon :height 0.8 :v-adjust -0.225 args))
('alltheicon (all-the-icons-alltheicon icon :height 0.8 args)))))
(unless (symbolp icon)
(concat icon
(propertize " " 'face 'variable-pitch)))))))
(setq company-box-icons-all-the-icons
`((Unknown . ,(my-company-box-icon 'octicon "file-text"))
(Text . ,(my-company-box-icon 'faicon "file-text-o"))
(Method . ,(my-company-box-icon 'faicon "cube"))
(Function . ,(my-company-box-icon 'faicon "cube"))
(Constructor . ,(my-company-box-icon 'faicon "cube"))
(Field . ,(my-company-box-icon 'faicon "tag"))
(Variable . ,(my-company-box-icon 'faicon "tag"))
(Class . ,(my-company-box-icon 'faicon "cog"))
(Interface . ,(my-company-box-icon 'faicon "cogs"))
(Module . ,(my-company-box-icon 'alltheicon "less"))
(Property . ,(my-company-box-icon 'faicon "wrench"))
(Unit . ,(my-company-box-icon 'faicon "tag"))
(Value . ,(my-company-box-icon 'faicon "tag"))
(Enum . ,(my-company-box-icon 'faicon "file-text-o"))
(Keyword . ,(my-company-box-icon 'material "format_align_center"))
(Snippet . ,(my-company-box-icon 'material "content_paste"))
(Color . ,(my-company-box-icon 'material "palette"))
(File . ,(my-company-box-icon 'faicon "file"))
(Reference . ,(my-company-box-icon 'faicon "tag"))
(Folder . ,(my-company-box-icon 'faicon "folder"))
(EnumMember . ,(my-company-box-icon 'faicon "tag"))
(Constant . ,(my-company-box-icon 'faicon "tag"))
(Struct . ,(my-company-box-icon 'faicon "cog"))
(Event . ,(my-company-box-icon 'faicon "bolt"))
(Operator . ,(my-company-box-icon 'faicon "tag"))
(TypeParameter . ,(my-company-box-icon 'faicon "cog"))
(Template . ,(my-company-box-icon 'octicon "file-code")))))))
(defun auto-completion/init-company-box ()
(use-package company-box
:hook '(company-mode . company-box-mode)
:commands 'company-box-doc-manually
:init (setq company-box-icons-alist 'company-box-icons-all-the-icons)
:config
(progn
(spacemacs|hide-lighter company-box-mode)
(setq company-box-backends-colors nil
company-box-max-candidates 1000
company-box-doc-enable nil)
(add-hook 'company-box-selection-hook
(lambda (selection frame) (company-box-doc--hide frame)))
(cl-case auto-completion-enable-help-tooltip
('manual (define-key company-active-map
(kbd "M-h") #'company-box-doc-manually))
('t (setq company-box-doc-enable t))))))
(defun auto-completion/init-helm-c-yasnippet ()
(use-package helm-c-yasnippet
:defer t
:init
(progn
(spacemacs/set-leader-keys "is" 'spacemacs/helm-yas)
(setq helm-c-yas-space-match-any-greedy t))))
(defun auto-completion/pre-init-helm-company ()
(spacemacs|use-package-add-hook company
:post-config
(use-package helm-company
:defer t
:init
(define-key company-active-map (kbd "C-/") 'helm-company))))
(defun auto-completion/init-helm-company ())
2015-10-09 16:14:23 +00:00
(defun auto-completion/init-hippie-exp ()
2015-05-06 07:28:50 +00:00
;; replace dabbrev-expand
(global-set-key (kbd "M-/") 'hippie-expand)
(define-key evil-insert-state-map [remap evil-complete-previous] 'hippie-expand)
(setq hippie-expand-try-functions-list
'(
;; Try to expand word "dynamically", searching the current buffer.
try-expand-dabbrev
;; Try to expand word "dynamically", searching all other buffers.
try-expand-dabbrev-all-buffers
;; Try to expand word "dynamically", searching the kill ring.
try-expand-dabbrev-from-kill
;; Try to complete text as a file name, as many characters as unique.
try-complete-file-name-partially
;; Try to complete text as a file name.
try-complete-file-name
;; Try to expand word before point according to all abbrev tables.
try-expand-all-abbrevs
;; Try to complete the current line to an entire line in the buffer.
try-expand-list
;; Try to complete the current line to an entire line in the buffer.
try-expand-line
;; Try to complete as an Emacs Lisp symbol, as many characters as
;; unique.
try-complete-lisp-symbol-partially
;; Try to complete word as an Emacs Lisp symbol.
try-complete-lisp-symbol))
(when (configuration-layer/package-used-p 'yasnippet)
;; Try to expand yasnippet snippets based on prefix
(add-to-list 'hippie-expand-try-functions-list 'yas-hippie-try-expand)))
(defun auto-completion/init-ivy-yasnippet ()
(use-package ivy-yasnippet
:defer t
:init
(progn
(setq ivy-yasnippet-expand-keys nil)
(spacemacs/set-leader-keys "is" 'spacemacs/ivy-yas))))
(defun auto-completion/post-init-smartparens ()
(with-eval-after-load 'smartparens
(add-hook 'yas-before-expand-snippet-hook
#'spacemacs//smartparens-disable-before-expand-snippet)
(add-hook 'yas-after-exit-snippet-hook
#'spacemacs//smartparens-restore-after-exit-snippet)))
2018-01-14 21:51:20 +00:00
(defun auto-completion/init-yasnippet ()
(use-package yasnippet
:commands (yas-global-mode yas-minor-mode yas-activate-extra-mode)
:init
(progn
2015-08-31 12:01:26 +00:00
;; We don't want undefined variable errors
(defvar yas-global-mode nil)
(setq yas-triggers-in-field t
yas-wrap-around-region t
helm-yas-display-key-on-candidate t)
;; on multiple keys, fall back to completing read
;; typically this means helm
(setq yas-prompt-functions '(yas-completing-prompt))
;; disable yas minor mode map
;; use hippie-expand instead
(setq yas-minor-mode-map (make-sparse-keymap))
;; this makes it easy to get out of a nested expansion
(define-key yas-minor-mode-map (kbd "M-s-/") 'yas-next-field)
;; configure snippet directories
(let* ((spacemacs--auto-completion-dir
core: refactor layer system TL;DR Should get 20~25% speed improvement on startup, should get a big improvement when using ivy or helm SPC h SPC. Users with layers.el files in their layers must use `configuration-layer/declare-used-layer` instead of `configuration-layer/declare-layer` The implementation of the layer system made heavy use of `object-assoc` and `object-assoc-list` functions which are not efficient. This PR mainly replaces those object lists with hash maps in order to index the objects by their name and achieve an O(1) access time. The old object lists `configuration-layer--layers` and `configuration-layer--packages` have been each by two variables each: - `configuration-layer--indexed-layers` which is a hash-map of all the layer objects and `configuration-layer--used-layers` which is a list of all _used_ layers symbols, - symmetrically `configuration-layer--indexed-packages` which is a hash-map of all the package objects and `configuration-layer--used-packages` which is a list of all _used_ packages symbols. The hash map `configuration-layer--layer-paths` is gone, now we create directly layer objects when discovering the layers and set the :dir property. Note that previously the layer paths were the parent directory of the layer, now :dir is the layer path. The function `configuration-layer//make-layer` is now similar to its counterpart `configuration-layer//make-package` in the sense that it takes an optional `obj` to be able to override its properties. The functions `configuration-layer/declare-layer` and `configuration-layer/declare-layers` now takes an optional parameter `usedp` in order to declare used or not used layers. For convenience new functions have been added: `configuration-layer/declare-used-layer` and `configuration-layer/declare-used-layers`, users _must_ update all occurrences of `configuration-layer/declare-layer` by `configuration-layer/declare-used-layers` in their `layers.el` files. `helm-spacemacs-help` and `ivy-spacemacs-help` are updated to match the changes in `core-configuration-layer.el`. Rename some variables to make them more explicit: `configuration-layer-no-layer` -> `configuration-layer-exclude-all-layers` `configuration-layer-distribution` -> `configuration-layer-force-distribution`
2016-07-17 19:00:43 +00:00
(configuration-layer/get-layer-local-dir 'auto-completion))
(emacs-directory-snippets-dir (concat
spacemacs-private-directory
"snippets/"))
(spacemacs-layer-snippets-dir (expand-file-name
"snippets"
spacemacs--auto-completion-dir))
(dotspacemacs-directory-snippets-dir
(when dotspacemacs-directory
(let ((snippet-dir (expand-file-name
"snippets"
dotspacemacs-directory)))
(when (file-accessible-directory-p snippet-dir)
snippet-dir)))))
(setq yas-snippet-dirs nil)
;; ~/.emacs.d/layers/auto-completion/snippets
(add-to-list 'yas-snippet-dirs spacemacs-layer-snippets-dir)
;; ~/.emacs.d/private/snippets
(add-to-list 'yas-snippet-dirs emacs-directory-snippets-dir)
;; ~/.spacemacs.d/snippets
(when dotspacemacs-directory-snippets-dir
(add-to-list 'yas-snippet-dirs dotspacemacs-directory-snippets-dir))
;; arbitrary directories in `auto-completion-private-snippets-directory'
(when auto-completion-private-snippets-directory
(if (listp auto-completion-private-snippets-directory)
(setq yas-snippet-dirs (append yas-snippet-dirs auto-completion-private-snippets-directory))
(add-to-list 'yas-snippet-dirs auto-completion-private-snippets-directory))))
(spacemacs|add-toggle yasnippet
:mode yas-minor-mode
:documentation "Enable snippets."
2015-07-25 13:14:53 +00:00
:evil-leader "ty")
(spacemacs/add-to-hooks
'spacemacs/force-yasnippet-off '(term-mode-hook
shell-mode-hook
eshell-mode-hook))
(spacemacs|require-when-dumping 'yasnippet)
(spacemacs/add-to-hooks 'spacemacs/load-yasnippet '(prog-mode-hook
markdown-mode-hook
org-mode-hook))
)
:config (spacemacs|diminish yas-minor-mode "" " y")))
(defun auto-completion/init-yasnippet-snippets ())