* lisp/electric.el (electric-indent-mode): Fix last change (too optimistic).
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 20 Nov 2011 06:29:57 +0000 (01:29 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 20 Nov 2011 06:29:57 +0000 (01:29 -0500)
lisp/ChangeLog
lisp/electric.el

index e79af3a..e6f1bc5 100644 (file)
@@ -1,5 +1,7 @@
 2011-11-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * electric.el (electric-indent-mode): Fix last change (too optimistic).
+
        * emacs-lisp/bytecomp.el: Silence obsolete warnings more reliably.
        (byte-compile-global-not-obsolete-vars): New var.
        (byte-compile-check-variable, byte-compile-make-obsolete-variable):
index 69acb77..657b577 100644 (file)
@@ -260,15 +260,23 @@ reindentation is triggered whenever you insert a character listed
 in `electric-indent-chars'."
   :global t
   :group 'electricity
-  (if electric-indent-mode
-      (add-hook 'post-self-insert-hook
-                #'electric-indent-post-self-insert-function
-                ;; post-self-insert-hooks interact in non-trivial ways.
-                ;; It turns out that electric-indent-mode generally works
-                ;; better last.
-                'append)
-    (remove-hook 'post-self-insert-hook
-                 #'electric-indent-post-self-insert-function)))
+  (if (not electric-indent-mode)
+      (remove-hook 'post-self-insert-hook
+                   #'electric-indent-post-self-insert-function)
+    ;; post-self-insert-hooks interact in non-trivial ways.
+    ;; It turns out that electric-indent-mode generally works better if run
+    ;; late, but still before blink-paren.
+    (add-hook 'post-self-insert-hook
+              #'electric-indent-post-self-insert-function
+              'append)
+    ;; FIXME: Ugly!
+    (let ((bp (memq #'blink-paren-post-self-insert-function
+                    (default-value 'post-self-insert-hook))))
+      (when (memq #'electric-indent-post-self-insert-function bp)
+        (setcar bp #'electric-indent-post-self-insert-function)
+        (setcdr bp (cons #'blink-paren-post-self-insert-function
+                         (delq #'electric-indent-post-self-insert-function
+                               (cdr bp))))))))
 
 ;; Electric pairing.