* lisp/electric.el (electric-indent-post-self-insert-function): Don't use
authorPhilipp Rumpf <prumpf@gmail.com>
Fri, 9 May 2014 18:03:21 +0000 (14:03 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 9 May 2014 18:03:21 +0000 (14:03 -0400)
`pos' after modifying the buffer.

Fixes: debbugs:17449

lisp/ChangeLog
lisp/electric.el

index cd073cd..3f47c07 100644 (file)
@@ -1,3 +1,8 @@
+2014-05-09  Philipp Rumpf  <prumpf@gmail.com>  (tiny change)
+
+       * electric.el (electric-indent-post-self-insert-function): Don't use
+       `pos' after modifying the buffer (bug#17449).
+
 2014-05-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * subr.el (function-put): Add function.
index e8ceaa6..bf73dbb 100644 (file)
@@ -259,29 +259,30 @@ or comment."
                     (unless (eq act 'do-indent) (nth 8 (syntax-ppss))))))))
       ;; For newline, we want to reindent both lines and basically behave like
       ;; reindent-then-newline-and-indent (whose code we hence copied).
-      (when (<= pos (line-beginning-position))
-        (let ((before (copy-marker (1- pos) t)))
-          (save-excursion
-            (unless (or (memq indent-line-function
-                              electric-indent-functions-without-reindent)
-                        electric-indent-inhibit)
-              ;; Don't reindent the previous line if the indentation function
-              ;; is not a real one.
+      (let ((at-newline (<= pos (line-beginning-position))))
+        (when at-newline
+          (let ((before (copy-marker (1- pos) t)))
+            (save-excursion
+              (unless (or (memq indent-line-function
+                                electric-indent-functions-without-reindent)
+                          electric-indent-inhibit)
+                ;; Don't reindent the previous line if the indentation function
+                ;; is not a real one.
+                (goto-char before)
+                (indent-according-to-mode))
+              ;; We are at EOL before the call to indent-according-to-mode, and
+              ;; after it we usually are as well, but not always.  We tried to
+              ;; address it with `save-excursion' but that uses a normal marker
+              ;; whereas we need `move after insertion', so we do the
+              ;; save/restore by hand.
               (goto-char before)
-              (indent-according-to-mode))
-            ;; We are at EOL before the call to indent-according-to-mode, and
-            ;; after it we usually are as well, but not always.  We tried to
-            ;; address it with `save-excursion' but that uses a normal marker
-            ;; whereas we need `move after insertion', so we do the
-            ;; save/restore by hand.
-            (goto-char before)
-           (when (eolp)
-             ;; Remove the trailing whitespace after indentation because
-             ;; indentation may (re)introduce the whitespace.
-             (delete-horizontal-space t)))))
-      (unless (and electric-indent-inhibit
-                   (> pos (line-beginning-position)))
-        (indent-according-to-mode)))))
+              (when (eolp)
+                ;; Remove the trailing whitespace after indentation because
+                ;; indentation may (re)introduce the whitespace.
+                (delete-horizontal-space t)))))
+        (unless (and electric-indent-inhibit
+                     (not at-newline))
+          (indent-according-to-mode))))))
 
 (put 'electric-indent-post-self-insert-function 'priority  60)