all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Nix <nix@esperi.org.uk>
Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org
Subject: Re: [RFC PATCH] setting indentation styles via `c-file-style' fails to actually change indentation
Date: Sun, 5 Jun 2011 15:06:24 +0000	[thread overview]
Message-ID: <20110605150624.GA3740@acm.acm> (raw)
In-Reply-To: <87fwnrsydx.fsf@spindle.srvr.nix>

Hi, Nix.

On Thu, Jun 02, 2011 at 10:43:06PM +0100, Nix wrote:
> On 2 Jun 2011, Alan Mackenzie stated:

> > On Thu, Jun 02, 2011 at 05:47:16PM +0100, Nix wrote:
> >> On 2 Jun 2011, Alan Mackenzie told this:

> >> and have a patch, which works for me, at least... but it's rather ugly,
> >> so if there is a better way which would still allow setting of styles on
> >> file-by-file and directory-(class)-by-directory-(class) basis, then I'm
> >> glad to try that instead!

OK.  Would you please try this patch and let me know how it works.  It's
a bit less ugly than your one (-:


*** cc-mode.el.~4~	2011-06-04 10:32:15.000000000 +0000
--- cc-mode.el	2011-06-05 12:05:12.000000000 +0000
***************
*** 692,698 ****
  		   (c-count-cfss file-local-variables-alist))
  		  (cfs-in-dir-count (c-count-cfss dir-local-variables-alist)))
  	      (c-set-style stile
! 			   (= cfs-in-file-and-dir-count cfs-in-dir-count)))
  	  (c-set-style stile)))
        (when offsets
  	(mapc
--- 692,699 ----
  		   (c-count-cfss file-local-variables-alist))
  		  (cfs-in-dir-count (c-count-cfss dir-local-variables-alist)))
  	      (c-set-style stile
! 			   (and (= cfs-in-file-and-dir-count cfs-in-dir-count)
! 				'keep-defaults)))
  	  (c-set-style stile)))
        (when offsets
  	(mapc


[ BTW, you don't need to separate the patch out of the email.  Just give
patch the entire mail, and it will cope.]


> This happens with trunk Emacs (24.1-to-be).

OK, thanks.  That's the version the above patch applies to.

****************************************************************************

> Not quite. In a file like this:

> int main (int argc, char *argv[])
> {
>     printf ("Hello, world!\n") ;
> }

> with this style in effect:

> (c-add-style "otbs" '("bsd" (c-offsets-alist . ((statement-cont . 4)
>                                                 (inextern-lang . 0)
>                                                 (label . 0)
>                                                 (arglist-cont-nonempty . 4))))))

> and with directory local variables set (in my case) via

> (dir-locals-set-class-variables 'unix '((c-mode . ((c-file-style . "otbs")
>                                                    (fill-column . 80)
>                                                    (indent-tabs-mode . t)))))

> and the file assigned to the 'unix directory class, not a single one of
> the 'otbs style elements take effect. Neither do the inherited 'bsd
> elements. This differs from your case firstly because it tests style
> inheritance, which is all tangled up with this, and secondly because it
> tests dir local variables, which are where the breakage is visible.

OK, thanks.  That's what I needed to know.

> > [ ... ]
> >> DONT-OVERRIDE is clearly doing what it is specified to do. However,
> >> since 'c-set-style' may be called more than once when initializing a
> >> buffer, .....

> > Critical here is what value of `dont-override' is used in each of these
> > calls.

> Well, it's called once at initialization time with the c-default-style
> with dont-override set to 't' iff, oh, gods, you can read that code as
> well as I can .....

I've had several years practice, and I wrote some of it.  ;-)

> ..... and I'm too smashed on antihistamines to parse it right now.

Sorry to hear that.

> Then it gets called again in `c-before-hack-hook' with dont-override
> set to 't' iff the only c-file-style was in the directory local
> variable. (The rationale for this remains opaque to me, but since the
> underlying bug in my case was in the first part I didn't investigate
> that bit too closely. The style doesn't end up set to the directory-
> local style: it ends up set to the default!)

It was an attempt to prevent .dir-local variables from overriding more
specifically set variables (e.g. set in a hook function).  It didn't work
very well.  :-(

> Plus, each of these calls the underlying style-addition function
> repeatedly for inherited styles.

Yes.  That seems safer than trying to separate out what sort of style
setting belongs where, and how to mix them when that's required.

> Maybe the pollen count will go down soon and I can think about this
> more clearly...

Let's hope so.

In the mean time, please forgive me offering you some free advice on bug
reports:

1. Say what you do to cause the bug, not merely what state a program is
in when the bug happens.

2. Be VERY wary about sending "streams of consciousness"; they can
sometimes be difficult to make sense of.  Reading them the morning after
can be helpful.

3. Don't assume the grizzled senile maintainer can simply follow a patch;
explain it!  Often the bug submitter, having just spent several hours on
it, knows the piece of code better than the maintainer.

4. In Emacs, the standard diff format is contextual (-c), but unified
(-u) is OK too.

So, let me know if the patch works, then we can close this bug.

> -- 
> NULL && (void)

-- 
Alan Mackenzie (Nuremberg, Germany).



  reply	other threads:[~2011-06-05 15:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-17 23:21 [RFC PATCH] setting indentation styles via `c-file-style' fails to actually change indentation Nix
2011-05-18  0:17 ` Stefan Monnier
2011-05-18 20:28   ` Nix
2011-05-18 21:08     ` ERT indentation testing (was: [RFC PATCH] setting indentation styles via `c-file-style' fails to actually change indentation) Ted Zlatanov
2011-05-18 22:19       ` ERT indentation testing Stefan Monnier
2011-05-19 10:33         ` Ted Zlatanov
2011-05-19 11:56           ` Stefan Monnier
2011-06-01 21:30             ` Ted Zlatanov
2011-06-02 18:43               ` Ted Zlatanov
2011-06-03  0:04                 ` Stefan Monnier
2011-06-03 11:33                   ` Ted Zlatanov
2011-06-03 12:12                     ` martin rudalics
2011-06-03 15:06                       ` extra-interactive functions (was: ERT indentation testing) Ted Zlatanov
2011-06-03 15:27                         ` extra-interactive functions martin rudalics
2011-06-03 16:11                           ` Ted Zlatanov
2011-06-03 18:59                             ` martin rudalics
2011-06-03 19:10                               ` Ted Zlatanov
2011-06-03 20:54                                 ` martin rudalics
2011-06-08 10:44                 ` ERT indentation testing Ted Zlatanov
2011-06-08 15:24                   ` Stefan Monnier
2011-06-09 16:05                     ` Ted Zlatanov
2011-06-10 20:41                       ` Stefan Monnier
2011-06-01 14:31   ` [RFC PATCH] setting indentation styles via `c-file-style' fails to actually change indentation Nix
2011-06-02 12:24     ` Alan Mackenzie
2011-06-02 13:35       ` Stefan Monnier
2011-06-02 16:47       ` Nix
2011-06-02 21:15         ` Alan Mackenzie
2011-06-02 21:43           ` Nix
2011-06-05 15:06             ` Alan Mackenzie [this message]
2011-07-24 10:07               ` Kan-Ru Chen
2011-07-24 10:07               ` bug#7570: " Kan-Ru Chen
2011-08-05 14:14               ` Nix
2011-05-18  3:27 ` Glenn Morris
2011-05-18 11:02   ` Juanma Barranquero

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110605150624.GA3740@acm.acm \
    --to=acm@muc.de \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=nix@esperi.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.