From 914b7f980836564c0a53c3573f26790a087686f3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 19 Oct 2013 18:17:56 -0400 Subject: [PATCH] * lisp/simple.el (newline): Only run post-self-insert-hook when called interactively. --- lisp/ChangeLog | 5 +++++ lisp/simple.el | 27 +++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8407e160bb5..3b220f875e4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-10-19 Stefan Monnier + + * simple.el (newline): Only run post-self-insert-hook when + called interactively. + 2013-10-19 Johan Bockgård * icomplete.el (icomplete-with-completion-tables): Add :version. diff --git a/lisp/simple.el b/lisp/simple.el index d259851dc85..3fefce15d2a 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -377,14 +377,15 @@ Other major modes are defined by comparison with this one." (defvar hard-newline (propertize "\n" 'hard t 'rear-nonsticky '(hard)) "Propertized string representing a hard newline character.") -(defun newline (&optional arg) +(defun newline (&optional arg interactive) "Insert a newline, and move to left margin of the new line if it's blank. If option `use-hard-newlines' is non-nil, the newline is marked with the text-property `hard'. With ARG, insert that many newlines. Call `auto-fill-function' if the current column number is greater -than the value of `fill-column' and ARG is nil." - (interactive "*P") +than the value of `fill-column' and ARG is nil. +A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'." + (interactive "*P\np") (barf-if-buffer-read-only) ;; Call self-insert so that auto-fill, abbrev expansion etc. happens. ;; Set last-command-event to tell self-insert what to insert. @@ -415,14 +416,20 @@ than the value of `fill-column' and ARG is nil." ;; starts a page. (or was-page-start (move-to-left-margin nil t))))) - (unwind-protect - (progn - (add-hook 'post-self-insert-hook postproc) + (if (not interactive) + ;; FIXME: For non-interactive uses, many calls actually just want + ;; (insert "\n"), so maybe we should do just that, so as to avoid + ;; the risk of filling or running abbrevs unexpectedly. + (let ((post-self-insert-hook (list postproc))) (self-insert-command (prefix-numeric-value arg))) - ;; We first used let-binding to protect the hook, but that was naive - ;; since add-hook affects the symbol-default value of the variable, - ;; whereas the let-binding might only protect the buffer-local value. - (remove-hook 'post-self-insert-hook postproc))) + (unwind-protect + (progn + (add-hook 'post-self-insert-hook postproc) + (self-insert-command (prefix-numeric-value arg))) + ;; We first used let-binding to protect the hook, but that was naive + ;; since add-hook affects the symbol-default value of the variable, + ;; whereas the let-binding might only protect the buffer-local value. + (remove-hook 'post-self-insert-hook postproc)))) nil) (defun set-hard-newline-properties (from to) -- 2.11.4.GIT