Mercurial > emacs
annotate src/insdel.c @ 16339:abcd50093b4e
(Fset_text_properties, Fadd_text_properties)
(Fremove_text_properties): Call modify_region and signal_after_change
only for buffers, not for strings.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 26 Sep 1996 03:48:10 +0000 |
parents | aef021e2c167 |
children | 96ae48c20664 |
rev | line source |
---|---|
157 | 1 /* Buffer insertion/deletion and gap motion for GNU Emacs. |
11235 | 2 Copyright (C) 1985, 1986, 1993, 1994, 1995 Free Software Foundation, Inc. |
157 | 3 |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
12244 | 8 the Free Software Foundation; either version 2, or (at your option) |
157 | 9 any later version. |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
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 | 20 |
21 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4078
diff
changeset
|
22 #include <config.h> |
157 | 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 | 25 #include "buffer.h" |
26 #include "window.h" | |
2480 | 27 #include "blockinput.h" |
157 | 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 | 33 static void gap_left (); |
34 static void gap_right (); | |
35 static void adjust_markers (); | |
7109 | 36 static void adjust_point (); |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
37 |
157 | 38 /* Move gap to position `pos'. |
39 Note that this can quit! */ | |
40 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
41 void |
157 | 42 move_gap (pos) |
43 int pos; | |
44 { | |
45 if (pos < GPT) | |
46 gap_left (pos, 0); | |
47 else if (pos > GPT) | |
48 gap_right (pos); | |
49 } | |
50 | |
51 /* Move the gap to POS, which is less than the current GPT. | |
52 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */ | |
53 | |
7108 | 54 static void |
157 | 55 gap_left (pos, newgap) |
56 register int pos; | |
57 int newgap; | |
58 { | |
59 register unsigned char *to, *from; | |
60 register int i; | |
61 int new_s1; | |
62 | |
63 pos--; | |
64 | |
65 if (!newgap) | |
66 { | |
16194
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
67 if (unchanged_modified == MODIFF |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
68 && overlay_unchanged_modified == OVERLAY_MODIFF) |
157 | 69 { |
70 beg_unchanged = pos; | |
71 end_unchanged = Z - pos - 1; | |
72 } | |
73 else | |
74 { | |
75 if (Z - GPT < end_unchanged) | |
76 end_unchanged = Z - GPT; | |
77 if (pos < beg_unchanged) | |
78 beg_unchanged = pos; | |
79 } | |
80 } | |
81 | |
82 i = GPT; | |
83 to = GAP_END_ADDR; | |
84 from = GPT_ADDR; | |
85 new_s1 = GPT - BEG; | |
86 | |
87 /* Now copy the characters. To move the gap down, | |
88 copy characters up. */ | |
89 | |
90 while (1) | |
91 { | |
92 /* I gets number of characters left to copy. */ | |
93 i = new_s1 - pos; | |
94 if (i == 0) | |
95 break; | |
96 /* If a quit is requested, stop copying now. | |
97 Change POS to be where we have actually moved the gap to. */ | |
98 if (QUITP) | |
99 { | |
100 pos = new_s1; | |
101 break; | |
102 } | |
103 /* Move at most 32000 chars before checking again for a quit. */ | |
104 if (i > 32000) | |
105 i = 32000; | |
106 #ifdef GAP_USE_BCOPY | |
107 if (i >= 128 | |
108 /* bcopy is safe if the two areas of memory do not overlap | |
109 or on systems where bcopy is always safe for moving upward. */ | |
110 && (BCOPY_UPWARD_SAFE | |
111 || to - from >= 128)) | |
112 { | |
113 /* If overlap is not safe, avoid it by not moving too many | |
114 characters at once. */ | |
115 if (!BCOPY_UPWARD_SAFE && i > to - from) | |
116 i = to - from; | |
117 new_s1 -= i; | |
118 from -= i, to -= i; | |
119 bcopy (from, to, i); | |
120 } | |
121 else | |
122 #endif | |
123 { | |
124 new_s1 -= i; | |
125 while (--i >= 0) | |
126 *--to = *--from; | |
127 } | |
128 } | |
129 | |
130 /* Adjust markers, and buffer data structure, to put the gap at POS. | |
131 POS is where the loop above stopped, which may be what was specified | |
132 or may be where a quit was detected. */ | |
133 adjust_markers (pos + 1, GPT, GAP_SIZE); | |
134 GPT = pos + 1; | |
135 QUIT; | |
136 } | |
137 | |
7108 | 138 static void |
157 | 139 gap_right (pos) |
140 register int pos; | |
141 { | |
142 register unsigned char *to, *from; | |
143 register int i; | |
144 int new_s1; | |
145 | |
146 pos--; | |
147 | |
16194
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
148 if (unchanged_modified == MODIFF |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
149 && overlay_unchanged_modified == OVERLAY_MODIFF) |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
150 |
157 | 151 { |
152 beg_unchanged = pos; | |
153 end_unchanged = Z - pos - 1; | |
154 } | |
155 else | |
156 { | |
157 if (Z - pos - 1 < end_unchanged) | |
158 end_unchanged = Z - pos - 1; | |
159 if (GPT - BEG < beg_unchanged) | |
160 beg_unchanged = GPT - BEG; | |
161 } | |
162 | |
163 i = GPT; | |
164 from = GAP_END_ADDR; | |
165 to = GPT_ADDR; | |
166 new_s1 = GPT - 1; | |
167 | |
168 /* Now copy the characters. To move the gap up, | |
169 copy characters down. */ | |
170 | |
171 while (1) | |
172 { | |
173 /* I gets number of characters left to copy. */ | |
174 i = pos - new_s1; | |
175 if (i == 0) | |
176 break; | |
177 /* If a quit is requested, stop copying now. | |
178 Change POS to be where we have actually moved the gap to. */ | |
179 if (QUITP) | |
180 { | |
181 pos = new_s1; | |
182 break; | |
183 } | |
184 /* Move at most 32000 chars before checking again for a quit. */ | |
185 if (i > 32000) | |
186 i = 32000; | |
187 #ifdef GAP_USE_BCOPY | |
188 if (i >= 128 | |
189 /* bcopy is safe if the two areas of memory do not overlap | |
190 or on systems where bcopy is always safe for moving downward. */ | |
191 && (BCOPY_DOWNWARD_SAFE | |
192 || from - to >= 128)) | |
193 { | |
194 /* If overlap is not safe, avoid it by not moving too many | |
195 characters at once. */ | |
196 if (!BCOPY_DOWNWARD_SAFE && i > from - to) | |
197 i = from - to; | |
198 new_s1 += i; | |
199 bcopy (from, to, i); | |
200 from += i, to += i; | |
201 } | |
202 else | |
203 #endif | |
204 { | |
205 new_s1 += i; | |
206 while (--i >= 0) | |
207 *to++ = *from++; | |
208 } | |
209 } | |
210 | |
211 adjust_markers (GPT + GAP_SIZE, pos + 1 + GAP_SIZE, - GAP_SIZE); | |
212 GPT = pos + 1; | |
213 QUIT; | |
214 } | |
215 | |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
216 /* 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
|
217 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
|
218 |
157 | 219 Also, any markers past the outside of that interval, in the direction |
220 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
|
221 and then adjusted by AMOUNT. |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
222 |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
223 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
|
224 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
|
225 deletion.) */ |
157 | 226 |
7108 | 227 static void |
157 | 228 adjust_markers (from, to, amount) |
229 register int from, to, amount; | |
230 { | |
231 Lisp_Object marker; | |
232 register struct Lisp_Marker *m; | |
233 register int mpos; | |
234 | |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
235 marker = BUF_MARKERS (current_buffer); |
157 | 236 |
484 | 237 while (!NILP (marker)) |
157 | 238 { |
239 m = XMARKER (marker); | |
240 mpos = m->bufpos; | |
241 if (amount > 0) | |
242 { | |
243 if (mpos > to && mpos < to + amount) | |
244 mpos = to + amount; | |
245 } | |
246 else | |
247 { | |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
248 /* 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
|
249 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
|
250 but then this range contains no markers. */ |
157 | 251 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
|
252 { |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
253 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
|
254 mpos = from + amount; |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
255 } |
157 | 256 } |
257 if (mpos > from && mpos <= to) | |
258 mpos += amount; | |
259 m->bufpos = mpos; | |
260 marker = m->chain; | |
261 } | |
262 } | |
7109 | 263 |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
264 /* Adjust markers whose insertion-type is t |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
265 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
|
266 |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
267 static void |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
268 adjust_markers_for_insert (pos, amount) |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
269 register int pos, amount; |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
270 { |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
271 Lisp_Object marker; |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
272 |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
273 marker = BUF_MARKERS (current_buffer); |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
274 |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
275 while (!NILP (marker)) |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
276 { |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
277 register struct Lisp_Marker *m = XMARKER (marker); |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
278 if (m->insertion_type && m->bufpos == pos) |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
279 m->bufpos += amount; |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
280 marker = m->chain; |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
281 } |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
282 } |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
283 |
7109 | 284 /* Add the specified amount to point. This is used only when the value |
285 of point changes due to an insert or delete; it does not represent | |
286 a conceptual change in point as a marker. In particular, point is | |
287 not crossing any interval boundaries, so there's no need to use the | |
288 usual SET_PT macro. In fact it would be incorrect to do so, because | |
14036 | 289 either the old or the new value of point is out of sync with the |
7109 | 290 current set of intervals. */ |
291 static void | |
292 adjust_point (amount) | |
11923
5160a1fdb44f
(adjust_point): Declare arg AMOUNT.
Karl Heuer <kwzh@gnu.org>
parents:
11703
diff
changeset
|
293 int amount; |
7109 | 294 { |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
295 BUF_PT (current_buffer) += amount; |
7109 | 296 } |
157 | 297 |
298 /* Make the gap INCREMENT characters longer. */ | |
299 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
300 void |
157 | 301 make_gap (increment) |
302 int increment; | |
303 { | |
304 unsigned char *result; | |
305 Lisp_Object tem; | |
306 int real_gap_loc; | |
307 int old_gap_size; | |
308 | |
309 /* If we have to get more space, get enough to last a while. */ | |
310 increment += 2000; | |
311 | |
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
|
312 /* 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
|
313 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
|
314 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
|
315 |
11703
3c5b974e1c10
(make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents:
11691
diff
changeset
|
316 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
|
317 >= ((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
|
318 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
|
319 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2050
diff
changeset
|
320 BLOCK_INPUT; |
157 | 321 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
|
322 |
157 | 323 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
|
324 { |
6061a432881f
(make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents:
9270
diff
changeset
|
325 UNBLOCK_INPUT; |
6061a432881f
(make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents:
9270
diff
changeset
|
326 memory_full (); |
6061a432881f
(make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents:
9270
diff
changeset
|
327 } |
6061a432881f
(make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents:
9270
diff
changeset
|
328 |
6061a432881f
(make_gap): Keep input blocked till after we set BEG_ADDR.
Richard M. Stallman <rms@gnu.org>
parents:
9270
diff
changeset
|
329 /* We can't unblock until the new address is properly stored. */ |
157 | 330 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
|
331 UNBLOCK_INPUT; |
157 | 332 |
333 /* Prevent quitting in move_gap. */ | |
334 tem = Vinhibit_quit; | |
335 Vinhibit_quit = Qt; | |
336 | |
337 real_gap_loc = GPT; | |
338 old_gap_size = GAP_SIZE; | |
339 | |
340 /* Call the newly allocated space a gap at the end of the whole space. */ | |
341 GPT = Z + GAP_SIZE; | |
342 GAP_SIZE = increment; | |
343 | |
344 /* Move the new gap down to be consecutive with the end of the old one. | |
345 This adjusts the markers properly too. */ | |
346 gap_left (real_gap_loc + old_gap_size, 1); | |
347 | |
348 /* Now combine the two into one large gap. */ | |
349 GAP_SIZE += old_gap_size; | |
350 GPT = real_gap_loc; | |
351 | |
352 Vinhibit_quit = tem; | |
353 } | |
354 | |
355 /* 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
|
356 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
|
357 prepare_to_modify_buffer could relocate the text. */ |
157 | 358 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
359 void |
157 | 360 insert (string, length) |
361 register unsigned char *string; | |
362 register length; | |
363 { | |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
364 if (length > 0) |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
365 { |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
366 insert_1 (string, length, 0, 1); |
8647
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
367 signal_after_change (PT-length, 0, length); |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
368 } |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
369 } |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
370 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
371 void |
8647
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
372 insert_and_inherit (string, length) |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
373 register unsigned char *string; |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
374 register length; |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
375 { |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
376 if (length > 0) |
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
377 { |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
378 insert_1 (string, length, 1, 1); |
7108 | 379 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
|
380 } |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
381 } |
157 | 382 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
383 void |
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
384 insert_1 (string, length, inherit, prepare) |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
385 register unsigned char *string; |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
386 register int length; |
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
387 int inherit, prepare; |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
388 { |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
389 register Lisp_Object temp; |
157 | 390 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
391 if (prepare) |
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
392 prepare_to_modify_buffer (PT, PT); |
157 | 393 |
7108 | 394 if (PT != GPT) |
395 move_gap (PT); | |
157 | 396 if (GAP_SIZE < length) |
397 make_gap (length - GAP_SIZE); | |
398 | |
7108 | 399 record_insert (PT, length); |
157 | 400 MODIFF++; |
401 | |
402 bcopy (string, GPT_ADDR, length); | |
403 | |
8687
ae896adcb7a3
(prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents:
8668
diff
changeset
|
404 #ifdef USE_TEXT_PROPERTIES |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
405 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
|
406 /* 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
|
407 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
|
408 #endif |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
409 |
157 | 410 GAP_SIZE -= length; |
411 GPT += length; | |
412 ZV += length; | |
413 Z += length; | |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
414 adjust_overlays_for_insert (PT, length); |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
415 adjust_markers_for_insert (PT, length); |
7109 | 416 adjust_point (length); |
8647
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
417 |
8687
ae896adcb7a3
(prepare_to_modify_buffer): Don't call verify_overlay_modification if
Richard M. Stallman <rms@gnu.org>
parents:
8668
diff
changeset
|
418 #ifdef USE_TEXT_PROPERTIES |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
419 if (!inherit && BUF_INTERVALS (current_buffer) != 0) |
8647
d66b80e5bc77
(insert_1): New arg INHERIT.
Richard M. Stallman <rms@gnu.org>
parents:
7109
diff
changeset
|
420 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
|
421 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
|
422 #endif |
157 | 423 } |
424 | |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
425 /* 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
|
426 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
|
427 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
|
428 into the buffer. |
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
429 |
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
430 It does not work to use `insert' for this, because a GC could happen |
251 | 431 before we bcopy the stuff into the buffer, and relocate the string |
432 without insert noticing. */ | |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
433 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
434 void |
4712
367dc6ff392c
(insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
435 insert_from_string (string, pos, length, inherit) |
157 | 436 Lisp_Object string; |
437 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
|
438 int inherit; |
157 | 439 { |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
440 if (length > 0) |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
441 { |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
442 insert_from_string_1 (string, pos, length, inherit); |
7108 | 443 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
|
444 } |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
445 } |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
446 |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
447 static void |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
448 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
|
449 Lisp_Object string; |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
450 register int pos, length; |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
451 int inherit; |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
452 { |
157 | 453 register Lisp_Object temp; |
454 struct gcpro gcpro1; | |
455 | |
456 /* 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
|
457 XSETINT (temp, length + Z); |
157 | 458 if (length + Z != XINT (temp)) |
459 error ("maximum buffer size exceeded"); | |
460 | |
461 GCPRO1 (string); | |
7108 | 462 prepare_to_modify_buffer (PT, PT); |
157 | 463 |
7108 | 464 if (PT != GPT) |
465 move_gap (PT); | |
157 | 466 if (GAP_SIZE < length) |
467 make_gap (length - GAP_SIZE); | |
468 | |
7108 | 469 record_insert (PT, length); |
157 | 470 MODIFF++; |
471 UNGCPRO; | |
472 | |
473 bcopy (XSTRING (string)->data, GPT_ADDR, length); | |
474 | |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
475 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ |
7108 | 476 offset_intervals (current_buffer, PT, length); |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
477 |
157 | 478 GAP_SIZE -= length; |
479 GPT += length; | |
480 ZV += length; | |
481 Z += length; | |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
482 adjust_overlays_for_insert (PT, length); |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
483 adjust_markers_for_insert (PT, length); |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
484 |
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
485 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */ |
7108 | 486 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
|
487 current_buffer, inherit); |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
488 |
7109 | 489 adjust_point (length); |
157 | 490 } |
491 | |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
492 /* 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
|
493 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
|
494 into the current buffer. |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
495 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
496 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
|
497 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
|
498 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
499 void |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
500 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
|
501 struct buffer *buf; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
502 int pos, length; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
503 int inherit; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
504 { |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
505 if (length > 0) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
506 { |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
507 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
|
508 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
|
509 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
510 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
511 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
512 static void |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
513 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
|
514 struct buffer *buf; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
515 int pos, length; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
516 int inherit; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
517 { |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
518 register Lisp_Object temp; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
519 int chunk; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
520 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
521 /* 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
|
522 XSETINT (temp, length + Z); |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
523 if (length + Z != XINT (temp)) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
524 error ("maximum buffer size exceeded"); |
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 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
|
527 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
528 if (PT != GPT) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
529 move_gap (PT); |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
530 if (GAP_SIZE < length) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
531 make_gap (length - GAP_SIZE); |
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 record_insert (PT, length); |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
534 MODIFF++; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
535 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
536 if (pos < BUF_GPT (buf)) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
537 { |
9685
ee2c6124ae92
(insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents:
9656
diff
changeset
|
538 chunk = BUF_GPT (buf) - pos; |
ee2c6124ae92
(insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents:
9656
diff
changeset
|
539 if (chunk > length) |
ee2c6124ae92
(insert_from_buffer_1): Don't use min.
Richard M. Stallman <rms@gnu.org>
parents:
9656
diff
changeset
|
540 chunk = length; |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
541 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
|
542 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
543 else |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
544 chunk = 0; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
545 if (chunk < length) |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
546 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
|
547 GPT_ADDR + chunk, length - chunk); |
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 #ifdef USE_TEXT_PROPERTIES |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
550 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
|
551 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
|
552 #endif |
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 GAP_SIZE -= length; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
555 GPT += length; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
556 ZV += length; |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
557 Z += length; |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
558 adjust_overlays_for_insert (PT, length); |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
559 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
|
560 adjust_point (length); |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
561 |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
562 /* 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
|
563 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
|
564 pos, length), |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
565 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
|
566 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
567 |
157 | 568 /* Insert the character C before point */ |
569 | |
570 void | |
571 insert_char (c) | |
572 unsigned char c; | |
573 { | |
574 insert (&c, 1); | |
575 } | |
576 | |
577 /* Insert the null-terminated string S before point */ | |
578 | |
579 void | |
580 insert_string (s) | |
581 char *s; | |
582 { | |
583 insert (s, strlen (s)); | |
584 } | |
585 | |
586 /* Like `insert' except that all markers pointing at the place where | |
587 the insertion happens are adjusted to point after it. | |
588 Don't use this function to insert part of a Lisp string, | |
589 since gc could happen and relocate it. */ | |
590 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
591 void |
157 | 592 insert_before_markers (string, length) |
593 unsigned char *string; | |
594 register int length; | |
595 { | |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
596 if (length > 0) |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
597 { |
7108 | 598 register int opoint = PT; |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
599 insert_1 (string, length, 0, 1); |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
600 adjust_markers (opoint - 1, opoint, length); |
7108 | 601 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
|
602 } |
157 | 603 } |
604 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
605 void |
8668
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
606 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
|
607 unsigned char *string; |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
608 register int length; |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
609 { |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
610 if (length > 0) |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
611 { |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
612 register int opoint = PT; |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
613 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
|
614 adjust_markers (opoint - 1, opoint, length); |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
615 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
|
616 } |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
617 } |
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
618 |
157 | 619 /* Insert part of a Lisp string, relocating markers after. */ |
620 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
621 void |
4712
367dc6ff392c
(insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
622 insert_from_string_before_markers (string, pos, length, inherit) |
157 | 623 Lisp_Object string; |
624 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
|
625 int inherit; |
157 | 626 { |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
627 if (length > 0) |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
628 { |
7108 | 629 register int opoint = PT; |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
630 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
|
631 adjust_markers (opoint - 1, opoint, length); |
7108 | 632 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
|
633 } |
157 | 634 } |
635 | |
636 /* Delete characters in current buffer | |
637 from FROM up to (but not including) TO. */ | |
638 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
639 void |
157 | 640 del_range (from, to) |
641 register int from, to; | |
642 { | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
643 del_range_1 (from, to, 1); |
6126
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
644 } |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
645 |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
646 /* 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
|
647 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
648 void |
6126
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
649 del_range_1 (from, to, prepare) |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
650 register int from, to, prepare; |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
651 { |
157 | 652 register int numdel; |
653 | |
654 /* Make args be valid */ | |
655 if (from < BEGV) | |
656 from = BEGV; | |
657 if (to > ZV) | |
658 to = ZV; | |
659 | |
660 if ((numdel = to - from) <= 0) | |
661 return; | |
662 | |
663 /* Make sure the gap is somewhere in or next to what we are deleting. */ | |
664 if (from > GPT) | |
665 gap_right (from); | |
666 if (to < GPT) | |
667 gap_left (to, 0); | |
668 | |
6126
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
669 if (prepare) |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
670 prepare_to_modify_buffer (from, to); |
157 | 671 |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
672 /* 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
|
673 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
|
674 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
|
675 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
|
676 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
|
677 |
1247
8dce1588f37f
(del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents:
484
diff
changeset
|
678 record_delete (from, numdel); |
8dce1588f37f
(del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents:
484
diff
changeset
|
679 MODIFF++; |
8dce1588f37f
(del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents:
484
diff
changeset
|
680 |
157 | 681 /* Relocate point as if it were a marker. */ |
7108 | 682 if (from < PT) |
7109 | 683 adjust_point (from - (PT < to ? PT : to)); |
157 | 684 |
1963
05dd60327cc4
(del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
685 /* 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
|
686 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
|
687 |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
688 /* Adjust the overlay center as needed. This must be done after |
12617 | 689 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
|
690 adjust_overlays_for_delete (from, numdel); |
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
691 |
157 | 692 GAP_SIZE += numdel; |
693 ZV -= numdel; | |
694 Z -= numdel; | |
695 GPT = from; | |
696 | |
697 if (GPT - BEG < beg_unchanged) | |
698 beg_unchanged = GPT - BEG; | |
699 if (Z - GPT < end_unchanged) | |
700 end_unchanged = Z - GPT; | |
701 | |
8840
7242936baf4e
(del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents:
8687
diff
changeset
|
702 evaporate_overlays (from); |
157 | 703 signal_after_change (from, numdel, 0); |
704 } | |
705 | |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
706 /* 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
|
707 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
|
708 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
|
709 it should pay attention to that area. */ |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
710 void |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
711 modify_region (buffer, start, end) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
712 struct buffer *buffer; |
157 | 713 int start, end; |
714 { | |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
715 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
|
716 |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
717 if (buffer != old_buffer) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
718 set_buffer_internal (buffer); |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
719 |
157 | 720 prepare_to_modify_buffer (start, end); |
721 | |
16194
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
722 if (start - 1 < beg_unchanged |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
723 || (unchanged_modified == MODIFF |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
724 && overlay_unchanged_modified == OVERLAY_MODIFF)) |
157 | 725 beg_unchanged = start - 1; |
726 if (Z - end < end_unchanged | |
16194
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
727 || (unchanged_modified == MODIFF |
aef021e2c167
(gap_left, gap_right, modify_region):
Richard M. Stallman <rms@gnu.org>
parents:
16153
diff
changeset
|
728 && overlay_unchanged_modified == OVERLAY_MODIFF)) |
157 | 729 end_unchanged = Z - end; |
5237
378540cf056f
(del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents:
5168
diff
changeset
|
730 |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
731 if (MODIFF <= SAVE_MODIFF) |
5237
378540cf056f
(del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents:
5168
diff
changeset
|
732 record_first_change (); |
157 | 733 MODIFF++; |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
734 |
10564
69cae342dde5
(modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents:
10391
diff
changeset
|
735 buffer->point_before_scroll = Qnil; |
69cae342dde5
(modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents:
10391
diff
changeset
|
736 |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
737 if (buffer != old_buffer) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
738 set_buffer_internal (old_buffer); |
157 | 739 } |
740 | |
741 /* 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
|
742 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
|
743 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
|
744 any modification properties the text may have. */ |
157 | 745 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
746 void |
157 | 747 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
|
748 int start, end; |
157 | 749 { |
484 | 750 if (!NILP (current_buffer->read_only)) |
157 | 751 Fbarf_if_buffer_read_only (); |
752 | |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
753 /* 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
|
754 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
|
755 verify_interval_modification (current_buffer, start, end); |
157 | 756 |
757 #ifdef CLASH_DETECTION | |
11657
ab5f12280452
(prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents:
11474
diff
changeset
|
758 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
|
759 /* 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
|
760 && !NILP (current_buffer->filename) |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
761 && SAVE_MODIFF >= MODIFF) |
11657
ab5f12280452
(prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents:
11474
diff
changeset
|
762 lock_file (current_buffer->file_truename); |
157 | 763 #else |
764 /* At least warn if this file has changed on disk since it was visited. */ | |
484 | 765 if (!NILP (current_buffer->filename) |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
766 && SAVE_MODIFF >= MODIFF |
484 | 767 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) |
768 && !NILP (Ffile_exists_p (current_buffer->filename))) | |
157 | 769 call1 (intern ("ask-user-about-supersession-threat"), |
770 current_buffer->filename); | |
771 #endif /* not CLASH_DETECTION */ | |
772 | |
773 signal_before_change (start, end); | |
2050
3ffbf2314074
(prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents:
2019
diff
changeset
|
774 |
9409
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
775 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
|
776 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
|
777 current_buffer->newline_cache, |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
778 start - BEG, Z - end); |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
779 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
|
780 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
|
781 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
|
782 start - BEG, Z - end); |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
783 |
2050
3ffbf2314074
(prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents:
2019
diff
changeset
|
784 Vdeactivate_mark = Qt; |
157 | 785 } |
786 | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2783
diff
changeset
|
787 /* 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
|
788 START_INT and END_INT are the bounds of the text to be changed. */ |
157 | 789 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
790 void |
16153
6c9c298680da
(signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16102
diff
changeset
|
791 signal_before_change (start_int, end_int) |
6c9c298680da
(signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16102
diff
changeset
|
792 int start_int, end_int; |
157 | 793 { |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
794 Lisp_Object start, end; |
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
795 |
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
796 start = make_number (start_int); |
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
797 end = make_number (end_int); |
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
798 |
157 | 799 /* 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
|
800 if (SAVE_MODIFF >= MODIFF |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
801 && !NILP (Vfirst_change_hook) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
802 && !NILP (Vrun_hooks)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
803 call1 (Vrun_hooks, Qfirst_change_hook); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
804 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
805 /* 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
|
806 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
|
807 because it is obsolete anyway and new code should not use it. */ |
484 | 808 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
|
809 call2 (Vbefore_change_function, start, end); |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
810 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
811 /* Now run the before-change-functions if any. */ |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
812 if (!NILP (Vbefore_change_functions)) |
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
813 { |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
814 Lisp_Object args[3]; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
815 Lisp_Object before_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
816 Lisp_Object after_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
817 struct gcpro gcpro1, gcpro2; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
818 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
819 /* "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
|
820 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
|
821 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
|
822 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
|
823 after_change_functions = Vafter_change_functions; |
12798
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
824 Vbefore_change_functions = Qnil; |
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
825 Vafter_change_functions = Qnil; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
826 GCPRO2 (before_change_functions, after_change_functions); |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
827 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
828 /* Actually run the hook functions. */ |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
829 args[0] = Qbefore_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
830 args[1] = start; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
831 args[2] = end; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
832 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
|
833 |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
834 /* "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
|
835 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
|
836 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
|
837 UNGCPRO; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
838 } |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
839 |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
840 if (!NILP (current_buffer->overlays_before) |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
841 || !NILP (current_buffer->overlays_after)) |
10145
0091da658d85
* buffer.c (report_overlay_modification): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
10144
diff
changeset
|
842 report_overlay_modification (start, end, 0, start, end, Qnil); |
157 | 843 } |
844 | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2783
diff
changeset
|
845 /* Signal a change immediately after it happens. |
157 | 846 POS is the address of the start of the changed text. |
847 LENDEL is the number of characters of the text before the change. | |
848 (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
|
849 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
|
850 after the change. */ |
157 | 851 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
852 void |
157 | 853 signal_after_change (pos, lendel, lenins) |
854 int pos, lendel, lenins; | |
855 { | |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
856 /* 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
|
857 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
|
858 because it is obsolete anyway and new code should not use it. */ |
484 | 859 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
|
860 call3 (Vafter_change_function, |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
861 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
|
862 make_number (lendel)); |
157 | 863 |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
864 if (!NILP (Vafter_change_functions)) |
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
865 { |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
866 Lisp_Object args[4]; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
867 Lisp_Object before_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
868 Lisp_Object after_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
869 struct gcpro gcpro1, gcpro2; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
870 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
871 /* "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
|
872 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
|
873 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
|
874 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
|
875 after_change_functions = Vafter_change_functions; |
12798
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
876 Vbefore_change_functions = Qnil; |
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
877 Vafter_change_functions = Qnil; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
878 GCPRO2 (before_change_functions, after_change_functions); |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
879 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
880 /* Actually run the hook functions. */ |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
881 args[0] = Qafter_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
882 XSETFASTINT (args[1], pos); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
883 XSETFASTINT (args[2], pos + lenins); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
884 XSETFASTINT (args[3], lendel); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
885 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
|
886 4, args); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
887 |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
888 /* "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
|
889 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
|
890 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
|
891 UNGCPRO; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
892 } |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
893 |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
894 if (!NILP (current_buffer->overlays_before) |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
895 || !NILP (current_buffer->overlays_after)) |
10145
0091da658d85
* buffer.c (report_overlay_modification): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
10144
diff
changeset
|
896 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
|
897 make_number (pos + lenins), |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
898 1, |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
899 make_number (pos), make_number (pos + lenins), |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
900 make_number (lendel)); |
13026
3ff15e408e2c
(signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents:
12997
diff
changeset
|
901 |
3ff15e408e2c
(signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents:
12997
diff
changeset
|
902 /* 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
|
903 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
|
904 if (lendel == 0) |
3ff15e408e2c
(signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents:
12997
diff
changeset
|
905 report_interval_modification (pos, pos + lenins); |
157 | 906 } |