From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Kost Subject: .dir-locals.el vs. guix-devel-mode Date: Mon, 28 Sep 2015 15:26:52 +0300 Message-ID: <878u7qybjn.fsf_-_@gmail.com> References: <871tdm6i0i.fsf@gmail.com> <8737y28fss.fsf@gnu.org> <87d1x57yhg.fsf@gmail.com> <87si5zwqqu.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:56596) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZgXWE-0007SB-Ta for guix-devel@gnu.org; Mon, 28 Sep 2015 08:26:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZgXWB-0007FU-ML for guix-devel@gnu.org; Mon, 28 Sep 2015 08:26:58 -0400 In-Reply-To: <87si5zwqqu.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Sun, 27 Sep 2015 22:29:13 +0200") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel@gnu.org Ludovic Court=C3=A8s (2015-09-27 23:29 +0300) wrote: > Alex Kost 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 =E2=80=98inherit=E2=80=99 field is treated speci= ally, 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 =E2=80=98package= =E2=80=99, I > think having them in .dir-locals.el has the advantage that Emacs users > cannot escape them inadvertently. With guix-devel.el, there=E2=80=99s a = greater > chance of people not loading it. > > Unless .dir-locals.el has something like: > > (eval . (load "emacs/guix-devel.el")) ;=E2=80=A6 > > ? 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. --=20 Alex