Subject: Re: bug#15478: cc-mode does not obey electric-indent-mode

From: Josh <[email-masked]>
Date: Sat, 5 Oct 2013 22:04:00 -0700

On Sat, Oct 5, 2013 at 7:55 PM, Eli Zaretskii <[email-masked]> wrote:
> > From: Stefan Monnier <[email-masked]>
> > Date: Sat, 05 Oct 2013 21:10:01 -0400
> > Cc: [email-masked]
> > For people who don't like electric-indent-mode, CC-mode's
> > c-electric-flag sucks just as much.
> Who are they, except for you?  Why don't we hear any complaints about
> that, except from you?

    c-electric-flag is a variable defined in `cc-engine.el'.
    Its value is t

      Automatically becomes buffer-local when set.

    Documentation:
    Not documented as a variable.

Do you hear many complaints about other undocumented variables?

    C-c C-l runs the command c-toggle-electric-state, which is an
    interactive compiled Lisp function in `cc-cmds.el'.

    It is bound to C-c C-l, <menu-bar> <C> <Toggle...> <Electric mode>.

    (c-toggle-electric-state &optional ARG)

    Toggle the electric indentation feature.
    Optional numeric ARG, if supplied, turns on electric indentation when
    positive, turns it off when negative, and just toggles it when zero or
    left out.

This is the command that Alan has claimed solved the problem back in
2005 and makes it easy for newbies to easily disable electricity.  I
don't believe that is so.  Neglecting the fact that newbies are
unlikely to be familiar with Emacs' "electric" term of art and thus
unlikely to even make the connection between "c-toggle-electric-state"
and the behavior they're trying to disable, this docstring makes no
mention whatsoever of `c-electric-flag', nor does it describe how to
disable electric behavior permanently.  (One might reasonably assume
that the global setting would govern here, but as we know it does
not.)  Perhaps the newbie would have enough Lisp to make the leap from
that docstring to adding
  (c-toggle-electric-state -1)
to her init file, but since that function is not autoloaded it would
likely only result in a cryptic error message.  She could overcome
this with an appropriate (require ...) or (eval-after-load ...) form,
but of what feature?  Should she read the CC Mode source to untangle
the dependencies in order to find the appropriate top-level feature
(and maybe go down the rabbit hole of investigating how the unfamiliar
`cc-require' differs from `require')?  I could only manage to disable
this feature permanently by reading the source and setq-default'ing
(because it's not customizable either) an undocumented variable.

I suspect that if you don't hear many complaints about this behavior
it's because the procedure to disable it is beyond the ability of most
newbies who might wish to do so--perhaps they don't even realize that
it's possible--and that a good number of them move on to some other
editor as a result.  Others of us read the source code and find the right
magic undocumented variable to nilify to make editing C stop being
annoying without complaining to anybody.