changeset 11324:3190c85854b6

(newline): Don't indent afterward if at page sep line. Delete whitespace on blank line before the inserted newlines. (open-line): Add all the left margins and fill prefixes after inserting all the newlines.
author Richard M. Stallman <rms@gnu.org>
date Sun, 09 Apr 1995 06:47:22 +0000
parents 5f75d3e225c1
children 032239e758c4
files lisp/simple.el
diffstat 1 files changed, 29 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/simple.el	Sun Apr 09 05:32:47 1995 +0000
+++ b/lisp/simple.el	Sun Apr 09 06:47:22 1995 +0000
@@ -26,7 +26,7 @@
 ;;; Code:
 
 (defun newline (&optional arg)
-  "Insert a newline and move to left margin of the new line.
+  "Insert a newline, and move to left margin of the new line if it's blank.
 The newline is marked with the text-property `hard'.
 With arg, insert that many newlines.
 In Auto Fill mode, if no numeric arg, break the preceding line if it's long."
@@ -38,7 +38,10 @@
   (let ((flag (and (not (bobp)) 
 		   (bolp)
 		   (< (or (previous-property-change (point)) -2) 
-		      (- (point) 2)))))
+		      (- (point) 2))))
+	(was-page-start (and (bolp)
+			     (looking-at page-delimiter)))
+	(beforepos (point)))
     (if flag (backward-char 1))
     ;; Call self-insert so that auto-fill, abbrev expansion etc. happens.
     ;; Set last-command-char to tell self-insert what to insert.
@@ -55,26 +58,42 @@
 	  (if (and (listp sticky) (not (memq 'hard sticky)))
 	      (put-text-property from (point) 'rear-nonsticky
 				 (cons 'hard sticky)))))
-    (if flag (forward-char 1)))
-  (move-to-left-margin nil t)
+    ;; If the newline leaves the previous line blank,
+    ;; and we have a left margin, delete that from the blank line.
+    (or flag
+	(save-excursion
+	  (goto-char beforepos)
+	  (beginning-of-line)
+	  (and (looking-at "[ \t]$")
+	       (> (current-left-margin) 0)
+	       (delete-region (point) (progn (end-of-line) (point))))))
+    (if flag (forward-char 1))
+    ;; Indent the line after the newline, except in one case:
+    ;; when we added the newline at the beginning of a line
+    ;; which starts a page.
+    (or was-page-start
+	(move-to-left-margin nil t)))
   nil)
 
 (defun open-line (arg)
   "Insert a newline and leave point before it.
 If there is a fill prefix and/or a left-margin, insert them on the new line
-if the line would have been empty.
+if the line would have been blank.
 With arg N, insert N newlines."
   (interactive "*p")
   (let* ((do-fill-prefix (and fill-prefix (bolp)))
 	 (do-left-margin (and (bolp) (> (current-left-margin) 0)))
 	 (loc (point)))
+    (newline arg)
+    (goto-char loc)
     (while (> arg 0)
-      (if do-left-margin (indent-to (current-left-margin)))
-      (if do-fill-prefix (insert-and-inherit fill-prefix))
-      (newline 1)
+      (cond ((bolp)
+	     (if do-left-margin (indent-to (current-left-margin)))
+	     (if do-fill-prefix (insert-and-inherit fill-prefix))))
+      (forward-line 1)
       (setq arg (1- arg)))
-    (goto-char loc))
-  (end-of-line))
+    (goto-char loc)
+    (end-of-line)))
 
 (defun split-line ()
   "Split current line, moving portion beyond point vertically down."