[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#15478: cc-mode does not obey electric-indent-mode
From: |
Stefan Monnier |
Subject: |
bug#15478: cc-mode does not obey electric-indent-mode |
Date: |
Thu, 03 Oct 2013 10:32:32 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
>> > Without electricity, correct indentation would require continual pressing
>> > of the <tab> key.
>> Yes. Just as is the case in all major modes.
> No. Electric indentation is completely unneeded in Emacs Lisp Mode,
Nitpicking.
>> That's because *you* like electric-indent-mode. Not because C is special.
> No, it's not just my preference.
That's what you say, but I don't see the evidence. So far you've only
pointed to Elisp mode and Python mode as counter examples, but from
where I stand it's more like Elisp and Python are the exceptions (and
as soon as someone improves Elisp indentation for cl-lib constructs
or :keyword arguments, Elisp won't be an exception any more).
> All modes should indent correctly automatically, by default.
Again, you're arguing for enabling electric-indent-mode by default.
I'm not necessarily opposed to it, but it's a different issue than the
one I'm concerned with in this bug-report.
> But you need to hit <tab> _after_ typing the brace, but _before_ typing
> C-j. This doesn't seem like an effective way of working. Do you really
> run C Mode without electric indentation?
Of course. And cc-mode is one of the very few modes where
electric-indent is so "in your face" all the time.
>> >> For me, I'd like cc-mode to do as little as possible besides adding
>> >> ?\;, ?\{, and ?\} to electric-indent-chars.
>> > These characters should not trigger electric indentation when typed
>> > inside a string or a comment. electric-indent-mode isn't best placed to
>> > make such distinctions.
>> Why not?
> Because each such distinction is going to be major mode specific.
That's not a good reason, since there's no technical difficulty in
making it possible for a major mode to tell electric-indent-mode which
behavior is desired.
>> > It doesn't seem to be the Right Thing to split the electric activity
>> > between electric-indent-mode (for indentation) and c-electric-brace
>> > and friends (for auto-newlining and clean-ups).
>> As explained, there's electric-layout-mode for auto-newlining. Not sure
>> what "clean-ups" is about, but we can probably work something out.
> Clean-ups, for example, remove auto-newlines when it later transpires
> they're unwanted. For example, one clean-up converts
> }
> else
> {
> to
> } else {
> on typing the "{".
Ah, right. I don't see any particular problem here, cc-mode can provide
a c-electric-cleanup-mode (or maybe we can even make it generic, so
other major modes can provide their own cleanup rules).
>> I'm all for improving electric-indent-mode. And indeed, it needs
>> improvement for indentation-sensitive modes like Python and Haskell.
> Does it even make sense for these modes?
No, it doesn't, which is the needed improvement: make it default to Off
there even if it is enabled globally.
>> > Each major mode needs its own default for e-i-m:
>> I disagree with it: some major modes need their own default because
>> their syntax has something very special, e.g. incompatible with
>> electric-indent-mode (Python/Coffescript/Haskell), ...
> Does that even make sense? How can Python have its own default, yet C
> not?
Technically, C could have its own default as well, of course.
I just don't see any reason for it.
> The default setting doesn't reflect a user's preference, if that
> preference is ON for C, OFF for Python, and the major mode specific
> optimum for everything else.
Indeed, which is why only very few major modes should override the
global default. Python has a good reason to override it. C doesn't.
>> > something like `electric-indent-mode-alist', analogous with
>> > `auto-mode-alist'. This default would be consulted at mode
>> > initialisation time.
>> I don't see why the major mode can't just set a var in its major-mode
>> function for the rare cases where it can be needed, and why the user
>> can't make his own choice via the major-mode's hook, if needed.
> Because, as so often in this list, we're talking about defaults, not the
> extent to which an experienced user can customise his Emacs. Defaults
> are important.
My point above was arguing against using an electric-indent-mode-alist
mechanism rather than one of the standard mechanisms (setq-local for the
major-mode or add-hook for the user). It was not about what the default
should be.
>> > A buffer's setting of e-i-m should also be more than just nil or t. That
>> > is inflexible to an un-Emacs like degree. At the very least, there
>> > should be some sort of setting that means "electric indentation is
>> > performed entirely by the major mode".
>> I don't understand what you're suggesting.
> You seem to be suggesting dismantling not only CC Mode's electric
> indentation, but its auto-newlining too. The generic replacements for
> them are going to be less good.
I don't want them to be less good. They may be marginally less good, or
slightly different in some corner cases, of course. But "significantly
less good" would be a bug to fix by improving the generic code.
As already mentioned, fixing this bug report may require fixes not just
in cc-mode but also in electric.el.
> What I'm suggesting is some sort of hook so that electric-indent-mode
> (and electric-layout-mode, too, I suppose) invokes the "electric
> engine" in CC Mode rather than trying to do the electric
> indentation itself.
Sounds OK.
Stefan
- bug#15596: Let's improve the default workings of electric-indent-mode., (continued)
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/07
- bug#15478: cc-mode does not obey electric-indent-mode, Stefan Monnier, 2013/10/07
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/07
- bug#15478: cc-mode does not obey electric-indent-mode, Stefan Monnier, 2013/10/07
- Message not available
- Message not available
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/03
- bug#15478: cc-mode does not obey electric-indent-mode, Andreas Röhler, 2013/10/03
bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/03
- bug#15478: cc-mode does not obey electric-indent-mode,
Stefan Monnier <=
- bug#15478: cc-mode does not obey electric-indent-mode, Josh, 2013/10/04
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/05
- bug#15478: cc-mode does not obey electric-indent-mode, Josh, 2013/10/06
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/07
- bug#15478: cc-mode does not obey electric-indent-mode, Josh, 2013/10/07
- bug#15478: cc-mode does not obey electric-indent-mode, Alan Mackenzie, 2013/10/09