;; -*- lexical-binding: t; -*- (require 'sly) (require 'cl-lib) (require 'sly-cl-indent "lib/sly-cl-indent") (define-sly-contrib sly-indentation "Contrib interfacing `sly-cl-indent' and SLY." (:slynk-dependencies slynk/indentation) (:on-load (setq sly--lisp-indent-current-package-function 'sly-current-package))) (defun sly-update-system-indentation (symbol indent packages) (let ((list (gethash symbol sly-common-lisp-system-indentation)) (ok nil)) (if (not list) (puthash symbol (list (cons indent packages)) sly-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) sly-common-lisp-system-indentation))))) (provide 'sly-indentation)