# HG changeset patch # User Stefan Monnier # Date 1004421463 0 # Node ID b7f7d0cc89fb60e077f8f5bfcd0866a5ed4f9565 # Parent ec3016b59706201b42a1fb4b9fbf42069508a529 (use-hard-newlines): Use define-minor-mode. (paragraph-start): Change default to the `text-mode' value. diff -r ec3016b59706 -r b7f7d0cc89fb lisp/textmodes/paragraphs.el --- a/lisp/textmodes/paragraphs.el Tue Oct 30 05:37:08 2001 +0000 +++ b/lisp/textmodes/paragraphs.el Tue Oct 30 05:57:43 2001 +0000 @@ -34,14 +34,7 @@ "Paragraph and sentence parsing." :group 'editing) -;; It isn't useful to use defcustom for this variable -;; because it is always buffer-local. -(defvar use-hard-newlines nil - "Non-nil means to distinguish hard and soft newlines. -See also the documentation for the function `use-hard-newlines'.") -(make-variable-buffer-local 'use-hard-newlines) - -(defun use-hard-newlines (&optional arg insert) +(define-minor-mode use-hard-newlines "Minor mode to distinguish hard and soft newlines. When active, the functions `newline' and `open-line' add the text-property `hard' to newlines that they insert, and a line is @@ -58,17 +51,13 @@ Newlines not marked hard are called \"soft\", and are always internal to paragraphs. The fill functions insert and delete only soft newlines." - (interactive (list current-prefix-arg nil)) - (if (or (<= (prefix-numeric-value arg) 0) - (and use-hard-newlines (null arg))) - ;; Turn mode off - (setq use-hard-newlines nil) + :extra-args (insert) + (when use-hard-newlines ;; Turn mode on ;; Intuit hard newlines -- ;; mark as hard any newlines preceding a paragraph-start line. (if (or (eq insert t) (eq insert 'always) (and (not (eq 'never insert)) - (not use-hard-newlines) (not (text-property-any (point-min) (point-max) 'hard t)) (save-excursion (goto-char (point-min)) @@ -80,19 +69,16 @@ (while (search-forward "\n" nil t) (let ((pos (point))) (move-to-left-margin) - (if (looking-at paragraph-start) - (progn - (set-hard-newline-properties (1- pos) pos) - ;; If paragraph-separate, newline after it is hard too. - (if (looking-at paragraph-separate) - (progn - (end-of-line) - (if (not (eobp)) - (set-hard-newline-properties - (point) (1+ (point)))))))))))) - (setq use-hard-newlines t))) + (when (looking-at paragraph-start) + (set-hard-newline-properties (1- pos) pos)) + ;; If paragraph-separate, newline after it is hard too. + (when (looking-at paragraph-separate) + (set-hard-newline-properties (1- pos) pos) + (end-of-line) + (unless (eobp) + (set-hard-newline-properties (point) (1+ (point))))))))))) -(defcustom paragraph-start "[ \t\n\f]" "\ +(defcustom paragraph-start "\f\\|[ \t]*$" "\ *Regexp for beginning of a line that starts OR separates paragraphs. This regexp should match lines that separate paragraphs and should also match lines that start a paragraph @@ -244,8 +230,8 @@ (setq found-start nil) (goto-char start)) found-start) - ;; Found one. - (progn + ;; Found one. + (progn ;; Move forward over paragraph separators. ;; We know this cannot reach the place we started ;; because we know we moved back over a non-separator.