annotate src/insdel.c @ 8275:4fdf77f4e45c

type-break-mode: New variable and function. type-break-interval: Increase default to 1 hour. type-break-query-interval: Variable renamed from type-break-delay-interval. type-break-keystroke-interval: Variable deleted. type-break-keystroke-threshold: New variable. type-break-demo-life: Function renamed from type-break-life. type-break-demo-hanoi: Function renamed from type-break-hanoi. type-break-alarm-p: Variable renamed from type-break-p. type-break: Don't query. type-break-query: (New function) query here. type-break-check: Call type-break-query, not type-break. Do nothing if type-break-mode is nil. Increment type-break-keystroke-count with the length of this-command-keys, not just 1. Query for break when keystroke count exceeds cdr of keystroke threshold variable. Query for break after an alarm only if keystroke count exceeds car of keystroke threshold variable. type-break-select: Function deleted. type-break: Move that code here. type-break-cancel-schedule: Function renamed from cancel-type-break. Reset type-break-alarm-p. type-break-alarm: Function renamed from type-break-soon. (top level): Call type-break-mode; don't set up hook explicitly.
author Noah Friedman <friedman@splode.com>
date Mon, 18 Jul 1994 07:37:18 +0000
parents d4842450463c
children d66b80e5bc77
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.
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
2 Copyright (C) 1985, 1986, 1993, 1994 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
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
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
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4078
diff changeset
21 #include <config.h>
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include "lisp.h"
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
23 #include "intervals.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "buffer.h"
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "window.h"
2480
6f4b9c548425 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
26 #include "blockinput.h"
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
28 static void insert_1 ();
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
29 static void insert_from_string_1 ();
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
30 static void gap_left ();
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
31 static void gap_right ();
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
32 static void adjust_markers ();
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
33 static void adjust_point ();
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
34
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 /* Move gap to position `pos'.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 Note that this can quit! */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 move_gap (pos)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 if (pos < GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 gap_left (pos, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 else if (pos > GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 gap_right (pos);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 /* Move the gap to POS, which is less than the current GPT.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 If NEWGAP is nonzero, then don't update beg_unchanged and end_unchanged. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
50 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 gap_left (pos, newgap)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 register int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 int newgap;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 pos--;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 if (!newgap)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 if (unchanged_modified == MODIFF)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 end_unchanged = Z - GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 if (pos < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 }
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 i = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 to = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 from = GPT_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 new_s1 = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 /* Now copy the characters. To move the gap down,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 copy characters up. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 /* I gets number of characters left to copy. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 i = new_s1 - pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 /* If a quit is requested, stop copying now.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 Change POS to be where we have actually moved the gap to. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 pos = new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 or on systems where bcopy is always safe for moving upward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 && (BCOPY_UPWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 || to - from >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 if (!BCOPY_UPWARD_SAFE && i > to - from)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 i = to - from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 from -= i, to -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 new_s1 -= i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 *--to = *--from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 /* Adjust markers, and buffer data structure, to put the gap at POS.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 POS is where the loop above stopped, which may be what was specified
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 or may be where a quit was detected. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 adjust_markers (pos + 1, GPT, GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 GPT = pos + 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
133 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 gap_right (pos)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 register int pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 register unsigned char *to, *from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 register int i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 int new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 pos--;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 if (unchanged_modified == MODIFF)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 beg_unchanged = pos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 if (Z - pos - 1 < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 end_unchanged = Z - pos - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 beg_unchanged = GPT - BEG;
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 i = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 from = GAP_END_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 to = GPT_ADDR;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 new_s1 = GPT - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 /* Now copy the characters. To move the gap up,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 copy characters down. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 while (1)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 /* I gets number of characters left to copy. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 i = pos - new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 if (i == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 /* If a quit is requested, stop copying now.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 Change POS to be where we have actually moved the gap to. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 if (QUITP)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 pos = new_s1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 break;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 /* Move at most 32000 chars before checking again for a quit. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 if (i > 32000)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 i = 32000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 #ifdef GAP_USE_BCOPY
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 if (i >= 128
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 /* bcopy is safe if the two areas of memory do not overlap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 or on systems where bcopy is always safe for moving downward. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 && (BCOPY_DOWNWARD_SAFE
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 || from - to >= 128))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 /* If overlap is not safe, avoid it by not moving too many
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 characters at once. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 if (!BCOPY_DOWNWARD_SAFE && i > from - to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 i = from - to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 bcopy (from, to, i);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 from += i, to += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 #endif
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 new_s1 += i;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 while (--i >= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 *to++ = *from++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 adjust_markers (GPT + GAP_SIZE, pos + 1 + GAP_SIZE, - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 GPT = pos + 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 QUIT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 /* Add `amount' to the position of every marker in the current buffer
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 whose current position is between `from' (exclusive) and `to' (inclusive).
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 Also, any markers past the outside of that interval, in the direction
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 of adjustment, are first moved back to the near end of the interval
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 and then adjusted by `amount'. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
215 static void
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 adjust_markers (from, to, amount)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 register int from, to, amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 Lisp_Object marker;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 register struct Lisp_Marker *m;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 register int mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 marker = current_buffer->markers;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
225 while (!NILP (marker))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 m = XMARKER (marker);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 mpos = m->bufpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 if (amount > 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 if (mpos > to && mpos < to + amount)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 mpos = to + amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 if (mpos > from + amount && mpos <= from)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 mpos = from + amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 if (mpos > from && mpos <= to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 mpos += amount;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 m->bufpos = mpos;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 marker = m->chain;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 }
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
245
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
246 /* 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
247 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
248 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
249 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
250 usual SET_PT macro. In fact it would be incorrect to do so, because
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
251 either the old or the new value of point is out of synch with the
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
252 current set of intervals. */
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
253 static void
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
254 adjust_point (amount)
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
255 {
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
256 current_buffer->text.pt += amount;
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
257 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 /* Make the gap INCREMENT characters longer. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 make_gap (increment)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 int increment;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 unsigned char *result;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 Lisp_Object tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 int real_gap_loc;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 int old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 /* If we have to get more space, get enough to last a while. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 increment += 2000;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
272 BLOCK_INPUT;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273 result = BUFFER_REALLOC (BEG_ADDR, (Z - BEG + GAP_SIZE + increment));
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
274 UNBLOCK_INPUT;
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2050
diff changeset
275
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 if (result == 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 memory_full ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 BEG_ADDR = result;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 /* Prevent quitting in move_gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 tem = Vinhibit_quit;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 Vinhibit_quit = Qt;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 real_gap_loc = GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 old_gap_size = GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 /* 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
288 GPT = Z + GAP_SIZE;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 GAP_SIZE = increment;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 /* 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
292 This adjusts the markers properly too. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 gap_left (real_gap_loc + old_gap_size, 1);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 /* Now combine the two into one large gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 GAP_SIZE += old_gap_size;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 GPT = real_gap_loc;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 Vinhibit_quit = tem;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 /* Insert a string of specified length before point.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 DO NOT use this for the contents of a Lisp string!
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 prepare_to_modify_buffer could relocate the string. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 insert (string, length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 register unsigned char *string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 register length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
310 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
311 {
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
312 insert_1 (string, length);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
313 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
314 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
315 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
317 static void
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
318 insert_1 (string, length)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
319 register unsigned char *string;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
320 register length;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
321 {
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
322 register Lisp_Object temp;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 /* Make sure point-max won't overflow after this insertion. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 XSET (temp, Lisp_Int, length + Z);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 if (length + Z != XINT (temp))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 error ("maximum buffer size exceeded");
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
329 prepare_to_modify_buffer (PT, PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
331 if (PT != GPT)
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
332 move_gap (PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 if (GAP_SIZE < length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 make_gap (length - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
336 record_insert (PT, length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 MODIFF++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 bcopy (string, GPT_ADDR, length);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
341 /* 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
342 offset_intervals (current_buffer, PT, length);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
343
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 GAP_SIZE -= length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 GPT += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 ZV += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 Z += length;
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
348 adjust_point (length);
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
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
351 /* 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
352 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
353 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
354 into the buffer.
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
355
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
356 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
357 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
358 without insert noticing. */
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
359
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
360 insert_from_string (string, pos, length, inherit)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 Lisp_Object string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 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
363 int inherit;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
365 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
366 {
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
367 insert_from_string_1 (string, pos, length, inherit);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
368 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
369 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
370 }
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
371
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
372 static void
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
373 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
374 Lisp_Object string;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
375 register int pos, length;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
376 int inherit;
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
377 {
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 register Lisp_Object temp;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 struct gcpro gcpro1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 /* Make sure point-max won't overflow after this insertion. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 XSET (temp, Lisp_Int, length + Z);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 if (length + Z != XINT (temp))
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 error ("maximum buffer size exceeded");
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 GCPRO1 (string);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
387 prepare_to_modify_buffer (PT, PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
389 if (PT != GPT)
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
390 move_gap (PT);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 if (GAP_SIZE < length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 make_gap (length - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
394 record_insert (PT, length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 MODIFF++;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 UNGCPRO;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 bcopy (XSTRING (string)->data, GPT_ADDR, length);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
400 /* 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
401 offset_intervals (current_buffer, PT, length);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
402
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 GAP_SIZE -= length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 GPT += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 ZV += length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 Z += length;
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
407
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
408 /* 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
409 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
410 current_buffer, inherit);
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
411
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
412 adjust_point (length);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 /* Insert the character C before point */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 insert_char (c)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 unsigned char c;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 insert (&c, 1);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 /* Insert the null-terminated string S before point */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 void
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 insert_string (s)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 char *s;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 insert (s, strlen (s));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 /* Like `insert' except that all markers pointing at the place where
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 the insertion happens are adjusted to point after it.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 Don't use this function to insert part of a Lisp string,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 since gc could happen and relocate it. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 insert_before_markers (string, length)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 unsigned char *string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 register int length;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
442 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
443 {
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
444 register int opoint = PT;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
445 insert_1 (string, length);
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
446 adjust_markers (opoint - 1, opoint, length);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
447 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
448 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 /* Insert part of a Lisp string, relocating markers after. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452
4712
367dc6ff392c (insert_from_string): Pass extra arg to graft_intervals_into_buffer.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
453 insert_from_string_before_markers (string, pos, length, inherit)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 Lisp_Object string;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 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
456 int inherit;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 {
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
458 if (length > 0)
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
459 {
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
460 register int opoint = PT;
6739
6b0dd4aeca67 (insert_1): New function, extracted from insert.
Karl Heuer <kwzh@gnu.org>
parents: 6126
diff changeset
461 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
462 adjust_markers (opoint - 1, opoint, length);
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
463 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
464 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 /* Delete characters in current buffer
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 from FROM up to (but not including) TO. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 del_range (from, to)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 register int from, to;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 {
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
473 return del_range_1 (from, to, 1);
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
474 }
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
475
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
476 /* 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
477
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
478 del_range_1 (from, to, prepare)
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
479 register int from, to, prepare;
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
480 {
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 register int numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 /* Make args be valid */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 if (from < BEGV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 from = BEGV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 if (to > ZV)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 to = ZV;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 if ((numdel = to - from) <= 0)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 return;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 /* 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
493 if (from > GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 gap_right (from);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 if (to < GPT)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 gap_left (to, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
6126
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
498 if (prepare)
47d2f8f84309 (del_range_1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 5237
diff changeset
499 prepare_to_modify_buffer (from, to);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500
1247
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
501 record_delete (from, numdel);
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
502 MODIFF++;
8dce1588f37f (del_range): Call record_delete before updating point.
Richard M. Stallman <rms@gnu.org>
parents: 484
diff changeset
503
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 /* Relocate point as if it were a marker. */
7108
6e6410985d76 Use PT, not point.
Karl Heuer <kwzh@gnu.org>
parents: 6787
diff changeset
505 if (from < PT)
7109
d4842450463c (adjust_point): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7108
diff changeset
506 adjust_point (from - (PT < to ? PT : to));
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507
1963
05dd60327cc4 (del_range): Update point before offset_intervals.
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
508 /* 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
509 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
510
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 /* Relocate all markers pointing into the new, larger gap
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 to point at the end of the text before the gap. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 adjust_markers (to + GAP_SIZE, to + GAP_SIZE, - numdel - GAP_SIZE);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 GAP_SIZE += numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 ZV -= numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 Z -= numdel;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 GPT = from;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 if (GPT - BEG < beg_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 beg_unchanged = GPT - BEG;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 if (Z - GPT < end_unchanged)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 end_unchanged = Z - GPT;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 signal_after_change (from, numdel, 0);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
528 /* 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
529 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
530 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
531 it should pay attention to that area. */
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
532 modify_region (buffer, start, end)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
533 struct buffer *buffer;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 int start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 {
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
536 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
537
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
538 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
539 set_buffer_internal (buffer);
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
540
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 prepare_to_modify_buffer (start, end);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543 if (start - 1 < beg_unchanged || unchanged_modified == MODIFF)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 beg_unchanged = start - 1;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 if (Z - end < end_unchanged
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 || unchanged_modified == MODIFF)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 end_unchanged = Z - end;
5237
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
548
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
549 if (MODIFF <= current_buffer->save_modified)
378540cf056f (del_range): Second argument in call to
Richard M. Stallman <rms@gnu.org>
parents: 5168
diff changeset
550 record_first_change ();
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 MODIFF++;
2783
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
552
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
553 if (buffer != old_buffer)
789c11177579 The text property routines can now modify buffers other
Jim Blandy <jimb@redhat.com>
parents: 2480
diff changeset
554 set_buffer_internal (old_buffer);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 /* 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
558 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
559 verify that the text to be modified is not read-only, and call
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
560 any modification properties the text may have. */
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 prepare_to_modify_buffer (start, end)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 Lisp_Object start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
565 if (!NILP (current_buffer->read_only))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 Fbarf_if_buffer_read_only ();
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567
1289
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
568 /* Only defined if Emacs is compiled with USE_TEXT_PROPERTIES */
74b26ab86df4 * insdel.c: #include "intervals.h"
Joseph Arceneaux <jla@gnu.org>
parents: 1247
diff changeset
569 verify_interval_modification (current_buffer, start, end);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570
4078
7d7b899db77d (prepare_to_modify_buffer): Call verify_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
571 verify_overlay_modification (start, end);
7d7b899db77d (prepare_to_modify_buffer): Call verify_overlay_modification.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
572
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 #ifdef CLASH_DETECTION
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
574 if (!NILP (current_buffer->filename)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 && current_buffer->save_modified >= MODIFF)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 lock_file (current_buffer->filename);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 #else
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 /* 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
579 if (!NILP (current_buffer->filename)
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 && current_buffer->save_modified >= MODIFF
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
581 && NILP (Fverify_visited_file_modtime (Fcurrent_buffer ()))
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
582 && !NILP (Ffile_exists_p (current_buffer->filename)))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 call1 (intern ("ask-user-about-supersession-threat"),
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 current_buffer->filename);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 #endif /* not CLASH_DETECTION */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 signal_before_change (start, end);
2050
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
588
3ffbf2314074 (prepare_to_modify_buffer): Set Vdeactivate_mark.
Richard M. Stallman <rms@gnu.org>
parents: 2019
diff changeset
589 Vdeactivate_mark = Qt;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 static Lisp_Object
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 before_change_function_restore (value)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 Lisp_Object value;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 Vbefore_change_function = value;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 static Lisp_Object
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 after_change_function_restore (value)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 Lisp_Object value;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 Vafter_change_function = value;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
606 static Lisp_Object
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
607 before_change_functions_restore (value)
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
608 Lisp_Object value;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
609 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
610 Vbefore_change_functions = value;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
611 }
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
612
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
613 static Lisp_Object
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
614 after_change_functions_restore (value)
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
615 Lisp_Object value;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
616 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
617 Vafter_change_functions = value;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
618 }
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
619
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
620 /* Signal a change to the buffer immediately before it happens.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 START and END are the bounds of the text to be changed,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 as Lisp objects. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 signal_before_change (start, end)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 Lisp_Object start, end;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 /* If buffer is unmodified, run a special hook for that case. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 if (current_buffer->save_modified >= MODIFF
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
629 && !NILP (Vfirst_change_hook)
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
630 && !NILP (Vrun_hooks))
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
631 call1 (Vrun_hooks, Qfirst_change_hook);
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1289
diff changeset
632
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 /* Now in any case run the before-change-function if any. */
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
634 if (!NILP (Vbefore_change_function))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 int count = specpdl_ptr - specpdl;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 Lisp_Object function;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 function = Vbefore_change_function;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
640
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 record_unwind_protect (after_change_function_restore,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 Vafter_change_function);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 record_unwind_protect (before_change_function_restore,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 Vbefore_change_function);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
645 record_unwind_protect (after_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
646 Vafter_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
647 record_unwind_protect (before_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
648 Vbefore_change_functions);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 Vafter_change_function = Qnil;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 Vbefore_change_function = Qnil;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
651 Vafter_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
652 Vbefore_change_functions = Qnil;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 call2 (function, start, end);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 unbind_to (count, Qnil);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 }
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
657
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
658 /* Now in any case run the before-change-function if any. */
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
659 if (!NILP (Vbefore_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
660 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
661 int count = specpdl_ptr - specpdl;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
662 Lisp_Object functions;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
663
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
664 functions = Vbefore_change_functions;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
665
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
666 record_unwind_protect (after_change_function_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
667 Vafter_change_function);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
668 record_unwind_protect (before_change_function_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
669 Vbefore_change_function);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
670 record_unwind_protect (after_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
671 Vafter_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
672 record_unwind_protect (before_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
673 Vbefore_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
674 Vafter_change_function = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
675 Vbefore_change_function = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
676 Vafter_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
677 Vbefore_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
678
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
679 while (CONSP (functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
680 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
681 call2 (XCONS (functions)->car, start, end);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
682 functions = XCONS (functions)->cdr;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
683 }
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
684 unbind_to (count, Qnil);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
685 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 }
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2783
diff changeset
688 /* Signal a change immediately after it happens.
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 POS is the address of the start of the changed text.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 LENDEL is the number of characters of the text before the change.
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 (Not the whole buffer; just the part that was changed.)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 LENINS is the number of characters in the changed text. */
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 signal_after_change (pos, lendel, lenins)
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 int pos, lendel, lenins;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 {
484
3165b2697c78 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 251
diff changeset
697 if (!NILP (Vafter_change_function))
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 {
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 int count = specpdl_ptr - specpdl;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 Lisp_Object function;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 function = Vafter_change_function;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 record_unwind_protect (after_change_function_restore,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 Vafter_change_function);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 record_unwind_protect (before_change_function_restore,
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 Vbefore_change_function);
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
707 record_unwind_protect (after_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
708 Vafter_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
709 record_unwind_protect (before_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
710 Vbefore_change_functions);
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 Vafter_change_function = Qnil;
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 Vbefore_change_function = Qnil;
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
713 Vafter_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
714 Vbefore_change_functions = Qnil;
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 call3 (function, make_number (pos), make_number (pos + lenins),
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 make_number (lendel));
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 unbind_to (count, Qnil);
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
6787
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
720 if (!NILP (Vafter_change_functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
721 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
722 int count = specpdl_ptr - specpdl;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
723 Lisp_Object functions;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
724 functions = Vafter_change_functions;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
725
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
726 record_unwind_protect (after_change_function_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
727 Vafter_change_function);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
728 record_unwind_protect (before_change_function_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
729 Vbefore_change_function);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
730 record_unwind_protect (after_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
731 Vafter_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
732 record_unwind_protect (before_change_functions_restore,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
733 Vbefore_change_functions);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
734 Vafter_change_function = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
735 Vbefore_change_function = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
736 Vafter_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
737 Vbefore_change_functions = Qnil;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
738
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
739 while (CONSP (functions))
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
740 {
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
741 call3 (XCONS (functions)->car,
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
742 make_number (pos), make_number (pos + lenins),
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
743 make_number (lendel));
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
744 functions = XCONS (functions)->cdr;
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
745 }
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
746 unbind_to (count, Qnil);
4fcd24cee757 (before_change_functions_restore):
Richard M. Stallman <rms@gnu.org>
parents: 6739
diff changeset
747 }
157
01ad7ec29c98 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 }