c1c2d06f36
SPC j F and SPC j V don't fit the SPC j prefix because they require the thing under point to be an Emacs lisp thing, which means that these bindings should be major mode specific. To replace them and accordingly to the convention the key bindings SPC m g G in Emacs Lisp buffers has been added to go to definition in other window. SPC j f and SPC j v (minus letters) don't require the current buffer to be Emacs Lisp and thus I only updated the documentation about them mentioning that they're about Emacs Lisp variables and functions.
206 lines
7 KiB
EmacsLisp
206 lines
7 KiB
EmacsLisp
;;; packages.el --- Emacs Lisp Layer packages File for Spacemacs
|
|
;;
|
|
;; Copyright (c) 2012-2016 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 emacs-lisp-packages
|
|
'(
|
|
auto-compile
|
|
company
|
|
eldoc
|
|
elisp-slime-nav
|
|
(emacs-lisp :location built-in)
|
|
evil
|
|
flycheck
|
|
ggtags
|
|
helm-gtags
|
|
(ielm :location built-in)
|
|
macrostep
|
|
semantic
|
|
smartparens
|
|
srefactor))
|
|
|
|
(defun emacs-lisp/init-ielm ()
|
|
(use-package ielm
|
|
:defer t
|
|
:init
|
|
(progn
|
|
(spacemacs/register-repl 'ielm 'ielm)
|
|
(dolist (mode '(emacs-lisp-mode lisp-interaction-mode))
|
|
(spacemacs/declare-prefix-for-mode mode "ms" "ielm")
|
|
(spacemacs/set-leader-keys-for-major-mode mode
|
|
"'" 'ielm
|
|
"si" 'ielm)))
|
|
:config
|
|
(defun ielm-indent-line ()
|
|
(interactive)
|
|
(let ((current-point (point)))
|
|
(save-restriction
|
|
(narrow-to-region (search-backward-regexp "^ELISP>") (goto-char current-point))
|
|
(lisp-indent-line))))))
|
|
|
|
(defun emacs-lisp/post-init-company ()
|
|
(spacemacs|add-company-hook ielm-mode)
|
|
(push '(company-files company-capf) company-backends-ielm-mode))
|
|
|
|
(defun emacs-lisp/post-init-eldoc ()
|
|
(add-hook 'emacs-lisp-mode-hook 'eldoc-mode))
|
|
|
|
(defun emacs-lisp/init-auto-compile ()
|
|
(use-package auto-compile
|
|
:defer t
|
|
:diminish (auto-compile-mode . "")
|
|
:init
|
|
(progn
|
|
(setq auto-compile-display-buffer nil
|
|
;; lets spaceline manage the mode-line
|
|
auto-compile-use-mode-line nil
|
|
auto-compile-mode-line-counter t)
|
|
(add-hook 'emacs-lisp-mode-hook 'auto-compile-mode))
|
|
:config
|
|
(progn
|
|
(spacemacs/set-leader-keys-for-major-mode 'emacs-lisp-mode
|
|
"cl" 'auto-compile-display-log))))
|
|
|
|
(defun emacs-lisp/init-elisp-slime-nav ()
|
|
;; Elisp go-to-definition with M-. and back again with M-,
|
|
(use-package elisp-slime-nav
|
|
:defer t
|
|
:diminish elisp-slime-nav-mode
|
|
:init
|
|
(progn
|
|
(spacemacs/add-to-hooks
|
|
'elisp-slime-nav-find-elisp-thing-at-point
|
|
'(spacemacs-jump-handlers-emacs-lisp-mode
|
|
spacemacs-jump-handlers-lisp-interaction-mode))
|
|
(add-hook 'emacs-lisp-mode-hook 'elisp-slime-nav-mode)
|
|
(dolist (mode '(emacs-lisp-mode lisp-interaction-mode))
|
|
(spacemacs/declare-prefix-for-mode mode "mg" "find-symbol")
|
|
(spacemacs/declare-prefix-for-mode mode "mh" "help")
|
|
(spacemacs/set-leader-keys-for-major-mode mode
|
|
"hh" 'elisp-slime-nav-describe-elisp-thing-at-point)))))
|
|
|
|
(defun emacs-lisp/init-emacs-lisp ()
|
|
(spacemacs|define-jump-handlers emacs-lisp-mode)
|
|
(dolist (mode '(emacs-lisp-mode lisp-interaction-mode))
|
|
(spacemacs/declare-prefix-for-mode mode "mc" "compile")
|
|
(spacemacs/declare-prefix-for-mode mode "me" "eval")
|
|
(spacemacs/declare-prefix-for-mode mode "mt" "tests")
|
|
(spacemacs/set-leader-keys-for-major-mode mode
|
|
"cc" 'emacs-lisp-byte-compile
|
|
"e$" 'lisp-state-eval-sexp-end-of-line
|
|
"eb" 'eval-buffer
|
|
"ee" 'eval-last-sexp
|
|
"er" 'eval-region
|
|
"ef" 'eval-defun
|
|
"el" 'lisp-state-eval-sexp-end-of-line
|
|
"gG" 'spacemacs/nav-find-elisp-thing-at-point-other-window
|
|
"," 'lisp-state-toggle-lisp-state
|
|
"tb" 'spacemacs/ert-run-tests-buffer
|
|
"tq" 'ert))
|
|
;; company support
|
|
(push 'company-capf company-backends-emacs-lisp-mode)
|
|
(spacemacs|add-company-hook emacs-lisp-mode))
|
|
|
|
(defun emacs-lisp/init-macrostep ()
|
|
(use-package macrostep
|
|
:defer t
|
|
:mode ("\\*.el\\'" . emacs-lisp-mode)
|
|
:init
|
|
(progn
|
|
(evil-define-key 'normal macrostep-keymap "q" 'macrostep-collapse-all)
|
|
(spacemacs|define-transient-state macrostep
|
|
:title "MacroStep Transient State"
|
|
:doc "\n[_e_] expand [_c_] collapse [_n_/_N_] next/previous [_q_] quit"
|
|
:foreign-keys run
|
|
:bindings
|
|
("e" macrostep-expand)
|
|
("c" macrostep-collapse)
|
|
("n" macrostep-next-macro)
|
|
("N" macrostep-prev-macro)
|
|
("q" macrostep-collapse-all :exit t))
|
|
(spacemacs/set-leader-keys-for-major-mode 'emacs-lisp-mode
|
|
"dm" 'spacemacs/macrostep-transient-state/body))))
|
|
|
|
(defun emacs-lisp/post-init-evil ()
|
|
(add-hook 'emacs-lisp-mode-hook
|
|
(lambda ()
|
|
(spacemacs|define-text-object ";" "elisp-comment" ";; " ""))))
|
|
|
|
(defun emacs-lisp/post-init-flycheck ()
|
|
;; Don't activate flycheck by default in elisp
|
|
;; because of too much false warnings
|
|
;; (spacemacs/add-flycheck-hook 'emacs-lisp-mode)
|
|
|
|
;; Make flycheck recognize packages in loadpath
|
|
;; i.e (require 'company) will not give an error now
|
|
(setq flycheck-emacs-lisp-load-path 'inherit))
|
|
|
|
(defun emacs-lisp/post-init-helm-gtags ()
|
|
(spacemacs/helm-gtags-define-keys-for-mode 'emacs-lisp-mode))
|
|
|
|
(defun emacs-lisp/post-init-ggtags ()
|
|
(add-hook 'emacs-lisp-mode-local-vars-hook #'spacemacs/ggtags-mode-enable))
|
|
|
|
(defun emacs-lisp/post-init-semantic ()
|
|
(add-hook 'emacs-lisp-mode-hook 'semantic-mode)
|
|
(with-eval-after-load 'semantic
|
|
(semantic-default-elisp-setup)))
|
|
|
|
(defun emacs-lisp/post-init-srefactor ()
|
|
(add-hook 'emacs-lisp-mode-hook 'spacemacs/lazy-load-srefactor)
|
|
(use-package srefactor-lisp
|
|
:commands (srefactor-lisp-format-buffer
|
|
srefactor-lisp-format-defun
|
|
srefactor-lisp-format-sexp
|
|
srefactor-lisp-one-line)
|
|
:init
|
|
(dolist (mode '(emacs-lisp-mode lisp-interaction-mode))
|
|
(spacemacs/declare-prefix-for-mode mode "m=" "srefactor")
|
|
(spacemacs/set-leader-keys-for-major-mode mode
|
|
"=b" 'srefactor-lisp-format-buffer
|
|
"=d" 'srefactor-lisp-format-defun
|
|
"=o" 'srefactor-lisp-one-line
|
|
"=s" 'srefactor-lisp-format-sexp))))
|
|
|
|
(defun emacs-lisp/post-init-smartparens ()
|
|
(advice-remove 'elisp--preceding-sexp 'evil--preceding-sexp)
|
|
|
|
(defun spacemacs/eval-current-form-sp (&optional arg)
|
|
"Call `eval-last-sexp' after moving out of one level of
|
|
parentheses. Will exit any strings and/or comments first.
|
|
Requires smartparens because all movement is done using
|
|
`sp-up-sexp'. An optional ARG can be used which is passed to
|
|
`sp-up-sexp' to move out of more than one sexp."
|
|
(interactive "p")
|
|
(require 'smartparens)
|
|
(save-excursion
|
|
(let ((max 10))
|
|
(while (and (> max 0)
|
|
(sp-point-in-string-or-comment))
|
|
(decf max)
|
|
(sp-up-sexp)))
|
|
(sp-up-sexp arg)
|
|
(call-interactively 'eval-last-sexp)))
|
|
|
|
(defun spacemacs/eval-current-symbol-sp ()
|
|
"Call `eval-last-sexp' on the symbol around point. Requires
|
|
smartparens because all movement is done using
|
|
`sp-forward-symbol'."
|
|
(interactive)
|
|
(require 'smartparens)
|
|
(save-excursion
|
|
(sp-forward-symbol)
|
|
(call-interactively 'eval-last-sexp)))
|
|
|
|
(dolist (mode '(emacs-lisp-mode lisp-interaction-mode))
|
|
(spacemacs/set-leader-keys-for-major-mode mode
|
|
"ec" 'spacemacs/eval-current-form-sp
|
|
"es" 'spacemacs/eval-current-symbol-sp)))
|