]> code.delx.au - gnu-emacs/commitdiff
* lisp/simple.el (open-line): Integrate with electric-indent-mode
authorArtur Malabarba <bruce.connor.am@gmail.com>
Sat, 24 Oct 2015 21:26:27 +0000 (22:26 +0100)
committerArtur Malabarba <bruce.connor.am@gmail.com>
Mon, 26 Oct 2015 00:27:10 +0000 (00:27 +0000)
Also run `post-self-insert-hook' when called interactively.

lisp/simple.el

index 5b0503778bd059153789282fbf0895dc61238423..338a0600829e8ad7f939c7b3f2ab8d371739e33a 100644 (file)
@@ -458,17 +458,27 @@ A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'."
        (put-text-property from (point) 'rear-nonsticky
                           (cons 'hard sticky)))))
 
-(defun open-line (n)
+(declare-function electric-indent-just-newline "electric")
+(defun open-line (n &optional interactive)
   "Insert a newline and leave point before it.
+If `electric-indent-mode' is enabled, indent the new line if it's
+not empty.
 If there is a fill prefix and/or a `left-margin', insert them on
 the new line.  If the old line would have been blank, insert them
 on the old line as well.
+
+With arg N, insert N newlines.
+A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'."
+  (interactive "*p\np")
   (let* ((do-fill-prefix (and fill-prefix (bolp)))
         (do-left-margin (and (bolp) (> (current-left-margin) 0)))
         (loc (point-marker))
-        ;; Don't expand an abbrev before point.
+         ;; Don't expand an abbrev before point.
         (abbrev-mode nil))
-    (newline n)
+    (if (and interactive
+             (looking-at-p "[[:space:]]*$"))
+        (electric-indent-just-newline n)
+      (newline n interactive))
     (goto-char loc)
     (while (> n 0)
       (cond ((bolp)