1 |
/* Minibuffer input and completion. |
/* Minibuffer input and completion. |
2 |
Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999, |
3 |
2000, 2001 Free Software Foundation, Inc. |
2000, 2001, 2003 Free Software Foundation, Inc. |
4 |
|
|
5 |
This file is part of GNU Emacs. |
This file is part of GNU Emacs. |
6 |
|
|
233 |
|
|
234 |
GCPRO2 (val, defalt); |
GCPRO2 (val, defalt); |
235 |
|
|
236 |
if (STRINGP (val) && XSTRING (val)->size == 0 |
if (STRINGP (val) && SCHARS (val) == 0 |
237 |
&& STRINGP (defalt)) |
&& STRINGP (defalt)) |
238 |
val = defalt; |
val = defalt; |
239 |
|
|
240 |
expr_and_pos = Fread_from_string (val, Qnil, Qnil); |
expr_and_pos = Fread_from_string (val, Qnil, Qnil); |
241 |
pos = XINT (Fcdr (expr_and_pos)); |
pos = XINT (Fcdr (expr_and_pos)); |
242 |
if (pos != XSTRING (val)->size) |
if (pos != SCHARS (val)) |
243 |
{ |
{ |
244 |
/* Ignore trailing whitespace; any other trailing junk |
/* Ignore trailing whitespace; any other trailing junk |
245 |
is an error. */ |
is an error. */ |
246 |
int i; |
int i; |
247 |
pos = string_char_to_byte (val, pos); |
pos = string_char_to_byte (val, pos); |
248 |
for (i = pos; i < STRING_BYTES (XSTRING (val)); i++) |
for (i = pos; i < SBYTES (val); i++) |
249 |
{ |
{ |
250 |
int c = XSTRING (val)->data[i]; |
int c = SREF (val, i); |
251 |
if (c != ' ' && c != '\t' && c != '\n') |
if (c != ' ' && c != '\t' && c != '\n') |
252 |
error ("Trailing garbage following expression"); |
error ("Trailing garbage following expression"); |
253 |
} |
} |
280 |
char *line, *s; |
char *line, *s; |
281 |
Lisp_Object val; |
Lisp_Object val; |
282 |
|
|
283 |
fprintf (stdout, "%s", XSTRING (prompt)->data); |
fprintf (stdout, "%s", SDATA (prompt)); |
284 |
fflush (stdout); |
fflush (stdout); |
285 |
|
|
286 |
val = Qnil; |
val = Qnil; |
317 |
|
|
318 |
return val; |
return val; |
319 |
} |
} |
320 |
|
|
321 |
|
DEFUN ("minibufferp", Fminibufferp, |
322 |
|
Sminibufferp, 0, 1, 0, |
323 |
|
doc: /* Return t if BUFFER is a minibuffer. |
324 |
|
No argument or nil as argument means use current buffer as BUFFER.*/) |
325 |
|
(buffer) |
326 |
|
Lisp_Object buffer; |
327 |
|
{ |
328 |
|
Lisp_Object tem; |
329 |
|
|
330 |
|
if (NILP (buffer)) |
331 |
|
buffer = Fcurrent_buffer (); |
332 |
|
else if (STRINGP (buffer)) |
333 |
|
buffer = Fget_buffer (buffer); |
334 |
|
else |
335 |
|
CHECK_BUFFER (buffer); |
336 |
|
|
337 |
|
tem = Fmemq (buffer, Vminibuffer_list); |
338 |
|
return ! NILP (tem) ? Qt : Qnil; |
339 |
|
} |
340 |
|
|
341 |
DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end, |
DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end, |
342 |
Sminibuffer_prompt_end, 0, 0, 0, |
Sminibuffer_prompt_end, 0, 0, 0, |
345 |
() |
() |
346 |
{ |
{ |
347 |
/* This function is written to be most efficient when there's a prompt. */ |
/* This function is written to be most efficient when there's a prompt. */ |
348 |
Lisp_Object beg = make_number (BEGV); |
Lisp_Object beg, end, tem; |
349 |
Lisp_Object end = Ffield_end (beg, Qnil, Qnil); |
beg = make_number (BEGV); |
350 |
|
|
351 |
|
tem = Fmemq (Fcurrent_buffer (), Vminibuffer_list); |
352 |
|
if (NILP (tem)) |
353 |
|
return beg; |
354 |
|
|
355 |
|
end = Ffield_end (beg, Qnil, Qnil); |
356 |
|
|
357 |
if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil))) |
if (XINT (end) == ZV && NILP (Fget_char_property (beg, Qfield, Qnil))) |
358 |
return beg; |
return beg; |
392 |
return Qnil; |
return Qnil; |
393 |
} |
} |
394 |
|
|
395 |
|
/* Get the text in the minibuffer before point. |
396 |
|
That is what completion commands operate on. */ |
397 |
|
|
398 |
|
Lisp_Object |
399 |
|
minibuffer_completion_contents () |
400 |
|
{ |
401 |
|
int prompt_end = XINT (Fminibuffer_prompt_end ()); |
402 |
|
if (PT < prompt_end) |
403 |
|
error ("Cannot do completion in the prompt"); |
404 |
|
return make_buffer_string (prompt_end, PT, 1); |
405 |
|
} |
406 |
|
|
407 |
/* Read from the minibuffer using keymap MAP, initial contents INITIAL |
/* Read from the minibuffer using keymap MAP, initial contents INITIAL |
408 |
(a string), putting point minus BACKUP_N bytes from the end of INITIAL, |
(a string), putting point minus BACKUP_N bytes from the end of INITIAL, |
409 |
prompting with PROMPT (a string), using history list HISTVAR |
prompting with PROMPT (a string), using history list HISTVAR |
437 |
int inherit_input_method; |
int inherit_input_method; |
438 |
{ |
{ |
439 |
Lisp_Object val; |
Lisp_Object val; |
440 |
int count = specpdl_ptr - specpdl; |
int count = SPECPDL_INDEX (); |
441 |
Lisp_Object mini_frame, ambient_dir, minibuffer, input_method; |
Lisp_Object mini_frame, ambient_dir, minibuffer, input_method; |
442 |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
443 |
Lisp_Object enable_multibyte; |
Lisp_Object enable_multibyte; |
593 |
|
|
594 |
/* Erase the buffer. */ |
/* Erase the buffer. */ |
595 |
{ |
{ |
596 |
int count1 = BINDING_STACK_SIZE (); |
int count1 = SPECPDL_INDEX (); |
597 |
specbind (Qinhibit_read_only, Qt); |
specbind (Qinhibit_read_only, Qt); |
598 |
specbind (Qinhibit_modification_hooks, Qt); |
specbind (Qinhibit_modification_hooks, Qt); |
599 |
Ferase_buffer (); |
Ferase_buffer (); |
676 |
last_minibuf_string = val; |
last_minibuf_string = val; |
677 |
|
|
678 |
/* Add the value to the appropriate history list unless it is empty. */ |
/* Add the value to the appropriate history list unless it is empty. */ |
679 |
if (XSTRING (val)->size != 0 |
if (SCHARS (val) != 0 |
680 |
&& SYMBOLP (Vminibuffer_history_variable)) |
&& SYMBOLP (Vminibuffer_history_variable)) |
681 |
{ |
{ |
682 |
/* If the caller wanted to save the value read on a history list, |
/* If the caller wanted to save the value read on a history list, |
760 |
} |
} |
761 |
else |
else |
762 |
{ |
{ |
763 |
int count = specpdl_ptr - specpdl; |
int count = SPECPDL_INDEX (); |
764 |
|
|
765 |
reset_buffer (XBUFFER (buf)); |
reset_buffer (XBUFFER (buf)); |
766 |
record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
821 |
|
|
822 |
/* Erase the minibuffer we were using at this level. */ |
/* Erase the minibuffer we were using at this level. */ |
823 |
{ |
{ |
824 |
int count = specpdl_ptr - specpdl; |
int count = SPECPDL_INDEX (); |
825 |
/* Prevent error in erase-buffer. */ |
/* Prevent error in erase-buffer. */ |
826 |
specbind (Qinhibit_read_only, Qt); |
specbind (Qinhibit_read_only, Qt); |
827 |
specbind (Qinhibit_modification_hooks, Qt); |
specbind (Qinhibit_modification_hooks, Qt); |
896 |
/* Convert to distance from end of input. */ |
/* Convert to distance from end of input. */ |
897 |
if (XINT (position) < 1) |
if (XINT (position) < 1) |
898 |
/* A number too small means the beginning of the string. */ |
/* A number too small means the beginning of the string. */ |
899 |
pos = - XSTRING (initial_contents)->size; |
pos = - SCHARS (initial_contents); |
900 |
else |
else |
901 |
pos = XINT (position) - 1 - XSTRING (initial_contents)->size; |
pos = XINT (position) - 1 - SCHARS (initial_contents); |
902 |
} |
} |
903 |
} |
} |
904 |
|
|
978 |
val = Fread_from_minibuffer (prompt, initial_input, Qnil, |
val = Fread_from_minibuffer (prompt, initial_input, Qnil, |
979 |
Qnil, history, default_value, |
Qnil, history, default_value, |
980 |
inherit_input_method); |
inherit_input_method); |
981 |
if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (default_value)) |
if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value)) |
982 |
val = default_value; |
val = default_value; |
983 |
return val; |
return val; |
984 |
} |
} |
1037 |
DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0, |
DEFUN ("read-variable", Fread_variable, Sread_variable, 1, 2, 0, |
1038 |
doc: /* Read the name of a user variable and return it as a symbol. |
doc: /* Read the name of a user variable and return it as a symbol. |
1039 |
Prompt with PROMPT. By default, return DEFAULT-VALUE. |
Prompt with PROMPT. By default, return DEFAULT-VALUE. |
1040 |
A user variable is one whose documentation starts with a `*' character. */) |
A user variable is one for which `user-variable-p' returns non-nil. */) |
1041 |
(prompt, default_value) |
(prompt, default_value) |
1042 |
Lisp_Object prompt, default_value; |
Lisp_Object prompt, default_value; |
1043 |
{ |
{ |
1117 |
If there is no match at all, nil is returned. |
If there is no match at all, nil is returned. |
1118 |
For a unique match which is exact, t is returned. |
For a unique match which is exact, t is returned. |
1119 |
|
|
1120 |
ALIST can be an obarray instead of an alist. |
If ALIST is a hash-table, all the string keys are the possible matches. |
1121 |
Then the print names of all symbols in the obarray are the possible matches. |
If ALIST is an obarray, the names of all symbols in the obarray |
1122 |
|
are the possible matches. |
1123 |
|
|
1124 |
ALIST can also be a function to do the completion itself. |
ALIST can also be a function to do the completion itself. |
1125 |
It receives three arguments: the values STRING, PREDICATE and nil. |
It receives three arguments: the values STRING, PREDICATE and nil. |
1129 |
it is used to test each possible match. |
it is used to test each possible match. |
1130 |
The match is a candidate only if PREDICATE returns non-nil. |
The match is a candidate only if PREDICATE returns non-nil. |
1131 |
The argument given to PREDICATE is the alist element |
The argument given to PREDICATE is the alist element |
1132 |
or the symbol from the obarray. |
or the symbol from the obarray. If ALIST is a hash-table, |
1133 |
|
predicate is called with two arguments: the key and the value. |
1134 |
Additionally to this predicate, `completion-regexp-list' |
Additionally to this predicate, `completion-regexp-list' |
1135 |
is used to further constrain the set of candidates. */) |
is used to further constrain the set of candidates. */) |
1136 |
(string, alist, predicate) |
(string, alist, predicate) |
1141 |
int bestmatchsize = 0; |
int bestmatchsize = 0; |
1142 |
/* These are in bytes, too. */ |
/* These are in bytes, too. */ |
1143 |
int compare, matchsize; |
int compare, matchsize; |
1144 |
int list = NILP (alist) || (CONSP (alist) |
int type = HASH_TABLE_P (alist) ? 3 |
1145 |
&& (!SYMBOLP (XCAR (alist)) |
: VECTORP (alist) ? 2 |
1146 |
|| NILP (XCAR (alist)))); |
: NILP (alist) || (CONSP (alist) |
1147 |
|
&& (!SYMBOLP (XCAR (alist)) |
1148 |
|
|| NILP (XCAR (alist)))); |
1149 |
int index = 0, obsize = 0; |
int index = 0, obsize = 0; |
1150 |
int matchcount = 0; |
int matchcount = 0; |
1151 |
Lisp_Object bucket, zero, end, tem; |
Lisp_Object bucket, zero, end, tem; |
1152 |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
1153 |
|
|
1154 |
CHECK_STRING (string); |
CHECK_STRING (string); |
1155 |
if (!list && !VECTORP (alist)) |
if (type == 0) |
1156 |
return call3 (alist, string, predicate, Qnil); |
return call3 (alist, string, predicate, Qnil); |
1157 |
|
|
1158 |
bestmatch = bucket = Qnil; |
bestmatch = bucket = Qnil; |
1159 |
|
|
1160 |
/* If ALIST is not a list, set TAIL just for gc pro. */ |
/* If ALIST is not a list, set TAIL just for gc pro. */ |
1161 |
tail = alist; |
tail = alist; |
1162 |
if (! list) |
if (type == 2) |
1163 |
{ |
{ |
|
index = 0; |
|
1164 |
obsize = XVECTOR (alist)->size; |
obsize = XVECTOR (alist)->size; |
1165 |
bucket = XVECTOR (alist)->contents[index]; |
bucket = XVECTOR (alist)->contents[index]; |
1166 |
} |
} |
1167 |
|
|
1168 |
while (1) |
while (1) |
1169 |
{ |
{ |
1170 |
/* Get the next element of the alist or obarray. */ |
/* Get the next element of the alist, obarray, or hash-table. */ |
1171 |
/* Exit the loop if the elements are all used up. */ |
/* Exit the loop if the elements are all used up. */ |
1172 |
/* elt gets the alist element or symbol. |
/* elt gets the alist element or symbol. |
1173 |
eltstring gets the name to check as a completion. */ |
eltstring gets the name to check as a completion. */ |
1174 |
|
|
1175 |
if (list) |
if (type == 1) |
1176 |
{ |
{ |
1177 |
if (!CONSP (tail)) |
if (!CONSP (tail)) |
1178 |
break; |
break; |
1180 |
eltstring = CONSP (elt) ? XCAR (elt) : elt; |
eltstring = CONSP (elt) ? XCAR (elt) : elt; |
1181 |
tail = XCDR (tail); |
tail = XCDR (tail); |
1182 |
} |
} |
1183 |
else |
else if (type == 2) |
1184 |
{ |
{ |
1185 |
if (XFASTINT (bucket) != 0) |
if (XFASTINT (bucket) != 0) |
1186 |
{ |
{ |
1199 |
continue; |
continue; |
1200 |
} |
} |
1201 |
} |
} |
1202 |
|
else /* if (type == 3) */ |
1203 |
|
{ |
1204 |
|
while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist)) |
1205 |
|
&& NILP (HASH_HASH (XHASH_TABLE (alist), index))) |
1206 |
|
index++; |
1207 |
|
if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist))) |
1208 |
|
break; |
1209 |
|
else |
1210 |
|
elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++); |
1211 |
|
} |
1212 |
|
|
1213 |
/* Is this element a possible completion? */ |
/* Is this element a possible completion? */ |
1214 |
|
|
1215 |
if (STRINGP (eltstring) |
if (STRINGP (eltstring) |
1216 |
&& XSTRING (string)->size <= XSTRING (eltstring)->size |
&& SCHARS (string) <= SCHARS (eltstring) |
1217 |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
1218 |
make_number (XSTRING (string)->size), |
make_number (SCHARS (string)), |
1219 |
string, make_number (0), Qnil, |
string, make_number (0), Qnil, |
1220 |
completion_ignore_case ?Qt : Qnil), |
completion_ignore_case ?Qt : Qnil), |
1221 |
EQ (Qt, tem))) |
EQ (Qt, tem))) |
1246 |
else |
else |
1247 |
{ |
{ |
1248 |
GCPRO4 (tail, string, eltstring, bestmatch); |
GCPRO4 (tail, string, eltstring, bestmatch); |
1249 |
tem = call1 (predicate, elt); |
tem = type == 3 |
1250 |
|
? call2 (predicate, elt, |
1251 |
|
HASH_VALUE (XHASH_TABLE (alist), index - 1)) |
1252 |
|
: call1 (predicate, elt); |
1253 |
UNGCPRO; |
UNGCPRO; |
1254 |
} |
} |
1255 |
if (NILP (tem)) continue; |
if (NILP (tem)) continue; |
1257 |
|
|
1258 |
/* Update computation of how much all possible completions match */ |
/* Update computation of how much all possible completions match */ |
1259 |
|
|
|
matchcount++; |
|
1260 |
if (NILP (bestmatch)) |
if (NILP (bestmatch)) |
1261 |
{ |
{ |
1262 |
|
matchcount = 1; |
1263 |
bestmatch = eltstring; |
bestmatch = eltstring; |
1264 |
bestmatchsize = XSTRING (eltstring)->size; |
bestmatchsize = SCHARS (eltstring); |
1265 |
} |
} |
1266 |
else |
else |
1267 |
{ |
{ |
1268 |
compare = min (bestmatchsize, XSTRING (eltstring)->size); |
compare = min (bestmatchsize, SCHARS (eltstring)); |
1269 |
tem = Fcompare_strings (bestmatch, make_number (0), |
tem = Fcompare_strings (bestmatch, make_number (0), |
1270 |
make_number (compare), |
make_number (compare), |
1271 |
eltstring, make_number (0), |
eltstring, make_number (0), |
1287 |
use it as the best match rather than one that is not an |
use it as the best match rather than one that is not an |
1288 |
exact match. This way, we get the case pattern |
exact match. This way, we get the case pattern |
1289 |
of the actual match. */ |
of the actual match. */ |
1290 |
if ((matchsize == XSTRING (eltstring)->size |
if ((matchsize == SCHARS (eltstring) |
1291 |
&& matchsize < XSTRING (bestmatch)->size) |
&& matchsize < SCHARS (bestmatch)) |
1292 |
|| |
|| |
1293 |
/* If there is more than one exact match ignoring case, |
/* If there is more than one exact match ignoring case, |
1294 |
and one of them is exact including case, |
and one of them is exact including case, |
1296 |
/* If there is no exact match ignoring case, |
/* If there is no exact match ignoring case, |
1297 |
prefer a match that does not change the case |
prefer a match that does not change the case |
1298 |
of the input. */ |
of the input. */ |
1299 |
((matchsize == XSTRING (eltstring)->size) |
((matchsize == SCHARS (eltstring)) |
1300 |
== |
== |
1301 |
(matchsize == XSTRING (bestmatch)->size) |
(matchsize == SCHARS (bestmatch)) |
1302 |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
1303 |
make_number (XSTRING (string)->size), |
make_number (SCHARS (string)), |
1304 |
string, make_number (0), |
string, make_number (0), |
1305 |
Qnil, |
Qnil, |
1306 |
Qnil), |
Qnil), |
1307 |
EQ (Qt, tem)) |
EQ (Qt, tem)) |
1308 |
&& (tem = Fcompare_strings (bestmatch, make_number (0), |
&& (tem = Fcompare_strings (bestmatch, make_number (0), |
1309 |
make_number (XSTRING (string)->size), |
make_number (SCHARS (string)), |
1310 |
string, make_number (0), |
string, make_number (0), |
1311 |
Qnil, |
Qnil, |
1312 |
Qnil), |
Qnil), |
1313 |
! EQ (Qt, tem)))) |
! EQ (Qt, tem)))) |
1314 |
bestmatch = eltstring; |
bestmatch = eltstring; |
1315 |
} |
} |
1316 |
|
if (bestmatchsize != SCHARS (eltstring) |
1317 |
|
|| bestmatchsize != matchsize) |
1318 |
|
/* Don't count the same string multiple times. */ |
1319 |
|
matchcount++; |
1320 |
bestmatchsize = matchsize; |
bestmatchsize = matchsize; |
1321 |
if (matchsize <= XSTRING (string)->size |
if (matchsize <= SCHARS (string) |
1322 |
&& matchcount > 1) |
&& matchcount > 1) |
1323 |
/* No need to look any further. */ |
/* No need to look any further. */ |
1324 |
break; |
break; |
1331 |
/* If we are ignoring case, and there is no exact match, |
/* If we are ignoring case, and there is no exact match, |
1332 |
and no additional text was supplied, |
and no additional text was supplied, |
1333 |
don't change the case of what the user typed. */ |
don't change the case of what the user typed. */ |
1334 |
if (completion_ignore_case && bestmatchsize == XSTRING (string)->size |
if (completion_ignore_case && bestmatchsize == SCHARS (string) |
1335 |
&& XSTRING (bestmatch)->size > bestmatchsize) |
&& SCHARS (bestmatch) > bestmatchsize) |
1336 |
return minibuf_conform_representation (string, bestmatch); |
return minibuf_conform_representation (string, bestmatch); |
1337 |
|
|
1338 |
/* Return t if the supplied string is an exact match (counting case); |
/* Return t if the supplied string is an exact match (counting case); |
1339 |
it does not require any change to be made. */ |
it does not require any change to be made. */ |
1340 |
if (matchcount == 1 && bestmatchsize == XSTRING (string)->size |
if (matchcount == 1 && bestmatchsize == SCHARS (string) |
1341 |
&& (tem = Fcompare_strings (bestmatch, make_number (0), |
&& (tem = Fcompare_strings (bestmatch, make_number (0), |
1342 |
make_number (bestmatchsize), |
make_number (bestmatchsize), |
1343 |
string, make_number (0), |
string, make_number (0), |
1356 |
Each car of each element of ALIST is tested to see if it begins with STRING. |
Each car of each element of ALIST is tested to see if it begins with STRING. |
1357 |
The value is a list of all the strings from ALIST that match. |
The value is a list of all the strings from ALIST that match. |
1358 |
|
|
1359 |
ALIST can be an obarray instead of an alist. |
If ALIST is a hash-table, all the string keys are the possible matches. |
1360 |
Then the print names of all symbols in the obarray are the possible matches. |
If ALIST is an obarray, the names of all symbols in the obarray |
1361 |
|
are the possible matches. |
1362 |
|
|
1363 |
ALIST can also be a function to do the completion itself. |
ALIST can also be a function to do the completion itself. |
1364 |
It receives three arguments: the values STRING, PREDICATE and t. |
It receives three arguments: the values STRING, PREDICATE and t. |
1368 |
it is used to test each possible match. |
it is used to test each possible match. |
1369 |
The match is a candidate only if PREDICATE returns non-nil. |
The match is a candidate only if PREDICATE returns non-nil. |
1370 |
The argument given to PREDICATE is the alist element |
The argument given to PREDICATE is the alist element |
1371 |
or the symbol from the obarray. |
or the symbol from the obarray. If ALIST is a hash-table, |
1372 |
|
predicate is called with two arguments: the key and the value. |
1373 |
Additionally to this predicate, `completion-regexp-list' |
Additionally to this predicate, `completion-regexp-list' |
1374 |
is used to further constrain the set of candidates. |
is used to further constrain the set of candidates. |
1375 |
|
|
1381 |
{ |
{ |
1382 |
Lisp_Object tail, elt, eltstring; |
Lisp_Object tail, elt, eltstring; |
1383 |
Lisp_Object allmatches; |
Lisp_Object allmatches; |
1384 |
int list = NILP (alist) || (CONSP (alist) |
int type = HASH_TABLE_P (alist) ? 3 |
1385 |
&& (!SYMBOLP (XCAR (alist)) |
: VECTORP (alist) ? 2 |
1386 |
|| NILP (XCAR (alist)))); |
: NILP (alist) || (CONSP (alist) |
1387 |
|
&& (!SYMBOLP (XCAR (alist)) |
1388 |
|
|| NILP (XCAR (alist)))); |
1389 |
int index = 0, obsize = 0; |
int index = 0, obsize = 0; |
1390 |
Lisp_Object bucket, tem; |
Lisp_Object bucket, tem; |
1391 |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
1392 |
|
|
1393 |
CHECK_STRING (string); |
CHECK_STRING (string); |
1394 |
if (!list && !VECTORP (alist)) |
if (type == 0) |
1395 |
{ |
return call3 (alist, string, predicate, Qt); |
|
return call3 (alist, string, predicate, Qt); |
|
|
} |
|
1396 |
allmatches = bucket = Qnil; |
allmatches = bucket = Qnil; |
1397 |
|
|
1398 |
/* If ALIST is not a list, set TAIL just for gc pro. */ |
/* If ALIST is not a list, set TAIL just for gc pro. */ |
1399 |
tail = alist; |
tail = alist; |
1400 |
if (! list) |
if (type == 2) |
1401 |
{ |
{ |
|
index = 0; |
|
1402 |
obsize = XVECTOR (alist)->size; |
obsize = XVECTOR (alist)->size; |
1403 |
bucket = XVECTOR (alist)->contents[index]; |
bucket = XVECTOR (alist)->contents[index]; |
1404 |
} |
} |
1405 |
|
|
1406 |
while (1) |
while (1) |
1407 |
{ |
{ |
1408 |
/* Get the next element of the alist or obarray. */ |
/* Get the next element of the alist, obarray, or hash-table. */ |
1409 |
/* Exit the loop if the elements are all used up. */ |
/* Exit the loop if the elements are all used up. */ |
1410 |
/* elt gets the alist element or symbol. |
/* elt gets the alist element or symbol. |
1411 |
eltstring gets the name to check as a completion. */ |
eltstring gets the name to check as a completion. */ |
1412 |
|
|
1413 |
if (list) |
if (type == 1) |
1414 |
{ |
{ |
1415 |
if (!CONSP (tail)) |
if (!CONSP (tail)) |
1416 |
break; |
break; |
1418 |
eltstring = CONSP (elt) ? XCAR (elt) : elt; |
eltstring = CONSP (elt) ? XCAR (elt) : elt; |
1419 |
tail = XCDR (tail); |
tail = XCDR (tail); |
1420 |
} |
} |
1421 |
else |
else if (type == 2) |
1422 |
{ |
{ |
1423 |
if (XFASTINT (bucket) != 0) |
if (XFASTINT (bucket) != 0) |
1424 |
{ |
{ |
1437 |
continue; |
continue; |
1438 |
} |
} |
1439 |
} |
} |
1440 |
|
else /* if (type == 3) */ |
1441 |
|
{ |
1442 |
|
while (index < HASH_TABLE_SIZE (XHASH_TABLE (alist)) |
1443 |
|
&& NILP (HASH_HASH (XHASH_TABLE (alist), index))) |
1444 |
|
index++; |
1445 |
|
if (index >= HASH_TABLE_SIZE (XHASH_TABLE (alist))) |
1446 |
|
break; |
1447 |
|
else |
1448 |
|
elt = eltstring = HASH_KEY (XHASH_TABLE (alist), index++); |
1449 |
|
} |
1450 |
|
|
1451 |
/* Is this element a possible completion? */ |
/* Is this element a possible completion? */ |
1452 |
|
|
1453 |
if (STRINGP (eltstring) |
if (STRINGP (eltstring) |
1454 |
&& XSTRING (string)->size <= XSTRING (eltstring)->size |
&& SCHARS (string) <= SCHARS (eltstring) |
1455 |
/* If HIDE_SPACES, reject alternatives that start with space |
/* If HIDE_SPACES, reject alternatives that start with space |
1456 |
unless the input starts with space. */ |
unless the input starts with space. */ |
1457 |
&& ((STRING_BYTES (XSTRING (string)) > 0 |
&& ((SBYTES (string) > 0 |
1458 |
&& XSTRING (string)->data[0] == ' ') |
&& SREF (string, 0) == ' ') |
1459 |
|| XSTRING (eltstring)->data[0] != ' ' |
|| SREF (eltstring, 0) != ' ' |
1460 |
|| NILP (hide_spaces)) |
|| NILP (hide_spaces)) |
1461 |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
&& (tem = Fcompare_strings (eltstring, make_number (0), |
1462 |
make_number (XSTRING (string)->size), |
make_number (SCHARS (string)), |
1463 |
string, make_number (0), |
string, make_number (0), |
1464 |
make_number (XSTRING (string)->size), |
make_number (SCHARS (string)), |
1465 |
completion_ignore_case ? Qt : Qnil), |
completion_ignore_case ? Qt : Qnil), |
1466 |
EQ (Qt, tem))) |
EQ (Qt, tem))) |
1467 |
{ |
{ |
1491 |
else |
else |
1492 |
{ |
{ |
1493 |
GCPRO4 (tail, eltstring, allmatches, string); |
GCPRO4 (tail, eltstring, allmatches, string); |
1494 |
tem = call1 (predicate, elt); |
tem = type == 3 |
1495 |
|
? call2 (predicate, elt, |
1496 |
|
HASH_VALUE (XHASH_TABLE (alist), index - 1)) |
1497 |
|
: call1 (predicate, elt); |
1498 |
UNGCPRO; |
UNGCPRO; |
1499 |
} |
} |
1500 |
if (NILP (tem)) continue; |
if (NILP (tem)) continue; |
1542 |
and HISTPOS is the initial position (the position in the list |
and HISTPOS is the initial position (the position in the list |
1543 |
which INITIAL-INPUT corresponds to). |
which INITIAL-INPUT corresponds to). |
1544 |
Positions are counted starting from 1 at the beginning of the list. |
Positions are counted starting from 1 at the beginning of the list. |
1545 |
|
The variable `history-length' controls the maximum length of a |
1546 |
|
history list. |
1547 |
|
|
1548 |
DEF, if non-nil, is the default value. |
DEF, if non-nil, is the default value. |
1549 |
|
|
1550 |
If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits |
If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits |
1559 |
Lisp_Object val, histvar, histpos, position; |
Lisp_Object val, histvar, histpos, position; |
1560 |
Lisp_Object init; |
Lisp_Object init; |
1561 |
int pos = 0; |
int pos = 0; |
1562 |
int count = specpdl_ptr - specpdl; |
int count = SPECPDL_INDEX (); |
1563 |
struct gcpro gcpro1; |
struct gcpro gcpro1; |
1564 |
|
|
1565 |
init = initial_input; |
init = initial_input; |
1584 |
{ |
{ |
1585 |
CHECK_NUMBER (position); |
CHECK_NUMBER (position); |
1586 |
/* Convert to distance from end of input. */ |
/* Convert to distance from end of input. */ |
1587 |
pos = XINT (position) - XSTRING (init)->size; |
pos = XINT (position) - SCHARS (init); |
1588 |
} |
} |
1589 |
} |
} |
1590 |
|
|
1610 |
histvar, histpos, def, 0, |
histvar, histpos, def, 0, |
1611 |
!NILP (inherit_input_method)); |
!NILP (inherit_input_method)); |
1612 |
|
|
1613 |
if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (def)) |
if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def)) |
1614 |
val = def; |
val = def; |
1615 |
|
|
1616 |
RETURN_UNGCPRO (unbind_to (count, val)); |
RETURN_UNGCPRO (unbind_to (count, val)); |
1629 |
Lisp_Object string, alist, predicate; |
Lisp_Object string, alist, predicate; |
1630 |
{ |
{ |
1631 |
Lisp_Object regexps, tem = Qnil; |
Lisp_Object regexps, tem = Qnil; |
1632 |
|
int i = 0; |
1633 |
|
|
1634 |
CHECK_STRING (string); |
CHECK_STRING (string); |
1635 |
|
|
1637 |
|| NILP (alist)) |
|| NILP (alist)) |
1638 |
{ |
{ |
1639 |
tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil); |
tem = Fassoc_string (string, alist, completion_ignore_case ? Qt : Qnil); |
1640 |
if (CONSP (tem)) |
if NILP (tem) |
|
tem = XCAR (tem); |
|
|
else |
|
1641 |
return Qnil; |
return Qnil; |
1642 |
} |
} |
1643 |
else if (VECTORP (alist)) |
else if (VECTORP (alist)) |
1644 |
{ |
{ |
1645 |
/* Bypass intern-soft as that loses for nil. */ |
/* Bypass intern-soft as that loses for nil. */ |
1646 |
tem = oblookup (alist, |
tem = oblookup (alist, |
1647 |
XSTRING (string)->data, |
SDATA (string), |
1648 |
XSTRING (string)->size, |
SCHARS (string), |
1649 |
STRING_BYTES (XSTRING (string))); |
SBYTES (string)); |
1650 |
if (!SYMBOLP (tem)) |
if (!SYMBOLP (tem)) |
1651 |
{ |
{ |
1652 |
if (STRING_MULTIBYTE (string)) |
if (STRING_MULTIBYTE (string)) |
1655 |
string = Fstring_make_multibyte (string); |
string = Fstring_make_multibyte (string); |
1656 |
|
|
1657 |
tem = oblookup (Vminibuffer_completion_table, |
tem = oblookup (Vminibuffer_completion_table, |
1658 |
XSTRING (string)->data, |
SDATA (string), |
1659 |
XSTRING (string)->size, |
SCHARS (string), |
1660 |
STRING_BYTES (XSTRING (string))); |
SBYTES (string)); |
1661 |
if (!SYMBOLP (tem)) |
if (!SYMBOLP (tem)) |
1662 |
return Qnil; |
return Qnil; |
1663 |
} |
} |
1664 |
} |
} |
1665 |
|
else if (HASH_TABLE_P (alist)) |
1666 |
|
{ |
1667 |
|
i = hash_lookup (XHASH_TABLE (alist), string, NULL); |
1668 |
|
if (i >= 0) |
1669 |
|
tem = HASH_KEY (XHASH_TABLE (alist), i); |
1670 |
|
else |
1671 |
|
return Qnil; |
1672 |
|
} |
1673 |
else |
else |
1674 |
return call3 (alist, string, predicate, Qlambda); |
return call3 (alist, string, predicate, Qlambda); |
1675 |
|
|
1685 |
|
|
1686 |
/* Finally, check the predicate. */ |
/* Finally, check the predicate. */ |
1687 |
if (!NILP (predicate)) |
if (!NILP (predicate)) |
1688 |
return call1 (predicate, tem); |
return HASH_TABLE_P (alist) |
1689 |
|
? call2 (predicate, tem, HASH_VALUE (XHASH_TABLE (alist), i)) |
1690 |
|
: call1 (predicate, tem); |
1691 |
else |
else |
1692 |
return Qt; |
return Qt; |
1693 |
} |
} |
1708 |
Lisp_Object last; |
Lisp_Object last; |
1709 |
struct gcpro gcpro1, gcpro2; |
struct gcpro gcpro1, gcpro2; |
1710 |
|
|
1711 |
completion = Ftry_completion (Fminibuffer_contents (), |
completion = Ftry_completion (minibuffer_completion_contents (), |
1712 |
Vminibuffer_completion_table, |
Vminibuffer_completion_table, |
1713 |
Vminibuffer_completion_predicate); |
Vminibuffer_completion_predicate); |
1714 |
last = last_exact_completion; |
last = last_exact_completion; |
1730 |
return 1; |
return 1; |
1731 |
} |
} |
1732 |
|
|
1733 |
string = Fminibuffer_contents (); |
string = minibuffer_completion_contents (); |
1734 |
|
|
1735 |
/* COMPLETEDP should be true if some completion was done, which |
/* COMPLETEDP should be true if some completion was done, which |
1736 |
doesn't include simply changing the case of the entered string. |
doesn't include simply changing the case of the entered string. |
1743 |
if (!EQ (tem, Qt)) |
if (!EQ (tem, Qt)) |
1744 |
/* Rewrite the user's input. */ |
/* Rewrite the user's input. */ |
1745 |
{ |
{ |
1746 |
Fdelete_minibuffer_contents (); /* Some completion happened */ |
int prompt_end = XINT (Fminibuffer_prompt_end ()); |
1747 |
|
/* Some completion happened */ |
1748 |
|
|
1749 |
|
if (! NILP (Vminibuffer_completing_file_name) |
1750 |
|
&& SREF (completion, SBYTES (completion) - 1) == '/' |
1751 |
|
&& PT < ZV |
1752 |
|
&& FETCH_CHAR (PT_BYTE) == '/') |
1753 |
|
{ |
1754 |
|
del_range (prompt_end, PT + 1); |
1755 |
|
} |
1756 |
|
else |
1757 |
|
del_range (prompt_end, PT); |
1758 |
|
|
1759 |
Finsert (1, &completion); |
Finsert (1, &completion); |
1760 |
|
|
1761 |
if (! completedp) |
if (! completedp) |
1797 |
last_exact_completion = completion; |
last_exact_completion = completion; |
1798 |
if (!NILP (last)) |
if (!NILP (last)) |
1799 |
{ |
{ |
1800 |
tem = Fminibuffer_contents (); |
tem = minibuffer_completion_contents (); |
1801 |
if (!NILP (Fequal (tem, last))) |
if (!NILP (Fequal (tem, last))) |
1802 |
Fminibuffer_completion_help (); |
Fminibuffer_completion_help (); |
1803 |
} |
} |
1935 |
goto exit; |
goto exit; |
1936 |
|
|
1937 |
/* Call do_completion, but ignore errors. */ |
/* Call do_completion, but ignore errors. */ |
1938 |
|
SET_PT (ZV); |
1939 |
val = internal_condition_case (complete_and_exit_1, Qerror, |
val = internal_condition_case (complete_and_exit_1, Qerror, |
1940 |
complete_and_exit_2); |
complete_and_exit_2); |
1941 |
|
|
1973 |
{ |
{ |
1974 |
Lisp_Object completion, tem, tem1; |
Lisp_Object completion, tem, tem1; |
1975 |
register int i, i_byte; |
register int i, i_byte; |
1976 |
register unsigned char *completion_string; |
register const unsigned char *completion_string; |
1977 |
struct gcpro gcpro1, gcpro2; |
struct gcpro gcpro1, gcpro2; |
1978 |
int prompt_end_charpos; |
int prompt_end_charpos = XINT (Fminibuffer_prompt_end ()); |
1979 |
|
|
1980 |
/* We keep calling Fbuffer_string rather than arrange for GC to |
/* We keep calling Fbuffer_string rather than arrange for GC to |
1981 |
hold onto a pointer to one of the strings thus made. */ |
hold onto a pointer to one of the strings thus made. */ |
1982 |
|
|
1983 |
completion = Ftry_completion (Fminibuffer_contents (), |
completion = Ftry_completion (minibuffer_completion_contents (), |
1984 |
Vminibuffer_completion_table, |
Vminibuffer_completion_table, |
1985 |
Vminibuffer_completion_predicate); |
Vminibuffer_completion_predicate); |
1986 |
if (NILP (completion)) |
if (NILP (completion)) |
1994 |
|
|
1995 |
#if 0 /* How the below code used to look, for reference. */ |
#if 0 /* How the below code used to look, for reference. */ |
1996 |
tem = Fminibuffer_contents (); |
tem = Fminibuffer_contents (); |
1997 |
b = XSTRING (tem)->data; |
b = SDATA (tem); |
1998 |
i = ZV - 1 - XSTRING (completion)->size; |
i = ZV - 1 - SCHARS (completion); |
1999 |
p = XSTRING (completion)->data; |
p = SDATA (completion); |
2000 |
if (i > 0 || |
if (i > 0 || |
2001 |
0 <= scmp (b, p, ZV - 1)) |
0 <= scmp (b, p, ZV - 1)) |
2002 |
{ |
{ |
2012 |
int buffer_nchars, completion_nchars; |
int buffer_nchars, completion_nchars; |
2013 |
|
|
2014 |
CHECK_STRING (completion); |
CHECK_STRING (completion); |
2015 |
tem = Fminibuffer_contents (); |
tem = minibuffer_completion_contents (); |
2016 |
GCPRO2 (completion, tem); |
GCPRO2 (completion, tem); |
2017 |
/* If reading a file name, |
/* If reading a file name, |
2018 |
expand any $ENVVAR refs in the buffer and in TEM. */ |
expand any $ENVVAR refs in the buffer and in TEM. */ |
2023 |
if (! EQ (substituted, tem)) |
if (! EQ (substituted, tem)) |
2024 |
{ |
{ |
2025 |
tem = substituted; |
tem = substituted; |
2026 |
Fdelete_minibuffer_contents (); |
del_range (prompt_end_charpos, PT); |
2027 |
insert_from_string (tem, 0, 0, XSTRING (tem)->size, |
Finsert (1, &tem); |
|
STRING_BYTES (XSTRING (tem)), 0); |
|
2028 |
} |
} |
2029 |
} |
} |
2030 |
buffer_nchars = XSTRING (tem)->size; /* ie ZV - BEGV */ |
buffer_nchars = SCHARS (tem); /* # chars in what we completed. */ |
2031 |
completion_nchars = XSTRING (completion)->size; |
completion_nchars = SCHARS (completion); |
2032 |
i = buffer_nchars - completion_nchars; |
i = buffer_nchars - completion_nchars; |
2033 |
if (i > 0 |
if (i > 0 |
2034 |
|| |
|| |
2041 |
{ |
{ |
2042 |
int start_pos; |
int start_pos; |
2043 |
|
|
2044 |
/* Set buffer to longest match of buffer tail and completion head. */ |
/* Make buffer (before point) contain the longest match |
2045 |
|
of TEM's tail and COMPLETION's head. */ |
2046 |
if (i <= 0) i = 1; |
if (i <= 0) i = 1; |
2047 |
start_pos= i; |
start_pos= i; |
2048 |
buffer_nchars -= i; |
buffer_nchars -= i; |
2059 |
buffer_nchars--; |
buffer_nchars--; |
2060 |
} |
} |
2061 |
del_range (1, i + 1); |
del_range (1, i + 1); |
|
SET_PT_BOTH (ZV, ZV_BYTE); |
|
2062 |
} |
} |
2063 |
UNGCPRO; |
UNGCPRO; |
2064 |
} |
} |
2065 |
#endif /* Rewritten code */ |
#endif /* Rewritten code */ |
2066 |
|
|
|
prompt_end_charpos = XINT (Fminibuffer_prompt_end ()); |
|
|
|
|
2067 |
{ |
{ |
2068 |
int prompt_end_bytepos; |
int prompt_end_bytepos; |
2069 |
prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos); |
prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos); |
2070 |
i = ZV - prompt_end_charpos; |
i = PT - prompt_end_charpos; |
2071 |
i_byte = ZV_BYTE - prompt_end_bytepos; |
i_byte = PT_BYTE - prompt_end_bytepos; |
2072 |
} |
} |
2073 |
|
|
2074 |
/* If completion finds next char not unique, |
/* If completion finds next char not unique, |
2075 |
consider adding a space or a hyphen. */ |
consider adding a space or a hyphen. */ |
2076 |
if (i == XSTRING (completion)->size) |
if (i == SCHARS (completion)) |
2077 |
{ |
{ |
2078 |
GCPRO1 (completion); |
GCPRO1 (completion); |
2079 |
tem = Ftry_completion (concat2 (Fminibuffer_contents (), build_string (" ")), |
tem = Ftry_completion (concat2 (minibuffer_completion_contents (), |
2080 |
|
build_string (" ")), |
2081 |
Vminibuffer_completion_table, |
Vminibuffer_completion_table, |
2082 |
Vminibuffer_completion_predicate); |
Vminibuffer_completion_predicate); |
2083 |
UNGCPRO; |
UNGCPRO; |
2088 |
{ |
{ |
2089 |
GCPRO1 (completion); |
GCPRO1 (completion); |
2090 |
tem = |
tem = |
2091 |
Ftry_completion (concat2 (Fminibuffer_contents (), build_string ("-")), |
Ftry_completion (concat2 (minibuffer_completion_contents (), |
2092 |
|
build_string ("-")), |
2093 |
Vminibuffer_completion_table, |
Vminibuffer_completion_table, |
2094 |
Vminibuffer_completion_predicate); |
Vminibuffer_completion_predicate); |
2095 |
UNGCPRO; |
UNGCPRO; |
2103 |
i gets index in string of where to stop completing. */ |
i gets index in string of where to stop completing. */ |
2104 |
{ |
{ |
2105 |
int len, c; |
int len, c; |
2106 |
int bytes = STRING_BYTES (XSTRING (completion)); |
int bytes = SBYTES (completion); |
2107 |
completion_string = XSTRING (completion)->data; |
completion_string = SDATA (completion); |
2108 |
for (; i_byte < STRING_BYTES (XSTRING (completion)); i_byte += len, i++) |
for (; i_byte < SBYTES (completion); i_byte += len, i++) |
2109 |
{ |
{ |
2110 |
c = STRING_CHAR_AND_LENGTH (completion_string + i_byte, |
c = STRING_CHAR_AND_LENGTH (completion_string + i_byte, |
2111 |
bytes - i_byte, |
bytes - i_byte, |
2121 |
|
|
2122 |
/* If got no characters, print help for user. */ |
/* If got no characters, print help for user. */ |
2123 |
|
|
2124 |
if (i == ZV - prompt_end_charpos) |
if (i == PT - prompt_end_charpos) |
2125 |
{ |
{ |
2126 |
if (!NILP (Vcompletion_auto_help)) |
if (!NILP (Vcompletion_auto_help)) |
2127 |
Fminibuffer_completion_help (); |
Fminibuffer_completion_help (); |
2130 |
|
|
2131 |
/* Otherwise insert in minibuffer the chars we got */ |
/* Otherwise insert in minibuffer the chars we got */ |
2132 |
|
|
2133 |
Fdelete_minibuffer_contents (); |
if (! NILP (Vminibuffer_completing_file_name) |
2134 |
|
&& SREF (completion, SBYTES (completion) - 1) == '/' |
2135 |
|
&& PT < ZV |
2136 |
|
&& FETCH_CHAR (PT_BYTE) == '/') |
2137 |
|
{ |
2138 |
|
del_range (prompt_end_charpos, PT + 1); |
2139 |
|
} |
2140 |
|
else |
2141 |
|
del_range (prompt_end_charpos, PT); |
2142 |
|
|
2143 |
insert_from_string (completion, 0, 0, i, i_byte, 1); |
insert_from_string (completion, 0, 0, i, i_byte, 1); |
2144 |
return Qt; |
return Qt; |
2145 |
} |
} |
2194 |
{ |
{ |
2195 |
tem = XCAR (elt); |
tem = XCAR (elt); |
2196 |
CHECK_STRING (tem); |
CHECK_STRING (tem); |
2197 |
length = XSTRING (tem)->size; |
length = SCHARS (tem); |
2198 |
|
|
2199 |
tem = Fcar (XCDR (elt)); |
tem = Fcar (XCDR (elt)); |
2200 |
CHECK_STRING (tem); |
CHECK_STRING (tem); |
2201 |
length += XSTRING (tem)->size; |
length += SCHARS (tem); |
2202 |
} |
} |
2203 |
else |
else |
2204 |
{ |
{ |
2205 |
CHECK_STRING (elt); |
CHECK_STRING (elt); |
2206 |
length = XSTRING (elt)->size; |
length = SCHARS (elt); |
2207 |
} |
} |
2208 |
|
|
2209 |
/* This does a bad job for narrower than usual windows. |
/* This does a bad job for narrower than usual windows. |
2335 |
Lisp_Object completions; |
Lisp_Object completions; |
2336 |
|
|
2337 |
message ("Making completion list..."); |
message ("Making completion list..."); |
2338 |
completions = Fall_completions (Fminibuffer_contents (), |
completions = Fall_completions (minibuffer_completion_contents (), |
2339 |
Vminibuffer_completion_table, |
Vminibuffer_completion_table, |
2340 |
Vminibuffer_completion_predicate, |
Vminibuffer_completion_predicate, |
2341 |
Qt); |
Qt); |
2396 |
|
|
2397 |
void |
void |
2398 |
temp_echo_area_glyphs (m) |
temp_echo_area_glyphs (m) |
2399 |
char *m; |
const char *m; |
2400 |
{ |
{ |
2401 |
int osize = ZV; |
int osize = ZV; |
2402 |
int osize_byte = ZV_BYTE; |
int osize_byte = ZV_BYTE; |
2431 |
(string) |
(string) |
2432 |
Lisp_Object string; |
Lisp_Object string; |
2433 |
{ |
{ |
2434 |
temp_echo_area_glyphs (XSTRING (string)->data); |
CHECK_STRING (string); |
2435 |
|
temp_echo_area_glyphs (SDATA (string)); |
2436 |
return Qnil; |
return Qnil; |
2437 |
} |
} |
2438 |
|
|
2613 |
defsubr (&Sminibuffer_depth); |
defsubr (&Sminibuffer_depth); |
2614 |
defsubr (&Sminibuffer_prompt); |
defsubr (&Sminibuffer_prompt); |
2615 |
|
|
2616 |
|
defsubr (&Sminibufferp); |
2617 |
defsubr (&Sminibuffer_prompt_end); |
defsubr (&Sminibuffer_prompt_end); |
2618 |
defsubr (&Sminibuffer_contents); |
defsubr (&Sminibuffer_contents); |
2619 |
defsubr (&Sminibuffer_contents_no_properties); |
defsubr (&Sminibuffer_contents_no_properties); |