Mercurial > emacs
changeset 75475:688a9d290d4d
(Ftry_completion, Fall_completions, Fcompleting_read, Ftest_completion):
Rename arg ALIST or TABLE to COLLECTION.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 28 Jan 2007 07:16:39 +0000 |
parents | cf580adfa498 |
children | 330094c564c4 |
files | src/minibuf.c |
diffstat | 1 files changed, 96 insertions(+), 94 deletions(-) [+] |
line wrap: on
line diff
--- a/src/minibuf.c Sun Jan 28 07:13:10 2007 +0000 +++ b/src/minibuf.c Sun Jan 28 07:16:39 2007 +0000 @@ -1230,22 +1230,25 @@ } DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0, - doc: /* Return common substring of all completions of STRING in ALIST. -Each car of each element of ALIST (or each element if it is not a cons cell) -is tested to see if it begins with STRING. The possible matches may be + doc: /* Return common substring of all completions of STRING in COLLECTION. +Test each possible completion specified by COLLECTION +to see if it begins with STRING. The possible completions may be strings or symbols. Symbols are converted to strings before testing, see `symbol-name'. -All that match are compared together; the longest initial sequence -common to all matches is returned as a string. -If there is no match at all, nil is returned. -For a unique match which is exact, t is returned. - -If ALIST is a hash-table, all the string and symbol keys are the -possible matches. -If ALIST is an obarray, the names of all symbols in the obarray -are the possible matches. - -ALIST can also be a function to do the completion itself. +All that match STRING are compared together; the longest initial sequence +common to all these matches is the return value. +If there is no match at all, the return value is nil. +For a unique match which is exact, the return value is t. + +If COLLECTION is an alist, the keys (cars of elements) are the +possible completions. If an element is not a cons cell, then the +element itself is the possible completion. +If COLLECTION is a hash-table, all the keys that are strings or symbols +are the possible completions. +If COLLECTION is an obarray, the names of all symbols in the obarray +are the possible completions. + +COLLECTION can also be a function to do the completion itself. It receives three arguments: the values STRING, PREDICATE and nil. Whatever it returns becomes the value of `try-completion'. @@ -1253,23 +1256,23 @@ it is used to test each possible match. The match is a candidate only if PREDICATE returns non-nil. The argument given to PREDICATE is the alist element -or the symbol from the obarray. If ALIST is a hash-table, +or the symbol from the obarray. If COLLECTION is a hash-table, predicate is called with two arguments: the key and the value. Additionally to this predicate, `completion-regexp-list' is used to further constrain the set of candidates. */) - (string, alist, predicate) - Lisp_Object string, alist, predicate; + (string, collection, predicate) + Lisp_Object string, collection, predicate; { Lisp_Object bestmatch, tail, elt, eltstring; /* Size in bytes of BESTMATCH. */ int bestmatchsize = 0; /* These are in bytes, too. */ int compare, matchsize; - int type = (HASH_TABLE_P (alist) ? 3 - : VECTORP (alist) ? 2 - : NILP (alist) || (CONSP (alist) - && (!SYMBOLP (XCAR (alist)) - || NILP (XCAR (alist))))); + int type = (HASH_TABLE_P (collection) ? 3 + : VECTORP (collection) ? 2 + : NILP (collection) || (CONSP (collection) + && (!SYMBOLP (XCAR (collection)) + || NILP (XCAR (collection))))); int index = 0, obsize = 0; int matchcount = 0; int bindcount = -1; @@ -1278,18 +1281,18 @@ CHECK_STRING (string); if (type == 0) - return call3 (alist, string, predicate, Qnil); + return call3 (collection, string, predicate, Qnil); bestmatch = bucket = Qnil; zero = make_number (0); - /* If ALIST is not a list, set TAIL just for gc pro. */ - tail = alist; + /* If COLLECTION is not a list, set TAIL just for gc pro. */ + tail = collection; if (type == 2) { - alist = check_obarray (alist); - obsize = XVECTOR (alist)->size; - bucket = XVECTOR (alist)->contents[index]; + collection = check_obarray (collection); + obsize = XVECTOR (collection)->size; + bucket = XVECTOR (collection)->contents[index]; } while (1) @@ -1324,19 +1327,19 @@ break; else { - bucket = XVECTOR (alist)->contents[index]; + bucket = XVECTOR (collection)->contents[index]; continue; } } else /* if (type == 3) */ { - while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist)) - && NILP (HASH_HASH (XHASH_TABLE (alist), index))) + while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection)) + && NILP (HASH_HASH (XHASH_TABLE (collection), index))) index++; - if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist))) + if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection))) break; else - elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++); + elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++); } /* Is this element a possible completion? */ @@ -1389,7 +1392,7 @@ GCPRO4 (tail, string, eltstring, bestmatch); tem = type == 3 ? call2 (predicate, elt, - HASH_VALUE (XHASH_TABLE (alist), index - 1)) + HASH_VALUE (XHASH_TABLE (collection), index - 1)) : call1 (predicate, elt); UNGCPRO; } @@ -1498,19 +1501,22 @@ } DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0, - doc: /* Search for partial matches to STRING in ALIST. -Each car of each element of ALIST (or each element if it is not a cons cell) -is tested to see if it begins with STRING. The possible matches may be + doc: /* Search for partial matches to STRING in COLLECTION. +Test each of the possible completions specified by COLLECTION +to see if it begins with STRING. The possible completions may be strings or symbols. Symbols are converted to strings before testing, see `symbol-name'. -The value is a list of all the strings from ALIST that match. - -If ALIST is a hash-table, all the string and symbol keys are the -possible matches. -If ALIST is an obarray, the names of all symbols in the obarray -are the possible matches. - -ALIST can also be a function to do the completion itself. +The value is a list of all the possible completions that match STRING. + +If COLLECTION is an alist, the keys (cars of elements) are the +possible completions. If an element is not a cons cell, then the +element itself is the possible completion. +If COLLECTION is a hash-table, all the keys that are strings or symbols +are the possible completions. +If COLLECTION is an obarray, the names of all symbols in the obarray +are the possible completions. + +COLLECTION can also be a function to do the completion itself. It receives three arguments: the values STRING, PREDICATE and t. Whatever it returns becomes the value of `all-completions'. @@ -1518,24 +1524,24 @@ it is used to test each possible match. The match is a candidate only if PREDICATE returns non-nil. The argument given to PREDICATE is the alist element -or the symbol from the obarray. If ALIST is a hash-table, +or the symbol from the obarray. If COLLECTION is a hash-table, predicate is called with two arguments: the key and the value. Additionally to this predicate, `completion-regexp-list' is used to further constrain the set of candidates. If the optional fourth argument HIDE-SPACES is non-nil, -strings in ALIST that start with a space +strings in COLLECTION that start with a space are ignored unless STRING itself starts with a space. */) - (string, alist, predicate, hide_spaces) - Lisp_Object string, alist, predicate, hide_spaces; + (string, collection, predicate, hide_spaces) + Lisp_Object string, collection, predicate, hide_spaces; { Lisp_Object tail, elt, eltstring; Lisp_Object allmatches; - int type = HASH_TABLE_P (alist) ? 3 - : VECTORP (alist) ? 2 - : NILP (alist) || (CONSP (alist) - && (!SYMBOLP (XCAR (alist)) - || NILP (XCAR (alist)))); + int type = HASH_TABLE_P (collection) ? 3 + : VECTORP (collection) ? 2 + : NILP (collection) || (CONSP (collection) + && (!SYMBOLP (XCAR (collection)) + || NILP (XCAR (collection)))); int index = 0, obsize = 0; int bindcount = -1; Lisp_Object bucket, tem, zero; @@ -1543,16 +1549,16 @@ CHECK_STRING (string); if (type == 0) - return call3 (alist, string, predicate, Qt); + return call3 (collection, string, predicate, Qt); allmatches = bucket = Qnil; zero = make_number (0); - /* If ALIST is not a list, set TAIL just for gc pro. */ - tail = alist; + /* If COLLECTION is not a list, set TAIL just for gc pro. */ + tail = collection; if (type == 2) { - obsize = XVECTOR (alist)->size; - bucket = XVECTOR (alist)->contents[index]; + obsize = XVECTOR (collection)->size; + bucket = XVECTOR (collection)->contents[index]; } while (1) @@ -1585,19 +1591,19 @@ break; else { - bucket = XVECTOR (alist)->contents[index]; + bucket = XVECTOR (collection)->contents[index]; continue; } } else /* if (type == 3) */ { - while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist)) - && NILP (HASH_HASH (XHASH_TABLE (alist), index))) + while (index < HASH_TABLE_SIZE (XHASH_TABLE (collection)) + && NILP (HASH_HASH (XHASH_TABLE (collection), index))) index++; - if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist))) + if (index >= HASH_TABLE_SIZE (XHASH_TABLE (collection))) break; else - elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++); + elt = eltstring = HASH_KEY (XHASH_TABLE (collection), index++); } /* Is this element a possible completion? */ @@ -1659,7 +1665,7 @@ GCPRO4 (tail, eltstring, allmatches, string); tem = type == 3 ? call2 (predicate, elt, - HASH_VALUE (XHASH_TABLE (alist), index - 1)) + HASH_VALUE (XHASH_TABLE (collection), index - 1)) : call1 (predicate, elt); UNGCPRO; } @@ -1686,19 +1692,14 @@ DEFUN ("completing-read", Fcompleting_read, Scompleting_read, 2, 8, 0, doc: /* Read a string in the minibuffer, with completion. PROMPT is a string to prompt with; normally it ends in a colon and a space. - -TABLE can be a list of strings, an alist, an obarray or a hash table; their -elements are tested to see if they begin with STRING. -TABLE can also be a function to do the completion itself; it receives -three arguments: the values STRING, PREDICATE and nil. -Whatever it returns becomes the value of `try-completion'. - -PREDICATE limits completion to a subset of TABLE. +COLLECTION can be a list of strings, an alist, an obarray or a hash table. +COLLECTION can also be a function to do the completion itself. +PREDICATE limits completion to a subset of COLLECTION. See `try-completion' and `all-completions' for more details - on completion, TABLE (called "alist" there), and PREDICATE. + on completion, COLLECTION, and PREDICATE. If REQUIRE-MATCH is non-nil, the user is not allowed to exit unless - the input is (or completes to) an element of TABLE or is null. + the input is (or completes to) an element of COLLECTION or is null. If it is also not t, typing RET does not exit if it does non-null completion. If the input is null, `completing-read' returns DEF, or an empty string if DEF is nil, regardless of the value of REQUIRE-MATCH. @@ -1732,8 +1733,8 @@ Completion ignores case if the ambient value of `completion-ignore-case' is non-nil. */) - (prompt, table, predicate, require_match, initial_input, hist, def, inherit_input_method) - Lisp_Object prompt, table, predicate, require_match, initial_input; + (prompt, collection, predicate, require_match, initial_input, hist, def, inherit_input_method) + Lisp_Object prompt, collection, predicate, require_match, initial_input; Lisp_Object hist, def, inherit_input_method; { Lisp_Object val, histvar, histpos, position; @@ -1745,7 +1746,7 @@ init = initial_input; GCPRO1 (def); - specbind (Qminibuffer_completion_table, table); + specbind (Qminibuffer_completion_table, collection); specbind (Qminibuffer_completion_predicate, predicate); specbind (Qminibuffer_completion_confirm, EQ (require_match, Qt) ? Qnil : require_match); @@ -1807,27 +1808,28 @@ DEFUN ("test-completion", Ftest_completion, Stest_completion, 2, 3, 0, doc: /* Return non-nil if STRING is a valid completion. Takes the same arguments as `all-completions' and `try-completion'. -If ALIST is a function, it is called with three arguments: +If COLLECTION is a function, it is called with three arguments: the values STRING, PREDICATE and `lambda'. */) - (string, alist, predicate) - Lisp_Object string, alist, predicate; + (string, collection, predicate) + Lisp_Object string, collection, predicate; { Lisp_Object regexps, tail, tem = Qnil; int i = 0; CHECK_STRING (string); - if ((CONSP (alist) && (!SYMBOLP (XCAR (alist)) || NILP (XCAR (alist)))) - || NILP (alist)) + if ((CONSP (collection) + && (!SYMBOLP (XCAR (collection)) || NILP (XCAR (collection)))) + || NILP (collection)) { - tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil); + tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil); if (NILP (tem)) return Qnil; } - else if (VECTORP (alist)) + else if (VECTORP (collection)) { /* Bypass intern-soft as that loses for nil. */ - tem = oblookup (alist, + tem = oblookup (collection, SDATA (string), SCHARS (string), SBYTES (string)); @@ -1838,7 +1840,7 @@ else string = Fstring_make_multibyte (string); - tem = oblookup (alist, + tem = oblookup (collection, SDATA (string), SCHARS (string), SBYTES (string)); @@ -1846,9 +1848,9 @@ if (completion_ignore_case && !SYMBOLP (tem)) { - for (i = XVECTOR (alist)->size - 1; i >= 0; i--) + for (i = XVECTOR (collection)->size - 1; i >= 0; i--) { - tail = XVECTOR (alist)->contents[i]; + tail = XVECTOR (collection)->contents[i]; if (SYMBOLP (tail)) while (1) { @@ -1870,9 +1872,9 @@ if (!SYMBOLP (tem)) return Qnil; } - else if (HASH_TABLE_P (alist)) + else if (HASH_TABLE_P (collection)) { - struct Lisp_Hash_Table *h = XHASH_TABLE (alist); + struct Lisp_Hash_Table *h = XHASH_TABLE (collection); i = hash_lookup (h, string, NULL); if (i >= 0) tem = HASH_KEY (h, i); @@ -1891,7 +1893,7 @@ return Qnil; } else - return call3 (alist, string, predicate, Qlambda); + return call3 (collection, string, predicate, Qlambda); /* Reject this element if it fails to match all the regexps. */ if (CONSP (Vcompletion_regexp_list)) @@ -1912,8 +1914,8 @@ /* Finally, check the predicate. */ if (!NILP (predicate)) { - return HASH_TABLE_P (alist) - ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i)) + return HASH_TABLE_P (collection) + ? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (collection), i)) : call1 (predicate, tem); } else