X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/e0d9c3c9a26ba2982595ec2ec4a1167ee7e39ddb..9f62b5dd0e873f6048630e1e59a371112bdcf720:/src/minibuf.c diff --git a/src/minibuf.c b/src/minibuf.c index 3042b13b7d..c53f91aa79 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -231,7 +231,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial, val = Qnil; size = 100; len = 0; - line = xmalloc (size); + line = xmalloc_atomic (size); while ((c = getchar ()) != '\n') { @@ -1203,7 +1203,6 @@ is used to further constrain the set of candidates. */) ? list_table : function_table)); ptrdiff_t idx = 0, obsize = 0; int matchcount = 0; - ptrdiff_t bindcount = -1; Lisp_Object bucket, zero, end, tem; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; @@ -1288,18 +1287,17 @@ is used to further constrain the set of candidates. */) /* Ignore this element if it fails to match all the regexps. */ { + dynwind_begin (); + specbind (Qcase_fold_search, + completion_ignore_case ? Qt : Qnil); for (regexps = Vcompletion_regexp_list; CONSP (regexps); regexps = XCDR (regexps)) { - if (bindcount < 0) { - bindcount = SPECPDL_INDEX (); - specbind (Qcase_fold_search, - completion_ignore_case ? Qt : Qnil); - } tem = Fstring_match (XCAR (regexps), eltstring, zero); if (NILP (tem)) break; } + dynwind_end (); if (CONSP (regexps)) continue; } @@ -1313,11 +1311,6 @@ is used to further constrain the set of candidates. */) tem = Fcommandp (elt, Qnil); else { - if (bindcount >= 0) - { - unbind_to (bindcount, Qnil); - bindcount = -1; - } GCPRO4 (tail, string, eltstring, bestmatch); tem = (type == hash_table ? call2 (predicate, elt, @@ -1396,11 +1389,6 @@ is used to further constrain the set of candidates. */) } } - if (bindcount >= 0) { - unbind_to (bindcount, Qnil); - bindcount = -1; - } - if (NILP (bestmatch)) return Qnil; /* No completions found. */ /* If we are ignoring case, and there is no exact match, @@ -1460,7 +1448,6 @@ with a space are ignored unless STRING itself starts with a space. */) : VECTORP (collection) ? 2 : NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection)); ptrdiff_t idx = 0, obsize = 0; - ptrdiff_t bindcount = -1; Lisp_Object bucket, tem, zero; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; @@ -1551,18 +1538,17 @@ with a space are ignored unless STRING itself starts with a space. */) /* Ignore this element if it fails to match all the regexps. */ { + dynwind_begin (); + specbind (Qcase_fold_search, + completion_ignore_case ? Qt : Qnil); for (regexps = Vcompletion_regexp_list; CONSP (regexps); regexps = XCDR (regexps)) { - if (bindcount < 0) { - bindcount = SPECPDL_INDEX (); - specbind (Qcase_fold_search, - completion_ignore_case ? Qt : Qnil); - } tem = Fstring_match (XCAR (regexps), eltstring, zero); if (NILP (tem)) break; } + dynwind_end (); if (CONSP (regexps)) continue; } @@ -1576,10 +1562,6 @@ with a space are ignored unless STRING itself starts with a space. */) tem = Fcommandp (elt, Qnil); else { - if (bindcount >= 0) { - unbind_to (bindcount, Qnil); - bindcount = -1; - } GCPRO4 (tail, eltstring, allmatches, string); tem = type == 3 ? call2 (predicate, elt, @@ -1594,11 +1576,6 @@ with a space are ignored unless STRING itself starts with a space. */) } } - if (bindcount >= 0) { - unbind_to (bindcount, Qnil); - bindcount = -1; - } - return Fnreverse (allmatches); } @@ -1904,6 +1881,8 @@ init_minibuf_once (void) void syms_of_minibuf (void) { +#include "minibuf.x" + minibuf_level = 0; minibuf_prompt = Qnil; staticpro (&minibuf_prompt); @@ -2078,28 +2057,4 @@ properties. */); /* We use `intern' here instead of Qread_only to avoid initialization-order problems. */ Vminibuffer_prompt_properties = list2 (intern_c_string ("read-only"), Qt); - - defsubr (&Sactive_minibuffer_window); - defsubr (&Sset_minibuffer_window); - defsubr (&Sread_from_minibuffer); - defsubr (&Sread_string); - defsubr (&Sread_command); - defsubr (&Sread_variable); - defsubr (&Sinternal_complete_buffer); - defsubr (&Sread_buffer); - defsubr (&Sread_no_blanks_input); - defsubr (&Sminibuffer_depth); - defsubr (&Sminibuffer_prompt); - - defsubr (&Sminibufferp); - defsubr (&Sminibuffer_prompt_end); - defsubr (&Sminibuffer_contents); - defsubr (&Sminibuffer_contents_no_properties); - defsubr (&Sminibuffer_completion_contents); - - defsubr (&Stry_completion); - defsubr (&Sall_completions); - defsubr (&Stest_completion); - defsubr (&Sassoc_string); - defsubr (&Scompleting_read); }