(put-text-property from (point) 'rear-nonsticky
(cons 'hard sticky)))))
-(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.
-
+the new line if the line would have been blank.
With arg N, insert N newlines.
A non-nil INTERACTIVE argument means to run the `post-self-insert-hook'."
(interactive "*p\np")
(loc (point-marker))
;; Don't expand an abbrev before point.
(abbrev-mode nil))
- (if (and interactive
- (looking-at-p "[[:space:]]*$"))
- (electric-indent-just-newline n)
- (newline n interactive))
+ (newline n interactive)
(goto-char loc)
(while (> n 0)
(cond ((bolp)
(open-line 1)))
'("- - " . "\n(a b c d)"))))
+;; For a while, from 24 Oct - 19 Nov 2015, `open-line' in the Emacs
+;; development tree became sensitive to `electric-indent-mode', which
+;; it had not been before. This sensitivity was reverted for the
+;; Emacs 25 release, so it could be discussed further (see thread
+;; "Questioning the new behavior of `open-line'." on the Emacs Devel
+;; mailing list). The only test case here that started failing after
+;; the reversion is the third one, the one that currently expects
+;; `("(a b" . "\n \n c d)")'. If `open-line' were again sensitive
+;; to electric indent, then the three spaces between the two newlines
+;; would go away, leaving `("(a b" . "\n\n c d)")'.
+;;
+;; If electric indent sensitivity were re-enabled, we might also want
+;; to make the test cases below a bit stricter, or add some more test
+;; cases that are specific to `electric-indent-mode', since right now
+;; all but one of the cases pass with or without electric indent.
(ert-deftest open-line-indent ()
(should (equal (simple-test--dummy-buffer
(electric-indent-local-mode 1)
(let ((current-prefix-arg nil))
(call-interactively #'open-line)
(call-interactively #'open-line)))
- '("(a b" . "\n\n c d)")))
+ '("(a b" . "\n \n c d)")))
(should (equal (simple-test--dummy-buffer
(electric-indent-local-mode 1)
(open-line 5 'interactive))