[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] trunk r116461: Connect electric-indent-mode up with CC Mod
From: |
Alan Mackenzie |
Subject: |
[Emacs-diffs] trunk r116461: Connect electric-indent-mode up with CC Mode. Bug #15478. |
Date: |
Mon, 17 Feb 2014 18:22:02 +0000 |
User-agent: |
Bazaar (2.6b2) |
------------------------------------------------------------
revno: 116461
revision-id: address@hidden
parent: address@hidden
committer: Alan Mackenzie <address@hidden>
branch nick: trunk
timestamp: Mon 2014-02-17 18:16:32 +0000
message:
Connect electric-indent-mode up with CC Mode. Bug #15478.
* progmodes/cc-mode.el (c-initialize-cc-mode): add CC Mode hooks
to electric-indent-{,local-}-mode.
(c-basic-common-init): Set electric-indent-inhibit. Initialise
c-electric-flag from electric-indent-mode.
(c-electric-indent-mode-hook, c-electric-indent-local-mode-hook):
New hook functions which propagate electric-indent-mode to CC Mode.
* progmodes/cc-cmds.el (c-toggle-electric-state): When C-c C-l is
hit, toggle electric-indent-local-moode.
* electric.el (electric-indent-mode-has-been-called): New variable.
modified:
lisp/ChangeLog changelog-20091113204419-o5vbwnq5f7feedwu-1432
lisp/electric.el electric.el-20091113204419-o5vbwnq5f7feedwu-47
lisp/progmodes/cc-cmds.el cccmds.el-20091113204419-o5vbwnq5f7feedwu-1224
lisp/progmodes/cc-mode.el ccmode.el-20091113204419-o5vbwnq5f7feedwu-1230
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2014-02-17 16:01:43 +0000
+++ b/lisp/ChangeLog 2014-02-17 18:16:32 +0000
@@ -1,3 +1,20 @@
+2014-02-17 Alan Mackenzie <address@hidden>
+
+ Connect electric-indent-mode up with CC Mode. Bug #15478.
+ * progmodes/cc-mode.el (c-initialize-cc-mode): add CC Mode hooks
+ to electric-indent-{,local-}-mode.
+ (c-basic-common-init): Set electric-indent-inhibit. Initialise
+ c-electric-flag from electric-indent-mode.
+ (c-electric-indent-mode-hook, c-electric-indent-local-mode-hook):
+ New hook functions which propagate electric-indent-mode to CC
+ Mode.
+
+ * progmodes/cc-cmds.el (c-toggle-electric-state): When C-c C-l is
+ hit, toggle electric-indent-local-moode.
+
+ * electric.el (electric-indent-mode-has-been-called): New
+ variable.
+
2014-02-17 Juanma Barranquero <address@hidden>
* frameset.el (frameset-cfg-id): New function.
=== modified file 'lisp/electric.el'
--- a/lisp/electric.el 2014-02-10 01:34:22 +0000
+++ b/lisp/electric.el 2014-02-17 18:16:32 +0000
@@ -286,6 +286,9 @@
(let ((electric-indent-mode nil))
(newline arg 'interactive)))
+(defvar electric-indent-mode-has-been-called 0
+ "How many times has `electric-indent-mode' been called?
+It's > 1 if it's been called at least once by the user.")
;;;###autoload
(define-minor-mode electric-indent-mode
"Toggle on-the-fly reindentation (Electric Indent mode).
@@ -299,6 +302,8 @@
:global t :group 'electricity
:initialize 'custom-initialize-delay
:init-value t
+ (setq electric-indent-mode-has-been-called
+ (1+ electric-indent-mode-has-been-called))
(if (not electric-indent-mode)
(progn
(when (eq (lookup-key global-map [?\C-j])
=== modified file 'lisp/progmodes/cc-cmds.el'
--- a/lisp/progmodes/cc-cmds.el 2014-01-01 07:43:34 +0000
+++ b/lisp/progmodes/cc-cmds.el 2014-02-17 18:16:32 +0000
@@ -356,6 +356,8 @@
(interactive "P")
(setq c-electric-flag (c-calculate-state arg c-electric-flag))
(c-update-modeline)
+ (when (fboundp 'electric-indent-local-mode) ; Emacs 24.4 or later.
+ (electric-indent-local-mode (if c-electric-flag 1 0)))
(c-keep-region-active))
=== modified file 'lisp/progmodes/cc-mode.el'
--- a/lisp/progmodes/cc-mode.el 2014-01-31 02:39:40 +0000
+++ b/lisp/progmodes/cc-mode.el 2014-02-17 18:16:32 +0000
@@ -188,7 +188,13 @@
(setq c-block-comment-prefix
(symbol-value 'c-comment-continuation-stars)))
(add-hook 'change-major-mode-hook 'c-leave-cc-mode-mode)
- (setq c-initialization-ok t))
+ (setq c-initialization-ok t)
+ ;; Connect up with Emacs's electric-indent-mode, for >= Emacs 24.4
+ (when (fboundp 'electric-indent-mode)
+ (add-hook 'electric-indent-mode-hook 'c-electric-indent-mode-hook)
+ (when (fboundp 'electric-indent-local-mode)
+ (add-hook 'electric-indent-local-mode-hook
+ 'c-electric-indent-local-mode-hook))))
;; Will try initialization hooks again if they failed.
(put 'c-initialize-cc-mode initprop c-initialization-ok))))
@@ -578,6 +584,14 @@
;; setup the comment indent variable in a Emacs version portable way
(set (make-local-variable 'comment-indent-function) 'c-comment-indent)
+ ;; In Emacs 24.4 onwards, prevent Emacs's built in electric indentation from
+ ;; messing up CC Mode's, and set `c-electric-flag' if `electric-indent-mode'
+ ;; has been called by the user.
+ (when (boundp 'electric-indent-inhibit) (setq electric-indent-inhibit t))
+ (when (and (boundp 'electric-indent-mode-has-been-called)
+ (> electric-indent-mode-has-been-called 1))
+ (setq c-electric-flag electric-indent-mode))
+
;; ;; Put submode indicators onto minor-mode-alist, but only once.
;; (or (assq 'c-submode-indicators minor-mode-alist)
;; (setq minor-mode-alist
@@ -807,7 +821,7 @@
`(progn ,@(mapcar (lambda (hook) `(run-hooks ,hook)) hooks))))
-;;; Change hooks, linking with Font Lock.
+;;; Change hooks, linking with Font Lock and electric-indent-mode.
;; Buffer local variables recording Beginning/End-of-Macro position before a
;; change, when a macro straddles, respectively, the BEG or END (or both) of
@@ -1238,6 +1252,27 @@
;; function.
(cons c-new-BEG c-new-END))
+;; Connect up to `electric-indent-mode' (Emacs 24.4 and later).
+(defun c-electric-indent-mode-hook ()
+ ;; Emacs has en/disabled `electric-indent-mode'. Propagate this through to
+ ;; each CC Mode buffer.
+ (when (and (boundp 'electric-indent-mode-has-been-called)
+ (> electric-indent-mode-has-been-called 1))
+ (mapc (lambda (buf)
+ (with-current-buffer buf
+ (when c-buffer-is-cc-mode
+ ;; Don't use `c-toggle-electric-state' here due to recursion.
+ (setq c-electric-flag electric-indent-mode)
+ (c-update-modeline))))
+ (buffer-list))))
+
+(defun c-electric-indent-local-mode-hook ()
+ ;; Emacs has en/disabled `electric-indent-local-mode' for this buffer.
+ ;; Propagate this through to this buffer's value of `c-electric-flag'
+ (when c-buffer-is-cc-mode
+ (setq c-electric-flag electric-indent-mode)
+ (c-update-modeline)))
+
;; Support for C
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] trunk r116461: Connect electric-indent-mode up with CC Mode. Bug #15478.,
Alan Mackenzie <=