Mercurial > emacs
changeset 18077:27a0ced43e7e
(Freplace_match): Use move_if_not_intangible
to handle intangible text better.
(looking_at_1): Change using DOWNCASE_TABLE.
(string_match_1): Likewise.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 31 May 1997 07:40:46 +0000 |
parents | 1a2e6b512688 |
children | cd5f9bda791e |
files | src/search.c |
diffstat | 1 files changed, 21 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/search.c Sat May 31 07:38:44 1997 +0000 +++ b/src/search.c Sat May 31 07:40:46 1997 +0000 @@ -225,7 +225,7 @@ CHECK_STRING (string, 0); bufp = compile_pattern (string, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : 0), + ? XCHAR_TABLE (DOWNCASE_TABLE)->contents : 0), posix); immediate_quit = 1; @@ -324,7 +324,7 @@ bufp = compile_pattern (regexp, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : 0), + ? XCHAR_TABLE (DOWNCASE_TABLE)->contents : 0), posix); immediate_quit = 1; re_match_object = string; @@ -1422,6 +1422,7 @@ register int c, prevc; int inslen; int sub; + int opoint; CHECK_STRING (newtext, 0); @@ -1615,11 +1616,18 @@ return concat3 (before, newtext, after); } + /* Record point, the move (quietly) to the start of the match. */ + if (PT > search_regs.start[sub]) + opoint = PT - ZV; + else + opoint = PT; + + temp_set_point (search_regs.start[sub], current_buffer); + /* We insert the replacement text before the old text, and then delete the original text. This means that markers at the beginning or end of the original will float to the corresponding position in the replacement. */ - SET_PT (search_regs.start[sub]); if (!NILP (literal)) Finsert_and_inherit (1, &newtext); else @@ -1666,6 +1674,16 @@ Fupcase_region (make_number (PT - inslen), make_number (PT)); else if (case_action == cap_initial) Fupcase_initials_region (make_number (PT - inslen), make_number (PT)); + + /* Put point back where it was in the text. */ + if (opoint < 0) + temp_set_point (opoint + ZV, current_buffer); + else + temp_set_point (opoint, current_buffer); + + /* Now move point "officially" to the start of the inserted replacement. */ + move_if_not_intangible (search_regs.start[sub]); + return Qnil; }