[slime-devel] semantic indentation
Helmut Eller
heller at common-lisp.net
Wed Aug 1 17:53:07 UTC 2012
On Wed, Aug 01 2012, Evrim Ulu wrote:
> Hello,
>
> Ok, no problem, let's assume the symbol is interned on only a single package.
>
> I've modified symbol-indentation (symbol) function to return something
> else on some specific symbols.
>
> Yet, i cannot make the indentation work.
>
> My answer is probably there, yet I dont know which value to set:
>
> (put 'my-symbol 'common-lisp-indent-function ..??)
>
> http://www.gnu.org/software/emacs/manual/html_node/elisp/Indenting-Macros.html#Indenting-Macros
It seems that you want to indent like so
(html :attr1 val1
:attr2 val2
(body ...))
I'm not aware of a standard indentation function that does that, but you
can write your own. E.g.:
(put 'html 'common-lisp-indent-function 'my-html-indent)
(defun my-html-indent (path state indent-point sexp-column normal-indent)
(let* ((pos (car path))
(start (elt state 1))
(attrs (my-html-indent-count-attributes start (point))))
(cond ((> pos attrs)
(+ sexp-column 1))
(t
normal-indent))))
(defun my-html-indent-count-attributes (start end)
(save-excursion
(goto-char start)
(save-restriction
(narrow-to-region (point) end)
(down-list)
(forward-sexp 1)
(let ((count 0))
(while (progn
(skip-chars-forward " \t\n")
(looking-at "[^() \n]"))
(incf count)
(forward-sexp 1))
count))))
More information about the slime-devel
mailing list