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;
 }