From: Richard M. Stallman Date: Sat, 31 May 1997 07:40:46 +0000 (+0000) Subject: (Freplace_match): Use move_if_not_intangible X-Git-Tag: emacs-20.1~1869 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=b0eba9913232b3da6075541591698ce27f48bde9;p=emacs.git (Freplace_match): Use move_if_not_intangible to handle intangible text better. (looking_at_1): Change using DOWNCASE_TABLE. (string_match_1): Likewise. --- diff --git a/src/search.c b/src/search.c index fde9a8a1d0d..720012dfc5a 100644 --- a/src/search.c +++ b/src/search.c @@ -225,7 +225,7 @@ looking_at_1 (string, posix) 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 @@ string_match_1 (regexp, string, start, posix) 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 @@ since only regular expressions have distinguished subexpressions.") register int c, prevc; int inslen; int sub; + int opoint; CHECK_STRING (newtext, 0); @@ -1615,11 +1616,18 @@ since only regular expressions have distinguished subexpressions.") 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 @@ since only regular expressions have distinguished subexpressions.") 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; }