Mercurial > emacs
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 |
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 | 7 ;; This file is part of GNU Emacs. |
8 | |
9 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
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 | 12 ;; any later version. |
13 | |
14 ;; GNU Emacs is distributed in the hope that it will be useful, | |
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 ;; GNU General Public License for more details. | |
18 | |
19 ;; You should have received a copy of the GNU General Public License | |
14169 | 20 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
22 ;; Boston, MA 02111-1307, USA. | |
75 | 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 | 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 | 32 "*Controls criterion for a new paragraph in `fill-individual-paragraphs'. |
33 Non-nil means changing indent doesn't end a paragraph. | |
34 That mode can handle paragraphs with extra indentation on the first line, | |
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 | 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 | 59 |
75 | 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 | 62 Filling expects lines to start with the fill prefix and |
63 reinserts the fill prefix in each resulting line." | |
75 | 64 (interactive) |
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 | 67 (point))) |
68 (if (equal fill-prefix "") | |
69 (setq fill-prefix nil)) | |
70 (if fill-prefix | |
71 (message "fill-prefix: \"%s\"" fill-prefix) | |
72 (message "fill-prefix cancelled"))) | |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 378 ;; The character category `|' means that we can break a line |
379 ;; at the character. Since we don't need a space between | |
380 ;; them, delete all newlines between them ... | |
381 (while (re-search-forward "\\c|\n\\|\n\\c|" nil t) | |
382 (if (bolp) | |
383 (delete-char -1) | |
384 (if (= (char-before (match-beginning 0)) ?\ ) | |
385 ;; ... except when there is end of sentence. The | |
386 ;; variable `sentence-end-double-space' is handled | |
387 ;; properly later. | |
388 nil | |
389 (delete-region (match-beginning 0) (1+ (match-beginning 0)))))) | |
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 | 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 | 409 ;; Move back to the point where we can break the line |
410 ;; at. We break the line between word or after/before | |
411 ;; the character which has character category `|'. We | |
412 ;; search space, \c| followed by a character, or \c| | |
413 ;; following a character. If not found, place | |
414 ;; the point at linebeg. | |
415 (if (re-search-backward " \\|\\c|.\\|.\\c|" linebeg 0) | |
416 ;; In case of space, we place the point at next to | |
417 ;; the point where the break occurs acutually, | |
418 ;; because we don't want to change the following | |
419 ;; logic of original Emacs. In case of \c|, the | |
420 ;; point is at the place where the break occurs. | |
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 | 442 ;; keep at least one word or a character which has |
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 | 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 | 476 (if (= (preceding-char) ?\ ) (forward-char -1)) |
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 | 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 | 528 (if (and (= (following-char) ?\ ) |
529 (or (aref (char-category-set (preceding-char)) ?|) | |
530 (looking-at "[ \t]+\\c|"))) | |
531 ;; We need one space at end of line so that | |
532 ;; further filling won't delete it. NOTE: We | |
533 ;; intentionally leave this one space to | |
534 ;; distingush the case that user wants to put | |
535 ;; space between \c| characters. | |
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 | 561 |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 986 (save-restriction |
987 (save-excursion | |
988 (goto-char min) | |
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 | 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 | 998 (narrow-to-region (point) max) |
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 | 1010 (let ((start (point)) |
1011 fill-prefix fill-prefix-regexp) | |
1012 ;; Find end of paragraph, and compute the smallest fill-prefix | |
1013 ;; that fits all the lines in this paragraph. | |
1014 (while (progn | |
1015 ;; Update the fill-prefix on the first line | |
1016 ;; and whenever the prefix good so far is too long. | |
1017 (if (not (and fill-prefix | |
1018 (looking-at fill-prefix-regexp))) | |
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 | 1056 ;; Now stop the loop if end of paragraph. |
1057 (and (not (eobp)) | |
638 | 1058 (if fill-individual-varying-indent |
1059 ;; If this line is a separator line, with or | |
1060 ;; without prefix, end the paragraph. | |
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 | 1066 (looking-at paragraph-separate)))))) |
1067 ;; If this line has more or less indent | |
1068 ;; than the fill prefix wants, end the paragraph. | |
1069 (and (looking-at fill-prefix-regexp) | |
1070 (save-excursion | |
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 | 1074 (looking-at paragraph-start)))))))))) |
474 | 1075 ;; Fill this paragraph, but don't add a newline at the end. |
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 | 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 | 1080 ;;; fill.el ends here |