summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Rumpf <prumpf@gmail.com>2014-05-09 14:03:21 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2014-05-09 14:03:21 -0400
commit3ebdceafc175e59582caf787696dca2f11a0e495 (patch)
tree79327a2a2738ca4ca86045fc4b386b9ac53d63ab
parenta3eda656eeeddb7db59fceba1842007778447e46 (diff)
downloademacs-3ebdceafc175e59582caf787696dca2f11a0e495.tar.gz
* lisp/electric.el (electric-indent-post-self-insert-function): Don't use
`pos' after modifying the buffer. Fixes: debbugs:17449
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/electric.el45
2 files changed, 28 insertions, 22 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cd073cdb985..3f47c077f5c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -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.
diff --git a/lisp/electric.el b/lisp/electric.el
index e8ceaa6406c..bf73dbb256f 100644
--- a/lisp/electric.el
+++ b/lisp/electric.el
@@ -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)