(require 'slime)
|
|
(require 'slime-cl-indent)
|
|
(require 'cl-lib)
|
|
|
|
(define-slime-contrib slime-indentation
|
|
"Contrib interfacing `slime-cl-indent' and SLIME."
|
|
(:swank-dependencies swank-indentation)
|
|
(:on-load
|
|
(setq common-lisp-current-package-function 'slime-current-package)))
|
|
|
|
(defun slime-update-system-indentation (symbol indent packages)
|
|
(let ((list (gethash symbol common-lisp-system-indentation))
|
|
(ok nil))
|
|
(if (not list)
|
|
(puthash symbol (list (cons indent packages))
|
|
common-lisp-system-indentation)
|
|
(dolist (spec list)
|
|
(cond ((equal (car spec) indent)
|
|
(dolist (p packages)
|
|
(unless (member p (cdr spec))
|
|
(push p (cdr spec))))
|
|
(setf ok t))
|
|
(t
|
|
(setf (cdr spec)
|
|
(cl-set-difference (cdr spec) packages :test 'equal)))))
|
|
(unless ok
|
|
(puthash symbol (cons (cons indent packages)
|
|
list)
|
|
common-lisp-system-indentation)))))
|
|
|
|
(provide 'slime-indentation)
|