I've added a tentative implementation of indentation styles to slime-indentation on my Github tree:
https://github.com/nikodemus/Slime/tree/slime-indentation
With this, you can do
;; -*- common-lisp-style: stylename -*-
which will then set the indentation specs and buffer-local variables specified for that style in common-lisp-style-alist. (Or you can do M-x set-common-lisp-style as well, of course.)
The big deal is that with this you can have eg. IF ident with 2 spaces in one file, and with 4 in another -- as fits the project style.
Without this I need to have multiple emacses started with different command-line options which is a huge pain -- and I expect I'm not the only one.
Here's a sample style:
(push '("eccentric" (variables (lisp-lambda-list-keyword-alignment t) (lisp-lambda-list-keyword-parameter-alignment t) (lisp-loop-indent-subclauses nil) (lisp-loop-indent-forms-like-keywords t)) (indentation (if (4 2 2)))) common-lisp-style-alist)
Things I'd like to sort out before proposing this for Slime CVS:
- tests - support for inheriting styles - define-common-lisp-style so we're not married to the alist spec - get someone with more emacs-fu to review this
...the last in particular I would appreciate help with. I've no idea if the things I'm doing with buffer-local variables are kosher or not.
In particular, I feel a bit icky about
(add-hook 'lisp-mode-hook (lambda () (hack-local-variables)))
which I needed to do because (lisp-mode) kills all local variables.
Cheers,
-- nikodemus