annotate src/insdel.c @ 18989:6253a99afd95

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