changeset 58326:0cc0d3274d68

(Vsearch_whitespace_regexp): New variable. (syms_of_search): Defvar it. (compile_pattern_1): Call re_set_whitespace_regexp with it. (search_buffer): No regexp is trivial if Vsearch_whitespace_regexp is non-nil.
author Richard M. Stallman <rms@gnu.org>
date Fri, 19 Nov 2004 19:38:26 +0000
parents d82983edcbe6
children a360835c5032
files src/search.c
diffstat 1 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/search.c	Fri Nov 19 19:36:09 2004 +0000
+++ b/src/search.c	Fri Nov 19 19:38:26 2004 +0000
@@ -83,6 +83,8 @@
 
 Lisp_Object Qinvalid_regexp;
 
+Lisp_Object Vsearch_whitespace_regexp;
+
 static void set_search_regs ();
 static void save_search_regs ();
 static int simple_search ();
@@ -161,8 +163,15 @@
   BLOCK_INPUT;
   old = re_set_syntax (RE_SYNTAX_EMACS
 		       | (posix ? 0 : RE_NO_POSIX_BACKTRACKING));
+
+  re_set_whitespace_regexp (NILP (Vsearch_whitespace_regexp) ? NULL
+			    : SDATA (Vsearch_whitespace_regexp));
+
   val = (char *) re_compile_pattern ((char *)raw_pattern,
 				     raw_pattern_size, &cp->buf);
+
+  re_set_whitespace_regexp (NULL);
+
   re_set_syntax (old);
   UNBLOCK_INPUT;
   if (val)
@@ -1051,7 +1060,7 @@
       return pos;
     }
 
-  if (RE && !trivial_regexp_p (string))
+  if (RE && !(trivial_regexp_p (string) && NILP (Vsearch_whitespace_regexp)))
     {
       unsigned char *p1, *p2;
       int s1, s2;
@@ -2998,6 +3007,14 @@
   saved_last_thing_searched = Qnil;
   staticpro (&saved_last_thing_searched);
 
+  DEFVAR_LISP ("search-whitespace-regexp", &Vsearch_whitespace_regexp,
+      /* doc: Regexp to substitute for bunches of spaces in regexp search.
+Some commands use this for user-specified regexps.
+Spaces that occur inside character classes or repetition operators
+or other such regexp constructs are not replaced with this.
+A value of nil (which is the normal value) means treat spaces literally.  */);
+  Vsearch_whitespace_regexp = Qnil;
+
   defsubr (&Slooking_at);
   defsubr (&Sposix_looking_at);
   defsubr (&Sstring_match);