annotate src/insdel.c @ 16886:c686d4f3728a

Change all uses of win95, winnt, and win32 into Windows 95, Windows NT, and W32, respectively. Expand "win" substring in variables referring to Microsoft Windows constructs into "windows". Canonicalize header comments to use same terminology.
author Geoff Voelker <voelker@cs.washington.edu>
date Mon, 20 Jan 1997 00:43:16 +0000
parents 96ae48c20664
children 02f6d66c3a4b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Buffer insertion/deletion and gap motion for GNU Emacs.
11235
e6bdaaa6ce1b Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 10564
diff changeset
2 Copyright (C) 1985, 1986, 1993, 1994, 1995 Free Software Foundation, Inc.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
12244
ac7375e60931 Update GPL to version 2.
Karl Heuer <kwzh@gnu.org>
parents: 11923
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
19 Boston, MA 02111-1307, USA. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4078
diff changeset
22 #include <config.h>
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "lisp.h"
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
24 #include "intervals.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "buffer.h"
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "window.h"
2480
6f4b9c548425 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
27 #include "blockinput.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
29 #define min(x, y) ((x) < (y) ? (x) : (y))
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
30
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
31 static void insert_from_string_1 ();
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
32 static void insert_from_buffer_1 ();
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
33 static void gap_left ();
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
34 static void gap_right ();
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
35 static void adjust_markers ();
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
36 static void adjust_point ();
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
37
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
38 Lisp_Object Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
39
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
40 /* Non-nil means don't call the after-change-functions right away,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
41 just record an element in Vcombine_after_change_calls_list. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
42 Lisp_Object Vcombine_after_change_calls;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
43
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
44 /* List of elements of the form (BEG-UNCHANGED END-UNCHANGED CHANGE-AMOUNT)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
45 describing changes which happened while combine_after_change_calls
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
46 was nonzero. We use this to decide how to call them
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
47 once the deferral ends.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
48
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
49 In each element.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
50 BEG-UNCHANGED is the number of chars before the changed range.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
51 END-UNCHANGED is the number of chars after the changed range,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
52 and CHANGE-AMOUNT is the number of characters inserted by the change
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
53 (negative for a deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
54 Lisp_Object combine_after_change_list;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
55
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
56 /* Buffer which combine_after_change_list is about. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
57 Lisp_Object combine_after_change_buffer;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
58
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 /* Move gap to position `pos'.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 Note that this can quit! */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
62 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 move_gap (pos)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 if (pos < GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 gap_left (pos, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 else if (pos > GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 gap_right (pos);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 /* Move the gap to POS, which is less than the current GPT.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
75 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 gap_left (pos, newgap)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 register int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 int newgap;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 pos--;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 if (!newgap)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 {
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
88 if (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
89 && overlay_unchanged_modified == OVERLAY_MODIFF)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 end_unchanged = Z - GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 if (pos < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 i = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 to = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 from = GPT_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 new_s1 = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 /* Now copy the characters. To move the gap down,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 copy characters up. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 /* I gets number of characters left to copy. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 i = new_s1 - pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 /* If a quit is requested, stop copying now.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 Change POS to be where we have actually moved the gap to. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 pos = new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 or on systems where bcopy is always safe for moving upward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 && (BCOPY_UPWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 || to - from >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 if (!BCOPY_UPWARD_SAFE && i > to - from)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 i = to - from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 from -= i, to -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 *--to = *--from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 /* Adjust markers, and buffer data structure, to put the gap at POS.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 POS is where the loop above stopped, which may be what was specified
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 or may be where a quit was detected. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 adjust_markers (pos + 1, GPT, GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 GPT = pos + 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
159 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 gap_right (pos)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 register int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 pos--;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
169 if (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
170 && overlay_unchanged_modified == OVERLAY_MODIFF)
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
171
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 if (Z - pos - 1 < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 beg_unchanged = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 i = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 from = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 to = GPT_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 new_s1 = GPT - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 /* Now copy the characters. To move the gap up,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 copy characters down. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 /* I gets number of characters left to copy. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 i = pos - new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 /* If a quit is requested, stop copying now.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 Change POS to be where we have actually moved the gap to. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 pos = new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 or on systems where bcopy is always safe for moving downward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 && (BCOPY_DOWNWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 || from - to >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 if (!BCOPY_DOWNWARD_SAFE && i > from - to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 i = from - to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 from += i, to += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 *to++ = *from++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 adjust_markers (GPT + GAP_SIZE, pos + 1 + GAP_SIZE, - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 GPT = pos + 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
237 /* Add AMOUNT to the position of every marker in the current buffer
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
238 whose current position is between FROM (exclusive) and TO (inclusive).
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
239
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 Also, any markers past the outside of that interval, in the direction
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 of adjustment, are first moved back to the near end of the interval
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
242 and then adjusted by AMOUNT.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
243
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
244 When the latter adjustment is done, if AMOUNT is negative,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
245 we record the adjustment for undo. (This case happens only for
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
246 deletion.) */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
248 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 adjust_markers (from, to, amount)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 register int from, to, amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 Lisp_Object marker;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 register struct Lisp_Marker *m;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 register int mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
256 marker = BUF_MARKERS (current_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
258 while (!NILP (marker))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 m = XMARKER (marker);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 mpos = m->bufpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 if (amount > 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 if (mpos > to && mpos < to + amount)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 mpos = to + amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 {
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
269 /* Here's the case where a marker is inside text being deleted.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
270 AMOUNT can be negative for gap motion, too,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
271 but then this range contains no markers. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 if (mpos > from + amount && mpos <= from)
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
273 {
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
274 record_marker_adjustment (marker, from + amount - mpos);
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
275 mpos = from + amount;
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
276 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 if (mpos > from && mpos <= to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 mpos += amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 m->bufpos = mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 marker = m->chain;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 }
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
284
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
285 /* Adjust markers whose insertion-type is t
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
286 for an insertion of AMOUNT characters at POS. */
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
287
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
288 static void
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
289 adjust_markers_for_insert (pos, amount)
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
290 register int pos, amount;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
291 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
292 Lisp_Object marker;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
293
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
294 marker = BUF_MARKERS (current_buffer);
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
295
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
296 while (!NILP (marker))
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
297 {
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
298 register struct Lisp_Marker *m = XMARKER (marker);
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
299 if (m->insertion_type && m->bufpos == pos)
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
300 m->bufpos += amount;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
301 marker = m->chain;
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
302 }
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
303 }
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
304
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
305 /* Add the specified amount to point. This is used only when the value
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
306 of point changes due to an insert or delete; it does not represent
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
307 a conceptual change in point as a marker. In particular, point is
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
308 not crossing any interval boundaries, so there's no need to use the
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
309 usual SET_PT macro. In fact it would be incorrect to do so, because
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13363
diff changeset
310 either the old or the new value of point is out of sync with the
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
311 current set of intervals. */
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
312 static void
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
313 adjust_point (amount)
11923
5160a1fdb44f (adjust_point): Declare arg AMOUNT.
Karl Heuer <kwzh@gnu.org>
parents: 11703
diff changeset
314 int amount;
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
315 {
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
316 BUF_PT (current_buffer) += amount;
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
317 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 /* Make the gap INCREMENT characters longer. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
321 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 make_gap (increment)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 int increment;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 unsigned char *result;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 Lisp_Object tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 int real_gap_loc;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 int old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 /* If we have to get more space, get enough to last a while. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 increment += 2000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332
11691
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
333 /* Don't allow a buffer size that won't fit in an int
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
334 even if it will fit in a Lisp integer.
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
335 That won't work because so many places use `int'. */
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
336
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
337 if (Z - BEG + GAP_SIZE + increment
13363
941c37982f37 (BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG):
Karl Heuer <kwzh@gnu.org>
parents: 13026
diff changeset
338 >= ((unsigned) 1 << (min (BITS_PER_INT, VALBITS) - 1)))
11703
3c5b974e1c10 (make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents: 11691
diff changeset
339 error ("Buffer exceeds maximum size");
11691
ca7058c74ef3 (make_gap): Don't allow buffer size that won't fit in int.
Richard M. Stallman <rms@gnu.org>
parents: 11657
diff changeset
340
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
341 BLOCK_INPUT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 result = BUFFER_REALLOC (BEG_ADDR, (Z - BEG + GAP_SIZE + increment));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
343
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 if (result == 0)
9391
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
345 {
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
346 UNBLOCK_INPUT;
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
347 memory_full ();
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
348 }
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
349
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
350 /* We can't unblock until the new address is properly stored. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 BEG_ADDR = result;
9391
6061a432881f (make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents: 9270
diff changeset
352 UNBLOCK_INPUT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 /* Prevent quitting in move_gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 tem = Vinhibit_quit;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 Vinhibit_quit = Qt;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 real_gap_loc = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 old_gap_size = GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 /* Call the newly allocated space a gap at the end of the whole space. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 GPT = Z + GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 GAP_SIZE = increment;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 /* Move the new gap down to be consecutive with the end of the old one.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 This adjusts the markers properly too. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 gap_left (real_gap_loc + old_gap_size, 1);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 /* Now combine the two into one large gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 GAP_SIZE += old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 GPT = real_gap_loc;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 Vinhibit_quit = tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 /* Insert a string of specified length before point.
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
377 DO NOT use this for the contents of a Lisp string or a Lisp buffer!
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
378 prepare_to_modify_buffer could relocate the text. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
380 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 insert (string, length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 register unsigned char *string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 register length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
385 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
386 {
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
387 insert_1 (string, length, 0, 1);
8647
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
388 signal_after_change (PT-length, 0, length);
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
389 }
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
390 }
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
391
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
392 void
8647
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
393 insert_and_inherit (string, length)
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
394 register unsigned char *string;
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
395 register length;
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
396 {
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
397 if (length > 0)
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
398 {
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
399 insert_1 (string, length, 1, 1);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
400 signal_after_change (PT-length, 0, length);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
401 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
402 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
404 void
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
405 insert_1 (string, length, inherit, prepare)
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
406 register unsigned char *string;
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
407 register int length;
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
408 int inherit, prepare;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
409 {
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
410 register Lisp_Object temp;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
412 if (prepare)
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
413 prepare_to_modify_buffer (PT, PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
415 if (PT != GPT)
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
416 move_gap (PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 if (GAP_SIZE < length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 make_gap (length - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
420 record_insert (PT, length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 MODIFF++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 bcopy (string, GPT_ADDR, length);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424
8687
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
425 #ifdef USE_TEXT_PROPERTIES
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
426 if (BUF_INTERVALS (current_buffer) != 0)
8687
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
427 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES. */
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
428 offset_intervals (current_buffer, PT, length);
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
429 #endif
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
430
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 GAP_SIZE -= length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 GPT += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 ZV += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 Z += length;
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
435 adjust_overlays_for_insert (PT, length);
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
436 adjust_markers_for_insert (PT, length);
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
437 adjust_point (length);
8647
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
438
8687
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
439 #ifdef USE_TEXT_PROPERTIES
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
440 if (!inherit && BUF_INTERVALS (current_buffer) != 0)
8647
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
441 Fset_text_properties (make_number (PT - length), make_number (PT),
d66b80e5bc77 (insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents: 7109
diff changeset
442 Qnil, Qnil);
8687
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
443 #endif
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
446 /* Insert the part of the text of STRING, a Lisp object assumed to be
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
447 of type string, consisting of the LENGTH characters starting at
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
448 position POS. If the text of STRING has properties, they are absorbed
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
449 into the buffer.
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
450
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
451 It does not work to use `insert' for this, because a GC could happen
251
28d91bb8ac74 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 157
diff changeset
452 before we bcopy the stuff into the buffer, and relocate the string
28d91bb8ac74 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 157
diff changeset
453 without insert noticing. */
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
454
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
455 void
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
456 insert_from_string (string, pos, length, inherit)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 Lisp_Object string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 register int pos, length;
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
459 int inherit;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
461 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
462 {
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
463 insert_from_string_1 (string, pos, length, inherit);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
464 signal_after_change (PT-length, 0, length);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
465 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
466 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
467
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
468 static void
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
469 insert_from_string_1 (string, pos, length, inherit)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
470 Lisp_Object string;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
471 register int pos, length;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
472 int inherit;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
473 {
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 register Lisp_Object temp;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 struct gcpro gcpro1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 /* Make sure point-max won't overflow after this insertion. */
9270
405b269631c3 (insert_1, insert_from_string_1): Use new accessor macros instead of calling
Karl Heuer <kwzh@gnu.org>
parents: 8840
diff changeset
478 XSETINT (temp, length + Z);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 if (length + Z != XINT (temp))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 error ("maximum buffer size exceeded");
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 GCPRO1 (string);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
483 prepare_to_modify_buffer (PT, PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
485 if (PT != GPT)
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
486 move_gap (PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 if (GAP_SIZE < length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 make_gap (length - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
490 record_insert (PT, length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 MODIFF++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 UNGCPRO;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 bcopy (XSTRING (string)->data, GPT_ADDR, length);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
496 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
497 offset_intervals (current_buffer, PT, length);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
498
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 GAP_SIZE -= length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 GPT += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 ZV += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 Z += length;
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
503 adjust_overlays_for_insert (PT, length);
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
504 adjust_markers_for_insert (PT, length);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
505
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
506 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
507 graft_intervals_into_buffer (XSTRING (string)->intervals, PT, length,
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
508 current_buffer, inherit);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
509
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
510 adjust_point (length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
513 /* Insert text from BUF, starting at POS and having length LENGTH, into the
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
514 current buffer. If the text in BUF has properties, they are absorbed
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
515 into the current buffer.
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
516
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
517 It does not work to use `insert' for this, because a malloc could happen
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
518 and relocate BUF's text before the bcopy happens. */
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
519
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
520 void
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
521 insert_from_buffer (buf, pos, length, inherit)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
522 struct buffer *buf;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
523 int pos, length;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
524 int inherit;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
525 {
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
526 if (length > 0)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
527 {
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
528 insert_from_buffer_1 (buf, pos, length, inherit);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
529 signal_after_change (PT-length, 0, length);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
530 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
531 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
532
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
533 static void
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
534 insert_from_buffer_1 (buf, pos, length, inherit)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
535 struct buffer *buf;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
536 int pos, length;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
537 int inherit;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
538 {
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
539 register Lisp_Object temp;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
540 int chunk;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
541
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
542 /* Make sure point-max won't overflow after this insertion. */
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
543 XSETINT (temp, length + Z);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
544 if (length + Z != XINT (temp))
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
545 error ("maximum buffer size exceeded");
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
546
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
547 prepare_to_modify_buffer (PT, PT);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
548
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
549 if (PT != GPT)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
550 move_gap (PT);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
551 if (GAP_SIZE < length)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
552 make_gap (length - GAP_SIZE);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
553
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
554 record_insert (PT, length);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
555 MODIFF++;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
556
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
557 if (pos < BUF_GPT (buf))
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
558 {
9685
ee2c6124ae92 (insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents: 9656
diff changeset
559 chunk = BUF_GPT (buf) - pos;
ee2c6124ae92 (insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents: 9656
diff changeset
560 if (chunk > length)
ee2c6124ae92 (insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents: 9656
diff changeset
561 chunk = length;
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
562 bcopy (BUF_CHAR_ADDRESS (buf, pos), GPT_ADDR, chunk);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
563 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
564 else
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
565 chunk = 0;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
566 if (chunk < length)
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
567 bcopy (BUF_CHAR_ADDRESS (buf, pos + chunk),
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
568 GPT_ADDR + chunk, length - chunk);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
569
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
570 #ifdef USE_TEXT_PROPERTIES
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
571 if (BUF_INTERVALS (current_buffer) != 0)
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
572 offset_intervals (current_buffer, PT, length);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
573 #endif
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
574
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
575 GAP_SIZE -= length;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
576 GPT += length;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
577 ZV += length;
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
578 Z += length;
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
579 adjust_overlays_for_insert (PT, length);
12997
938dc2491820 (adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12798
diff changeset
580 adjust_markers_for_insert (PT, length);
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
581 adjust_point (length);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
582
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
583 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
584 graft_intervals_into_buffer (copy_intervals (BUF_INTERVALS (buf),
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
585 pos, length),
9656
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
586 PT - length, length, current_buffer, inherit);
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
587 }
e6cb99e4370c (insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents: 9646
diff changeset
588
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 /* Insert the character C before point */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 insert_char (c)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 unsigned char c;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 insert (&c, 1);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 /* Insert the null-terminated string S before point */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 insert_string (s)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 char *s;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 insert (s, strlen (s));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 /* Like `insert' except that all markers pointing at the place where
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 the insertion happens are adjusted to point after it.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 Don't use this function to insert part of a Lisp string,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 since gc could happen and relocate it. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
612 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 insert_before_markers (string, length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 unsigned char *string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 register int length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
617 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
618 {
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
619 register int opoint = PT;
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
620 insert_1 (string, length, 0, 1);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
621 adjust_markers (opoint - 1, opoint, length);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
622 signal_after_change (PT-length, 0, length);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
623 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
626 void
8668
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
627 insert_before_markers_and_inherit (string, length)
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
628 unsigned char *string;
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
629 register int length;
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
630 {
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
631 if (length > 0)
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
632 {
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
633 register int opoint = PT;
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
634 insert_1 (string, length, 1, 1);
8668
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
635 adjust_markers (opoint - 1, opoint, length);
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
636 signal_after_change (PT-length, 0, length);
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
637 }
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
638 }
011660f7aae9 (insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents: 8647
diff changeset
639
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 /* Insert part of a Lisp string, relocating markers after. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
642 void
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
643 insert_from_string_before_markers (string, pos, length, inherit)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 Lisp_Object string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 register int pos, length;
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
646 int inherit;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
648 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
649 {
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
650 register int opoint = PT;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
651 insert_from_string_1 (string, pos, length, inherit);
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
652 adjust_markers (opoint - 1, opoint, length);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
653 signal_after_change (PT-length, 0, length);
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
654 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 /* Delete characters in current buffer
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 from FROM up to (but not including) TO. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
660 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 del_range (from, to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 register int from, to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 {
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
664 del_range_1 (from, to, 1);
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
665 }
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
666
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
667 /* Like del_range; PREPARE says whether to call prepare_to_modify_buffer. */
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
668
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
669 void
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
670 del_range_1 (from, to, prepare)
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
671 register int from, to, prepare;
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
672 {
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 register int numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 /* Make args be valid */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 if (from < BEGV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 from = BEGV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 if (to > ZV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 to = ZV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 if ((numdel = to - from) <= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 return;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 /* Make sure the gap is somewhere in or next to what we are deleting. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 if (from > GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 gap_right (from);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 if (to < GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 gap_left (to, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
690 if (prepare)
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
691 prepare_to_modify_buffer (from, to);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692
14479
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
693 /* Relocate all markers pointing into the new, larger gap
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
694 to point at the end of the text before the gap.
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
695 This has to be done before recording the deletion,
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
696 so undo handles this after reinserting the text. */
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
697 adjust_markers (to + GAP_SIZE, to + GAP_SIZE, - numdel - GAP_SIZE);
69fa625812a4 (adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
698
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
699 record_delete (from, numdel);
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
700 MODIFF++;
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
701
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 /* Relocate point as if it were a marker. */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
703 if (from < PT)
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
704 adjust_point (from - (PT < to ? PT : to));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
706 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
707 offset_intervals (current_buffer, from, - numdel);
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
708
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
709 /* Adjust the overlay center as needed. This must be done after
12617
2a4a6e89558d Comment change.
Karl Heuer <kwzh@gnu.org>
parents: 12244
diff changeset
710 adjusting the markers that bound the overlays. */
11474
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
711 adjust_overlays_for_delete (from, numdel);
510885be2758 (insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents: 11235
diff changeset
712
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 GAP_SIZE += numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 ZV -= numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 Z -= numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 GPT = from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 beg_unchanged = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 end_unchanged = Z - GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722
8840
7242936baf4e (del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents: 8687
diff changeset
723 evaporate_overlays (from);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 signal_after_change (from, numdel, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
727 /* Call this if you're about to change the region of BUFFER from START
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
728 to END. This checks the read-only properties of the region, calls
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
729 the necessary modification hooks, and warns the next redisplay that
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
730 it should pay attention to that area. */
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
731 void
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
732 modify_region (buffer, start, end)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
733 struct buffer *buffer;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 int start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 {
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
736 struct buffer *old_buffer = current_buffer;
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
737
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
738 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
739 set_buffer_internal (buffer);
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
740
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 prepare_to_modify_buffer (start, end);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
743 if (start - 1 < beg_unchanged
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
744 || (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
745 && overlay_unchanged_modified == OVERLAY_MODIFF))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 beg_unchanged = start - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 if (Z - end < end_unchanged
16194
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
748 || (unchanged_modified == MODIFF
aef021e2c167 (gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents: 16153
diff changeset
749 && overlay_unchanged_modified == OVERLAY_MODIFF))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750 end_unchanged = Z - end;
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
751
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
752 if (MODIFF <= SAVE_MODIFF)
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
753 record_first_change ();
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 MODIFF++;
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
755
10564
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
756 buffer->point_before_scroll = Qnil;
69cae342dde5 (modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents: 10391
diff changeset
757
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
758 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
759 set_buffer_internal (old_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 /* Check that it is okay to modify the buffer between START and END.
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
763 Run the before-change-function, if any. If intervals are in use,
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
764 verify that the text to be modified is not read-only, and call
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
765 any modification properties the text may have. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
766
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
767 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 prepare_to_modify_buffer (start, end)
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
769 int start, end;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
771 if (!NILP (current_buffer->read_only))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 Fbarf_if_buffer_read_only ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
774 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
775 if (BUF_INTERVALS (current_buffer) != 0)
8687
ae896adcb7a3 (prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents: 8668
diff changeset
776 verify_interval_modification (current_buffer, start, end);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 #ifdef CLASH_DETECTION
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
779 if (!NILP (current_buffer->file_truename)
12621
e71c530e5ae5 (prepare_to_modify_buffer): Don't lock the file
Richard M. Stallman <rms@gnu.org>
parents: 12617
diff changeset
780 /* Make binding buffer-file-name to nil effective. */
e71c530e5ae5 (prepare_to_modify_buffer): Don't lock the file
Richard M. Stallman <rms@gnu.org>
parents: 12617
diff changeset
781 && !NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
782 && SAVE_MODIFF >= MODIFF)
11657
ab5f12280452 (prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents: 11474
diff changeset
783 lock_file (current_buffer->file_truename);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784 #else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 /* At least warn if this file has changed on disk since it was visited. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
786 if (!NILP (current_buffer->filename)
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
787 && SAVE_MODIFF >= MODIFF
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
788 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ()))
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
789 && !NILP (Ffile_exists_p (current_buffer->filename)))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 call1 (intern ("ask-user-about-supersession-threat"),
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 current_buffer->filename);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 #endif /* not CLASH_DETECTION */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 signal_before_change (start, end);
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
795
9409
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
796 if (current_buffer->newline_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
797 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
798 current_buffer->newline_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
799 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
800 if (current_buffer->width_run_cache)
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
801 invalidate_region_cache (current_buffer,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
802 current_buffer->width_run_cache,
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
803 start - BEG, Z - end);
f5590c0b1756 * insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents: 9391
diff changeset
804
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
805 Vdeactivate_mark = Qt;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
808 /* Signal a change to the buffer immediately before it happens.
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
809 START_INT and END_INT are the bounds of the text to be changed. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
811 void
16153
6c9c298680da (signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16102
diff changeset
812 signal_before_change (start_int, end_int)
6c9c298680da (signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16102
diff changeset
813 int start_int, end_int;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 {
16102
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
815 Lisp_Object start, end;
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
816
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
817 start = make_number (start_int);
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
818 end = make_number (end_int);
76bd16bb5906 (prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents: 15123
diff changeset
819
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 /* If buffer is unmodified, run a special hook for that case. */
10311
0de21e27722f Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents: 10145
diff changeset
821 if (SAVE_MODIFF >= MODIFF
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
822 && !NILP (Vfirst_change_hook)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
823 && !NILP (Vrun_hooks))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
824 call1 (Vrun_hooks, Qfirst_change_hook);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
825
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
826 /* Run the before-change-function if any.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
827 We don't bother "binding" this variable to nil
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
828 because it is obsolete anyway and new code should not use it. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
829 if (!NILP (Vbefore_change_function))
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
830 call2 (Vbefore_change_function, start, end);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
831
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
832 /* Now run the before-change-functions if any. */
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
833 if (!NILP (Vbefore_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
834 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
835 Lisp_Object args[3];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
836 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
837 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
838 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
839
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
840 /* "Bind" before-change-functions and after-change-functions
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
841 to nil--but in a way that errors don't know about.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
842 That way, if there's an error in them, they will stay nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
843 before_change_functions = Vbefore_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
844 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
845 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
846 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
847 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
848
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
849 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
850 args[0] = Qbefore_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
851 args[1] = start;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
852 args[2] = end;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
853 run_hook_list_with_args (before_change_functions, 3, args);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
854
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
855 /* "Unbind" the variables we "bound" to nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
856 Vbefore_change_functions = before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
857 Vafter_change_functions = after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
858 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
859 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
860
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
861 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
862 || !NILP (current_buffer->overlays_after))
10145
0091da658d85 * buffer.c (report_overlay_modification): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 10144
diff changeset
863 report_overlay_modification (start, end, 0, start, end, Qnil);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
866 /* Signal a change immediately after it happens.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 POS is the address of the start of the changed text.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 LENDEL is the number of characters of the text before the change.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 (Not the whole buffer; just the part that was changed.)
15123
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
870 LENINS is the number of characters in that part of the text
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
871 after the change. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872
10391
55428c377c84 Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents: 10311
diff changeset
873 void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 signal_after_change (pos, lendel, lenins)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 int pos, lendel, lenins;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 {
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
877 /* If we are deferring calls to the after-change functions
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
878 and there are no before-change functions,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
879 just record the args that we were going to use. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
880 if (! NILP (Vcombine_after_change_calls)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
881 && NILP (Vbefore_change_function) && NILP (Vbefore_change_functions)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
882 && NILP (current_buffer->overlays_before)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
883 && NILP (current_buffer->overlays_after))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
884 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
885 Lisp_Object elt;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
886
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
887 if (!NILP (combine_after_change_list)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
888 && current_buffer != XBUFFER (combine_after_change_buffer))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
889 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
890
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
891 elt = Fcons (make_number (pos - BEG),
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
892 Fcons (make_number (Z - (pos - lendel + lenins)),
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
893 Fcons (make_number (lenins - lendel), Qnil)));
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
894 combine_after_change_list
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
895 = Fcons (elt, combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
896 combine_after_change_buffer = Fcurrent_buffer ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
897
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
898 return;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
899 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
900
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
901 if (!NILP (combine_after_change_list))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
902 Fcombine_after_change_execute ();
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
903
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
904 /* Run the after-change-function if any.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
905 We don't bother "binding" this variable to nil
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
906 because it is obsolete anyway and new code should not use it. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
907 if (!NILP (Vafter_change_function))
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
908 call3 (Vafter_change_function,
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
909 make_number (pos), make_number (pos + lenins),
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
910 make_number (lendel));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
912 if (!NILP (Vafter_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
913 {
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
914 Lisp_Object args[4];
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
915 Lisp_Object before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
916 Lisp_Object after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
917 struct gcpro gcpro1, gcpro2;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
918
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
919 /* "Bind" before-change-functions and after-change-functions
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
920 to nil--but in a way that errors don't know about.
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
921 That way, if there's an error in them, they will stay nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
922 before_change_functions = Vbefore_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
923 after_change_functions = Vafter_change_functions;
12798
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
924 Vbefore_change_functions = Qnil;
9ac61661054b (signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents: 12784
diff changeset
925 Vafter_change_functions = Qnil;
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
926 GCPRO2 (before_change_functions, after_change_functions);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
927
12784
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
928 /* Actually run the hook functions. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
929 args[0] = Qafter_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
930 XSETFASTINT (args[1], pos);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
931 XSETFASTINT (args[2], pos + lenins);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
932 XSETFASTINT (args[3], lendel);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
933 run_hook_list_with_args (after_change_functions,
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
934 4, args);
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
935
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
936 /* "Unbind" the variables we "bound" to nil. */
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
937 Vbefore_change_functions = before_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
938 Vafter_change_functions = after_change_functions;
0dea0aa2f32d (signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents: 12655
diff changeset
939 UNGCPRO;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
940 }
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
941
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
942 if (!NILP (current_buffer->overlays_before)
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
943 || !NILP (current_buffer->overlays_after))
10145
0091da658d85 * buffer.c (report_overlay_modification): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 10144
diff changeset
944 report_overlay_modification (make_number (pos),
15123
d6106d651a71 (signal_after_change): Correct the arg to report_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 14479
diff changeset
945 make_number (pos + lenins),
10144
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
946 1,
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
947 make_number (pos), make_number (pos + lenins),
607074ed1c6d (signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents: 9685
diff changeset
948 make_number (lendel));
13026
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
949
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
950 /* After an insertion, call the text properties
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
951 insert-behind-hooks or insert-in-front-hooks. */
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
952 if (lendel == 0)
3ff15e408e2c (signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents: 12997
diff changeset
953 report_interval_modification (pos, pos + lenins);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 }
16547
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
955
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
956 Lisp_Object
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
957 Fcombine_after_change_execute_1 (val)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
958 Lisp_Object val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
959 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
960 Vcombine_after_change_calls = val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
961 return val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
962 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
963
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
964 DEFUN ("combine-after-change-execute", Fcombine_after_change_execute,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
965 Scombine_after_change_execute, 0, 0, 0,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
966 "This function is for use internally in `combine-after-change-calls'.")
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
967 ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
968 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
969 register Lisp_Object val;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
970 int count = specpdl_ptr - specpdl;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
971 int beg, end, change;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
972 int begpos, endpos;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
973 Lisp_Object tail;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
974
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
975 record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
976
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
977 Fset_buffer (combine_after_change_buffer);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
978
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
979 /* # chars unchanged at beginning of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
980 beg = Z - BEG;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
981 /* # chars unchanged at end of buffer. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
982 end = beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
983 /* Total amount of insertion (negative for deletion). */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
984 change = 0;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
985
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
986 /* Scan the various individual changes,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
987 accumulating the range info in BEG, END and CHANGE. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
988 for (tail = combine_after_change_list; CONSP (tail);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
989 tail = XCONS (tail)->cdr)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
990 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
991 Lisp_Object elt, thisbeg, thisend, thischange;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
992
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
993 /* Extract the info from the next element. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
994 elt = XCONS (tail)->car;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
995 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
996 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
997 thisbeg = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
998
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
999 elt = XCONS (elt)->cdr;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1000 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1001 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1002 thisend = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1003
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1004 elt = XCONS (elt)->cdr;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1005 if (! CONSP (elt))
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1006 continue;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1007 thischange = XINT (XCONS (elt)->car);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1008
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1009 /* Merge this range into the accumulated range. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1010 change += thischange;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1011 if (thisbeg < beg)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1012 beg = thisbeg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1013 if (thisend < end)
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1014 end = thisend;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1015 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1016
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1017 /* Get the current start and end positions of the range
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1018 that was changed. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1019 begpos = BEG + beg;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1020 endpos = Z - end;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1021
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1022 /* We are about to handle these, so discard them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1023 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1024
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1025 /* Now run the after-change functions for real.
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1026 Turn off the flag that defers them. */
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1027 record_unwind_protect (Fcombine_after_change_execute_1,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1028 Vcombine_after_change_calls);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1029 signal_after_change (begpos, endpos - begpos - change, endpos - begpos);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1030
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1031 return unbind_to (count, val);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1032 }
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1033
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1034 syms_of_insdel ()
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1035 {
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1036 staticpro (&combine_after_change_list);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1037 combine_after_change_list = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1038
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1039 DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls,
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1040 "Used internally by the `combine-after-change-calls' macro.");
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1041 Vcombine_after_change_calls = Qnil;
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1042
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1043 defsubr (&Scombine_after_change_execute);
96ae48c20664 (signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents: 16194
diff changeset
1044 }