diff options
| author | Jim Blandy | 1993-05-04 02:35:38 +0000 |
|---|---|---|
| committer | Jim Blandy | 1993-05-04 02:35:38 +0000 |
| commit | 9a76659df20b0425a58d1cf3a0e69c5979fcbe5a (patch) | |
| tree | 43c49f28940435ff2c6cdd2899e03528e54a98d2 /src | |
| parent | f42be754b2912c5ff0fbfe51fe7fb776165b1033 (diff) | |
| download | emacs-9a76659df20b0425a58d1cf3a0e69c5979fcbe5a.tar.gz emacs-9a76659df20b0425a58d1cf3a0e69c5979fcbe5a.zip | |
* search.c (Freplace_match): Arrange for markers sitting at the
beginning or end of the original text to float to the
corresponding position in the replacement text.
Diffstat (limited to 'src')
| -rw-r--r-- | src/search.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/search.c b/src/search.c index 86a8977c5ab..40e0c1623a3 100644 --- a/src/search.c +++ b/src/search.c | |||
| @@ -1236,7 +1236,11 @@ Leaves point at end of replacement text.") | |||
| 1236 | case_action = nochange; | 1236 | case_action = nochange; |
| 1237 | } | 1237 | } |
| 1238 | 1238 | ||
| 1239 | SET_PT (search_regs.end[0]); | 1239 | /* We insert the replacement text before the old text, and then |
| 1240 | delete the original text. This means that markers at the | ||
| 1241 | beginning or end of the original will float to the corresponding | ||
| 1242 | position in the replacement. */ | ||
| 1243 | SET_PT (search_regs.start[0]); | ||
| 1240 | if (!NILP (literal)) | 1244 | if (!NILP (literal)) |
| 1241 | Finsert (1, &string); | 1245 | Finsert (1, &string); |
| 1242 | else | 1246 | else |
| @@ -1246,20 +1250,24 @@ Leaves point at end of replacement text.") | |||
| 1246 | 1250 | ||
| 1247 | for (pos = 0; pos < XSTRING (string)->size; pos++) | 1251 | for (pos = 0; pos < XSTRING (string)->size; pos++) |
| 1248 | { | 1252 | { |
| 1253 | int offset = point - search_regs.start[0]; | ||
| 1254 | |||
| 1249 | c = XSTRING (string)->data[pos]; | 1255 | c = XSTRING (string)->data[pos]; |
| 1250 | if (c == '\\') | 1256 | if (c == '\\') |
| 1251 | { | 1257 | { |
| 1252 | c = XSTRING (string)->data[++pos]; | 1258 | c = XSTRING (string)->data[++pos]; |
| 1253 | if (c == '&') | 1259 | if (c == '&') |
| 1254 | Finsert_buffer_substring (Fcurrent_buffer (), | 1260 | Finsert_buffer_substring |
| 1255 | make_number (search_regs.start[0]), | 1261 | (Fcurrent_buffer (), |
| 1256 | make_number (search_regs.end[0])); | 1262 | make_number (search_regs.start[0] + offset), |
| 1263 | make_number (search_regs.end[0] + offset)); | ||
| 1257 | else if (c >= '1' && c <= search_regs.num_regs + '0') | 1264 | else if (c >= '1' && c <= search_regs.num_regs + '0') |
| 1258 | { | 1265 | { |
| 1259 | if (search_regs.start[c - '0'] >= 1) | 1266 | if (search_regs.start[c - '0'] >= 1) |
| 1260 | Finsert_buffer_substring (Fcurrent_buffer (), | 1267 | Finsert_buffer_substring |
| 1261 | make_number (search_regs.start[c - '0']), | 1268 | (Fcurrent_buffer (), |
| 1262 | make_number (search_regs.end[c - '0'])); | 1269 | make_number (search_regs.start[c - '0'] + offset), |
| 1270 | make_number (search_regs.end[c - '0'] + offset)); | ||
| 1263 | } | 1271 | } |
| 1264 | else | 1272 | else |
| 1265 | insert_char (c); | 1273 | insert_char (c); |
| @@ -1270,8 +1278,8 @@ Leaves point at end of replacement text.") | |||
| 1270 | UNGCPRO; | 1278 | UNGCPRO; |
| 1271 | } | 1279 | } |
| 1272 | 1280 | ||
| 1273 | inslen = point - (search_regs.end[0]); | 1281 | inslen = point - (search_regs.start[0]); |
| 1274 | del_range (search_regs.start[0], search_regs.end[0]); | 1282 | del_range (search_regs.start[0] + inslen, search_regs.end[0] + inslen); |
| 1275 | 1283 | ||
| 1276 | if (case_action == all_caps) | 1284 | if (case_action == all_caps) |
| 1277 | Fupcase_region (make_number (point - inslen), make_number (point)); | 1285 | Fupcase_region (make_number (point - inslen), make_number (point)); |