annotate lisp/textmodes/fill.el @ 22363:d00f146c3e9d

#include sys/file.h (sys_access): Provide our own implementation which recognizes D_OK. (is_exec): New function. (stat): Use it. (init_environment): Set TMPDIR to an existing directory. Abort if none of the usual places is available. (sys_rename): On Windows 95, choose a temp name that includes the original file's base name and use an explicit loop rather than calling mktemp. Only attempt to unlink the newname if the rename fails, rather than second-guessing whether the old and new names refer to the same file.
author Karl Heuer <kwzh@gnu.org>
date Fri, 05 Jun 1998 16:08:32 +0000
parents 74d1c031f824
children 5485d428a9c3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
1 ;;; fill.el --- fill commands for Emacs
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
2
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
3 ;; Copyright (C) 1985, 86, 92, 94, 95, 96, 1997 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 821
diff changeset
4
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
5 ;; Keywords: wp
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
6
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
7 ;; This file is part of GNU Emacs.
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
8
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
10 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
11 ;; the Free Software Foundation; either version 2, or (at your option)
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
12 ;; any later version.
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
13
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
14 ;; GNU Emacs is distributed in the hope that it will be useful,
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
17 ;; GNU General Public License for more details.
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
18
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
19 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14113
diff changeset
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14113
diff changeset
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14113
diff changeset
22 ;; Boston, MA 02111-1307, USA.
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
23
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2109
diff changeset
24 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2109
diff changeset
25
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2109
diff changeset
26 ;; All the commands for filling text. These are documented in the Emacs
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2109
diff changeset
27 ;; manual.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2109
diff changeset
28
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
29 ;;; Code:
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
30
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
31 (defcustom fill-individual-varying-indent nil
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
32 "*Controls criterion for a new paragraph in `fill-individual-paragraphs'.
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
33 Non-nil means changing indent doesn't end a paragraph.
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
34 That mode can handle paragraphs with extra indentation on the first line,
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
35 but it requires separator lines between paragraphs.
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
36 A value of nil means that any change in indentation starts a new paragraph."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
37 :type 'boolean
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
38 :group 'fill)
5770
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
39
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
40 (defcustom sentence-end-double-space t
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
41 "*Non-nil means a single space does not end a sentence."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
42 :type 'boolean
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
43 :group 'fill)
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
44
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
45 (defcustom colon-double-space nil
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
46 "*Non-nil means put two spaces after a colon when filling."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
47 :type 'boolean
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
48 :group 'fill)
12752
86c8fb2284de (fill-region-as-paragraph): Don't find adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 12557
diff changeset
49
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
50 (defvar fill-paragraph-function nil
13839
d597ac78b00e (fill-paragraph-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13713
diff changeset
51 "Mode-specific function to fill a paragraph, or nil if there is none.
d597ac78b00e (fill-paragraph-function): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 13713
diff changeset
52 If the function returns nil, then `fill-paragraph' does its normal work.")
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
53
17852
a9f18d920c11 (enable-kinsoku): Name changed form do-kinsoku.
Kenichi Handa <handa@m17n.org>
parents: 17664
diff changeset
54 (defvar enable-kinsoku t
19239
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
55 "*Non-nil means enable \"kinsoku\" processing on filling paragraph.
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
56 Kinsoku processing is designed to prevent certain characters from being
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
57 placed at the beginning or end of a line by filling.
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
58 See the documentation of `kinsoku' for more information.")
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
59
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
60 (defun set-fill-prefix ()
5770
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
61 "Set the fill prefix to the current line up to point.
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
62 Filling expects lines to start with the fill prefix and
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
63 reinserts the fill prefix in each resulting line."
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
64 (interactive)
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
65 (setq fill-prefix (buffer-substring
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
66 (save-excursion (move-to-left-margin) (point))
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
67 (point)))
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
68 (if (equal fill-prefix "")
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
69 (setq fill-prefix nil))
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
70 (if fill-prefix
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
71 (message "fill-prefix: \"%s\"" fill-prefix)
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
72 (message "fill-prefix cancelled")))
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
73
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
74 (defcustom adaptive-fill-mode t
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
75 "*Non-nil means determine a paragraph's fill prefix from its text."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
76 :type 'boolean
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
77 :group 'fill)
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
78
18221
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
79 (defcustom adaptive-fill-regexp "[ \t]*\\([-|#;>*]+ *\\|(?[0-9]+[.)] *\\)*"
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
80 "*Regexp to match text at start of line that constitutes indentation.
18221
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
81 If Adaptive Fill mode is enabled, a prefix matching this pattern
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
82 on the first and second lines of a paragraph is used as the
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
83 standard indentation for the whole paragraph.
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
84
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
85 If the paragraph has just one line, the indentation is taken from that
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
86 line, but in that case `adaptive-fill-first-line-regexp' also plays
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
87 a role."
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
88 :type 'regexp
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
89 :group 'fill)
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
90
19076
457a082715c8 (adaptive-fill-first-line-regexp): Fix regexp.
Richard M. Stallman <rms@gnu.org>
parents: 19010
diff changeset
91 (defcustom adaptive-fill-first-line-regexp "\\`[ \t]*\\'"
18221
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
92 "*Regexp specifying whether to set fill prefix from a one-line paragraph.
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
93 When a paragraph has just one line, then after `adaptive-fill-regexp'
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
94 finds the prefix at the beginning of the line, if it doesn't
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
95 match this regexp, it is replaced with whitespace.
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
96
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
97 By default, this regexp matches sequences of just spaces and tabs.
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
98
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
99 However, we never use a prefix from a one-line paragraph
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
100 if it would act as a paragraph-starter on the second line."
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
101 :type 'regexp
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
102 :group 'fill)
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
103
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
104 (defcustom adaptive-fill-function nil
12752
86c8fb2284de (fill-region-as-paragraph): Don't find adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 12557
diff changeset
105 "*Function to call to choose a fill prefix for a paragraph.
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
106 This function is used when `adaptive-fill-regexp' does not match."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
107 :type 'function
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
108 :group 'fill)
12752
86c8fb2284de (fill-region-as-paragraph): Don't find adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 12557
diff changeset
109
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
110 (defun current-fill-column ()
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
111 "Return the fill-column to use for this line.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
112 The fill-column to use for a buffer is stored in the variable `fill-column',
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
113 but can be locally modified by the `right-margin' text property, which is
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
114 subtracted from `fill-column'.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
115
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
116 The fill column to use for a line is the first column at which the column
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
117 number equals or exceeds the local fill-column - right-margin difference."
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
118 (save-excursion
12429
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
119 (if fill-column
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
120 (let* ((here (progn (beginning-of-line) (point)))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
121 (here-col 0)
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
122 (eol (progn (end-of-line) (point)))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
123 margin fill-col change col)
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
124 ;; Look separately at each region of line with a different right-margin.
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
125 (while (and (setq margin (get-text-property here 'right-margin)
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
126 fill-col (- fill-column (or margin 0))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
127 change (text-property-not-all
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
128 here eol 'right-margin margin))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
129 (progn (goto-char (1- change))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
130 (setq col (current-column))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
131 (< col fill-col)))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
132 (setq here change
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
133 here-col col))
d6d785d96455 (current-fill-column): If fill-column is nil, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 11448
diff changeset
134 (max here-col fill-col)))))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
135
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
136 (defun canonically-space-region (beg end)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
137 "Remove extra spaces between words in region.
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
138 Leave one space between words, two at end of sentences or after colons
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
139 \(depending on values of `sentence-end-double-space' and `colon-double-space').
12557
34e9427fe8f5 (canonically-space-region): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 12429
diff changeset
140 Remove indentation from each line."
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
141 (interactive "r")
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
142 (save-excursion
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
143 (goto-char beg)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
144 ;; Nuke tabs; they get screwed up in a fill.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
145 ;; This is quick, but loses when a tab follows the end of a sentence.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
146 ;; Actually, it is difficult to tell that from "Mr.\tSmith".
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
147 ;; Blame the typist.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
148 (subst-char-in-region beg end ?\t ?\ )
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
149 (while (and (< (point) end)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
150 (re-search-forward " *" end t))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
151 (delete-region
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
152 (+ (match-beginning 0)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
153 ;; Determine number of spaces to leave:
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
154 (save-excursion
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
155 (skip-chars-backward " ]})\"'")
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
156 (cond ((and sentence-end-double-space
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
157 (memq (preceding-char) '(?. ?? ?!))) 2)
12752
86c8fb2284de (fill-region-as-paragraph): Don't find adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 12557
diff changeset
158 ((and colon-double-space
86c8fb2284de (fill-region-as-paragraph): Don't find adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 12557
diff changeset
159 (= (preceding-char) ?:)) 2)
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
160 ((char-equal (preceding-char) ?\n) 0)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
161 (t 1))))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
162 (match-end 0)))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
163 ;; Make sure sentences ending at end of line get an extra space.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
164 ;; loses on split abbrevs ("Mr.\nSmith")
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
165 (goto-char beg)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
166 (while (and (< (point) end)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
167 (re-search-forward "[.?!][])}\"']*$" end t))
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
168 ;; We insert before markers in case a caller such as
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
169 ;; do-auto-fill has done a save-excursion with point at the end
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
170 ;; of the line and wants it to stay at the end of the line.
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
171 (insert-before-markers-and-inherit ? ))))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
172
13586
292e11b5f9c6 (fill-context-prefix): New arg first-line-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 13578
diff changeset
173 (defun fill-context-prefix (from to &optional first-line-regexp)
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
174 "Compute a fill prefix from the text between FROM and TO.
18221
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
175 This uses the variables `adaptive-fill-prefix' and `adaptive-fill-function'
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
176 and `adaptive-fill-first-line-regexp'. `paragraph-start' also plays a role;
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
177 we reject a prefix based on a one-line paragraph if that prefix would
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
178 act as a paragraph-separator."
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
179 (or first-line-regexp
5ab53c383b5c (fill-context-prefix): If we get a prefix from the
Richard M. Stallman <rms@gnu.org>
parents: 17852
diff changeset
180 (setq first-line-regexp adaptive-fill-first-line-regexp))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
181 (save-excursion
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
182 (goto-char from)
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
183 (if (eolp) (forward-line 1))
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
184 ;; Move to the second line unless there is just one.
13586
292e11b5f9c6 (fill-context-prefix): New arg first-line-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 13578
diff changeset
185 (let ((firstline (point))
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
186 first-line-prefix
13586
292e11b5f9c6 (fill-context-prefix): New arg first-line-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 13578
diff changeset
187 ;; Non-nil if we are on the second line.
292e11b5f9c6 (fill-context-prefix): New arg first-line-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 13578
diff changeset
188 at-second
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
189 second-line-prefix
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
190 start)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
191 (move-to-left-margin)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
192 (setq start (point))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
193 (setq first-line-prefix
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
194 (cond ((looking-at paragraph-start) nil)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
195 ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
196 (buffer-substring-no-properties start (match-end 0)))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
197 (adaptive-fill-function (funcall adaptive-fill-function))))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
198 (forward-line 1)
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
199 (if (>= (point) to)
13586
292e11b5f9c6 (fill-context-prefix): New arg first-line-regexp.
Richard M. Stallman <rms@gnu.org>
parents: 13578
diff changeset
200 (goto-char firstline)
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
201 (setq at-second t)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
202 (move-to-left-margin)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
203 (setq start (point))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
204 (setq second-line-prefix
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
205 (cond ((looking-at paragraph-start) nil)
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
206 ((and adaptive-fill-regexp (looking-at adaptive-fill-regexp))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
207 (buffer-substring-no-properties start (match-end 0)))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
208 (adaptive-fill-function (funcall adaptive-fill-function)))))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
209 (if at-second
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
210 ;; If we get a fill prefix from the second line,
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
211 ;; make sure it or something compatible is on the first line too.
18319
a685286cc17f (fill-context-prefix): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18283
diff changeset
212 (and second-line-prefix first-line-prefix
19220
4a2dbee243f9 (fill-context-prefix): Accept a whitespace
Richard M. Stallman <rms@gnu.org>
parents: 19076
diff changeset
213 ;; If the first line has the second line prefix too, use it.
19010
baf7d9450075 (fill-context-prefix): Be stricter about
Richard M. Stallman <rms@gnu.org>
parents: 18664
diff changeset
214 (if (or (string-match (concat "\\`"
baf7d9450075 (fill-context-prefix): Be stricter about
Richard M. Stallman <rms@gnu.org>
parents: 18664
diff changeset
215 (regexp-quote second-line-prefix)
baf7d9450075 (fill-context-prefix): Be stricter about
Richard M. Stallman <rms@gnu.org>
parents: 18664
diff changeset
216 "\\(\\'\\|[ \t]\\)")
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
217 first-line-prefix)
19220
4a2dbee243f9 (fill-context-prefix): Accept a whitespace
Richard M. Stallman <rms@gnu.org>
parents: 19076
diff changeset
218 ;; If the second line prefix is whitespace, use it.
4a2dbee243f9 (fill-context-prefix): Accept a whitespace
Richard M. Stallman <rms@gnu.org>
parents: 19076
diff changeset
219 (string-match "\\`[ \t]+\\'" second-line-prefix))
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
220 second-line-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
221 ;; If the second line has the first line prefix,
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
222 ;; plus whitespace, use the part that the first line shares.
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
223 (if (string-match (concat "\\`"
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
224 (regexp-quote first-line-prefix)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
225 "[ \t]*\\'")
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
226 second-line-prefix)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
227 first-line-prefix)))
18282
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
228 ;; If we get a fill prefix from a one-line paragraph,
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
229 ;; maybe change it to whitespace,
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
230 ;; and check that it isn't a paragraph starter.
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
231 (if first-line-prefix
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
232 (let ((result
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
233 ;; If first-line-prefix comes from the first line,
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
234 ;; see if it seems reasonable to use for all lines.
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
235 ;; If not, replace it with whitespace.
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
236 (if (or (and first-line-regexp
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
237 (string-match first-line-regexp
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
238 first-line-prefix))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
239 (and comment-start-skip
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
240 (string-match comment-start-skip
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
241 first-line-prefix)))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
242 first-line-prefix
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
243 (make-string (string-width first-line-prefix) ?\ ))))
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
244 ;; But either way, reject it if it indicates the start
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
245 ;; of a paragraph when text follows it.
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
246 (if (not (eq 0 (string-match paragraph-start
363bd42657e1 (fill-context-prefix): Fix criteria for first line,
Richard M. Stallman <rms@gnu.org>
parents: 18229
diff changeset
247 (concat result "a"))))
18283
3909cd22d5e5 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 18282
diff changeset
248 result)))))))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
249
21123
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
250 (defvar fill-nobreak-predicate nil
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
251 "If non-nil, a predicate for recognizing places not to break a line.
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
252 The predicate is called with no arguments, with point at the place
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
253 to be tested. If it returns t, fill commands do not break the line there.")
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
254
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
255 (defun fill-region-as-paragraph (from to &optional justify
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
256 nosqueeze squeeze-after)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
257 "Fill the region as one paragraph.
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
258 It removes any paragraph breaks in the region and extra newlines at the end,
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
259 indents and fills lines between the margins given by the
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
260 `current-left-margin' and `current-fill-column' functions.
18664
ccd57f42a3c4 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 18319
diff changeset
261 \(In most cases, the variable `fill-column' controls the width.)
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
262 It leaves point at the beginning of the line following the paragraph.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
263
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
264 Normally performs justification according to the `current-justification'
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
265 function, but with a prefix arg, does full justification instead.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
266
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
267 From a program, optional third arg JUSTIFY can specify any type of
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
268 justification. Fourth arg NOSQUEEZE non-nil means not to make spaces
14645
875c14f0d0db (fill-region-as-paragraph): Doc fix.
Erik Naggum <erik@naggum.no>
parents: 14621
diff changeset
269 between words canonical before filling. Fifth arg SQUEEZE-AFTER, if non-nil,
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
270 means don't canonicalize spaces before that position.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
271
5770
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
272 If `sentence-end-double-space' is non-nil, then period followed by one
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
273 space does not end a sentence, so don't break a line there."
11356
4be78e93d1be (fill-region-as-paragraph): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 11282
diff changeset
274 (interactive (list (region-beginning) (region-end)
4be78e93d1be (fill-region-as-paragraph): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 11282
diff changeset
275 (if current-prefix-arg 'full)))
21150
a9e9f674c9c9 (fill-region-as-paragraph, fill-region): Allow t as legit value of JUSTIFY.
Richard M. Stallman <rms@gnu.org>
parents: 21123
diff changeset
276 (unless (memq justify '(t nil none full center left right))
21103
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
277 (setq justify 'full))
1332
955ebdb98095 (fill-paragraph): Don't actually change point before
Richard M. Stallman <rms@gnu.org>
parents: 1067
diff changeset
278 ;; Arrange for undoing the fill to restore point.
955ebdb98095 (fill-paragraph): Don't actually change point before
Richard M. Stallman <rms@gnu.org>
parents: 1067
diff changeset
279 (if (and buffer-undo-list (not (eq buffer-undo-list t)))
955ebdb98095 (fill-paragraph): Don't actually change point before
Richard M. Stallman <rms@gnu.org>
parents: 1067
diff changeset
280 (setq buffer-undo-list (cons (point) buffer-undo-list)))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
281
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
282 ;; Make sure "to" is the endpoint.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
283 (goto-char (min from to))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
284 (setq to (max from to))
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
285 ;; Ignore blank lines at beginning of region.
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
286 (skip-chars-forward " \t\n")
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
287
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
288 (let ((from-plus-indent (point))
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
289 (oneleft nil))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
290
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
291 (beginning-of-line)
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
292 (setq from (point))
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
293
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
294 ;; Delete all but one soft newline at end of region.
14113
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
295 ;; And leave TO before that one.
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
296 (goto-char to)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
297 (while (and (> (point) from) (eq ?\n (char-after (1- (point)))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
298 (if (and oneleft
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
299 (not (and use-hard-newlines
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
300 (get-text-property (1- (point)) 'hard))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
301 (delete-backward-char 1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
302 (backward-char 1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
303 (setq oneleft t)))
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
304 (setq to (point))
22198
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
305 ;;; ;; If there was no newline, and there is text in the paragraph, then
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
306 ;;; ;; create a newline.
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
307 ;;; (if (and (not oneleft) (> to from-plus-indent))
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
308 ;;; (newline))
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
309 (goto-char from-plus-indent))
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
310
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
311 (if (not (> to (point)))
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
312 nil ; There is no paragraph, only whitespace: exit now.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
313
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
314 (or justify (setq justify (current-justification)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
315
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
316 ;; Don't let Adaptive Fill mode alter the fill prefix permanently.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
317 (let ((fill-prefix fill-prefix))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
318 ;; Figure out how this paragraph is indented, if desired.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
319 (if (and adaptive-fill-mode
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
320 (or (null fill-prefix) (string= fill-prefix "")))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
321 (setq fill-prefix (fill-context-prefix from to)))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
322
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
323 (save-restriction
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
324 (goto-char from)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
325 (beginning-of-line)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
326 (narrow-to-region (point) to)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
327
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
328 (if (not justify) ; filling disabled: just check indentation
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
329 (progn
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
330 (goto-char from)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
331 (while (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
332 (if (and (not (eolp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
333 (< (current-indentation) (current-left-margin)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
334 (indent-to-left-margin))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
335 (forward-line 1)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
336
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
337 (if use-hard-newlines
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
338 (remove-text-properties from (point-max) '(hard nil)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
339 ;; Make sure first line is indented (at least) to left margin...
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
340 (if (or (memq justify '(right center))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
341 (< (current-indentation) (current-left-margin)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
342 (indent-to-left-margin))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
343 ;; Delete the fill prefix from every line except the first.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
344 ;; The first line may not even have a fill prefix.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
345 (goto-char from)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
346 (let ((fpre (and fill-prefix (not (equal fill-prefix ""))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
347 (concat "[ \t]*"
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
348 (regexp-quote fill-prefix)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
349 "[ \t]*"))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
350 (and fpre
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
351 (progn
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
352 (if (>= (+ (current-left-margin) (length fill-prefix))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
353 (current-fill-column))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
354 (error "fill-prefix too long for specified width"))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
355 (goto-char from)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
356 (forward-line 1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
357 (while (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
358 (if (looking-at fpre)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
359 (delete-region (point) (match-end 0)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
360 (forward-line 1))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
361 (goto-char from)
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
362 (if (looking-at fpre)
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
363 (goto-char (match-end 0)))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
364 (setq from (point)))))
11178
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
365 ;; Remove indentation from lines other than the first.
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
366 (beginning-of-line 2)
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
367 (indent-region (point) (point-max) 0)
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
368 (goto-char from)
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
369
7d4805feb413 (fill-region-as-paragraph): Remove fill-prefix first, then remove indentation.
Richard M. Stallman <rms@gnu.org>
parents: 10989
diff changeset
370 ;; FROM, and point, are now before the text to fill,
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
371 ;; but after any fill prefix on the first line.
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
372
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
373 ;; Make sure sentences ending at end of line get an extra space.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
374 ;; loses on split abbrevs ("Mr.\nSmith")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
375 (while (re-search-forward "[.?!][])}\"']*$" nil t)
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
376 (or (eobp) (insert-and-inherit ?\ )))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
377 (goto-char from)
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
378 ;; The character category `|' means that we can break a line
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
379 ;; at the character. Since we don't need a space between
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
380 ;; them, delete all newlines between them ...
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
381 (while (re-search-forward "\\c|\n\\|\n\\c|" nil t)
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
382 (if (bolp)
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
383 (delete-char -1)
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
384 (if (= (char-before (match-beginning 0)) ?\ )
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
385 ;; ... except when there is end of sentence. The
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
386 ;; variable `sentence-end-double-space' is handled
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
387 ;; properly later.
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
388 nil
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
389 (delete-region (match-beginning 0) (1+ (match-beginning 0))))))
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
390 (goto-char from)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
391 (skip-chars-forward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
392 ;; Then change all newlines to spaces.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
393 (subst-char-in-region from (point-max) ?\n ?\ )
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
394 (if (and nosqueeze (not (eq justify 'full)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
395 nil
14621
f989cff391f1 (canonically-space-region): Use insert-before-markers
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
396 (canonically-space-region (or squeeze-after (point)) (point-max))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
397 (goto-char (point-max))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
398 (delete-horizontal-space)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
399 (insert-and-inherit " "))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
400 (goto-char (point-min))
218
d492f16a8743 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 75
diff changeset
401
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
402 ;; This is the actual filling loop.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
403 (let ((prefixcol 0) linebeg)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
404 (while (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
405 (setq linebeg (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
406 (move-to-column (1+ (current-fill-column)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
407 (if (eobp)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
408 (or nosqueeze (delete-horizontal-space))
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
409 ;; Move back to the point where we can break the line
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
410 ;; at. We break the line between word or after/before
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
411 ;; the character which has character category `|'. We
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
412 ;; search space, \c| followed by a character, or \c|
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
413 ;; following a character. If not found, place
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
414 ;; the point at linebeg.
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
415 (if (re-search-backward " \\|\\c|.\\|.\\c|" linebeg 0)
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
416 ;; In case of space, we place the point at next to
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
417 ;; the point where the break occurs acutually,
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
418 ;; because we don't want to change the following
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
419 ;; logic of original Emacs. In case of \c|, the
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
420 ;; point is at the place where the break occurs.
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
421 (forward-char 1))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
422 ;; Don't break after a period followed by just one space.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
423 ;; Move back to the previous place to break.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
424 ;; The reason is that if a period ends up at the end of a line,
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
425 ;; further fills will assume it ends a sentence.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
426 ;; If we now know it does not end a sentence,
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
427 ;; avoid putting it at the end of the line.
21123
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
428 (while (or (and sentence-end-double-space
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
429 (> (point) (+ linebeg 2))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
430 (eq (preceding-char) ?\ )
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
431 (not (eq (following-char) ?\ ))
21123
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
432 (eq (char-after (- (point) 2)) ?\.)
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
433 (progn (forward-char -2) t))
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
434 (and fill-nobreak-predicate
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
435 (funcall fill-nobreak-predicate)
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
436 (goto-char (match-beginning 0))))
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
437 (if (re-search-backward " \\|\\c|.\\|.\\c|" linebeg 0)
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
438 (forward-char 1)))
13549
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
439 ;; If the left margin and fill prefix by themselves
14840
dfbf6fd50825 (fill-region-as-paragraph): Fix the second check for
Richard M. Stallman <rms@gnu.org>
parents: 14827
diff changeset
440 ;; pass the fill-column. or if they are zero
dfbf6fd50825 (fill-region-as-paragraph): Fix the second check for
Richard M. Stallman <rms@gnu.org>
parents: 14827
diff changeset
441 ;; but we have no room for even one word,
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
442 ;; keep at least one word or a character which has
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
443 ;; category `|'anyway .
13549
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
444 ;; This handles ALL BUT the first line of the paragraph.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
445 (if (if (zerop prefixcol)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
446 (save-excursion
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
447 (skip-chars-backward " \t" linebeg)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
448 (bolp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
449 (>= prefixcol (current-column)))
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
450 ;; Ok, skip at least one word or one \c| character.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
451 ;; Meanwhile, don't stop at a period followed by one space.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
452 (let ((first t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
453 (move-to-column prefixcol)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
454 (while (and (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
455 (or first
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
456 (and (not (bobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
457 sentence-end-double-space
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
458 (save-excursion (forward-char -1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
459 (and (looking-at "\\. ")
21123
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
460 (not (looking-at "\\. ")))))
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
461 (and fill-nobreak-predicate
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
462 (funcall fill-nobreak-predicate))))
20234
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
463 ;; Find a breakable point while ignoring the
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
464 ;; following spaces.
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
465 (skip-chars-forward " \t")
20234
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
466 (if (looking-at "\\c|")
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
467 (forward-char 1)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
468 (let ((pos (save-excursion
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
469 (skip-chars-forward "^ \n\t")
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
470 (point))))
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
471 (if (re-search-forward "\\c|" pos t)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
472 (forward-char -1)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
473 (goto-char pos))))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
474 (setq first nil)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
475 ;; Normally, move back over the single space between the words.
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
476 (if (= (preceding-char) ?\ ) (forward-char -1))
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
477 ;; Do KINSOKU processing.
19239
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
478 (if (and enable-multibyte-characters enable-kinsoku
8298b8a6a47d (enable-kinsoku): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19220
diff changeset
479 (save-excursion
20822
654535610cf7 (fill-region-as-paragraph): Fix the test for any
Richard M. Stallman <rms@gnu.org>
parents: 20263
diff changeset
480 (goto-char (point-min))
654535610cf7 (fill-region-as-paragraph): Fix the test for any
Richard M. Stallman <rms@gnu.org>
parents: 20263
diff changeset
481 (skip-chars-forward "\0-\177")
654535610cf7 (fill-region-as-paragraph): Fix the test for any
Richard M. Stallman <rms@gnu.org>
parents: 20263
diff changeset
482 (/= (point) (point-max))))
17852
a9f18d920c11 (enable-kinsoku): Name changed form do-kinsoku.
Kenichi Handa <handa@m17n.org>
parents: 17664
diff changeset
483 (kinsoku linebeg)))
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
484
13549
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
485 ;; If the left margin and fill prefix by themselves
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
486 ;; pass the fill-column, keep at least one word.
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
487 ;; This handles the first line of the paragraph.
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
488 (if (and (zerop prefixcol)
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
489 (let ((fill-point (point)) nchars)
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
490 (save-excursion
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
491 (move-to-left-margin)
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
492 (setq nchars (- fill-point (point)))
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
493 (or (< nchars 0)
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
494 (and fill-prefix
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
495 (< nchars (length fill-prefix))
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
496 (string= (buffer-substring (point) fill-point)
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
497 (substring fill-prefix 0 nchars)))))))
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
498 ;; Ok, skip at least one word. But
f8afa95d197e (fill-region-as-paragraph): Handle left margin extending to or past
Richard M. Stallman <rms@gnu.org>
parents: 13548
diff changeset
499 ;; don't stop at a period followed by just one space.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
500 (let ((first t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
501 (while (and (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
502 (or first
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
503 (and (not (bobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
504 sentence-end-double-space
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
505 (save-excursion (forward-char -1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
506 (and (looking-at "\\. ")
21123
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
507 (not (looking-at "\\. ")))))
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
508 (and fill-nobreak-predicate
e1c817a29b2d (fill-nobreak-predicate): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 21103
diff changeset
509 (funcall fill-nobreak-predicate))))
20234
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
510 ;; Find a breakable point while ignoring the
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
511 ;; following spaces.
13578
85697e02a482 (fill-region-as-paragraph): Remove redundant "setq from".
Richard M. Stallman <rms@gnu.org>
parents: 13549
diff changeset
512 (skip-chars-forward " \t")
20234
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
513 (if (looking-at "\\c|")
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
514 (forward-char 1)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
515 (let ((pos (save-excursion
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
516 (skip-chars-forward "^ \n\t")
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
517 (point))))
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
518 (if (re-search-forward "\\c|" pos t)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
519 (forward-char -1)
a21b3ed1915e (fill-region-as-paragraph): Fix bug of
Kenichi Handa <handa@m17n.org>
parents: 19929
diff changeset
520 (goto-char pos))))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
521 (setq first nil))))
14113
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
522 ;; Check again to see if we got to the end of the paragraph.
14840
dfbf6fd50825 (fill-region-as-paragraph): Fix the second check for
Richard M. Stallman <rms@gnu.org>
parents: 14827
diff changeset
523 (if (save-excursion (skip-chars-forward " \t") (eobp))
14113
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
524 (or nosqueeze (delete-horizontal-space))
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
525 ;; Replace whitespace here with one newline, then indent to left
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
526 ;; margin.
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
527 (skip-chars-backward " \t")
16998
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
528 (if (and (= (following-char) ?\ )
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
529 (or (aref (char-category-set (preceding-char)) ?|)
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
530 (looking-at "[ \t]+\\c|")))
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
531 ;; We need one space at end of line so that
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
532 ;; further filling won't delete it. NOTE: We
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
533 ;; intentionally leave this one space to
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
534 ;; distingush the case that user wants to put
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
535 ;; space between \c| characters.
98f917a99501 (do-kinsoku): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 16687
diff changeset
536 (forward-char 1))
14113
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
537 (insert ?\n)
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
538 ;; Give newline the properties of the space(s) it replaces
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
539 (set-text-properties (1- (point)) (point)
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
540 (text-properties-at (point)))
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
541 (indent-to-left-margin)
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
542 ;; Insert the fill prefix after indentation.
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
543 ;; Set prefixcol so whitespace in the prefix won't get lost.
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
544 (and fill-prefix (not (equal fill-prefix ""))
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
545 (progn
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
546 (insert-and-inherit fill-prefix)
dfbb4ab9bee1 (fill-region-as-paragraph): Check again for reaching
Karl Heuer <kwzh@gnu.org>
parents: 13981
diff changeset
547 (setq prefixcol (current-column))))))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
548 ;; Justify the line just ended, if desired.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
549 (if justify
19317
09398d892cf7 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 19239
diff changeset
550 (if (save-excursion (skip-chars-forward " \t") (eobp))
09398d892cf7 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 19239
diff changeset
551 (progn
09398d892cf7 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 19239
diff changeset
552 (delete-horizontal-space)
09398d892cf7 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 19239
diff changeset
553 (justify-current-line justify t t))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
554 (forward-line -1)
11356
4be78e93d1be (fill-region-as-paragraph): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 11282
diff changeset
555 (justify-current-line justify nil t)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
556 (forward-line 1))))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
557 ;; Leave point after final newline.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
558 (goto-char (point-max)))
22198
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
559 (unless (eobp)
74d1c031f824 (fill-region-as-paragraph):
Richard M. Stallman <rms@gnu.org>
parents: 21727
diff changeset
560 (forward-char 1)))))
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
561
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
562 (defun fill-paragraph (arg)
5770
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
563 "Fill paragraph at or after point. Prefix arg means justify as well.
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
564 If `sentence-end-double-space' is non-nil, then period followed by one
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
565 space does not end a sentence, so don't break a line there.
18664
ccd57f42a3c4 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 18319
diff changeset
566 the variable `fill-column' controls the width for filling.
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
567
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
568 If `fill-paragraph-function' is non-nil, we call it (passing our
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
569 argument to it), and if it returns non-nil, we simply return its value."
11448
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
570 (interactive (list (if current-prefix-arg 'full)))
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
571 (or (and fill-paragraph-function
10636
6f9d0e697678 (fill-paragraph): Bind fill-paragraph-function to nil before calling it.
Richard M. Stallman <rms@gnu.org>
parents: 10631
diff changeset
572 (let ((function fill-paragraph-function)
6f9d0e697678 (fill-paragraph): Bind fill-paragraph-function to nil before calling it.
Richard M. Stallman <rms@gnu.org>
parents: 10631
diff changeset
573 fill-paragraph-function)
6f9d0e697678 (fill-paragraph): Bind fill-paragraph-function to nil before calling it.
Richard M. Stallman <rms@gnu.org>
parents: 10631
diff changeset
574 (funcall function arg)))
10631
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
575 (let ((before (point)))
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
576 (save-excursion
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
577 (forward-paragraph)
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
578 (or (bolp) (newline 1))
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
579 (let ((end (point))
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
580 (beg (progn (backward-paragraph) (point))))
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
581 (goto-char before)
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
582 (if use-hard-newlines
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
583 ;; Can't use fill-region-as-paragraph, since this paragraph may
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
584 ;; still contain hard newlines. See fill-region.
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
585 (fill-region beg end arg)
dc245bfecc3b (fill-paragraph-function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10543
diff changeset
586 (fill-region-as-paragraph beg end arg)))))))
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
587
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
588 (defun fill-region (from to &optional justify nosqueeze to-eop)
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
589 "Fill each of the paragraphs in the region.
21103
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
590 A prefix arg means justify as well.
18664
ccd57f42a3c4 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 18319
diff changeset
591 Ordinarily the variable `fill-column' controls the width.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
592
21103
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
593 Noninteractively, the third argument JUSTIFY specifies which
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
594 kind of justification to do: `full', `left', `right', `center',
21150
a9e9f674c9c9 (fill-region-as-paragraph, fill-region): Allow t as legit value of JUSTIFY.
Richard M. Stallman <rms@gnu.org>
parents: 21123
diff changeset
595 or `none' (equivalent to nil). t means handle each paragraph
a9e9f674c9c9 (fill-region-as-paragraph, fill-region): Allow t as legit value of JUSTIFY.
Richard M. Stallman <rms@gnu.org>
parents: 21123
diff changeset
596 as specified by its text properties.
a9e9f674c9c9 (fill-region-as-paragraph, fill-region): Allow t as legit value of JUSTIFY.
Richard M. Stallman <rms@gnu.org>
parents: 21123
diff changeset
597
21103
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
598 The fourth arg NOSQUEEZE non-nil means to leave
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
599 whitespace other than line breaks untouched, and fifth arg TO-EOP
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
600 non-nil means to keep filling to the end of the paragraph (or next
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
601 hard newline, if `use-hard-newlines' is on).
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
602
5770
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
603 If `sentence-end-double-space' is non-nil, then period followed by one
92dd602768d2 (sentence-end-double-space): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 5291
diff changeset
604 space does not end a sentence, so don't break a line there."
11448
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
605 (interactive (list (region-beginning) (region-end)
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
606 (if current-prefix-arg 'full)))
21150
a9e9f674c9c9 (fill-region-as-paragraph, fill-region): Allow t as legit value of JUSTIFY.
Richard M. Stallman <rms@gnu.org>
parents: 21123
diff changeset
607 (unless (memq justify '(t nil none full center left right))
21103
8e12f5209e37 (fill-region): If JUSTIFY is non-nil
Richard M. Stallman <rms@gnu.org>
parents: 20822
diff changeset
608 (setq justify 'full))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
609 (let (end beg)
10110
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
610 (save-restriction
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
611 (goto-char (max from to))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
612 (if to-eop
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
613 (progn (skip-chars-backward "\n")
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
614 (forward-paragraph)))
10110
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
615 (setq end (point))
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
616 (goto-char (setq beg (min from to)))
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
617 (beginning-of-line)
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
618 (narrow-to-region (point) end)
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
619 (while (not (eobp))
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
620 (let ((initial (point))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
621 end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
622 ;; If using hard newlines, break at every one for filling
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
623 ;; purposes rather than using paragraph breaks.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
624 (if use-hard-newlines
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
625 (progn
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
626 (while (and (setq end (text-property-any (point) (point-max)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
627 'hard t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
628 (not (= ?\n (char-after end)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
629 (not (= end (point-max))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
630 (goto-char (1+ end)))
11282
3da60d3584c4 (fill-region): Avoid error on reaching end of buffer.
Richard M. Stallman <rms@gnu.org>
parents: 11247
diff changeset
631 (setq end (if end (min (point-max) (1+ end)) (point-max)))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
632 (goto-char initial))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
633 (forward-paragraph 1)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
634 (setq end (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
635 (forward-paragraph -1))
10110
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
636 (if (< (point) beg)
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
637 (goto-char beg))
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
638 (if (>= (point) initial)
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
639 (fill-region-as-paragraph (point) end justify nosqueeze)
10110
18d52489f138 (fill-region-as-paragraph): If region starts in mid-line,
Richard M. Stallman <rms@gnu.org>
parents: 9706
diff changeset
640 (goto-char end)))))))
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
641
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
642
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
643 (defcustom default-justification 'left
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
644 "*Method of justifying text not otherwise specified.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
645 Possible values are `left', `right', `full', `center', or `none'.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
646 The requested kind of justification is done whenever lines are filled.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
647 The `justification' text-property can locally override this variable.
17664
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
648 This variable automatically becomes buffer-local when set in any fashion."
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
649 :type '(choice (const left)
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
650 (const right)
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
651 (const full)
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
652 (const center)
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
653 (const none))
d8cb277f0ce8 Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16998
diff changeset
654 :group 'fill)
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
655 (make-variable-buffer-local 'default-justification)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
656
10472
82ff279a4cea (current-justification): Renamed from current-justification. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 10468
diff changeset
657 (defun current-justification ()
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
658 "How should we justify this line?
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
659 This returns the value of the text-property `justification',
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
660 or the variable `default-justification' if there is no text-property.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
661 However, it returns nil rather than `none' to mean \"don't justify\"."
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
662 (let ((j (or (get-text-property
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
663 ;; Make sure we're looking at paragraph body.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
664 (save-excursion (skip-chars-forward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
665 (if (and (eobp) (not (bobp)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
666 (1- (point)) (point)))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
667 'justification)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
668 default-justification)))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
669 (if (eq 'none j)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
670 nil
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
671 j)))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
672
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
673 (defun set-justification (begin end value &optional whole-par)
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
674 "Set the region's justification style.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
675 The kind of justification to use is prompted for.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
676 If the mark is not active, this command operates on the current paragraph.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
677 If the mark is active, the region is used. However, if the beginning and end
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
678 of the region are not at paragraph breaks, they are moved to the beginning and
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
679 end of the paragraphs they are in.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
680 If `use-hard-newlines' is true, all hard newlines are taken to be paragraph
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
681 breaks.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
682
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
683 When calling from a program, operates just on region between BEGIN and END,
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
684 unless optional fourth arg WHOLE-PAR is non-nil. In that case bounds are
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
685 extended to include entire paragraphs as in the interactive command."
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
686 (interactive (list (if mark-active (region-beginning) (point))
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
687 (if mark-active (region-end) (point))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
688 (let ((s (completing-read
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
689 "Set justification to: "
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
690 '(("left") ("right") ("full")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
691 ("center") ("none"))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
692 nil t)))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
693 (if (equal s "") (error ""))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
694 (intern s))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
695 t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
696 (save-excursion
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
697 (save-restriction
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
698 (if whole-par
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
699 (let ((paragraph-start (if use-hard-newlines "." paragraph-start))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
700 (paragraph-ignore-fill-prefix (if use-hard-newlines t
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
701 paragraph-ignore-fill-prefix)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
702 (goto-char begin)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
703 (while (and (bolp) (not (eobp))) (forward-char 1))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
704 (backward-paragraph)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
705 (setq begin (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
706 (goto-char end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
707 (skip-chars-backward " \t\n" begin)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
708 (forward-paragraph)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
709 (setq end (point))))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
710
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
711 (narrow-to-region (point-min) end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
712 (unjustify-region begin (point-max))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
713 (put-text-property begin (point-max) 'justification value)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
714 (fill-region begin (point-max) nil t))))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
715
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
716 (defun set-justification-none (b e)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
717 "Disable automatic filling for paragraphs in the region.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
718 If the mark is not active, this applies to the current paragraph."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
719 (interactive (list (if mark-active (region-beginning) (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
720 (if mark-active (region-end) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
721 (set-justification b e 'none t))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
722
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
723 (defun set-justification-left (b e)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
724 "Make paragraphs in the region left-justified.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
725 This is usually the default, but see the variable `default-justification'.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
726 If the mark is not active, this applies to the current paragraph."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
727 (interactive (list (if mark-active (region-beginning) (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
728 (if mark-active (region-end) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
729 (set-justification b e 'left t))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
730
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
731 (defun set-justification-right (b e)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
732 "Make paragraphs in the region right-justified:
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
733 Flush at the right margin and ragged on the left.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
734 If the mark is not active, this applies to the current paragraph."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
735 (interactive (list (if mark-active (region-beginning) (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
736 (if mark-active (region-end) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
737 (set-justification b e 'right t))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
738
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
739 (defun set-justification-full (b e)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
740 "Make paragraphs in the region fully justified:
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
741 This makes lines flush on both margins by inserting spaces between words.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
742 If the mark is not active, this applies to the current paragraph."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
743 (interactive (list (if mark-active (region-beginning) (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
744 (if mark-active (region-end) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
745 (set-justification b e 'full t))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
746
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
747 (defun set-justification-center (b e)
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
748 "Make paragraphs in the region centered.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
749 If the mark is not active, this applies to the current paragraph."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
750 (interactive (list (if mark-active (region-beginning) (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
751 (if mark-active (region-end) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
752 (set-justification b e 'center t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
753
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
754 ;; A line has up to six parts:
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
755 ;;
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
756 ;; >>> hello.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
757 ;; [Indent-1][FP][ Indent-2 ][text][trailing whitespace][newline]
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
758 ;;
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
759 ;; "Indent-1" is the left-margin indentation; normally it ends at column
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
760 ;; given by the `current-left-margin' function.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
761 ;; "FP" is the fill-prefix. It can be any string, including whitespace.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
762 ;; "Indent-2" is added to justify a line if the `current-justification' is
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
763 ;; `center' or `right'. In `left' and `full' justification regions, any
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
764 ;; whitespace there is part of the line's text, and should not be changed.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
765 ;; Trailing whitespace is not counted as part of the line length when
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
766 ;; center- or right-justifying.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
767 ;;
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
768 ;; All parts of the line are optional, although the final newline can
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
769 ;; only be missing on the last line of the buffer.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
770
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
771 (defun justify-current-line (&optional how eop nosqueeze)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
772 "Do some kind of justification on this line.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
773 Normally does full justification: adds spaces to the line to make it end at
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
774 the column given by `current-fill-column'.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
775 Optional first argument HOW specifies alternate type of justification:
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
776 it can be `left', `right', `full', `center', or `none'.
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
777 If HOW is t, will justify however the `current-justification' function says to.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
778 If HOW is nil or missing, full justification is done by default.
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
779 Second arg EOP non-nil means that this is the last line of the paragraph, so
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
780 it will not be stretched by full justification.
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
781 Third arg NOSQUEEZE non-nil means to leave interior whitespace unchanged,
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
782 otherwise it is made canonical."
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
783 (interactive)
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
784 (if (eq t how) (setq how (or (current-justification) 'none))
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
785 (if (null how) (setq how 'full)
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
786 (or (memq how '(none left right center))
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
787 (setq how 'full))))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
788 (or (memq how '(none left)) ; No action required for these.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
789 (let ((fc (current-fill-column))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
790 (pos (point-marker))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
791 fp-end ; point at end of fill prefix
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
792 beg ; point at beginning of line's text
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
793 end ; point at end of line's text
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
794 indent ; column of `beg'
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
795 endcol ; column of `end'
21727
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
796 ncols ; new indent point or offset
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
797 (nspaces 0) ; number of spaces between words
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
798 ; in line (not space characters)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
799 fracspace ; fractional amount of space to be
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
800 ; added between each words
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
801 (curr-fracspace 0) ; current fractional space amount
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
802 count)
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
803 (end-of-line)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
804 ;; Check if this is the last line of the paragraph.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
805 (if (and use-hard-newlines (null eop)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
806 (get-text-property (point) 'hard))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
807 (setq eop t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
808 (skip-chars-backward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
809 ;; Quick exit if it appears to be properly justified already
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
810 ;; or there is no text.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
811 (if (or (bolp)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
812 (and (memq how '(full right))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
813 (= (current-column) fc)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
814 nil
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
815 (setq end (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
816 (beginning-of-line)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
817 (skip-chars-forward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
818 ;; Skip over fill-prefix.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
819 (if (and fill-prefix
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
820 (not (string-equal fill-prefix ""))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
821 (equal fill-prefix
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
822 (buffer-substring
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
823 (point) (min (point-max) (+ (length fill-prefix)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
824 (point))))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
825 (forward-char (length fill-prefix))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
826 (if (and adaptive-fill-mode
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
827 (looking-at adaptive-fill-regexp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
828 (goto-char (match-end 0))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
829 (setq fp-end (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
830 (skip-chars-forward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
831 ;; This is beginning of the line's text.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
832 (setq indent (current-column))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
833 (setq beg (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
834 (goto-char end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
835 (setq endcol (current-column))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
836
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
837 ;; HOW can't be null or left--we would have exited already
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
838 (cond ((eq 'right how)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
839 (setq ncols (- fc endcol))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
840 (if (< ncols 0)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
841 ;; Need to remove some indentation
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
842 (delete-region
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
843 (progn (goto-char fp-end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
844 (if (< (current-column) (+ indent ncols))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
845 (move-to-column (+ indent ncols) t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
846 (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
847 (progn (move-to-column indent) (point)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
848 ;; Need to add some
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
849 (goto-char beg)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
850 (indent-to (+ indent ncols))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
851 ;; If point was at beginning of text, keep it there.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
852 (if (= beg pos)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
853 (move-marker pos (point)))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
854
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
855 ((eq 'center how)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
856 ;; Figure out how much indentation is needed
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
857 (setq ncols (+ (current-left-margin)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
858 (/ (- fc (current-left-margin) ;avail. space
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
859 (- endcol indent)) ;text width
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
860 2)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
861 (if (< ncols indent)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
862 ;; Have too much indentation - remove some
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
863 (delete-region
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
864 (progn (goto-char fp-end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
865 (if (< (current-column) ncols)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
866 (move-to-column ncols t))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
867 (point))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
868 (progn (move-to-column indent) (point)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
869 ;; Have too little - add some
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
870 (goto-char beg)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
871 (indent-to ncols)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
872 ;; If point was at beginning of text, keep it there.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
873 (if (= beg pos)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
874 (move-marker pos (point)))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
875
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
876 ((eq 'full how)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
877 ;; Insert extra spaces between words to justify line
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
878 (save-restriction
10543
3b896847b849 (justify-current-line): Avoid error comparing fill-prefix
Richard M. Stallman <rms@gnu.org>
parents: 10497
diff changeset
879 (narrow-to-region beg end)
3b896847b849 (justify-current-line): Avoid error comparing fill-prefix
Richard M. Stallman <rms@gnu.org>
parents: 10497
diff changeset
880 (or nosqueeze
3b896847b849 (justify-current-line): Avoid error comparing fill-prefix
Richard M. Stallman <rms@gnu.org>
parents: 10497
diff changeset
881 (canonically-space-region beg end))
3b896847b849 (justify-current-line): Avoid error comparing fill-prefix
Richard M. Stallman <rms@gnu.org>
parents: 10497
diff changeset
882 (goto-char (point-max))
21727
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
883 ;; count word spaces in line
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
884 (while (search-backward " " nil t)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
885 (setq nspaces (1+ nspaces))
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
886 (skip-chars-backward " "))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
887 (setq ncols (- fc endcol))
21727
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
888 ;; Ncols is number of additional space chars needed
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
889 (if (and (> ncols 0) (> nspaces 0) (not eop))
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
890 (progn
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
891 (setq curr-fracspace (+ ncols (/ (1+ nspaces) 2))
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
892 count nspaces)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
893 (while (> count 0)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
894 (skip-chars-forward " ")
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
895 (insert-and-inherit
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
896 (make-string (/ curr-fracspace nspaces) ?\ ))
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
897 (search-forward " " nil t)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
898 (setq count (1- count)
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
899 curr-fracspace
88afa87063ff (justify-current-line): Use new algorithm to apportion the spaces to be added.
Richard M. Stallman <rms@gnu.org>
parents: 21150
diff changeset
900 (+ (% curr-fracspace nspaces) ncols)))))))
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
901 (t (error "Unknown justification value"))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
902 (goto-char pos)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
903 (move-marker pos nil)))
2109
73485780a8f9 * simple.el (yank, yank-pop): Always return nil; don't rely on
Jim Blandy <jimb@redhat.com>
parents: 1332
diff changeset
904 nil)
9026
74fd93bc3568 (justify-current-line): Inherit props when inserting spaces.
Richard M. Stallman <rms@gnu.org>
parents: 8363
diff changeset
905
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
906 (defun unjustify-current-line ()
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
907 "Remove justification whitespace from current line.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
908 If the line is centered or right-justified, this function removes any
13981
6758b889a7c1 (fill-context-prefix, unjustify-current-line,
Karl Heuer <kwzh@gnu.org>
parents: 13839
diff changeset
909 indentation past the left margin. If the line is full-justified, it removes
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
910 extra spaces between words. It does nothing in other justification modes."
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
911 (let ((justify (current-justification)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
912 (cond ((eq 'left justify) nil)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
913 ((eq nil justify) nil)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
914 ((eq 'full justify) ; full justify: remove extra spaces
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
915 (beginning-of-line-text)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
916 (canonically-space-region
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
917 (point) (save-excursion (end-of-line) (point))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
918 ((memq justify '(center right))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
919 (save-excursion
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
920 (move-to-left-margin nil t)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
921 ;; Position ourselves after any fill-prefix.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
922 (if (and fill-prefix
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
923 (not (string-equal fill-prefix ""))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
924 (equal fill-prefix
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
925 (buffer-substring
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
926 (point) (min (point-max) (+ (length fill-prefix)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
927 (point))))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
928 (forward-char (length fill-prefix)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
929 (delete-region (point) (progn (skip-chars-forward " \t")
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
930 (point))))))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
931
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
932 (defun unjustify-region (&optional begin end)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
933 "Remove justification whitespace from region.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
934 For centered or right-justified regions, this function removes any indentation
13981
6758b889a7c1 (fill-context-prefix, unjustify-current-line,
Karl Heuer <kwzh@gnu.org>
parents: 13839
diff changeset
935 past the left margin from each line. For full-justified lines, it removes
10811
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
936 extra spaces between words. It does nothing in other justification modes.
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
937 Arguments BEGIN and END are optional; default is the whole buffer."
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
938 (save-excursion
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
939 (save-restriction
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
940 (if end (narrow-to-region (point-min) end))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
941 (goto-char (or begin (point-min)))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
942 (while (not (eobp))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
943 (unjustify-current-line)
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
944 (forward-line 1)))))
7f9e55cdc349 (set-fill-prefix): start from left-margin.
Boris Goldowsky <boris@gnu.org>
parents: 10636
diff changeset
945
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
946
2520
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
947 (defun fill-nonuniform-paragraphs (min max &optional justifyp mailp)
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
948 "Fill paragraphs within the region, allowing varying indentation within each.
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
949 This command divides the region into \"paragraphs\",
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
950 only at paragraph-separator lines, then fills each paragraph
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
951 using as the fill prefix the smallest indentation of any line
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
952 in the paragraph.
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
953
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
954 When calling from a program, pass range to fill as first two arguments.
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
955
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
956 Optional third and fourth arguments JUSTIFY and MAIL-FLAG:
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
957 JUSTIFY to justify paragraphs (prefix arg),
2520
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
958 MAIL-FLAG for a mail message, i. e. don't fill header lines."
11448
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
959 (interactive (list (region-beginning) (region-end)
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
960 (if current-prefix-arg 'full)))
2520
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
961 (let ((fill-individual-varying-indent t))
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
962 (fill-individual-paragraphs min max justifyp mailp)))
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
963
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
964 (defun fill-individual-paragraphs (min max &optional justify mailp)
2520
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
965 "Fill paragraphs of uniform indentation within the region.
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
966 This command divides the region into \"paragraphs\",
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
967 treating every change in indentation level or prefix as a paragraph boundary,
2520
ef643dbb7d40 (fill-nonuniform-paragraphs): New command.
Richard M. Stallman <rms@gnu.org>
parents: 2412
diff changeset
968 then fills each paragraph using its indentation level as the fill prefix.
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
969
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
970 There is one special case where a change in indentation does not start
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
971 a new paragraph. This is for text of this form:
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
972
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
973 foo> This line with extra indentation starts
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
974 foo> a paragraph that continues on more lines.
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
975
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
976 These lines are filled together.
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
977
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
978 When calling from a program, pass the range to fill
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
979 as the first two arguments.
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
980
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
981 Optional third and fourth arguments JUSTIFY and MAIL-FLAG:
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
982 JUSTIFY to justify paragraphs (prefix arg),
75
a13ef7914930 Initial revision
root <root>
parents:
diff changeset
983 MAIL-FLAG for a mail message, i. e. don't fill header lines."
11448
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
984 (interactive (list (region-beginning) (region-end)
b0a7e8ff84ad (fill-paragraph, fill-region, fill-nonuniform-paragraphs)
Richard M. Stallman <rms@gnu.org>
parents: 11356
diff changeset
985 (if current-prefix-arg 'full)))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
986 (save-restriction
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
987 (save-excursion
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
988 (goto-char min)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
989 (beginning-of-line)
9706
f5f7d07eece8 (fill-individual-paragraphs): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents: 9217
diff changeset
990 (narrow-to-region (point) max)
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
991 (if mailp
9706
f5f7d07eece8 (fill-individual-paragraphs): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents: 9217
diff changeset
992 (while (and (not (eobp))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
993 (or (looking-at "[ \t]*[^ \t\n]+:")
9706
f5f7d07eece8 (fill-individual-paragraphs): Avoid infinite loop
Richard M. Stallman <rms@gnu.org>
parents: 9217
diff changeset
994 (looking-at "[ \t]*$")))
13473
4492ba9a0757 (fill-region-as-paragraph): Use fill-context-prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13172
diff changeset
995 (if (looking-at "[ \t]*[^ \t\n]+:")
4992
8a3293abe1ba (fill-individual-paragraphs): Fix skipping headers of yanked message.
Richard M. Stallman <rms@gnu.org>
parents: 4413
diff changeset
996 (search-forward "\n\n" nil 'move)
8a3293abe1ba (fill-individual-paragraphs): Fix skipping headers of yanked message.
Richard M. Stallman <rms@gnu.org>
parents: 4413
diff changeset
997 (forward-line 1))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
998 (narrow-to-region (point) max)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
999 ;; Loop over paragraphs.
20263
7808c4885103 (fill-individual-paragraphs): Don't get
Karl Heuer <kwzh@gnu.org>
parents: 20234
diff changeset
1000 (while (let ((here (point)))
19810
495951c8a761 (fill-individual-paragraphs): Don't include
Richard M. Stallman <rms@gnu.org>
parents: 19419
diff changeset
1001 ;; Skip over all paragraph-separating lines
495951c8a761 (fill-individual-paragraphs): Don't include
Richard M. Stallman <rms@gnu.org>
parents: 19419
diff changeset
1002 ;; so as to not include them in any paragraph.
20263
7808c4885103 (fill-individual-paragraphs): Don't get
Karl Heuer <kwzh@gnu.org>
parents: 20234
diff changeset
1003 (while (and (not (eobp))
7808c4885103 (fill-individual-paragraphs): Don't get
Karl Heuer <kwzh@gnu.org>
parents: 20234
diff changeset
1004 (progn (move-to-left-margin)
7808c4885103 (fill-individual-paragraphs): Don't get
Karl Heuer <kwzh@gnu.org>
parents: 20234
diff changeset
1005 (and (not (eobp))
7808c4885103 (fill-individual-paragraphs): Don't get
Karl Heuer <kwzh@gnu.org>
parents: 20234
diff changeset
1006 (looking-at paragraph-separate))))
19810
495951c8a761 (fill-individual-paragraphs): Don't include
Richard M. Stallman <rms@gnu.org>
parents: 19419
diff changeset
1007 (forward-line 1))
495951c8a761 (fill-individual-paragraphs): Don't include
Richard M. Stallman <rms@gnu.org>
parents: 19419
diff changeset
1008 (skip-chars-forward " \t\n") (not (eobp)))
13502
57a0a9e5399e (fill-region-as-paragraph): Since adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 13473
diff changeset
1009 (move-to-left-margin)
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1010 (let ((start (point))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1011 fill-prefix fill-prefix-regexp)
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1012 ;; Find end of paragraph, and compute the smallest fill-prefix
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1013 ;; that fits all the lines in this paragraph.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1014 (while (progn
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1015 ;; Update the fill-prefix on the first line
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1016 ;; and whenever the prefix good so far is too long.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1017 (if (not (and fill-prefix
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1018 (looking-at fill-prefix-regexp)))
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1019 (setq fill-prefix
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1020 ;; Get the prefix from just the first line
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1021 ;; ordinarily.
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1022 ;; But if using two lines gives us a shorter
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1023 ;; result, lacking some whitespace at the end,
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1024 ;; use that.
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1025 (or (let ((adaptive-fill-first-line-regexp "")
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1026 just-one-line-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1027 two-lines-prefix)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1028 (setq just-one-line-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1029 (fill-context-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1030 (point)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1031 (save-excursion (forward-line 1)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1032 (point))))
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1033 (setq two-lines-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1034 (fill-context-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1035 (point)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1036 (save-excursion (forward-line 2)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1037 (point))))
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1038 (if (and just-one-line-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1039 two-lines-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1040 (string-match (concat "\\`"
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1041 (regexp-quote two-lines-prefix)
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1042 "[ \t]*\\'")
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1043 just-one-line-prefix))
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1044 two-lines-prefix
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1045 just-one-line-prefix))
19419
b03d1adefe72 (fill-individual-paragraphs): Fix handling
Richard M. Stallman <rms@gnu.org>
parents: 19317
diff changeset
1046 (buffer-substring
b03d1adefe72 (fill-individual-paragraphs): Fix handling
Richard M. Stallman <rms@gnu.org>
parents: 19317
diff changeset
1047 (point)
b03d1adefe72 (fill-individual-paragraphs): Fix handling
Richard M. Stallman <rms@gnu.org>
parents: 19317
diff changeset
1048 (save-excursion (skip-chars-forward " \t")
b03d1adefe72 (fill-individual-paragraphs): Fix handling
Richard M. Stallman <rms@gnu.org>
parents: 19317
diff changeset
1049 (point))))
13502
57a0a9e5399e (fill-region-as-paragraph): Since adaptive-fill-regexp
Richard M. Stallman <rms@gnu.org>
parents: 13473
diff changeset
1050 fill-prefix-regexp (regexp-quote fill-prefix)))
13548
9be6c740e36f (fill-individual-paragraphs): Advance 1 line in inner loop.
Richard M. Stallman <rms@gnu.org>
parents: 13502
diff changeset
1051 (forward-line 1)
15308
9a31b0d0c38a (fill-individual-paragraphs): Don't get stuck
Richard M. Stallman <rms@gnu.org>
parents: 14840
diff changeset
1052 (if (bolp)
9a31b0d0c38a (fill-individual-paragraphs): Don't get stuck
Richard M. Stallman <rms@gnu.org>
parents: 14840
diff changeset
1053 ;; If forward-line went past a newline,
9a31b0d0c38a (fill-individual-paragraphs): Don't get stuck
Richard M. Stallman <rms@gnu.org>
parents: 14840
diff changeset
1054 ;; move further to the left margin.
9a31b0d0c38a (fill-individual-paragraphs): Don't get stuck
Richard M. Stallman <rms@gnu.org>
parents: 14840
diff changeset
1055 (move-to-left-margin))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1056 ;; Now stop the loop if end of paragraph.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1057 (and (not (eobp))
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1058 (if fill-individual-varying-indent
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1059 ;; If this line is a separator line, with or
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1060 ;; without prefix, end the paragraph.
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1061 (and
13548
9be6c740e36f (fill-individual-paragraphs): Advance 1 line in inner loop.
Richard M. Stallman <rms@gnu.org>
parents: 13502
diff changeset
1062 (not (looking-at paragraph-separate))
9be6c740e36f (fill-individual-paragraphs): Advance 1 line in inner loop.
Richard M. Stallman <rms@gnu.org>
parents: 13502
diff changeset
1063 (save-excursion
9be6c740e36f (fill-individual-paragraphs): Advance 1 line in inner loop.
Richard M. Stallman <rms@gnu.org>
parents: 13502
diff changeset
1064 (not (and (looking-at fill-prefix-regexp)
9be6c740e36f (fill-individual-paragraphs): Advance 1 line in inner loop.
Richard M. Stallman <rms@gnu.org>
parents: 13502
diff changeset
1065 (progn (forward-char (length fill-prefix))
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1066 (looking-at paragraph-separate))))))
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1067 ;; If this line has more or less indent
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1068 ;; than the fill prefix wants, end the paragraph.
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1069 (and (looking-at fill-prefix-regexp)
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1070 (save-excursion
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1071 (not (progn (forward-char (length fill-prefix))
19929
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1072 (or (looking-at "[ \t]")
0ccbd9bdcd8f (canonically-space-region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 19810
diff changeset
1073 (looking-at paragraph-separate)
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1074 (looking-at paragraph-start))))))))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1075 ;; Fill this paragraph, but don't add a newline at the end.
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 218
diff changeset
1076 (let ((had-newline (bolp)))
10468
d0854b6f3216 (set-justification): New function.
Richard M. Stallman <rms@gnu.org>
parents: 10423
diff changeset
1077 (fill-region-as-paragraph start (point) justify)
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 474
diff changeset
1078 (or had-newline (delete-char -1))))))))
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 638
diff changeset
1079
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 729
diff changeset
1080 ;;; fill.el ends here