aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/textmodes/fill.el33
1 files changed, 26 insertions, 7 deletions
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index 57d7804657f..b5017b22a9d 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -165,12 +165,24 @@ From program, pass args FROM, TO and JUSTIFY-FLAG."
165 (eq (char-after (- (point) 2)) ?\.)) 165 (eq (char-after (- (point) 2)) ?\.))
166 (forward-char -2) 166 (forward-char -2)
167 (skip-chars-backward "^ \n" linebeg)) 167 (skip-chars-backward "^ \n" linebeg))
168 (if (if (zerop prefixcol) (bolp) (>= prefixcol (current-column))) 168 (if (if (zerop prefixcol)
169 (save-excursion
170 (skip-chars-backward " " linebeg)
171 (bolp))
172 (>= prefixcol (current-column)))
169 ;; Keep at least one word even if fill prefix exceeds margin. 173 ;; Keep at least one word even if fill prefix exceeds margin.
170 ;; This handles all but the first line of the paragraph. 174 ;; This handles all but the first line of the paragraph.
171 (progn 175 ;; Meanwhile, don't stop at a period followed by one space.
172 (skip-chars-forward " ") 176 (let ((first t))
173 (skip-chars-forward "^ \n")) 177 (move-to-column prefixcol)
178 (while (and (not (eobp))
179 (or first
180 (and (not (bobp))
181 (save-excursion (forward-char -1)
182 (looking-at "\\. ")))))
183 (skip-chars-forward " ")
184 (skip-chars-forward "^ \n")
185 (setq first nil)))
174 ;; Normally, move back over the single space between the words. 186 ;; Normally, move back over the single space between the words.
175 (forward-char -1)) 187 (forward-char -1))
176 (if (and fill-prefix (zerop prefixcol) 188 (if (and fill-prefix (zerop prefixcol)
@@ -179,9 +191,16 @@ From program, pass args FROM, TO and JUSTIFY-FLAG."
179 (substring fill-prefix 0 (- (point) (point-min))))) 191 (substring fill-prefix 0 (- (point) (point-min)))))
180 ;; Keep at least one word even if fill prefix exceeds margin. 192 ;; Keep at least one word even if fill prefix exceeds margin.
181 ;; This handles the first line of the paragraph. 193 ;; This handles the first line of the paragraph.
182 (progn 194 ;; Don't stop at a period followed by just one space.
183 (skip-chars-forward " ") 195 (let ((first t))
184 (skip-chars-forward "^ \n")))) 196 (while (and (not (eobp))
197 (or first
198 (and (not (bobp))
199 (save-excursion (forward-char -1)
200 (looking-at "\\. ")))))
201 (skip-chars-forward " ")
202 (skip-chars-forward "^ \n")
203 (setq first nil)))))
185 ;; Replace all whitespace here with one newline. 204 ;; Replace all whitespace here with one newline.
186 ;; Insert before deleting, so we don't forget which side of 205 ;; Insert before deleting, so we don't forget which side of
187 ;; the whitespace point or markers used to be on. 206 ;; the whitespace point or markers used to be on.