1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-18 03:40:47 -08:00

* lisp/simple.el (open-line): Integrate with electric-indent-mode

Also run `post-self-insert-hook' when called interactively.
This commit is contained in:
Artur Malabarba 2015-10-24 22:26:27 +01:00
parent 6939896e2f
commit bd4f04f86c

View 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 (put-text-property from (point) 'rear-nonsticky
(cons 'hard sticky))))) (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. "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 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 the new line. If the old line would have been blank, insert them
on the old line as well. 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))) (let* ((do-fill-prefix (and fill-prefix (bolp)))
(do-left-margin (and (bolp) (> (current-left-margin) 0))) (do-left-margin (and (bolp) (> (current-left-margin) 0)))
(loc (point-marker)) (loc (point-marker))
;; Don't expand an abbrev before point. ;; Don't expand an abbrev before point.
(abbrev-mode nil)) (abbrev-mode nil))
(newline n) (if (and interactive
(looking-at-p "[[:space:]]*$"))
(electric-indent-just-newline n)
(newline n interactive))
(goto-char loc) (goto-char loc)
(while (> n 0) (while (> n 0)
(cond ((bolp) (cond ((bolp)