Mercurial > emacs
diff src/minibuf.c @ 83554:b8d9a391daf3
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-599
Merge from erc--main--0
* emacs@sv.gnu.org/emacs--devo--0--patch-600
Merge from erc--main--0
* emacs@sv.gnu.org/emacs--devo--0--patch-601
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-602
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-603
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-604
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-605
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-606
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-607
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-608
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-609
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-610
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-611
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-612
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-613
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-614
Make byte compiler correctly write circular constants
* emacs@sv.gnu.org/emacs--devo--0--patch-615
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-616
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-617
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-618
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-192
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-193
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-194
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-195
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-196
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-594
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 29 Jan 2007 22:21:19 +0000 |
parents | d3099204c799 688a9d290d4d |
children | 07774e5c3ff5 |
line wrap: on
line diff
--- a/src/minibuf.c Sat Jan 13 22:59:28 2007 +0000 +++ b/src/minibuf.c Mon Jan 29 22:21:19 2007 +0000 @@ -1,7 +1,7 @@ /* Minibuffer input and completion. Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006 Free Software Foundation, Inc. + 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -1236,22 +1236,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'. @@ -1259,23 +1262,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; @@ -1284,18 +1287,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) @@ -1330,19 +1333,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? */ @@ -1395,7 +1398,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; } @@ -1504,19 +1507,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'. @@ -1524,24 +1530,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; @@ -1549,16 +1555,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) @@ -1591,19 +1597,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? */ @@ -1665,7 +1671,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; } @@ -1692,14 +1698,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. -TABLE can also be a function to do the completion itself. -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, 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. @@ -1733,8 +1739,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; @@ -1746,7 +1752,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); @@ -1808,27 +1814,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)); @@ -1839,7 +1846,7 @@ else string = Fstring_make_multibyte (string); - tem = oblookup (alist, + tem = oblookup (collection, SDATA (string), SCHARS (string), SBYTES (string)); @@ -1847,9 +1854,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) { @@ -1871,9 +1878,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); @@ -1892,7 +1899,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)) @@ -1913,8 +1920,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