diff --git a/contrib/lang/emacs-lisp/README.md b/contrib/lang/emacs-lisp/README.md new file mode 100644 index 000000000..e9c9060b3 --- /dev/null +++ b/contrib/lang/emacs-lisp/README.md @@ -0,0 +1,57 @@ +# Emacs Lisp contribution layer for Spacemacs + +![logo](img/emacs-lisp.png) + + +**Table of Contents** + +- [Emacs Lisp contribution layer for Spacemacs](#emacs-lisp-contribution-layer-for-spacemacs) + - [Description](#description) + - [Install](#install) + - [Key bindings](#key-bindings) + - [srefactor](#srefactor) + + + +## Description + +This layer gathers all the configuration related to emacs-lisp. This should +always be in your dotfile, it is not recommended to uninstall it. + +## Install + +To use this contribution add it to your `~/.spacemacs` + +```elisp +(setq-default dotspacemacs-configuration-layers '(emacs-lisp)) +``` + +## Key bindings + +Key Binding | Description +---------------------------------------------|------------------------------------------- +SPC m g g | go to definition of symbol under point +SPC m h h | describe symbol at point +SPC m e $ or SPC m e l | go to end of current line and evaluate +SPC m e b | evaluate current buffer +SPC m e c | evaluate current form (start with `defun`, `setq`, etc...) +SPC m e e | evaluate sexp before point +SPC m e r | evaluate current region +SPC m e f | evaluation current function +SPC m , | toggle `lisp state` +SPC m t b | run tests of current buffer +SPC m t q | run `ert` + +### srefactor + +The [semantic layer][semantic-layer] should be installed for these key bindings +to become active. + +Key Binding | Description +---------------------|------------------------------------------------------------ +SPC m = b | format current buffer +SPC m = f | format current function +SPC m = r | format current sexp +SPC m = o | format all on one line + +[semantic-layer]: ../../semantic/README.md diff --git a/contrib/lang/emacs-lisp/config.el b/contrib/lang/emacs-lisp/config.el new file mode 100644 index 000000000..730223fda --- /dev/null +++ b/contrib/lang/emacs-lisp/config.el @@ -0,0 +1,14 @@ +;;; config.el --- Emacs Lisp Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables +(spacemacs|defvar-company-backends emacs-lisp-mode) diff --git a/contrib/lang/emacs-lisp/extensions.el b/contrib/lang/emacs-lisp/extensions.el new file mode 100644 index 000000000..b6dcde7ca --- /dev/null +++ b/contrib/lang/emacs-lisp/extensions.el @@ -0,0 +1,33 @@ +;;; extensions.el --- Emacs Lisp Layer Extensions File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq emacs-lisp-post-extensions + '(emacs-builtin-emacs-lisp)) + +(defun emacs-lisp/init-emacs-builtin-emacs-lisp () + + (evil-leader/set-key-for-mode 'emacs-lisp-mode + "me$" 'lisp-state-eval-sexp-end-of-line + "meb" 'eval-buffer + "mec" 'spacemacs/eval-current-form + "mee" 'eval-last-sexp + "mer" 'spacemacs/eval-region + "mef" 'eval-defun + "mel" 'lisp-state-eval-sexp-end-of-line + "m," 'lisp-state-toggle-lisp-state + "mtb" 'spacemacs/ert-run-tests-buffer + "mtq" 'ert) + + ;; company support + (push 'company-capf company-backends-emacs-lisp-mode) + (spacemacs|add-company-hook emacs-lisp-mode)) + diff --git a/contrib/lang/emacs-lisp/img/emacs-lisp.png b/contrib/lang/emacs-lisp/img/emacs-lisp.png new file mode 100644 index 000000000..b196474c7 Binary files /dev/null and b/contrib/lang/emacs-lisp/img/emacs-lisp.png differ diff --git a/contrib/lang/emacs-lisp/packages.el b/contrib/lang/emacs-lisp/packages.el new file mode 100644 index 000000000..834f105c5 --- /dev/null +++ b/contrib/lang/emacs-lisp/packages.el @@ -0,0 +1,63 @@ +;;; packages.el --- Emacs Lisp Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq emacs-lisp-packages + '( + eldoc + elisp-slime-nav + evil + semantic + smartparens + srefactor + )) + +(defun emacs-lisp/post-init-eldoc () + (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)) + +(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 + :init + (progn + (add-hook 'emacs-lisp-mode-hook 'elisp-slime-nav-mode) + (evil-leader/set-key-for-mode 'emacs-lisp-mode + "mgg" 'elisp-slime-nav-find-elisp-thing-at-point + "mhh" 'elisp-slime-nav-describe-elisp-thing-at-point)))) + +(defun emacs-lisp/post-init-evil () + (add-to-hook 'emacs-lisp-mode + '(lambda () + (spacemacs|define-text-object ";" + "elisp-comment" + ";; " + "")))) + +(defun emacs-lisp/post-init-semantic () + (semantic/enable-semantic-mode 'emacs-lisp-mode) + (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 + (evil-leader/set-key-for-mode 'emacs-lisp-mode + "mfb" 'srefactor-lisp-format-buffer + "mfd" 'srefactor-lisp-format-defun + "mfr" 'srefactor-lisp-format-sexp + "mfo" 'srefactor-lisp-one-line + )))