Ludovic Courtès (2015-09-27 23:29 +0300) wrote: > Alex Kost <alez...@gmail.com> skribis: > [...] >> The following code may be used to handle this indentation: >> >> (defun guix-devel-package-indent (state indent-point normal-indent) >> (let ((count (if (and (ignore-errors (down-list) t) >> (looking-at "inherit\\>")) >> 1 >> 0))) >> (lisp-indent-specform count state indent-point normal-indent))) >> >> (put 'package 'scheme-indent-function 'guix-devel-package-indent) > > Nice! I like it, I think it would be a nice addition. > > At the same time I wonder if defining sophisticated indentation rules is > a good idea in general. (Though this one was already defined anyway.)
I agree that it's better to avoid unusual indentation rules. Actually I don't like that ‘inherit’ field is treated specially, I would leave it as usual: (package (inherit foo) (name "foo") ...) But since the inherited packages have the form: (package (inherit foo) (name "foo") ...) I thought this is an existing rule, so I came up with that indentation function. >> But it wouldn't work reliably because of ".dir-locals.el", as >> 'scheme-indent-function' property will be overridden every time a scheme >> file from git repo is visited. So my proposition is: what about moving >> all indentation rules from ".dir-locals.el" to "emacs/guix-devel.el"? >> So 'guix-devel-mode' will be responsible for all indenting, highlighting >> and other guix-specific things. WDYT? > > Good question. .dir-locals.el includes a bunch of internal rules that > do not make sense outside. > > For those who do make sense outside, such as rules for ‘package’, I > think having them in .dir-locals.el has the advantage that Emacs users > cannot escape them inadvertently. With guix-devel.el, there’s a greater > chance of people not loading it. > > Unless .dir-locals.el has something like: > > (eval . (load "emacs/guix-devel.el")) ;… > > ? I am against this. At first it is ugly; besides don't forget that it means "guix-devel.el" will be loaded *each time* you open a scheme file from the guix git directory. More generally, I'm strongly against using "eval" in .dir-locals. IMO this file should be used only to set local variables, and ideally it shouldn't evaluate an arbitrary code. > Thoughts? So I think .dir-locals.el is not the proper place for indentation rules. IMHO they should be moved to "guix-devel.el" and the manual should recommend using 'guix-devel-mode' for editing guix package files as it provides the proper indenting, highlighting and some useful key bindings. -- Alex