diff src/search.c @ 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 bb9ae80d22e2
children 300068b4fcef
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;
 }