Mercurial > emacs
annotate src/insdel.c @ 38588:08a4c6c00af0
(init_from_display_pos): If POS is in an overlay string,
deal with the first overlay string having an image `display'
property.
(try_window_reusing_current_matrix, compute_line_metrics): Fix
computation of row's visible height for the case that part of the
row is invisible above and part of the row is at the same time
invisible below the window.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Fri, 27 Jul 2001 15:29:16 +0000 |
parents | 2ae7cda73ec4 |
children | 796039437953 |
rev | line source |
---|---|
157 | 1 /* Buffer insertion/deletion and gap motion for GNU Emacs. |
37760
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2 Copyright (C) 1985, 86,93,94,95,97,98, 1999, 2000, 2001 |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
3 Free Software Foundation, Inc. |
157 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
12244 | 9 the Free Software Foundation; either version 2, or (at your option) |
157 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 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
|
19 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
|
20 Boston, MA 02111-1307, USA. */ |
157 | 21 |
22 | |
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4078
diff
changeset
|
23 #include <config.h> |
157 | 24 #include "lisp.h" |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
25 #include "intervals.h" |
157 | 26 #include "buffer.h" |
17034 | 27 #include "charset.h" |
157 | 28 #include "window.h" |
2480 | 29 #include "blockinput.h" |
21514 | 30 #include "region-cache.h" |
157 | 31 |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
32 #ifndef NULL |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
33 #define NULL 0 |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
34 #endif |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
35 |
11703
3c5b974e1c10
(make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents:
11691
diff
changeset
|
36 #define min(x, y) ((x) < (y) ? (x) : (y)) |
25025
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
37 #define max(x, y) ((x) > (y) ? (x) : (y)) |
11703
3c5b974e1c10
(make_gap): Make this new error check also check exceeding VALBITS.
Richard M. Stallman <rms@gnu.org>
parents:
11691
diff
changeset
|
38 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
39 static void insert_from_string_1 P_ ((Lisp_Object, int, int, int, int, int, int)); |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
40 static void insert_from_buffer_1 (); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
41 static void gap_left P_ ((int, int, int)); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
42 static void gap_right P_ ((int, int)); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
43 static void adjust_markers_gap_motion P_ ((int, int, int)); |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
44 static void adjust_markers_for_insert P_ ((int, int, int, int, int)); |
26731
9b7d48762152
(adjust_markers_for_delete): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
26715
diff
changeset
|
45 void adjust_markers_for_delete P_ ((int, int, int, int)); |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
46 static void adjust_markers_for_replace P_ ((int, int, int, int, int, int)); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
47 static void adjust_point P_ ((int, int)); |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
48 |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
49 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
|
50 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
51 /* 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
|
52 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
|
53 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
|
54 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
55 /* 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
|
56 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
|
57 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
|
58 once the deferral ends. |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
59 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
60 In each element. |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
61 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
|
62 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
|
63 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
|
64 (negative for a deletion). */ |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
65 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
|
66 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
67 /* 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
|
68 Lisp_Object combine_after_change_buffer; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
69 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
70 /* Check all markers in the current buffer, looking for something invalid. */ |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
71 |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
72 static int check_markers_debug_flag; |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
73 |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
74 #define CHECK_MARKERS() \ |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
75 if (check_markers_debug_flag) \ |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
76 check_markers (); \ |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
77 else |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
78 |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
79 void |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
80 check_markers () |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
81 { |
25764
72f00825a576
(copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25662
diff
changeset
|
82 register Lisp_Object tail; |
23566
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
83 int multibyte = ! NILP (current_buffer->enable_multibyte_characters); |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
84 |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
85 tail = BUF_MARKERS (current_buffer); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
86 |
28417
4b675266db04
* lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents:
27664
diff
changeset
|
87 while (! NILP (tail)) |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
88 { |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
89 if (XMARKER (tail)->buffer->text != current_buffer->text) |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
90 abort (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
91 if (XMARKER (tail)->charpos > Z) |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
92 abort (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
93 if (XMARKER (tail)->bytepos > Z_BYTE) |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
94 abort (); |
23566
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
95 if (multibyte && ! CHAR_HEAD_P (FETCH_BYTE (XMARKER (tail)->bytepos))) |
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
96 abort (); |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
97 |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
98 tail = XMARKER (tail)->chain; |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
99 } |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
100 } |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
101 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
102 /* Move gap to position CHARPOS. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
103 Note that this can quit! */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
104 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
105 void |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
106 move_gap (charpos) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
107 int charpos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
108 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
109 move_gap_both (charpos, charpos_to_bytepos (charpos)); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
110 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
111 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
112 /* Move gap to byte position BYTEPOS, which is also char position CHARPOS. |
157 | 113 Note that this can quit! */ |
114 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
115 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
116 move_gap_both (charpos, bytepos) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
117 int charpos, bytepos; |
157 | 118 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
119 if (bytepos < GPT_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
120 gap_left (charpos, bytepos, 0); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
121 else if (bytepos > GPT_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
122 gap_right (charpos, bytepos); |
157 | 123 } |
124 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
125 /* Move the gap to a position less than the current GPT. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
126 BYTEPOS describes the new position as a byte position, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
127 and CHARPOS is the corresponding char position. |
157 | 128 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */ |
129 | |
7108 | 130 static void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
131 gap_left (charpos, bytepos, newgap) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
132 register int charpos, bytepos; |
157 | 133 int newgap; |
134 { | |
135 register unsigned char *to, *from; | |
136 register int i; | |
137 int new_s1; | |
138 | |
139 if (!newgap) | |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
140 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT); |
157 | 141 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
142 i = GPT_BYTE; |
157 | 143 to = GAP_END_ADDR; |
144 from = GPT_ADDR; | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
145 new_s1 = GPT_BYTE; |
157 | 146 |
147 /* Now copy the characters. To move the gap down, | |
148 copy characters up. */ | |
149 | |
150 while (1) | |
151 { | |
152 /* I gets number of characters left to copy. */ | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
153 i = new_s1 - bytepos; |
157 | 154 if (i == 0) |
155 break; | |
156 /* If a quit is requested, stop copying now. | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
157 Change BYTEPOS to be where we have actually moved the gap to. */ |
157 | 158 if (QUITP) |
159 { | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
160 bytepos = new_s1; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
161 charpos = BYTE_TO_CHAR (bytepos); |
157 | 162 break; |
163 } | |
164 /* Move at most 32000 chars before checking again for a quit. */ | |
165 if (i > 32000) | |
166 i = 32000; | |
167 #ifdef GAP_USE_BCOPY | |
168 if (i >= 128 | |
169 /* bcopy is safe if the two areas of memory do not overlap | |
170 or on systems where bcopy is always safe for moving upward. */ | |
171 && (BCOPY_UPWARD_SAFE | |
172 || to - from >= 128)) | |
173 { | |
174 /* If overlap is not safe, avoid it by not moving too many | |
175 characters at once. */ | |
176 if (!BCOPY_UPWARD_SAFE && i > to - from) | |
177 i = to - from; | |
178 new_s1 -= i; | |
179 from -= i, to -= i; | |
180 bcopy (from, to, i); | |
181 } | |
182 else | |
183 #endif | |
184 { | |
185 new_s1 -= i; | |
186 while (--i >= 0) | |
187 *--to = *--from; | |
188 } | |
189 } | |
190 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
191 /* Adjust markers, and buffer data structure, to put the gap at BYTEPOS. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
192 BYTEPOS is where the loop above stopped, which may be what was specified |
157 | 193 or may be where a quit was detected. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
194 adjust_markers_gap_motion (bytepos, GPT_BYTE, GAP_SIZE); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
195 GPT_BYTE = bytepos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
196 GPT = charpos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
197 if (bytepos < charpos) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
198 abort (); |
17034 | 199 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
157 | 200 QUIT; |
201 } | |
202 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
203 /* Move the gap to a position greater than than the current GPT. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
204 BYTEPOS describes the new position as a byte position, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
205 and CHARPOS is the corresponding char position. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
206 |
7108 | 207 static void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
208 gap_right (charpos, bytepos) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
209 register int charpos, bytepos; |
157 | 210 { |
211 register unsigned char *to, *from; | |
212 register int i; | |
213 int new_s1; | |
214 | |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
215 BUF_COMPUTE_UNCHANGED (current_buffer, charpos, GPT); |
157 | 216 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
217 i = GPT_BYTE; |
157 | 218 from = GAP_END_ADDR; |
219 to = GPT_ADDR; | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
220 new_s1 = GPT_BYTE; |
157 | 221 |
222 /* Now copy the characters. To move the gap up, | |
223 copy characters down. */ | |
224 | |
225 while (1) | |
226 { | |
227 /* I gets number of characters left to copy. */ | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
228 i = bytepos - new_s1; |
157 | 229 if (i == 0) |
230 break; | |
231 /* If a quit is requested, stop copying now. | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
232 Change BYTEPOS to be where we have actually moved the gap to. */ |
157 | 233 if (QUITP) |
234 { | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
235 bytepos = new_s1; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
236 charpos = BYTE_TO_CHAR (bytepos); |
157 | 237 break; |
238 } | |
239 /* Move at most 32000 chars before checking again for a quit. */ | |
240 if (i > 32000) | |
241 i = 32000; | |
242 #ifdef GAP_USE_BCOPY | |
243 if (i >= 128 | |
244 /* bcopy is safe if the two areas of memory do not overlap | |
245 or on systems where bcopy is always safe for moving downward. */ | |
246 && (BCOPY_DOWNWARD_SAFE | |
247 || from - to >= 128)) | |
248 { | |
249 /* If overlap is not safe, avoid it by not moving too many | |
250 characters at once. */ | |
251 if (!BCOPY_DOWNWARD_SAFE && i > from - to) | |
252 i = from - to; | |
253 new_s1 += i; | |
254 bcopy (from, to, i); | |
255 from += i, to += i; | |
256 } | |
257 else | |
258 #endif | |
259 { | |
260 new_s1 += i; | |
261 while (--i >= 0) | |
262 *to++ = *from++; | |
263 } | |
264 } | |
265 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
266 adjust_markers_gap_motion (GPT_BYTE + GAP_SIZE, bytepos + GAP_SIZE, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
267 - GAP_SIZE); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
268 GPT = charpos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
269 GPT_BYTE = bytepos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
270 if (bytepos < charpos) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
271 abort (); |
17034 | 272 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
157 | 273 QUIT; |
274 } | |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
275 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
276 /* Add AMOUNT to the byte position of every marker in the current buffer |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
277 whose current byte position is between FROM (exclusive) and TO (inclusive). |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
278 |
157 | 279 Also, any markers past the outside of that interval, in the direction |
280 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
|
281 and then adjusted by AMOUNT. |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
282 |
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
283 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
|
284 we record the adjustment for undo. (This case happens only for |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
285 deletion.) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
286 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
287 The markers' character positions are not altered, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
288 because gap motion does not affect character positions. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
289 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
290 int adjust_markers_test; |
157 | 291 |
7108 | 292 static void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
293 adjust_markers_gap_motion (from, to, amount) |
157 | 294 register int from, to, amount; |
295 { | |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
296 /* Now that a marker has a bytepos, not counting the gap, |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
297 nothing needs to be done here. */ |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
298 #if 0 |
157 | 299 Lisp_Object marker; |
300 register struct Lisp_Marker *m; | |
301 register int mpos; | |
302 | |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
303 marker = BUF_MARKERS (current_buffer); |
157 | 304 |
484 | 305 while (!NILP (marker)) |
157 | 306 { |
307 m = XMARKER (marker); | |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
308 mpos = m->bytepos; |
157 | 309 if (amount > 0) |
310 { | |
311 if (mpos > to && mpos < to + amount) | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
312 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
313 if (adjust_markers_test) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
314 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
315 mpos = to + amount; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
316 } |
157 | 317 } |
318 else | |
319 { | |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
320 /* 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
|
321 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
|
322 but then this range contains no markers. */ |
157 | 323 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
|
324 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
325 if (adjust_markers_test) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
326 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
327 mpos = from + amount; |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
328 } |
157 | 329 } |
330 if (mpos > from && mpos <= to) | |
331 mpos += amount; | |
332 m->bufpos = mpos; | |
333 marker = m->chain; | |
334 } | |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
335 #endif |
157 | 336 } |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
337 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
338 /* Adjust all markers for a deletion |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
339 whose range in bytes is FROM_BYTE to TO_BYTE. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
340 The range in charpos is FROM to TO. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
341 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
342 This function assumes that the gap is adjacent to |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
343 or inside of the range being deleted. */ |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
344 |
26731
9b7d48762152
(adjust_markers_for_delete): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
26715
diff
changeset
|
345 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
346 adjust_markers_for_delete (from, from_byte, to, to_byte) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
347 register int from, from_byte, to, to_byte; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
348 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
349 Lisp_Object marker; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
350 register struct Lisp_Marker *m; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
351 register int charpos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
352 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
353 marker = BUF_MARKERS (current_buffer); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
354 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
355 while (!NILP (marker)) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
356 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
357 m = XMARKER (marker); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
358 charpos = m->charpos; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
359 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
360 if (charpos > Z) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
361 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
362 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
363 /* If the marker is after the deletion, |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
364 relocate by number of chars / bytes deleted. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
365 if (charpos > to) |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
366 { |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
367 m->charpos -= to - from; |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
368 m->bytepos -= to_byte - from_byte; |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
369 } |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
370 /* Here's the case where a marker is inside text being deleted. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
371 else if (charpos > from) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
372 { |
32601
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
373 if (! m->insertion_type) |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
374 /* Normal markers will end up at the beginning of the |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
375 re-inserted text after undoing a deletion, and must be |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
376 adjusted to move them to the correct place. */ |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
377 record_marker_adjustment (marker, from - charpos); |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
378 else if (charpos < to) |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
379 /* Before-insertion markers will automatically move forward |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
380 upon re-inserting the deleted text, so we have to arrange |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
381 for them to move backward to the correct position. */ |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
382 record_marker_adjustment (marker, charpos - to); |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
383 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
384 m->charpos = from; |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
385 m->bytepos = from_byte; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
386 } |
32601
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
387 /* Here's the case where a before-insertion marker is immediately |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
388 before the deleted region. */ |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
389 else if (charpos == from && m->insertion_type) |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
390 { |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
391 /* Undoing the change uses normal insertion, which will |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
392 incorrectly make MARKER move forward, so we arrange for it |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
393 to then move backward to the correct place at the beginning |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
394 of the deleted region. */ |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
395 record_marker_adjustment (marker, to - from); |
f9b498650e20
(adjust_markers_for_delete): Handle before-insertion markers correctly.
Miles Bader <miles@gnu.org>
parents:
31829
diff
changeset
|
396 } |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
397 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
398 marker = m->chain; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
399 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
400 } |
23259
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
401 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
402 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
403 /* Adjust markers for an insertion that stretches from FROM / FROM_BYTE |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
404 to TO / TO_BYTE. We have to relocate the charpos of every marker |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
405 that points after the insertion (but not their bytepos). |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
406 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
407 When a marker points at the insertion point, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
408 we advance it if either its insertion-type is t |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
409 or BEFORE_MARKERS is true. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
410 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
411 static void |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
412 adjust_markers_for_insert (from, from_byte, to, to_byte, before_markers) |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
413 register int from, from_byte, to, to_byte; |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
414 int before_markers; |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
415 { |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
416 Lisp_Object marker; |
17034 | 417 int adjusted = 0; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
418 int nchars = to - from; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
419 int nbytes = to_byte - from_byte; |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
420 |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
421 marker = BUF_MARKERS (current_buffer); |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
422 |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
423 while (!NILP (marker)) |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
424 { |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
425 register struct Lisp_Marker *m = XMARKER (marker); |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
426 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
427 /* In a single-byte buffer, a marker's two positions must be |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
428 equal. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
429 if (Z == Z_BYTE) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
430 { |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
431 if (m->charpos != m->bytepos) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
432 abort (); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
433 } |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
434 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
435 if (m->bytepos == from_byte) |
17034 | 436 { |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
437 if (m->insertion_type || before_markers) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
438 { |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
439 m->bytepos = to_byte; |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
440 m->charpos = to; |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
441 if (m->insertion_type) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
442 adjusted = 1; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
443 } |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
444 } |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
445 else if (m->bytepos > from_byte) |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
446 { |
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
447 m->bytepos += nbytes; |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
448 m->charpos += nchars; |
20568
f0bacfbd9d47
(adjust_markers_gap_motion): Now a no-op.
Richard M. Stallman <rms@gnu.org>
parents:
20555
diff
changeset
|
449 } |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
450 |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
451 marker = m->chain; |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
452 } |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
453 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
454 /* Adjusting only markers whose insertion-type is t may result in |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
455 disordered overlays in the slot `overlays_before'. */ |
17034 | 456 if (adjusted) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
457 fix_overlays_before (current_buffer, from, to); |
12997
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
458 } |
938dc2491820
(adjust_markers_for_insert): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12798
diff
changeset
|
459 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
460 /* Adjust point for an insertion of NBYTES bytes, which are NCHARS characters. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
461 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
462 This is used only when the value of point changes due to an insert |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
463 or delete; it does not represent a conceptual change in point as a |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
464 marker. In particular, point is not crossing any interval |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
465 boundaries, so there's no need to use the usual SET_PT macro. In |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
466 fact it would be incorrect to do so, because either the old or the |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
467 new value of point is out of sync with the current set of |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
468 intervals. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
469 |
7109 | 470 static void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
471 adjust_point (nchars, nbytes) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
472 int nchars, nbytes; |
7109 | 473 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
474 BUF_PT (current_buffer) += nchars; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
475 BUF_PT_BYTE (current_buffer) += nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
476 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
477 /* In a single-byte buffer, the two positions must be equal. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
478 if (ZV == ZV_BYTE |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
479 && PT != PT_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
480 abort (); |
7109 | 481 } |
157 | 482 |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
483 /* Adjust markers for a replacement of a text at FROM (FROM_BYTE) of |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
484 length OLD_CHARS (OLD_BYTES) to a new text of length NEW_CHARS |
29065
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
485 (NEW_BYTES). It is assumed that OLD_CHARS > 0, i.e., this is not |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
486 an insertion. */ |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
487 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
488 static void |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
489 adjust_markers_for_replace (from, from_byte, old_chars, old_bytes, |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
490 new_chars, new_bytes) |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
491 int from, from_byte, old_chars, old_bytes, new_chars, new_bytes; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
492 { |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
493 Lisp_Object marker = BUF_MARKERS (current_buffer); |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
494 int prev_to_byte = from_byte + old_bytes; |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
495 int diff_chars = new_chars - old_chars; |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
496 int diff_bytes = new_bytes - old_bytes; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
497 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
498 while (!NILP (marker)) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
499 { |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
500 register struct Lisp_Marker *m = XMARKER (marker); |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
501 |
29065
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
502 if (m->bytepos >= prev_to_byte) |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
503 { |
29065
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
504 m->charpos += diff_chars; |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
505 m->bytepos += diff_bytes; |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
506 } |
29065
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
507 else if (m->bytepos > from_byte) |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
508 { |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
509 m->charpos = from; |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
510 m->bytepos = from_byte; |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
511 } |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
512 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
513 marker = m->chain; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
514 } |
23455
84276318b663
(adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents:
23400
diff
changeset
|
515 |
84276318b663
(adjust_markers_for_combining): This function deleted.
Kenichi Handa <handa@m17n.org>
parents:
23400
diff
changeset
|
516 CHECK_MARKERS (); |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
517 } |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
518 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
519 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
520 /* Make the gap NBYTES_ADDED bytes longer. */ |
157 | 521 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
522 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
523 make_gap (nbytes_added) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
524 int nbytes_added; |
157 | 525 { |
526 Lisp_Object tem; | |
527 int real_gap_loc; | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
528 int real_gap_loc_byte; |
157 | 529 int old_gap_size; |
530 | |
531 /* If we have to get more space, get enough to last a while. */ | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
532 nbytes_added += 2000; |
157 | 533 |
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
|
534 /* 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
|
535 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
|
536 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
|
537 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
538 if (Z_BYTE - BEG_BYTE + GAP_SIZE + nbytes_added |
13363
941c37982f37
(BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG):
Karl Heuer <kwzh@gnu.org>
parents:
13026
diff
changeset
|
539 >= ((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
|
540 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
|
541 |
31603
04e50cacc23f
(make_gap): Use enlarge_buffer_text.
Gerd Moellmann <gerd@gnu.org>
parents:
29379
diff
changeset
|
542 enlarge_buffer_text (current_buffer, nbytes_added); |
157 | 543 |
544 /* Prevent quitting in move_gap. */ | |
545 tem = Vinhibit_quit; | |
546 Vinhibit_quit = Qt; | |
547 | |
548 real_gap_loc = GPT; | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
549 real_gap_loc_byte = GPT_BYTE; |
157 | 550 old_gap_size = GAP_SIZE; |
551 | |
552 /* Call the newly allocated space a gap at the end of the whole space. */ | |
553 GPT = Z + GAP_SIZE; | |
20574
928b9aff1e64
(make_gap): Set GPT_BYTE along with GPT.
Richard M. Stallman <rms@gnu.org>
parents:
20568
diff
changeset
|
554 GPT_BYTE = Z_BYTE + GAP_SIZE; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
555 GAP_SIZE = nbytes_added; |
157 | 556 |
557 /* Move the new gap down to be consecutive with the end of the old one. | |
558 This adjusts the markers properly too. */ | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
559 gap_left (real_gap_loc + old_gap_size, real_gap_loc_byte + old_gap_size, 1); |
157 | 560 |
561 /* Now combine the two into one large gap. */ | |
562 GAP_SIZE += old_gap_size; | |
563 GPT = real_gap_loc; | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
564 GPT_BYTE = real_gap_loc_byte; |
157 | 565 |
17034 | 566 /* Put an anchor. */ |
567 *(Z_ADDR) = 0; | |
568 | |
157 | 569 Vinhibit_quit = tem; |
570 } | |
571 | |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
572 /* Copy NBYTES bytes of text from FROM_ADDR to TO_ADDR. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
573 FROM_MULTIBYTE says whether the incoming text is multibyte. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
574 TO_MULTIBYTE says whether to store the text as multibyte. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
575 If FROM_MULTIBYTE != TO_MULTIBYTE, we convert. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
576 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
577 Return the number of bytes stored at TO_ADDR. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
578 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
579 int |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
580 copy_text (from_addr, to_addr, nbytes, |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
581 from_multibyte, to_multibyte) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
582 unsigned char *from_addr; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
583 unsigned char *to_addr; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
584 int nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
585 int from_multibyte, to_multibyte; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
586 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
587 if (from_multibyte == to_multibyte) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
588 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
589 bcopy (from_addr, to_addr, nbytes); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
590 return nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
591 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
592 else if (from_multibyte) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
593 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
594 int nchars = 0; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
595 int bytes_left = nbytes; |
25764
72f00825a576
(copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25662
diff
changeset
|
596 Lisp_Object tbl = Qnil; |
22876
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
597 |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
598 /* We set the variable tbl to the reverse table of |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
599 Vnonascii_translation_table in advance. */ |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
600 if (CHAR_TABLE_P (Vnonascii_translation_table)) |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
601 { |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
602 tbl = Fchar_table_extra_slot (Vnonascii_translation_table, |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
603 make_number (0)); |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
604 if (!CHAR_TABLE_P (tbl)) |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
605 tbl = Qnil; |
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
606 } |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
607 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
608 /* Convert multibyte to single byte. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
609 while (bytes_left > 0) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
610 { |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
611 int thislen, c; |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
612 c = STRING_CHAR_AND_LENGTH (from_addr, bytes_left, thislen); |
22876
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
613 if (!SINGLE_BYTE_CHAR_P (c)) |
23028
2e93e3302328
(copy_text): Fix previous change, call
Kenichi Handa <handa@m17n.org>
parents:
22896
diff
changeset
|
614 c = multibyte_char_to_unibyte (c, tbl); |
22876
8c063663a19d
(copy_text): In multibyte to unibyte conversion, take
Kenichi Handa <handa@m17n.org>
parents:
22107
diff
changeset
|
615 *to_addr++ = c; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
616 from_addr += thislen; |
21676
81bbd2c2724a
(copy_text): Count down bytes_left properly
Richard M. Stallman <rms@gnu.org>
parents:
21526
diff
changeset
|
617 bytes_left -= thislen; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
618 nchars++; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
619 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
620 return nchars; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
621 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
622 else |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
623 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
624 unsigned char *initial_to_addr = to_addr; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
625 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
626 /* Convert single-byte to multibyte. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
627 while (nbytes > 0) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
628 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
629 int c = *from_addr++; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
630 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
631 if (c >= 0200) |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
632 { |
21037
1290ba9ccec8
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
20998
diff
changeset
|
633 c = unibyte_char_to_multibyte (c); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
634 to_addr += CHAR_STRING (c, to_addr); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
635 nbytes--; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
636 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
637 else |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
638 /* Special case for speed. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
639 *to_addr++ = c, nbytes--; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
640 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
641 return to_addr - initial_to_addr; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
642 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
643 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
644 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
645 /* Return the number of bytes it would take |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
646 to convert some single-byte text to multibyte. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
647 The single-byte text consists of NBYTES bytes at PTR. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
648 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
649 int |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
650 count_size_as_multibyte (ptr, nbytes) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
651 unsigned char *ptr; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
652 int nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
653 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
654 int i; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
655 int outgoing_nbytes = 0; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
656 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
657 for (i = 0; i < nbytes; i++) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
658 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
659 unsigned int c = *ptr++; |
21037
1290ba9ccec8
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
20998
diff
changeset
|
660 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
661 if (c < 0200) |
21037
1290ba9ccec8
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
20998
diff
changeset
|
662 outgoing_nbytes++; |
1290ba9ccec8
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
20998
diff
changeset
|
663 else |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
664 { |
21037
1290ba9ccec8
(DEFAULT_NONASCII_INSERT_OFFSET): Macro definition is
Kenichi Handa <handa@m17n.org>
parents:
20998
diff
changeset
|
665 c = unibyte_char_to_multibyte (c); |
23133
48fb93ba8b10
(count_size_as_multibyte): Use macro CHAR_BYTES instead of Fchar_bytes.
Kenichi Handa <handa@m17n.org>
parents:
23053
diff
changeset
|
666 outgoing_nbytes += CHAR_BYTES (c); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
667 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
668 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
669 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
670 return outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
671 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
672 |
157 | 673 /* Insert a string of specified length before point. |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
674 This function judges multibyteness based on |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
675 enable_multibyte_characters in the current buffer; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
676 it never converts between single-byte and multibyte. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
677 |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
678 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
|
679 prepare_to_modify_buffer could relocate the text. */ |
157 | 680 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
681 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
682 insert (string, nbytes) |
157 | 683 register unsigned char *string; |
21514 | 684 register int nbytes; |
157 | 685 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
686 if (nbytes > 0) |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
687 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
688 int opoint = PT; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
689 insert_1 (string, nbytes, 0, 1, 0); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
690 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
691 update_compositions (opoint, PT, CHECK_BORDER); |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
692 } |
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
693 } |
157 | 694 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
695 /* Likewise, but inherit text properties from neighboring characters. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
696 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
697 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
698 insert_and_inherit (string, nbytes) |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
699 register unsigned char *string; |
21514 | 700 register int nbytes; |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
701 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
702 if (nbytes > 0) |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
703 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
704 int opoint = PT; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
705 insert_1 (string, nbytes, 1, 1, 0); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
706 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
707 update_compositions (opoint, PT, CHECK_BORDER); |
9656
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
708 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
709 } |
e6cb99e4370c
(insert_from_buffer, insert_from_buffer_1): New functions.
Karl Heuer <kwzh@gnu.org>
parents:
9646
diff
changeset
|
710 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
711 /* Insert the character C before point. Do not inherit text properties. */ |
157 | 712 |
713 void | |
714 insert_char (c) | |
17034 | 715 int c; |
157 | 716 { |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
717 unsigned char str[MAX_MULTIBYTE_LENGTH]; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
718 int len; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
719 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
720 if (! NILP (current_buffer->enable_multibyte_characters)) |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
721 len = CHAR_STRING (c, str); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
722 else |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
723 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
724 len = 1; |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
725 str[0] = c; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
726 } |
17034 | 727 |
728 insert (str, len); | |
157 | 729 } |
730 | |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
731 /* Insert the null-terminated string S before point. */ |
157 | 732 |
733 void | |
734 insert_string (s) | |
735 char *s; | |
736 { | |
737 insert (s, strlen (s)); | |
738 } | |
739 | |
740 /* Like `insert' except that all markers pointing at the place where | |
741 the insertion happens are adjusted to point after it. | |
742 Don't use this function to insert part of a Lisp string, | |
743 since gc could happen and relocate it. */ | |
744 | |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
745 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
746 insert_before_markers (string, nbytes) |
157 | 747 unsigned char *string; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
748 register int nbytes; |
157 | 749 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
750 if (nbytes > 0) |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
751 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
752 int opoint = PT; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
753 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
754 insert_1 (string, nbytes, 0, 1, 1); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
755 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
756 update_compositions (opoint, PT, CHECK_BORDER); |
6739
6b0dd4aeca67
(insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents:
6126
diff
changeset
|
757 } |
157 | 758 } |
759 | |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
760 /* Likewise, but inherit text properties from neighboring characters. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
761 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
762 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
763 insert_before_markers_and_inherit (string, nbytes) |
8668
011660f7aae9
(insert_before_markers_and_inherit): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8647
diff
changeset
|
764 unsigned char *string; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
765 register int nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
766 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
767 if (nbytes > 0) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
768 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
769 int opoint = PT; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
770 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
771 insert_1 (string, nbytes, 1, 1, 1); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
772 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
773 update_compositions (opoint, PT, CHECK_BORDER); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
774 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
775 } |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
776 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
777 /* Subroutine used by the insert functions above. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
778 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
779 void |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
780 insert_1 (string, nbytes, inherit, prepare, before_markers) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
781 register unsigned char *string; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
782 register int nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
783 int inherit, prepare, before_markers; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
784 { |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
785 insert_1_both (string, chars_in_text (string, nbytes), nbytes, |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
786 inherit, prepare, before_markers); |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
787 } |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
788 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
789 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
790 #ifdef BYTE_COMBINING_DEBUG |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
791 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
792 /* See if the bytes before POS/POS_BYTE combine with bytes |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
793 at the start of STRING to form a single character. |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
794 If so, return the number of bytes at the start of STRING |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
795 which combine in this way. Otherwise, return 0. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
796 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
797 int |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
798 count_combining_before (string, length, pos, pos_byte) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
799 unsigned char *string; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
800 int length; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
801 int pos, pos_byte; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
802 { |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
803 int len, combining_bytes; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
804 unsigned char *p; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
805 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
806 if (NILP (current_buffer->enable_multibyte_characters)) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
807 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
808 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
809 /* At first, we can exclude the following cases: |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
810 (1) STRING[0] can't be a following byte of multibyte sequence. |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
811 (2) POS is the start of the current buffer. |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
812 (3) A character before POS is not a multibyte character. */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
813 if (length == 0 || CHAR_HEAD_P (*string)) /* case (1) */ |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
814 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
815 if (pos_byte == BEG_BYTE) /* case (2) */ |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
816 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
817 len = 1; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
818 p = BYTE_POS_ADDR (pos_byte - 1); |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
819 while (! CHAR_HEAD_P (*p)) p--, len++; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
820 if (! BASE_LEADING_CODE_P (*p)) /* case (3) */ |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
821 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
822 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
823 combining_bytes = BYTES_BY_CHAR_HEAD (*p) - len; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
824 if (combining_bytes <= 0) |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
825 /* The character preceding POS is, complete and no room for |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
826 combining bytes (combining_bytes == 0), or an independent 8-bit |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
827 character (combining_bytes < 0). */ |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
828 return 0; |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
829 |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
830 /* We have a combination situation. Count the bytes at STRING that |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
831 may combine. */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
832 p = string + 1; |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
833 while (!CHAR_HEAD_P (*p) && p < string + length) |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
834 p++; |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
835 |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
836 return (combining_bytes < p - string ? combining_bytes : p - string); |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
837 } |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
838 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
839 /* See if the bytes after POS/POS_BYTE combine with bytes |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
840 at the end of STRING to form a single character. |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
841 If so, return the number of bytes after POS/POS_BYTE |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
842 which combine in this way. Otherwise, return 0. */ |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
843 |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
844 int |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
845 count_combining_after (string, length, pos, pos_byte) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
846 unsigned char *string; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
847 int length; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
848 int pos, pos_byte; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
849 { |
25764
72f00825a576
(copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25662
diff
changeset
|
850 int opos_byte = pos_byte; |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
851 int i; |
25764
72f00825a576
(copy_text): Removed unused variables.
Gerd Moellmann <gerd@gnu.org>
parents:
25662
diff
changeset
|
852 int bytes; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
853 unsigned char *bufp; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
854 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
855 if (NILP (current_buffer->enable_multibyte_characters)) |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
856 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
857 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
858 /* At first, we can exclude the following cases: |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
859 (1) The last byte of STRING is an ASCII. |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
860 (2) POS is the last of the current buffer. |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
861 (3) A character at POS can't be a following byte of multibyte |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
862 character. */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
863 if (length > 0 && ASCII_BYTE_P (string[length - 1])) /* case (1) */ |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
864 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
865 if (pos_byte == Z_BYTE) /* case (2) */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
866 return 0; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
867 bufp = BYTE_POS_ADDR (pos_byte); |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
868 if (CHAR_HEAD_P (*bufp)) /* case (3) */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
869 return 0; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
870 |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
871 i = length - 1; |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
872 while (i >= 0 && ! CHAR_HEAD_P (string[i])) |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
873 { |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
874 i--; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
875 } |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
876 if (i < 0) |
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
877 { |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
878 /* All characters in STRING are not character head. We must |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
879 check also preceding bytes at POS. We are sure that the gap |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
880 is at POS. */ |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
881 unsigned char *p = BEG_ADDR; |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
882 i = pos_byte - 2; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
883 while (i >= 0 && ! CHAR_HEAD_P (p[i])) |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
884 i--; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
885 if (i < 0 || !BASE_LEADING_CODE_P (p[i])) |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
886 return 0; |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
887 |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
888 bytes = BYTES_BY_CHAR_HEAD (p[i]); |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
889 return (bytes <= pos_byte - 1 - i + length |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
890 ? 0 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
891 : bytes - (pos_byte - 1 - i + length)); |
23203
a4e688757109
(count_combining_after): Check also preceding bytes at
Kenichi Handa <handa@m17n.org>
parents:
23155
diff
changeset
|
892 } |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
893 if (!BASE_LEADING_CODE_P (string[i])) |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
894 return 0; |
25509
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
895 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
896 bytes = BYTES_BY_CHAR_HEAD (string[i]) - (length - i); |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
897 bufp++, pos_byte++; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
898 while (!CHAR_HEAD_P (*bufp)) bufp++, pos_byte++; |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
899 |
d1fbe67c3f69
(count_combining_composition): New function.
Kenichi Handa <handa@m17n.org>
parents:
25373
diff
changeset
|
900 return (bytes <= pos_byte - opos_byte ? bytes : pos_byte - opos_byte); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
901 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
902 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
903 #endif |
23566
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
904 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
905 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
906 /* Insert a sequence of NCHARS chars which occupy NBYTES bytes |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
907 starting at STRING. INHERIT, PREPARE and BEFORE_MARKERS |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
908 are the same as in insert_1. */ |
157 | 909 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
910 void |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
911 insert_1_both (string, nchars, nbytes, inherit, prepare, before_markers) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
912 register unsigned char *string; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
913 register int nchars, nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
914 int inherit, prepare, before_markers; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
915 { |
21054
5d592343630f
(insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents:
21037
diff
changeset
|
916 if (NILP (current_buffer->enable_multibyte_characters)) |
5d592343630f
(insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents:
21037
diff
changeset
|
917 nchars = nbytes; |
5d592343630f
(insert_1_both): If enable-multibyte-characters is nil,
Kenichi Handa <handa@m17n.org>
parents:
21037
diff
changeset
|
918 |
21817
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
919 if (prepare) |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
920 /* Do this before moving and increasing the gap, |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
921 because the before-change hooks might move the gap |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
922 or make it smaller. */ |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
923 prepare_to_modify_buffer (PT, PT, NULL); |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
924 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
925 if (PT != GPT) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
926 move_gap_both (PT, PT_BYTE); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
927 if (GAP_SIZE < nbytes) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
928 make_gap (nbytes - GAP_SIZE); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
929 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
930 #ifdef BYTE_COMBINING_DEBUG |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
931 if (count_combining_before (string, nbytes, PT, PT_BYTE) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
932 || count_combining_after (string, nbytes, PT, PT_BYTE)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
933 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
934 #endif |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
935 |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
936 /* Record deletion of the surrounding text that combines with |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
937 the insertion. This, together with recording the insertion, |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
938 will add up to the right stuff in the undo list. */ |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
939 record_insert (PT, nchars); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
940 MODIFF++; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
941 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
942 bcopy (string, GPT_ADDR, nbytes); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
943 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
944 GAP_SIZE -= nbytes; |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
945 GPT += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
946 ZV += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
947 Z += nchars; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
948 GPT_BYTE += nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
949 ZV_BYTE += nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
950 Z_BYTE += nbytes; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
951 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
952 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
953 if (GPT_BYTE < GPT) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
954 abort (); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
955 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
956 adjust_overlays_for_insert (PT, nchars); |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
957 adjust_markers_for_insert (PT, PT_BYTE, |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
958 PT + nchars, PT_BYTE + nbytes, |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
959 before_markers); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
960 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
961 if (BUF_INTERVALS (current_buffer) != 0) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
962 offset_intervals (current_buffer, PT, nchars); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
963 |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
964 if (!inherit && BUF_INTERVALS (current_buffer) != 0) |
26604
381c4e70f9fb
(insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents:
26404
diff
changeset
|
965 set_text_properties (make_number (PT), make_number (PT + nchars), |
381c4e70f9fb
(insert_1_both): Call set_text_properties with last
Gerd Moellmann <gerd@gnu.org>
parents:
26404
diff
changeset
|
966 Qnil, Qnil, Qnil); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
967 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
968 adjust_point (nchars, nbytes); |
23538
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
969 |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
970 CHECK_MARKERS (); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
971 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
972 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
973 /* Insert the part of the text of STRING, a Lisp object assumed to be |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
974 of type string, consisting of the LENGTH characters (LENGTH_BYTE bytes) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
975 starting at position POS / POS_BYTE. If the text of STRING has properties, |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
976 copy them into the buffer. |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
977 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
978 It does not work to use `insert' for this, because a GC could happen |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
979 before we bcopy the stuff into the buffer, and relocate the string |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
980 without insert noticing. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
981 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
982 void |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
983 insert_from_string (string, pos, pos_byte, length, length_byte, inherit) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
984 Lisp_Object string; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
985 register int pos, pos_byte, length, length_byte; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
986 int inherit; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
987 { |
21765
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
988 int opoint = PT; |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
989 insert_from_string_1 (string, pos, pos_byte, length, length_byte, |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
990 inherit, 0); |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
991 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
992 update_compositions (opoint, PT, CHECK_BORDER); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
993 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
994 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
995 /* Like `insert_from_string' except that all markers pointing |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
996 at the place where the insertion happens are adjusted to point after it. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
997 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
998 void |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
999 insert_from_string_before_markers (string, pos, pos_byte, |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1000 length, length_byte, inherit) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1001 Lisp_Object string; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1002 register int pos, pos_byte, length, length_byte; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1003 int inherit; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1004 { |
21765
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1005 int opoint = PT; |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1006 insert_from_string_1 (string, pos, pos_byte, length, length_byte, |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1007 inherit, 1); |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1008 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
1009 update_compositions (opoint, PT, CHECK_BORDER); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1010 } |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1011 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1012 /* Subroutine of the insertion functions above. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1013 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1014 static void |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1015 insert_from_string_1 (string, pos, pos_byte, nchars, nbytes, |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1016 inherit, before_markers) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1017 Lisp_Object string; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1018 register int pos, pos_byte, nchars, nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1019 int inherit, before_markers; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1020 { |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1021 struct gcpro gcpro1; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1022 int outgoing_nbytes = nbytes; |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1023 INTERVAL intervals; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1024 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1025 /* Make OUTGOING_NBYTES describe the text |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1026 as it will be inserted in this buffer. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1027 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1028 if (NILP (current_buffer->enable_multibyte_characters)) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1029 outgoing_nbytes = nchars; |
21246
6c16216d0e69
(insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1030 else if (! STRING_MULTIBYTE (string)) |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1031 outgoing_nbytes |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1032 = count_size_as_multibyte (&XSTRING (string)->data[pos_byte], |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1033 nbytes); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1034 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1035 GCPRO1 (string); |
21817
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1036 /* Do this before moving and increasing the gap, |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1037 because the before-change hooks might move the gap |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1038 or make it smaller. */ |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1039 prepare_to_modify_buffer (PT, PT, NULL); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1040 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1041 if (PT != GPT) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1042 move_gap_both (PT, PT_BYTE); |
25170
dbc159883883
(insert_from_string_1): Check gap size against number
Andreas Schwab <schwab@suse.de>
parents:
25025
diff
changeset
|
1043 if (GAP_SIZE < outgoing_nbytes) |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1044 make_gap (outgoing_nbytes - GAP_SIZE); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1045 UNGCPRO; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1046 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1047 /* Copy the string text into the buffer, perhaps converting |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1048 between single-byte and multibyte. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1049 copy_text (XSTRING (string)->data + pos_byte, GPT_ADDR, nbytes, |
21246
6c16216d0e69
(insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1050 STRING_MULTIBYTE (string), |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1051 ! NILP (current_buffer->enable_multibyte_characters)); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1052 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1053 #ifdef BYTE_COMBINING_DEBUG |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1054 /* We have copied text into the gap, but we have not altered |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1055 PT or PT_BYTE yet. So we can pass PT and PT_BYTE |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1056 to these functions and get the same results as we would |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1057 have got earlier on. Meanwhile, PT_ADDR does point to |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1058 the text that has been stored by copy_text. */ |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1059 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1060 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1061 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1062 #endif |
22107
5507c26908af
(insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents:
21817
diff
changeset
|
1063 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1064 record_insert (PT, nchars); |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1065 MODIFF++; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1066 |
20642
818677afe7bc
(insert_from_string_1): Decrement GAP_SIZE by
Kenichi Handa <handa@m17n.org>
parents:
20608
diff
changeset
|
1067 GAP_SIZE -= outgoing_nbytes; |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1068 GPT += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1069 ZV += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1070 Z += nchars; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1071 GPT_BYTE += outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1072 ZV_BYTE += outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1073 Z_BYTE += outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1074 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1075 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1076 if (GPT_BYTE < GPT) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1077 abort (); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1078 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1079 adjust_overlays_for_insert (PT, nchars); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1080 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars, |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1081 PT_BYTE + outgoing_nbytes, |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1082 before_markers); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1083 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1084 offset_intervals (current_buffer, PT, nchars); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1085 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1086 intervals = XSTRING (string)->intervals; |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1087 /* Get the intervals for the part of the string we are inserting. */ |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21239
diff
changeset
|
1088 if (nbytes < STRING_BYTES (XSTRING (string))) |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1089 intervals = copy_intervals (intervals, pos, nchars); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1090 |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1091 /* Insert those intervals. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1092 graft_intervals_into_buffer (intervals, PT, nchars, |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1093 current_buffer, inherit); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1094 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1095 adjust_point (nchars, outgoing_nbytes); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1096 } |
157 | 1097 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1098 /* Insert text from BUF, NCHARS characters starting at CHARPOS, into the |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1099 current buffer. If the text in BUF has properties, they are absorbed |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1100 into the current buffer. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1101 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1102 It does not work to use `insert' for this, because a malloc could happen |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1103 and relocate BUF's text before the bcopy happens. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1104 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1105 void |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1106 insert_from_buffer (buf, charpos, nchars, inherit) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1107 struct buffer *buf; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1108 int charpos, nchars; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1109 int inherit; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1110 { |
21765
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1111 int opoint = PT; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1112 |
21765
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1113 insert_from_buffer_1 (buf, charpos, nchars, inherit); |
747446245094
(insert_from_string, insert_from_string_before_markers):
Richard M. Stallman <rms@gnu.org>
parents:
21676
diff
changeset
|
1114 signal_after_change (opoint, 0, PT - opoint); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
1115 update_compositions (opoint, PT, CHECK_BORDER); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1116 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1117 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1118 static void |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1119 insert_from_buffer_1 (buf, from, nchars, inherit) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1120 struct buffer *buf; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1121 int from, nchars; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1122 int inherit; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1123 { |
22107
5507c26908af
(insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents:
21817
diff
changeset
|
1124 register Lisp_Object temp; |
23850
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1125 int chunk, chunk_expanded; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1126 int from_byte = buf_charpos_to_bytepos (buf, from); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1127 int to_byte = buf_charpos_to_bytepos (buf, from + nchars); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1128 int incoming_nbytes = to_byte - from_byte; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1129 int outgoing_nbytes = incoming_nbytes; |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1130 INTERVAL intervals; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1131 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1132 /* Make OUTGOING_NBYTES describe the text |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1133 as it will be inserted in this buffer. */ |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1134 |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1135 if (NILP (current_buffer->enable_multibyte_characters)) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1136 outgoing_nbytes = nchars; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1137 else if (NILP (buf->enable_multibyte_characters)) |
23850
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1138 { |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1139 int outgoing_before_gap = 0; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1140 int outgoing_after_gap = 0; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1141 |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1142 if (from < BUF_GPT (buf)) |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1143 { |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1144 chunk = BUF_GPT_BYTE (buf) - from_byte; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1145 if (chunk > incoming_nbytes) |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1146 chunk = incoming_nbytes; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1147 outgoing_before_gap |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1148 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf, from_byte), |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1149 chunk); |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1150 } |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1151 else |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1152 chunk = 0; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1153 |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1154 if (chunk < incoming_nbytes) |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1155 outgoing_after_gap |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1156 = count_size_as_multibyte (BUF_BYTE_ADDRESS (buf, |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1157 from_byte + chunk), |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1158 incoming_nbytes - chunk); |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1159 |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1160 outgoing_nbytes = outgoing_before_gap + outgoing_after_gap; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1161 } |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1162 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1163 /* Make sure point-max won't overflow after this insertion. */ |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1164 XSETINT (temp, outgoing_nbytes + Z); |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1165 if (outgoing_nbytes + Z != XINT (temp)) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1166 error ("Maximum buffer size exceeded"); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1167 |
21817
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1168 /* Do this before moving and increasing the gap, |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1169 because the before-change hooks might move the gap |
4dbf2af94988
(insert_1_both): Call prepare_to_modify_buffer before moving or making gap.
Richard M. Stallman <rms@gnu.org>
parents:
21765
diff
changeset
|
1170 or make it smaller. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1171 prepare_to_modify_buffer (PT, PT, NULL); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1172 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1173 if (PT != GPT) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1174 move_gap_both (PT, PT_BYTE); |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1175 if (GAP_SIZE < outgoing_nbytes) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1176 make_gap (outgoing_nbytes - GAP_SIZE); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1177 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1178 if (from < BUF_GPT (buf)) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1179 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1180 chunk = BUF_GPT_BYTE (buf) - from_byte; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1181 if (chunk > incoming_nbytes) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1182 chunk = incoming_nbytes; |
23850
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1183 /* Record number of output bytes, so we know where |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1184 to put the output from the second copy_text. */ |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1185 chunk_expanded |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1186 = copy_text (BUF_BYTE_ADDRESS (buf, from_byte), |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1187 GPT_ADDR, chunk, |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1188 ! NILP (buf->enable_multibyte_characters), |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1189 ! NILP (current_buffer->enable_multibyte_characters)); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1190 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1191 else |
23850
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1192 chunk_expanded = chunk = 0; |
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1193 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1194 if (chunk < incoming_nbytes) |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1195 copy_text (BUF_BYTE_ADDRESS (buf, from_byte + chunk), |
23850
1a0fa0377fb3
(insert_from_buffer_1): Properly count the size
Karl Heuer <kwzh@gnu.org>
parents:
23689
diff
changeset
|
1196 GPT_ADDR + chunk_expanded, incoming_nbytes - chunk, |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1197 ! NILP (buf->enable_multibyte_characters), |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1198 ! NILP (current_buffer->enable_multibyte_characters)); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1199 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1200 #ifdef BYTE_COMBINING_DEBUG |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1201 /* We have copied text into the gap, but we have not altered |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1202 PT or PT_BYTE yet. So we can pass PT and PT_BYTE |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1203 to these functions and get the same results as we would |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1204 have got earlier on. Meanwhile, GPT_ADDR does point to |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1205 the text that has been stored by copy_text. */ |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1206 if (count_combining_before (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1207 || count_combining_after (GPT_ADDR, outgoing_nbytes, PT, PT_BYTE)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1208 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1209 #endif |
22107
5507c26908af
(insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents:
21817
diff
changeset
|
1210 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1211 record_insert (PT, nchars); |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1212 MODIFF++; |
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1213 |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1214 GAP_SIZE -= outgoing_nbytes; |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1215 GPT += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1216 ZV += nchars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1217 Z += nchars; |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1218 GPT_BYTE += outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1219 ZV_BYTE += outgoing_nbytes; |
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1220 Z_BYTE += outgoing_nbytes; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1221 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1222 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1223 if (GPT_BYTE < GPT) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1224 abort (); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1225 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1226 adjust_overlays_for_insert (PT, nchars); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1227 adjust_markers_for_insert (PT, PT_BYTE, PT + nchars, |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1228 PT_BYTE + outgoing_nbytes, |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1229 0); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1230 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1231 if (BUF_INTERVALS (current_buffer) != 0) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1232 offset_intervals (current_buffer, PT, nchars); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1233 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1234 /* Get the intervals for the part of the string we are inserting. */ |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1235 intervals = BUF_INTERVALS (buf); |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1236 if (outgoing_nbytes < BUF_Z_BYTE (buf) - BUF_BEG_BYTE (buf)) |
28813
12946e495506
(insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1237 { |
12946e495506
(insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1238 if (buf == current_buffer && PT <= from) |
12946e495506
(insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1239 from += nchars; |
12946e495506
(insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1240 intervals = copy_intervals (intervals, from, nchars); |
12946e495506
(insert_from_buffer_1): Adjust FROM position by number
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1241 } |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1242 |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1243 /* Insert those intervals. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1244 graft_intervals_into_buffer (intervals, PT, nchars, current_buffer, inherit); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1245 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1246 adjust_point (nchars, outgoing_nbytes); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1247 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1248 |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1249 /* Record undo information and adjust markers and position keepers for |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1250 a replacement of a text PREV_TEXT at FROM to a new text of LEN |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1251 chars (LEN_BYTE bytes) which resides in the gap just after |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1252 GPT_ADDR. |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1253 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1254 PREV_TEXT nil means the new text was just inserted. */ |
20937
f77dcb2556c5
(adjust_before_replace): Comment added.
Kenichi Handa <handa@m17n.org>
parents:
20889
diff
changeset
|
1255 |
20725
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1256 void |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1257 adjust_after_replace (from, from_byte, prev_text, len, len_byte) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1258 int from, from_byte, len, len_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1259 Lisp_Object prev_text; |
20725
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1260 { |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1261 int nchars_del = 0, nbytes_del = 0; |
23597
fda73fa21974
(byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents:
23566
diff
changeset
|
1262 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1263 #ifdef BYTE_COMBINING_DEBUG |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1264 if (count_combining_before (GPT_ADDR, len_byte, from, from_byte) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1265 || count_combining_after (GPT_ADDR, len_byte, from, from_byte)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1266 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1267 #endif |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1268 |
23538
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1269 if (STRINGP (prev_text)) |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1270 { |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1271 nchars_del = XSTRING (prev_text)->size; |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1272 nbytes_del = STRING_BYTES (XSTRING (prev_text)); |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1273 } |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1274 |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1275 /* Update various buffer positions for the new text. */ |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1276 GAP_SIZE -= len_byte; |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1277 ZV += len; Z+= len; |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1278 ZV_BYTE += len_byte; Z_BYTE += len_byte; |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1279 GPT += len; GPT_BYTE += len_byte; |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1280 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1281 |
29065
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1282 if (nchars_del > 0) |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1283 adjust_markers_for_replace (from, from_byte, nchars_del, nbytes_del, |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1284 len, len_byte); |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1285 else |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1286 adjust_markers_for_insert (from, from_byte, |
e8d5eb064973
(adjust_markers_for_replace): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
29012
diff
changeset
|
1287 from + len, from_byte + len_byte, 0); |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1288 |
23538
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1289 if (! EQ (current_buffer->undo_list, Qt)) |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1290 { |
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1291 if (nchars_del > 0) |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1292 record_delete (from, prev_text); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1293 record_insert (from, len); |
23538
84ad9e201361
(adjust_markers_for_insert): Adjust markers by taking
Kenichi Handa <handa@m17n.org>
parents:
23455
diff
changeset
|
1294 } |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1295 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1296 if (len > nchars_del) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1297 adjust_overlays_for_insert (from, len - nchars_del); |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1298 else if (len < nchars_del) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1299 adjust_overlays_for_delete (from, nchars_del - len); |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1300 if (BUF_INTERVALS (current_buffer) != 0) |
23137
fed2ba47003f
(adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents:
23133
diff
changeset
|
1301 { |
fed2ba47003f
(adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents:
23133
diff
changeset
|
1302 offset_intervals (current_buffer, from, len - nchars_del); |
fed2ba47003f
(adjust_after_replace): Fix the code to recode undo
Kenichi Handa <handa@m17n.org>
parents:
23133
diff
changeset
|
1303 } |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1304 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1305 if (from < PT) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1306 adjust_point (len - nchars_del, len_byte - nbytes_del); |
21139
48b83e612b06
(adjust_before_replace): Call
Kenichi Handa <handa@m17n.org>
parents:
21137
diff
changeset
|
1307 |
23566
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
1308 /* As byte combining will decrease Z, we must check this again. */ |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1309 if (Z - GPT < END_UNCHANGED) |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1310 END_UNCHANGED = Z - GPT; |
23566
25baa4bda79d
(check_markers): Check if markers are at character
Kenichi Handa <handa@m17n.org>
parents:
23555
diff
changeset
|
1311 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1312 CHECK_MARKERS (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1313 |
20725
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1314 if (len == 0) |
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1315 evaporate_overlays (from); |
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1316 MODIFF++; |
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1317 } |
bd592c9c3ef6
(adjust_before_replace, adjust_after_replace): New
Kenichi Handa <handa@m17n.org>
parents:
20708
diff
changeset
|
1318 |
21323
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1319 /* Record undo information, adjust markers and position keepers for an |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1320 insertion of a text from FROM (FROM_BYTE) to TO (TO_BYTE). The |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1321 text already exists in the current buffer but character length (TO |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1322 - FROM) may be incorrect, the correct length is NEWLEN. */ |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1323 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1324 void |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1325 adjust_after_insert (from, from_byte, to, to_byte, newlen) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1326 int from, from_byte, to, to_byte, newlen; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1327 { |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1328 int len = to - from, len_byte = to_byte - from_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1329 |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1330 if (GPT != to) |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1331 move_gap_both (to, to_byte); |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1332 GAP_SIZE += len_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1333 GPT -= len; GPT_BYTE -= len_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1334 ZV -= len; ZV_BYTE -= len_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1335 Z -= len; Z_BYTE -= len_byte; |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1336 adjust_after_replace (from, from_byte, Qnil, newlen, len_byte); |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1337 } |
6fe4f59fab8c
(adjust_markers_for_replace): New function.
Kenichi Handa <handa@m17n.org>
parents:
21307
diff
changeset
|
1338 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1339 /* Replace the text from character positions FROM to TO with NEW, |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1340 If PREPARE is nonzero, call prepare_to_modify_buffer. |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1341 If INHERIT, the newly inserted text should inherit text properties |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1342 from the surrounding non-deleted text. */ |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1343 |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1344 /* Note that this does not yet handle markers quite right. |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1345 Also it needs to record a single undo-entry that does a replacement |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1346 rather than a separate delete and insert. |
23053
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1347 That way, undo will also handle markers properly. |
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1348 |
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1349 But if MARKERS is 0, don't relocate markers. */ |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1350 |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1351 void |
23053
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1352 replace_range (from, to, new, prepare, inherit, markers) |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1353 Lisp_Object new; |
23053
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1354 int from, to, prepare, inherit, markers; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1355 { |
20608
a6cca06d5aaf
(count_size_as_multibyte): New function.
Richard M. Stallman <rms@gnu.org>
parents:
20574
diff
changeset
|
1356 int inschars = XSTRING (new)->size; |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21239
diff
changeset
|
1357 int insbytes = STRING_BYTES (XSTRING (new)); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1358 int from_byte, to_byte; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1359 int nbytes_del, nchars_del; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1360 register Lisp_Object temp; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1361 struct gcpro gcpro1; |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1362 INTERVAL intervals; |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1363 int outgoing_insbytes = insbytes; |
23259
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1364 Lisp_Object deletion; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1365 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1366 CHECK_MARKERS (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1367 |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1368 GCPRO1 (new); |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31603
diff
changeset
|
1369 deletion = Qnil; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1370 |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1371 if (prepare) |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1372 { |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1373 int range_length = to - from; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1374 prepare_to_modify_buffer (from, to, &from); |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1375 to = from + range_length; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1376 } |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1377 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1378 UNGCPRO; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1379 |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1380 /* Make args be valid */ |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1381 if (from < BEGV) |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1382 from = BEGV; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1383 if (to > ZV) |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1384 to = ZV; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1385 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1386 from_byte = CHAR_TO_BYTE (from); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1387 to_byte = CHAR_TO_BYTE (to); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1388 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1389 nchars_del = to - from; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1390 nbytes_del = to_byte - from_byte; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1391 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1392 if (nbytes_del <= 0 && insbytes == 0) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1393 return; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1394 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1395 /* Make OUTGOING_INSBYTES describe the text |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1396 as it will be inserted in this buffer. */ |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1397 |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1398 if (NILP (current_buffer->enable_multibyte_characters)) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1399 outgoing_insbytes = inschars; |
21246
6c16216d0e69
(insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1400 else if (! STRING_MULTIBYTE (new)) |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1401 outgoing_insbytes |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1402 = count_size_as_multibyte (XSTRING (new)->data, insbytes); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1403 |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1404 /* Make sure point-max won't overflow after this insertion. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1405 XSETINT (temp, Z_BYTE - nbytes_del + insbytes); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1406 if (Z_BYTE - nbytes_del + insbytes != XINT (temp)) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1407 error ("Maximum buffer size exceeded"); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1408 |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1409 GCPRO1 (new); |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1410 |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1411 /* Make sure the gap is somewhere in or next to what we are deleting. */ |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1412 if (from > GPT) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1413 gap_right (from, from_byte); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1414 if (to < GPT) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1415 gap_left (to, to_byte, 0); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1416 |
23597
fda73fa21974
(byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents:
23566
diff
changeset
|
1417 /* Even if we don't record for undo, we must keep the original text |
fda73fa21974
(byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents:
23566
diff
changeset
|
1418 because we may have to recover it because of inappropriate byte |
fda73fa21974
(byte_combining_error): New function.
Kenichi Handa <handa@m17n.org>
parents:
23566
diff
changeset
|
1419 combining. */ |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1420 if (! EQ (current_buffer->undo_list, Qt)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1421 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); |
23259
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1422 |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1423 if (markers) |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1424 /* Relocate all markers pointing into the new, larger gap |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1425 to point at the end of the text before the gap. |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1426 Do this before recording the deletion, |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1427 so that undo handles this after reinserting the text. */ |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1428 adjust_markers_for_delete (from, from_byte, to, to_byte); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1429 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1430 GAP_SIZE += nbytes_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1431 ZV -= nchars_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1432 Z -= nchars_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1433 ZV_BYTE -= nbytes_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1434 Z_BYTE -= nbytes_del; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1435 GPT = from; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1436 GPT_BYTE = from_byte; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1437 *(GPT_ADDR) = 0; /* Put an anchor. */ |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1438 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1439 if (GPT_BYTE < GPT) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1440 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1441 |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1442 if (GPT - BEG < BEG_UNCHANGED) |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1443 BEG_UNCHANGED = GPT - BEG; |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1444 if (Z - GPT < END_UNCHANGED) |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1445 END_UNCHANGED = Z - GPT; |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1446 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1447 if (GAP_SIZE < insbytes) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1448 make_gap (insbytes - GAP_SIZE); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1449 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1450 /* Copy the string text into the buffer, perhaps converting |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1451 between single-byte and multibyte. */ |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1452 copy_text (XSTRING (new)->data, GPT_ADDR, insbytes, |
21246
6c16216d0e69
(insert_from_string_1, replace_range):
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
1453 STRING_MULTIBYTE (new), |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1454 ! NILP (current_buffer->enable_multibyte_characters)); |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1455 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1456 #ifdef BYTE_COMBINING_DEBUG |
22896
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1457 /* We have copied text into the gap, but we have not marked |
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1458 it as part of the buffer. So we can use the old FROM and FROM_BYTE |
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1459 here, for both the previous text and the following text. |
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1460 Meanwhile, GPT_ADDR does point to |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1461 the text that has been stored by copy_text. */ |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1462 if (count_combining_before (GPT_ADDR, outgoing_insbytes, from, from_byte) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1463 || count_combining_after (GPT_ADDR, outgoing_insbytes, from, from_byte)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1464 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1465 #endif |
21126
7628e474e89f
(adjust_markers_for_insert):
Richard M. Stallman <rms@gnu.org>
parents:
21054
diff
changeset
|
1466 |
23259
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1467 if (! EQ (current_buffer->undo_list, Qt)) |
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1468 { |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1469 record_delete (from, deletion); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1470 record_insert (from, inschars); |
23259
a3f818e927ba
(adjust_markers_for_replace): Don't adjust a byte
Kenichi Handa <handa@m17n.org>
parents:
23212
diff
changeset
|
1471 } |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1472 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1473 GAP_SIZE -= outgoing_insbytes; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1474 GPT += inschars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1475 ZV += inschars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1476 Z += inschars; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1477 GPT_BYTE += outgoing_insbytes; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1478 ZV_BYTE += outgoing_insbytes; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1479 Z_BYTE += outgoing_insbytes; |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1480 if (GAP_SIZE > 0) *(GPT_ADDR) = 0; /* Put an anchor. */ |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1481 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1482 if (GPT_BYTE < GPT) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1483 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1484 |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1485 /* Adjust the overlay center as needed. This must be done after |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1486 adjusting the markers that bound the overlays. */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1487 adjust_overlays_for_delete (from, nchars_del); |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1488 adjust_overlays_for_insert (from, inschars); |
23053
09d1521f9984
(replace_range): Rename NOMARKERS arg to MARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
23028
diff
changeset
|
1489 if (markers) |
21239
81154898ac20
(replace_range): New arg NOMARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
21236
diff
changeset
|
1490 adjust_markers_for_insert (from, from_byte, |
81154898ac20
(replace_range): New arg NOMARKERS.
Richard M. Stallman <rms@gnu.org>
parents:
21236
diff
changeset
|
1491 from + inschars, from_byte + outgoing_insbytes, |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1492 0); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1493 |
22896
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1494 offset_intervals (current_buffer, from, inschars - nchars_del); |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1495 |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1496 /* Get the intervals for the part of the string we are inserting-- |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1497 not including the combined-before bytes. */ |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1498 intervals = XSTRING (new)->intervals; |
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1499 /* Insert those intervals. */ |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1500 graft_intervals_into_buffer (intervals, from, inschars, |
21136
be04baf3d970
(adjust_markers_for_insert): Don't leave a marker within
Richard M. Stallman <rms@gnu.org>
parents:
21135
diff
changeset
|
1501 current_buffer, inherit); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1502 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1503 /* Relocate point as if it were a marker. */ |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1504 if (from < PT) |
23212
42fcd022d4e5
(adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents:
23203
diff
changeset
|
1505 adjust_point ((from + inschars - (PT < to ? PT : to)), |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1506 (from_byte + outgoing_insbytes |
23212
42fcd022d4e5
(adjust_after_replace): Don't add combining bytes to
Kenichi Handa <handa@m17n.org>
parents:
23203
diff
changeset
|
1507 - (PT_BYTE < to_byte ? PT_BYTE : to_byte))); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1508 |
21137
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1509 if (outgoing_insbytes == 0) |
f4df45f5a0e2
(combine_bytes): New function.
Richard M. Stallman <rms@gnu.org>
parents:
21136
diff
changeset
|
1510 evaporate_overlays (from); |
21135
42badfae3618
(insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents:
21126
diff
changeset
|
1511 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1512 CHECK_MARKERS (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1513 |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1514 MODIFF++; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1515 UNGCPRO; |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1516 |
22896
6d368c9a689e
(replace_range): Don't assume PT is at the place
Richard M. Stallman <rms@gnu.org>
parents:
22876
diff
changeset
|
1517 signal_after_change (from, nchars_del, GPT - from); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
1518 update_compositions (from, GPT, CHECK_BORDER); |
18830
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1519 } |
ac0f5f1912c0
(replace_range): New function.
Richard M. Stallman <rms@gnu.org>
parents:
18446
diff
changeset
|
1520 |
157 | 1521 /* Delete characters in current buffer |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1522 from FROM up to (but not including) TO. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1523 If TO comes before FROM, we delete nothing. */ |
157 | 1524 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
1525 void |
157 | 1526 del_range (from, to) |
1527 register int from, to; | |
1528 { | |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1529 del_range_1 (from, to, 1, 0); |
6126
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
1530 } |
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
1531 |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1532 /* Like del_range; PREPARE says whether to call prepare_to_modify_buffer. |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1533 RET_STRING says to return the deleted text. */ |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1534 |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1535 Lisp_Object |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1536 del_range_1 (from, to, prepare, ret_string) |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1537 int from, to, prepare, ret_string; |
6126
47d2f8f84309
(del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5237
diff
changeset
|
1538 { |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1539 int from_byte, to_byte; |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1540 Lisp_Object deletion; |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1541 struct gcpro gcpro1; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1542 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1543 /* Make args be valid */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1544 if (from < BEGV) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1545 from = BEGV; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1546 if (to > ZV) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1547 to = ZV; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1548 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1549 if (to <= from) |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1550 return Qnil; |
157 | 1551 |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1552 if (prepare) |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1553 { |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1554 int range_length = to - from; |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1555 prepare_to_modify_buffer (from, to, &from); |
36070
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1556 to = min (ZV, from + range_length); |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1557 } |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1558 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1559 from_byte = CHAR_TO_BYTE (from); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1560 to_byte = CHAR_TO_BYTE (to); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1561 |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1562 deletion = del_range_2 (from, from_byte, to, to_byte, ret_string); |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1563 GCPRO1(deletion); |
24041
2eed8853546f
(del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents:
23929
diff
changeset
|
1564 signal_after_change (from, to - from, 0); |
27664
c5c27d509bdf
(del_range_1): Call update_compositions.
Kenichi Handa <handa@m17n.org>
parents:
26860
diff
changeset
|
1565 update_compositions (from, from, CHECK_HEAD); |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1566 UNGCPRO; |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1567 return deletion; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1568 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1569 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1570 /* Like del_range_1 but args are byte positions, not char positions. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1571 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1572 void |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1573 del_range_byte (from_byte, to_byte, prepare) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1574 int from_byte, to_byte, prepare; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1575 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1576 int from, to; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1577 |
157 | 1578 /* Make args be valid */ |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1579 if (from_byte < BEGV_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1580 from_byte = BEGV_BYTE; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1581 if (to_byte > ZV_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1582 to_byte = ZV_BYTE; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1583 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1584 if (to_byte <= from_byte) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1585 return; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1586 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1587 from = BYTE_TO_CHAR (from_byte); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1588 to = BYTE_TO_CHAR (to_byte); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1589 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1590 if (prepare) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1591 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1592 int old_from = from, old_to = Z - to; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1593 int range_length = to - from; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1594 prepare_to_modify_buffer (from, to, &from); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1595 to = from + range_length; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1596 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1597 if (old_from != from) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1598 from_byte = CHAR_TO_BYTE (from); |
36070
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1599 if (to > ZV) |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1600 { |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1601 to = ZV; |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1602 to_byte = ZV_BYTE; |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1603 } |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1604 else if (old_to == Z - to) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1605 to_byte = CHAR_TO_BYTE (to); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1606 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1607 |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1608 del_range_2 (from, from_byte, to, to_byte, 0); |
24041
2eed8853546f
(del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents:
23929
diff
changeset
|
1609 signal_after_change (from, to - from, 0); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
1610 update_compositions (from, from, CHECK_HEAD); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1611 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1612 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1613 /* Like del_range_1, but positions are specified both as charpos |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1614 and bytepos. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1615 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1616 void |
20983
288cf06bf65c
(del_range_both): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
20937
diff
changeset
|
1617 del_range_both (from, from_byte, to, to_byte, prepare) |
288cf06bf65c
(del_range_both): Reorder args. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
20937
diff
changeset
|
1618 int from, from_byte, to, to_byte, prepare; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1619 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1620 /* Make args be valid */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1621 if (from_byte < BEGV_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1622 from_byte = BEGV_BYTE; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1623 if (to_byte > ZV_BYTE) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1624 to_byte = ZV_BYTE; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1625 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1626 if (to_byte <= from_byte) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1627 return; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1628 |
157 | 1629 if (from < BEGV) |
1630 from = BEGV; | |
1631 if (to > ZV) | |
1632 to = ZV; | |
1633 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1634 if (prepare) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1635 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1636 int old_from = from, old_to = Z - to; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1637 int range_length = to - from; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1638 prepare_to_modify_buffer (from, to, &from); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1639 to = from + range_length; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1640 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1641 if (old_from != from) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1642 from_byte = CHAR_TO_BYTE (from); |
36070
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1643 if (to > ZV) |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1644 { |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1645 to = ZV; |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1646 to_byte = ZV_BYTE; |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1647 } |
2a1ee495a194
(del_range_1, del_range_byte, del_range_both): Handle
Gerd Moellmann <gerd@gnu.org>
parents:
34974
diff
changeset
|
1648 else if (old_to == Z - to) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1649 to_byte = CHAR_TO_BYTE (to); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1650 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1651 |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1652 del_range_2 (from, from_byte, to, to_byte, 0); |
24041
2eed8853546f
(del_range_1): Call signal_after_change.
Kenichi Handa <handa@m17n.org>
parents:
23929
diff
changeset
|
1653 signal_after_change (from, to - from, 0); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
1654 update_compositions (from, from, CHECK_HEAD); |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1655 } |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1656 |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1657 /* Delete a range of text, specified both as character positions |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1658 and byte positions. FROM and TO are character positions, |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1659 while FROM_BYTE and TO_BYTE are byte positions. |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1660 If RET_STRING is true, the deleted area is returned as a string. */ |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1661 |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1662 Lisp_Object |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1663 del_range_2 (from, from_byte, to, to_byte, ret_string) |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1664 int from, from_byte, to, to_byte, ret_string; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1665 { |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1666 register int nbytes_del, nchars_del; |
21236
90e90245e679
(insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents:
21228
diff
changeset
|
1667 Lisp_Object deletion; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1668 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1669 CHECK_MARKERS (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1670 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1671 nchars_del = to - from; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1672 nbytes_del = to_byte - from_byte; |
157 | 1673 |
1674 /* Make sure the gap is somewhere in or next to what we are deleting. */ | |
1675 if (from > GPT) | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1676 gap_right (from, from_byte); |
157 | 1677 if (to < GPT) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1678 gap_left (to, to_byte, 0); |
157 | 1679 |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1680 #ifdef BYTE_COMBINING_DEBUG |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1681 if (count_combining_before (BUF_BYTE_ADDRESS (current_buffer, to_byte), |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1682 Z_BYTE - to_byte, from, from_byte)) |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1683 abort (); |
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1684 #endif |
21236
90e90245e679
(insert_1_both, insert_from_string_1, insert_from_buffer_1):
Richard M. Stallman <rms@gnu.org>
parents:
21228
diff
changeset
|
1685 |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1686 if (ret_string || ! EQ (current_buffer->undo_list, Qt)) |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1687 deletion = make_buffer_string_both (from, from_byte, to, to_byte, 1); |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1688 else |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1689 deletion = Qnil; |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1690 |
14479
69fa625812a4
(adjust_markers): When a marker is inside text
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
1691 /* 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
|
1692 to point at the end of the text before the gap. |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1693 Do this before recording the deletion, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1694 so that undo handles this after reinserting the text. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1695 adjust_markers_for_delete (from, from_byte, to, to_byte); |
21228
31a2889105f0
(del_range_2): Use adjust_markers_for_record_delete.
Richard M. Stallman <rms@gnu.org>
parents:
21191
diff
changeset
|
1696 |
22107
5507c26908af
(insert_1_both, insert_from_string_1, replace_range)
Richard M. Stallman <rms@gnu.org>
parents:
21817
diff
changeset
|
1697 if (! EQ (current_buffer->undo_list, Qt)) |
29012
9e67ee582342
(adjust_markers_for_record_delete): Deleted.
Kenichi Handa <handa@m17n.org>
parents:
28813
diff
changeset
|
1698 record_delete (from, deletion); |
1247
8dce1588f37f
(del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents:
484
diff
changeset
|
1699 MODIFF++; |
8dce1588f37f
(del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents:
484
diff
changeset
|
1700 |
157 | 1701 /* Relocate point as if it were a marker. */ |
7108 | 1702 if (from < PT) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1703 adjust_point (from - (PT < to ? PT : to), |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1704 from_byte - (PT_BYTE < to_byte ? PT_BYTE : to_byte)); |
157 | 1705 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1706 offset_intervals (current_buffer, from, - nchars_del); |
1963
05dd60327cc4
(del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
1707 |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
1708 /* Adjust the overlay center as needed. This must be done after |
12617 | 1709 adjusting the markers that bound the overlays. */ |
21191
b4e925500a71
(ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents:
21185
diff
changeset
|
1710 adjust_overlays_for_delete (from, nchars_del); |
11474
510885be2758
(insert_1): Adjust overlay center after inserting.
Karl Heuer <kwzh@gnu.org>
parents:
11235
diff
changeset
|
1711 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1712 GAP_SIZE += nbytes_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1713 ZV_BYTE -= nbytes_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1714 Z_BYTE -= nbytes_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1715 ZV -= nchars_del; |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1716 Z -= nchars_del; |
157 | 1717 GPT = from; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1718 GPT_BYTE = from_byte; |
21191
b4e925500a71
(ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents:
21185
diff
changeset
|
1719 *(GPT_ADDR) = 0; /* Put an anchor. */ |
b4e925500a71
(ADJUST_CHAR_POS): New macro.
Kenichi Handa <handa@m17n.org>
parents:
21185
diff
changeset
|
1720 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1721 if (GPT_BYTE < GPT) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1722 abort (); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1723 |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1724 if (GPT - BEG < BEG_UNCHANGED) |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1725 BEG_UNCHANGED = GPT - BEG; |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1726 if (Z - GPT < END_UNCHANGED) |
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1727 END_UNCHANGED = Z - GPT; |
157 | 1728 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1729 CHECK_MARKERS (); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
1730 |
8840
7242936baf4e
(del_range_1): Call evaporate_overlays after deleting text.
Karl Heuer <kwzh@gnu.org>
parents:
8687
diff
changeset
|
1731 evaporate_overlays (from); |
26742
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1732 |
936b39bd05b4
* editfns.c (Fdelete_and_extract_region): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26731
diff
changeset
|
1733 return deletion; |
157 | 1734 } |
1735 | |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1736 /* Call this if you're about to change the region of BUFFER from |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1737 character positions START to END. This checks the read-only |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1738 properties of the region, calls the necessary modification hooks, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1739 and warns the next redisplay that it should pay attention to that |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1740 area. */ |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1741 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
1742 void |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1743 modify_region (buffer, start, end) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1744 struct buffer *buffer; |
157 | 1745 int start, end; |
1746 { | |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1747 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
|
1748 |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1749 if (buffer != old_buffer) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1750 set_buffer_internal (buffer); |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1751 |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1752 prepare_to_modify_buffer (start, end, NULL); |
157 | 1753 |
25373
6e6b29a72e2c
(gap_left): Use BUF_COMPUTE_UNCHANGED.
Gerd Moellmann <gerd@gnu.org>
parents:
25351
diff
changeset
|
1754 BUF_COMPUTE_UNCHANGED (buffer, start - 1, end); |
5237
378540cf056f
(del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents:
5168
diff
changeset
|
1755 |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
1756 if (MODIFF <= SAVE_MODIFF) |
5237
378540cf056f
(del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents:
5168
diff
changeset
|
1757 record_first_change (); |
157 | 1758 MODIFF++; |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1759 |
10564
69cae342dde5
(modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents:
10391
diff
changeset
|
1760 buffer->point_before_scroll = Qnil; |
69cae342dde5
(modify_region): Clear point_before_scroll field.
Richard M. Stallman <rms@gnu.org>
parents:
10391
diff
changeset
|
1761 |
2783
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1762 if (buffer != old_buffer) |
789c11177579
The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents:
2480
diff
changeset
|
1763 set_buffer_internal (old_buffer); |
157 | 1764 } |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1765 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1766 /* Check that it is okay to modify the buffer between START and END, |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1767 which are char positions. |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1768 |
1289
74b26ab86df4
* insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents:
1247
diff
changeset
|
1769 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
|
1770 verify that the text to be modified is not read-only, and call |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1771 any modification properties the text may have. |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1772 |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1773 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1774 by holding its value temporarily in a marker. */ |
157 | 1775 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
1776 void |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1777 prepare_to_modify_buffer (start, end, preserve_ptr) |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1778 int start, end; |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1779 int *preserve_ptr; |
157 | 1780 { |
484 | 1781 if (!NILP (current_buffer->read_only)) |
157 | 1782 Fbarf_if_buffer_read_only (); |
1783 | |
25025
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
1784 /* Let redisplay consider other windows than selected_window |
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
1785 if modifying another buffer. */ |
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
1786 if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer) |
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
1787 ++windows_or_buffers_changed; |
be2881684382
(prepare_to_modify_buffer): Set windows_or_buffers_changed,
Gerd Moellmann <gerd@gnu.org>
parents:
24342
diff
changeset
|
1788 |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
1789 if (BUF_INTERVALS (current_buffer) != 0) |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1790 { |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1791 if (preserve_ptr) |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1792 { |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1793 Lisp_Object preserve_marker; |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1794 struct gcpro gcpro1; |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1795 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1796 GCPRO1 (preserve_marker); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1797 verify_interval_modification (current_buffer, start, end); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1798 *preserve_ptr = marker_position (preserve_marker); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1799 unchain_marker (preserve_marker); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1800 UNGCPRO; |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1801 } |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1802 else |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1803 verify_interval_modification (current_buffer, start, end); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1804 } |
157 | 1805 |
1806 #ifdef CLASH_DETECTION | |
11657
ab5f12280452
(prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents:
11474
diff
changeset
|
1807 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
|
1808 /* 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
|
1809 && !NILP (current_buffer->filename) |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
1810 && SAVE_MODIFF >= MODIFF) |
11657
ab5f12280452
(prepare_to_modify_buffer): Use file_truename for locking.
Richard M. Stallman <rms@gnu.org>
parents:
11474
diff
changeset
|
1811 lock_file (current_buffer->file_truename); |
157 | 1812 #else |
1813 /* At least warn if this file has changed on disk since it was visited. */ | |
484 | 1814 if (!NILP (current_buffer->filename) |
10311
0de21e27722f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10145
diff
changeset
|
1815 && SAVE_MODIFF >= MODIFF |
484 | 1816 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ())) |
1817 && !NILP (Ffile_exists_p (current_buffer->filename))) | |
157 | 1818 call1 (intern ("ask-user-about-supersession-threat"), |
1819 current_buffer->filename); | |
1820 #endif /* not CLASH_DETECTION */ | |
1821 | |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1822 signal_before_change (start, end, preserve_ptr); |
2050
3ffbf2314074
(prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents:
2019
diff
changeset
|
1823 |
9409
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
1824 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
|
1825 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
|
1826 current_buffer->newline_cache, |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
1827 start - BEG, Z - end); |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
1828 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
|
1829 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
|
1830 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
|
1831 start - BEG, Z - end); |
f5590c0b1756
* insdel.c (prepare_to_modify_buffer): Invalidate width run and
Jim Blandy <jimb@redhat.com>
parents:
9391
diff
changeset
|
1832 |
2050
3ffbf2314074
(prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents:
2019
diff
changeset
|
1833 Vdeactivate_mark = Qt; |
157 | 1834 } |
1835 | |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1836 /* These macros work with an argument named `preserve_ptr' |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1837 and a local variable named `preserve_marker'. */ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1838 |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1839 #define PRESERVE_VALUE \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1840 if (preserve_ptr && NILP (preserve_marker)) \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1841 preserve_marker = Fcopy_marker (make_number (*preserve_ptr), Qnil) |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1842 |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1843 #define RESTORE_VALUE \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1844 if (! NILP (preserve_marker)) \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1845 { \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1846 *preserve_ptr = marker_position (preserve_marker); \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1847 unchain_marker (preserve_marker); \ |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1848 } |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1849 |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1850 #define PRESERVE_START_END \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1851 if (NILP (start_marker)) \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1852 start_marker = Fcopy_marker (start, Qnil); \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1853 if (NILP (end_marker)) \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1854 end_marker = Fcopy_marker (end, Qnil); |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1855 |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1856 #define FETCH_START \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1857 (! NILP (start_marker) ? Fmarker_position (start_marker) : start) |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1858 |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1859 #define FETCH_END \ |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1860 (! NILP (end_marker) ? Fmarker_position (end_marker) : end) |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1861 |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2783
diff
changeset
|
1862 /* Signal a change to the buffer immediately before it happens. |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1863 START_INT and END_INT are the bounds of the text to be changed. |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1864 |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1865 If PRESERVE_PTR is nonzero, we relocate *PRESERVE_PTR |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1866 by holding its value temporarily in a marker. */ |
157 | 1867 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
1868 void |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1869 signal_before_change (start_int, end_int, preserve_ptr) |
16153
6c9c298680da
(signal_before_change): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
16102
diff
changeset
|
1870 int start_int, end_int; |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1871 int *preserve_ptr; |
157 | 1872 { |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1873 Lisp_Object start, end; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1874 Lisp_Object start_marker, end_marker; |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1875 Lisp_Object preserve_marker; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1876 struct gcpro gcpro1, gcpro2, gcpro3; |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1877 |
23400
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1878 if (inhibit_modification_hooks) |
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1879 return; |
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1880 |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1881 start = make_number (start_int); |
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1882 end = make_number (end_int); |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1883 preserve_marker = Qnil; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1884 start_marker = Qnil; |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1885 end_marker = Qnil; |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1886 GCPRO3 (preserve_marker, start_marker, end_marker); |
16102
76bd16bb5906
(prepare_to_modify_buffer): Take integer arguments.
Richard M. Stallman <rms@gnu.org>
parents:
15123
diff
changeset
|
1887 |
157 | 1888 /* 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
|
1889 if (SAVE_MODIFF >= MODIFF |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
1890 && !NILP (Vfirst_change_hook) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
1891 && !NILP (Vrun_hooks)) |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1892 { |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1893 PRESERVE_VALUE; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1894 PRESERVE_START_END; |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1895 call1 (Vrun_hooks, Qfirst_change_hook); |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1896 } |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1289
diff
changeset
|
1897 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1898 /* Now run the before-change-functions if any. */ |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
1899 if (!NILP (Vbefore_change_functions)) |
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
1900 { |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1901 Lisp_Object args[3]; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1902 Lisp_Object before_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1903 Lisp_Object after_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1904 struct gcpro gcpro1, gcpro2; |
37760
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1905 struct buffer *old = current_buffer; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1906 struct buffer *new; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
1907 |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1908 PRESERVE_VALUE; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1909 PRESERVE_START_END; |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1910 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1911 /* "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
|
1912 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
|
1913 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
|
1914 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
|
1915 after_change_functions = Vafter_change_functions; |
12798
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
1916 Vbefore_change_functions = Qnil; |
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
1917 Vafter_change_functions = Qnil; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1918 GCPRO2 (before_change_functions, after_change_functions); |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
1919 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1920 /* Actually run the hook functions. */ |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1921 args[0] = Qbefore_change_functions; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1922 args[1] = FETCH_START; |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1923 args[2] = FETCH_END; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1924 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
|
1925 |
37760
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1926 /* "Unbind" the variables we "bound" to nil. Beware a |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1927 buffer-local hook which changes the buffer when run (e.g. W3). */ |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1928 if (old != current_buffer) |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1929 { |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1930 new = current_buffer; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1931 set_buffer_internal (old); |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1932 Vbefore_change_functions = before_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1933 Vafter_change_functions = after_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1934 set_buffer_internal (new); |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1935 } |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1936 else |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1937 { |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1938 Vbefore_change_functions = before_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1939 Vafter_change_functions = after_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
1940 } |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
1941 UNGCPRO; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
1942 } |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
1943 |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
1944 if (!NILP (current_buffer->overlays_before) |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
1945 || !NILP (current_buffer->overlays_after)) |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1946 { |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1947 PRESERVE_VALUE; |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1948 report_overlay_modification (FETCH_START, FETCH_END, 0, |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1949 FETCH_START, FETCH_END, Qnil); |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1950 } |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1951 |
19331
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1952 if (! NILP (start_marker)) |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1953 free_marker (start_marker); |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1954 if (! NILP (end_marker)) |
bc4c4e15a135
(signal_before_change): Relocate START and END
Richard M. Stallman <rms@gnu.org>
parents:
18830
diff
changeset
|
1955 free_marker (end_marker); |
18446
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1956 RESTORE_VALUE; |
59d2f2a0a36e
(prepare_to_modify_buffer, signal_before_change):
Richard M. Stallman <rms@gnu.org>
parents:
17446
diff
changeset
|
1957 UNGCPRO; |
157 | 1958 } |
1959 | |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
2783
diff
changeset
|
1960 /* Signal a change immediately after it happens. |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1961 CHARPOS is the character position of the start of the changed text. |
157 | 1962 LENDEL is the number of characters of the text before the change. |
1963 (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
|
1964 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
|
1965 after the change. */ |
157 | 1966 |
10391
55428c377c84
Declare all non-returning functions `void'.
Karl Heuer <kwzh@gnu.org>
parents:
10311
diff
changeset
|
1967 void |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1968 signal_after_change (charpos, lendel, lenins) |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1969 int charpos, lendel, lenins; |
157 | 1970 { |
23400
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1971 if (inhibit_modification_hooks) |
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1972 return; |
8a51c720f8d7
(signal_before_change): If inhibit_modification_hooks
Kenichi Handa <handa@m17n.org>
parents:
23340
diff
changeset
|
1973 |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1974 /* 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
|
1975 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
|
1976 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
|
1977 if (! NILP (Vcombine_after_change_calls) |
29379
ad856393dab2
(signal_before_change, signal_after_change): Don't check
Dave Love <fx@gnu.org>
parents:
29065
diff
changeset
|
1978 && NILP (Vbefore_change_functions) |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1979 && NILP (current_buffer->overlays_before) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1980 && NILP (current_buffer->overlays_after)) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1981 { |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1982 Lisp_Object elt; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1983 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1984 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
|
1985 && 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
|
1986 Fcombine_after_change_execute (); |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1987 |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1988 elt = Fcons (make_number (charpos - BEG), |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
1989 Fcons (make_number (Z - (charpos - lendel + lenins)), |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1990 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
|
1991 combine_after_change_list |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1992 = 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
|
1993 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
|
1994 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1995 return; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1996 } |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1997 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
1998 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
|
1999 Fcombine_after_change_execute (); |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2000 |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
2001 if (!NILP (Vafter_change_functions)) |
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
2002 { |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2003 Lisp_Object args[4]; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2004 Lisp_Object before_change_functions; |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2005 Lisp_Object after_change_functions; |
37760
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2006 struct buffer *old = current_buffer; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2007 struct buffer *new; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2008 struct gcpro gcpro1, gcpro2; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
2009 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2010 /* "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
|
2011 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
|
2012 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
|
2013 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
|
2014 after_change_functions = Vafter_change_functions; |
12798
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
2015 Vbefore_change_functions = Qnil; |
9ac61661054b
(signal_before_change, signal_after_change): Fix
Karl Heuer <kwzh@gnu.org>
parents:
12784
diff
changeset
|
2016 Vafter_change_functions = Qnil; |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2017 GCPRO2 (before_change_functions, after_change_functions); |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
2018 |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2019 /* Actually run the hook functions. */ |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2020 args[0] = Qafter_change_functions; |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2021 XSETFASTINT (args[1], charpos); |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2022 XSETFASTINT (args[2], charpos + lenins); |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2023 XSETFASTINT (args[3], lendel); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2024 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
|
2025 4, args); |
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2026 |
37760
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2027 /* "Unbind" the variables we "bound" to nil. Beware a |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2028 buffer-local hook which changes the buffer when run (e.g. W3). */ |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2029 if (old != current_buffer) |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2030 { |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2031 new = current_buffer; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2032 set_buffer_internal (old); |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2033 Vbefore_change_functions = before_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2034 Vafter_change_functions = after_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2035 set_buffer_internal (new); |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2036 } |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2037 else |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2038 { |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2039 Vbefore_change_functions = before_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2040 Vafter_change_functions = after_change_functions; |
2ae7cda73ec4
(signal_before_change, signal_after_change): Consider a
Gerd Moellmann <gerd@gnu.org>
parents:
36070
diff
changeset
|
2041 } |
12784
0dea0aa2f32d
(signal_before_change, signal_after_change): Major rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
12655
diff
changeset
|
2042 UNGCPRO; |
6787
4fcd24cee757
(before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents:
6739
diff
changeset
|
2043 } |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
2044 |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
2045 if (!NILP (current_buffer->overlays_before) |
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
2046 || !NILP (current_buffer->overlays_after)) |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2047 report_overlay_modification (make_number (charpos), |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2048 make_number (charpos + lenins), |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
2049 1, |
20555
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2050 make_number (charpos), |
80a546059cbd
(move_gap): Use move_gap_both.
Richard M. Stallman <rms@gnu.org>
parents:
19331
diff
changeset
|
2051 make_number (charpos + lenins), |
10144
607074ed1c6d
(signal_before_change, signal_after_change):
Richard M. Stallman <rms@gnu.org>
parents:
9685
diff
changeset
|
2052 make_number (lendel)); |
13026
3ff15e408e2c
(signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents:
12997
diff
changeset
|
2053 |
3ff15e408e2c
(signal_after_change): Call report_interval_modification.
Richard M. Stallman <rms@gnu.org>
parents:
12997
diff
changeset
|
2054 /* 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
|
2055 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
|
2056 if (lendel == 0) |
21526
fff9425b9230
(signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents:
21514
diff
changeset
|
2057 report_interval_modification (make_number (charpos), |
fff9425b9230
(signal_after_change): Fix mixing of Lisp_Object and
Andreas Schwab <schwab@suse.de>
parents:
21514
diff
changeset
|
2058 make_number (charpos + lenins)); |
157 | 2059 } |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2060 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2061 Lisp_Object |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2062 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
|
2063 Lisp_Object val; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2064 { |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2065 Vcombine_after_change_calls = val; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2066 return val; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2067 } |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2068 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2069 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
|
2070 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
|
2071 "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
|
2072 () |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2073 { |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2074 int count = specpdl_ptr - specpdl; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2075 int beg, end, change; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2076 int begpos, endpos; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2077 Lisp_Object tail; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2078 |
23646
595d8a052b71
(Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents:
23600
diff
changeset
|
2079 if (NILP (combine_after_change_list)) |
595d8a052b71
(Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents:
23600
diff
changeset
|
2080 return Qnil; |
595d8a052b71
(Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents:
23600
diff
changeset
|
2081 |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2082 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
|
2083 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2084 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
|
2085 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2086 /* # 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
|
2087 beg = Z - BEG; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2088 /* # 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
|
2089 end = beg; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2090 /* 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
|
2091 change = 0; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2092 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2093 /* Scan the various individual changes, |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2094 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
|
2095 for (tail = combine_after_change_list; CONSP (tail); |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2096 tail = XCDR (tail)) |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2097 { |
17373
4f931fa4c0be
(Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents:
17034
diff
changeset
|
2098 Lisp_Object elt; |
4f931fa4c0be
(Fcombine_after_change_execute): Fix Lisp_Object/integer confusion.
Karl Heuer <kwzh@gnu.org>
parents:
17034
diff
changeset
|
2099 int thisbeg, thisend, thischange; |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2100 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2101 /* Extract the info from the next element. */ |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2102 elt = XCAR (tail); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2103 if (! CONSP (elt)) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2104 continue; |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2105 thisbeg = XINT (XCAR (elt)); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2106 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2107 elt = XCDR (elt); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2108 if (! CONSP (elt)) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2109 continue; |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2110 thisend = XINT (XCAR (elt)); |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2111 |
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2112 elt = XCDR (elt); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2113 if (! CONSP (elt)) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2114 continue; |
25662
0a7261c1d487
Use XCAR, XCDR, and XFLOAT_DATA instead of explicit member access.
Ken Raeburn <raeburn@raeburn.org>
parents:
25648
diff
changeset
|
2115 thischange = XINT (XCAR (elt)); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2116 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2117 /* 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
|
2118 change += thischange; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2119 if (thisbeg < beg) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2120 beg = thisbeg; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2121 if (thisend < end) |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2122 end = thisend; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2123 } |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2124 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2125 /* 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
|
2126 that was changed. */ |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2127 begpos = BEG + beg; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2128 endpos = Z - end; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2129 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2130 /* 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
|
2131 combine_after_change_list = Qnil; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2132 |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2133 /* 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
|
2134 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
|
2135 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
|
2136 Vcombine_after_change_calls); |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2137 signal_after_change (begpos, endpos - begpos - change, endpos - begpos); |
26860
96ecaefd97a0
(copy_text): Adjusted for the change of CHAR_STRING.
Kenichi Handa <handa@m17n.org>
parents:
26742
diff
changeset
|
2138 update_compositions (begpos, endpos, CHECK_ALL); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2139 |
23646
595d8a052b71
(Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents:
23600
diff
changeset
|
2140 return unbind_to (count, Qnil); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2141 } |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2142 |
21514 | 2143 void |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2144 syms_of_insdel () |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2145 { |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2146 staticpro (&combine_after_change_list); |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2147 combine_after_change_list = Qnil; |
23646
595d8a052b71
(Fcombine_after_change_execute): Return nil, not junk.
Karl Heuer <kwzh@gnu.org>
parents:
23600
diff
changeset
|
2148 combine_after_change_buffer = Qnil; |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2149 |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
2150 DEFVAR_BOOL ("check-markers-debug-flag", &check_markers_debug_flag, |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
2151 "Non-nil means enable debugging checks for invalid marker positions."); |
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
2152 check_markers_debug_flag = 0; |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2153 DEFVAR_LISP ("combine-after-change-calls", &Vcombine_after_change_calls, |
21307
9ac5045a93ce
(check_markers_debug_flag): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
21274
diff
changeset
|
2154 "Used internally by the `combine-after-change-calls' macro."); |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2155 Vcombine_after_change_calls = Qnil; |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2156 |
25579
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2157 DEFVAR_BOOL ("inhibit-modification-hooks", &inhibit_modification_hooks, |
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2158 "Non-nil means don't run any of the hooks that respond to buffer changes.\n\ |
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2159 This affects `before-change-functions' and `after-change-functions',\n\ |
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2160 as well as hooks attached to text properties and overlays."); |
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2161 inhibit_modification_hooks = 0; |
5662c18836ae
(syms_of_insdel): Define Lisp variable inhibit-modification-hooks.
Richard M. Stallman <rms@gnu.org>
parents:
25509
diff
changeset
|
2162 |
16547
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2163 defsubr (&Scombine_after_change_execute); |
96ae48c20664
(signal_after_change): If Vcombine_after_change_calls,
Richard M. Stallman <rms@gnu.org>
parents:
16194
diff
changeset
|
2164 } |