X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/59db4308b546cbe32d3bfe6e23dbc1899d511975..50650cb6887d99b01eeb1e686fc1f695c2a0c64a:/src/minibuf.c diff --git a/src/minibuf.c b/src/minibuf.c index 03be8d1ff9..d85a7a9b10 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -1,13 +1,13 @@ /* Minibuffer input and completion. -Copyright (C) 1985-1986, 1993-2015 Free Software Foundation, Inc. +Copyright (C) 1985-1986, 1993-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -25,17 +25,12 @@ along with GNU Emacs. If not, see . */ #include #include "lisp.h" -#include "commands.h" #include "character.h" #include "buffer.h" -#include "dispextern.h" #include "keyboard.h" #include "frame.h" #include "window.h" -#include "syntax.h" -#include "intervals.h" #include "keymap.h" -#include "termhooks.h" #include "systty.h" /* List of buffers for use as minibuffers. @@ -150,12 +145,9 @@ static void run_exit_minibuf_hook (void); static Lisp_Object string_to_object (Lisp_Object val, Lisp_Object defalt) { - struct gcpro gcpro1, gcpro2; Lisp_Object expr_and_pos; ptrdiff_t pos; - GCPRO2 (val, defalt); - if (STRINGP (val) && SCHARS (val) == 0) { if (STRINGP (defalt)) @@ -181,7 +173,7 @@ string_to_object (Lisp_Object val, Lisp_Object defalt) } val = Fcar (expr_and_pos); - RETURN_UNGCPRO (val); + return val; } @@ -237,12 +229,7 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial, if (hide_char) fprintf (stdout, "%c", hide_char); if (len == size) - { - if (STRING_BYTES_BOUND / 2 < size) - memory_full (SIZE_MAX); - size *= 2; - line = xrealloc (line, size); - } + line = xpalloc (line, &size, 1, -1, sizeof *line); line[len++] = c; } } @@ -384,7 +371,6 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, Lisp_Object val; ptrdiff_t count = SPECPDL_INDEX (); Lisp_Object mini_frame, ambient_dir, minibuffer, input_method; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; Lisp_Object enable_multibyte; EMACS_INT pos = 0; /* String to add to the history. */ @@ -437,11 +423,6 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, input_method = Qnil; enable_multibyte = Qnil; - /* Don't need to protect PROMPT, HISTVAR, and HISTPOS because we - store them away before we can GC. Don't need to protect - BACKUP_N because we use the value only if it is an integer. */ - GCPRO5 (map, initial, val, ambient_dir, input_method); - if (!STRINGP (prompt)) prompt = empty_unibyte_string; @@ -466,7 +447,6 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, make_number (pos), expflag, histvar, histpos, defalt, allow_props, inherit_input_method); - UNGCPRO; return unbind_to (count, val); } @@ -758,7 +738,6 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt, /* The appropriate frame will get selected in set-window-configuration. */ - UNGCPRO; return unbind_to (count, val); } @@ -927,7 +906,7 @@ INITIAL-CONTENTS argument in more detail. It is only relevant when studying existing code, or when HIST is a cons. If non-nil, INITIAL-CONTENTS is a string to be inserted into the minibuffer before reading input. Normally, point is put at the end of that string. -However, if INITIAL-CONTENTS is \(STRING . POSITION), the initial +However, if INITIAL-CONTENTS is (STRING . POSITION), the initial input is STRING, but point is placed at _one-indexed_ position POSITION in the minibuffer. Any integer value less than or equal to one puts point at the beginning of the string. *Note* that this @@ -936,7 +915,6 @@ and some related functions, which use zero-indexing for POSITION. */) (Lisp_Object prompt, Lisp_Object initial_contents, Lisp_Object keymap, Lisp_Object read, Lisp_Object hist, Lisp_Object default_value, Lisp_Object inherit_input_method) { Lisp_Object histvar, histpos, val; - struct gcpro gcpro1; CHECK_STRING (prompt); if (NILP (keymap)) @@ -959,13 +937,11 @@ and some related functions, which use zero-indexing for POSITION. */) if (NILP (histpos)) XSETFASTINT (histpos, 0); - GCPRO1 (default_value); val = read_minibuf (keymap, initial_contents, prompt, !NILP (read), histvar, histpos, default_value, minibuffer_allow_text_properties, !NILP (inherit_input_method)); - UNGCPRO; return val; } @@ -1212,7 +1188,6 @@ is used to further constrain the set of candidates. */) int matchcount = 0; ptrdiff_t bindcount = -1; Lisp_Object bucket, zero, end, tem; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; CHECK_STRING (string); if (type == function_table) @@ -1325,13 +1300,11 @@ is used to further constrain the set of candidates. */) unbind_to (bindcount, Qnil); bindcount = -1; } - GCPRO4 (tail, string, eltstring, bestmatch); tem = (type == hash_table ? call2 (predicate, elt, HASH_VALUE (XHASH_TABLE (collection), idx - 1)) : call1 (predicate, elt)); - UNGCPRO; } if (NILP (tem)) continue; } @@ -1469,7 +1442,6 @@ with a space are ignored unless STRING itself starts with a space. */) ptrdiff_t idx = 0, obsize = 0; ptrdiff_t bindcount = -1; Lisp_Object bucket, tem, zero; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; CHECK_STRING (string); if (type == 0) @@ -1587,12 +1559,10 @@ with a space are ignored unless STRING itself starts with a space. */) unbind_to (bindcount, Qnil); bindcount = -1; } - GCPRO4 (tail, eltstring, allmatches, string); tem = type == 3 ? call2 (predicate, elt, HASH_VALUE (XHASH_TABLE (collection), idx - 1)) : call1 (predicate, elt); - UNGCPRO; } if (NILP (tem)) continue; } @@ -1615,8 +1585,11 @@ PROMPT is a string to prompt with; normally it ends in a colon and a space. 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, COLLECTION, and PREDICATE. +See `try-completion', `all-completions', `test-completion', +and `completion-boundaries', for more details on completion, +COLLECTION, and PREDICATE. See also Info nodes `(elisp)Basic Completion' +for the details about completion, and `(elisp)Programmed Completion' for +expectations from COLLECTION when it's a function. REQUIRE-MATCH can take the following values: - t means that the user is not allowed to exit unless @@ -1993,7 +1966,9 @@ controls the behavior, rather than this variable. */); DEFVAR_BOOL ("enable-recursive-minibuffers", enable_recursive_minibuffers, doc: /* Non-nil means to allow minibuffer commands while in the minibuffer. -This variable makes a difference whenever the minibuffer window is active. */); +This variable makes a difference whenever the minibuffer window is active. +Also see `minibuffer-depth-indicator-mode', which may be handy if this +variable is non-nil. */); enable_recursive_minibuffers = 0; DEFVAR_LISP ("minibuffer-completion-table", Vminibuffer_completion_table,