diff options
author | Philipp Rumpf <prumpf@gmail.com> | 2014-05-09 14:03:21 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2014-05-09 14:03:21 -0400 |
commit | 3ebdceafc175e59582caf787696dca2f11a0e495 (patch) | |
tree | 79327a2a2738ca4ca86045fc4b386b9ac53d63ab /lisp/electric.el | |
parent | a3eda656eeeddb7db59fceba1842007778447e46 (diff) | |
download | emacs-3ebdceafc175e59582caf787696dca2f11a0e495.tar.gz |
* lisp/electric.el (electric-indent-post-self-insert-function): Don't use
`pos' after modifying the buffer.
Fixes: debbugs:17449
Diffstat (limited to 'lisp/electric.el')
-rw-r--r-- | lisp/electric.el | 45 |
1 files changed, 23 insertions, 22 deletions
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) |