# HG changeset patch # User Richard M. Stallman # Date 765004650 0 # Node ID 764913e8463c2036c85aa61e8a9dbc21941d4ee2 # Parent fa33a3332906060b0fe2c1187e6e43a626256126 (Vcompletion_regexp_list): New var. (syms_of_minibuf): Set up Lisp var. (Ftry_completion, Fall_completions): Limit possible completions to strings matching those regexps. diff -r fa33a3332906 -r 764913e8463c src/minibuf.c --- 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);