spacemacs/layers/+lang/common-lisp/funcs.el
Maximilian Wolff 9ff2004706 Avoid special handling of smartparens in lisp layers
emacs-lisp and common-lisp-layer had both their own
logic to work with smartparens including manually
requiring it.

This PR makes them use the standard functions. In
addition it replaces the manual require with proper
autoloading of smartparens.
2021-03-16 18:54:18 +00:00

79 lines
2.4 KiB
EmacsLisp
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; funcs.el --- Slime Layer functions File for Spacemacs
;;
;; 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
;; Helm integration
(defun spacemacs//slime-helm-source (&optional table)
(or table (setq table slime-lisp-implementations))
`((name . "Slime")
(candidates . ,(mapcar #'car table))
(action . (lambda (candidate)
(car (helm-marked-candidates))))))
(defun spacemacs/helm-slime ()
(interactive)
(let ((command (helm :sources (spacemacs//slime-helm-source))))
(and command (slime (intern command)))))
;; Evil integration
(defun spacemacs/slime-eval-sexp-end-of-line ()
"Evaluate current line."
(interactive)
(move-end-of-line 1)
(slime-eval-last-expression))
;; Functions are taken from the elisp layer `eval-last-sexp' was replaced with
;; its slime equivalent `slime-eval-last-expression'
(defun spacemacs/cl-eval-current-form ()
"Find and evaluate the current def* or set* command.
Unlike `eval-defun', this does not go to topmost function."
(interactive)
(save-excursion
(search-backward-regexp "(def\\|(set")
(forward-list)
(call-interactively 'slime-eval-last-expression)))
(defun spacemacs/cl-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.
An optional ARG can be used which is passed to `sp-up-sexp' to move out of more
than one sexp.
Requires smartparens because all movement is done using `sp-up-sexp'."
(interactive "p")
(let ((evil-move-beyond-eol t))
;; evil-move-beyond-eol disables the evil advices around eval-last-sexp
(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 'slime-eval-last-expression))))
(defun spacemacs/cl-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)
(let ((evil-move-beyond-eol t))
;; evil-move-beyond-eol disables the evil advices around eval-last-sexp
(save-excursion
(sp-forward-symbol)
(call-interactively 'slime-eval-last-expression))))