4

In Emacs 24.4, the default indentation behavior has been changed—new lines are now automatically indented. From the release notes:

*** `electric-indent-mode' is now enabled by default.
Typing RET reindents the current line and indents the new line.
`C-j' inserts a newline but does not indent.  In some programming modes,
additional characters are electric (eg `{').

I prefer the old behavior, so I added

(electric-indent-mode 0)

to my .emacs file. However, this disables all electric characters, which is not what I intended.

Is there any way to disable the new behavior while still having characters like ‘{’ or ‘:’ trigger an indentation?

user3426575
  • 1,723
  • 12
  • 18

2 Answers2

7

You want to remove ?\n from electric-indent-chars. You can do this globally with:

(setq electric-indent-chars (remq ?\n electric-indent-chars))

or only in a particular mode (e.g. C):

(add-hook 'c-mode-hook
          (lambda ()
            (setq-local electric-indent-chars (remq ?\n electric-indent-chars))))
Stefan
  • 27,908
  • 4
  • 53
  • 82
0

By checking the documentation for c-electric-brace, I found that the behavior of electric characters is controlled by the buffer-local variable c-electric-flag. It worked after I added the following lines to my .emacs file:

(add-hook 'c-mode-hook
          (lambda ()
            (set 'c-electric-flag t)))

(add-hook 'c++-mode-hook
          (lambda ()
            (set 'c-electric-flag t)))
user3426575
  • 1,723
  • 12
  • 18