changeset 6589:764913e8463c

(Vcompletion_regexp_list): New var. (syms_of_minibuf): Set up Lisp var. (Ftry_completion, Fall_completions): Limit possible completions to strings matching those regexps.
author Richard M. Stallman <rms@gnu.org>
date Wed, 30 Mar 1994 05:17:30 +0000
parents fa33a3332906
children 2c66255e9469
files src/minibuf.c
diffstat 1 files changed, 42 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/minibuf.c	Wed Mar 30 03:12:53 1994 +0000
+++ b/src/minibuf.c	Wed Mar 30 05:17:30 1994 +0000
@@ -87,6 +87,10 @@
 
 int completion_ignore_case;
 
+/* List of regexps that should restrict possible completions.  */
+
+Lisp_Object Vcompletion_regexp_list;
+
 /* Nonzero means raise the minibuffer frame when the minibuffer
    is entered.  */
 
@@ -656,12 +660,27 @@
 
       /* Is this element a possible completion? */
 
-      if (XTYPE (eltstring) == Lisp_String &&
-	  XSTRING (string)->size <= XSTRING (eltstring)->size &&
-	  0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
-		    XSTRING (string)->size))
+      if (XTYPE (eltstring) == Lisp_String
+	  && XSTRING (string)->size <= XSTRING (eltstring)->size
+	  && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data,
+		       XSTRING (string)->size))
 	{
 	  /* Yes. */
+	  Lisp_Object regexps;
+	  Lisp_Object zero;
+	  XFASTINT (zero) = 0;
+
+	  /* Ignore this element if it fails to match all the regexps.  */
+	  for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+	       regexps = XCONS (regexps)->cdr)
+	    {
+	      tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
+	      if (NILP (tem))
+		break;
+	    }
+	  if (CONSP (regexps))
+	    continue;
+
 	  /* Ignore this element if there is a predicate
 	     and the predicate doesn't like it. */
 
@@ -855,6 +874,21 @@
 		       XSTRING (string)->size))
 	{
 	  /* Yes. */
+	  Lisp_Object regexps;
+	  Lisp_Object zero;
+	  XFASTINT (zero) = 0;
+
+	  /* Ignore this element if it fails to match all the regexps.  */
+	  for (regexps = Vcompletion_regexp_list; CONSP (regexps);
+	       regexps = XCONS (regexps)->cdr)
+	    {
+	      tem = Fstring_match (XCONS (regexps)->car, eltstring, zero);
+	      if (NILP (tem))
+		break;
+	    }
+	  if (CONSP (regexps))
+	    continue;
+
 	  /* Ignore this element if there is a predicate
 	     and the predicate doesn't like it. */
 
@@ -1581,6 +1615,10 @@
     "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
   minibuffer_auto_raise = 0;
 
+  DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
+    "List of regexps that should restrict possible completions.");
+  Vcompletion_regexp_list = Qnil;
+
   defsubr (&Sread_from_minibuffer);
   defsubr (&Seval_minibuffer);
   defsubr (&Sread_minibuffer);