X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/c6c5df7f76ab65b485bf110a8c5fcbdbd56d36af..6dd5561c8aaf8485b86fcef163f4c2b2c7e6a3ea:/src/minibuf.c diff --git a/src/minibuf.c b/src/minibuf.c index 9987b71578..ddb8ae7d70 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -18,7 +18,7 @@ along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "config.h" +#include #include "lisp.h" #include "commands.h" #include "buffer.h" @@ -29,6 +29,8 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define min(a, b) ((a) < (b) ? (a) : (b)) +extern int quit_char; + /* List of buffers for use as minibuffers. The first element of the list is used for the outermost minibuffer invocation, the next element is used for a recursive minibuffer invocation, etc. @@ -54,7 +56,7 @@ int minibuf_level; /* Nonzero means display completion help for invalid input */ int auto_help; -/* Fread_minibuffer leaves the input, as a string, here */ +/* Fread_minibuffer leaves the input here as a string. */ Lisp_Object last_minibuf_string; /* Nonzero means let functions called when within a minibuffer @@ -75,10 +77,26 @@ Lisp_Object Vminibuffer_history_position; Lisp_Object Qminibuffer_history; +Lisp_Object Qread_file_name_internal; + +/* Normal hooks for entry to and exit from minibuffer. */ + +Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook; +Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook; + /* Nonzero means completion ignores case. */ int completion_ignore_case; +/* List of regexps that should restrict possible completions. */ + +Lisp_Object Vcompletion_regexp_list; + +/* Nonzero means raise the minibuffer frame when the minibuffer + is entered. */ + +int minibuffer_auto_raise; + /* If last completion attempt reported "Complete but not unique" then this is the string completed then; otherwise this is nil. */ @@ -86,6 +104,9 @@ static Lisp_Object last_exact_completion; Lisp_Object Quser_variable_p; +/* Non-nil means it is the window for C-M-v to scroll + when the minibuffer is selected. */ +extern Lisp_Object Vminibuf_scroll_window; /* Actual minibuffer invocation. */ @@ -99,21 +120,25 @@ Lisp_Object read_minibuf (); with initial position HISTPOS. (BACKUP_N should be <= 0.) Normally return the result as a string (the text that was read), - but if EXPFLAG is non-nil, read it and return the object read. */ + but if EXPFLAG is non-nil, read it and return the object read. + If HISTVAR is given, save the value read on that history only if it doesn't + match the front of that history list exactly. The value is pushed onto + the list as the string that was read, or as the object that resulted iff + EXPFLAG is non-nil. */ Lisp_Object read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) Lisp_Object map; Lisp_Object initial; Lisp_Object prompt; - int backup_n; + Lisp_Object backup_n; int expflag; Lisp_Object histvar; Lisp_Object histpos; { register Lisp_Object val; int count = specpdl_ptr - specpdl; - Lisp_Object mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window)); + Lisp_Object mini_frame; struct gcpro gcpro1, gcpro2; if (XTYPE (prompt) != Lisp_String) @@ -153,11 +178,19 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) /* If the minibuffer window is on a different frame, save that frame's configuration too. */ +#ifdef MULTI_FRAME + XSET (mini_frame, Lisp_Frame, WINDOW_FRAME (XWINDOW (minibuf_window))); if (XFRAME (mini_frame) != selected_frame) - { - record_unwind_protect (Fset_window_configuration, - Fcurrent_window_configuration (mini_frame)); - } + record_unwind_protect (Fset_window_configuration, + Fcurrent_window_configuration (mini_frame)); + + /* If the minibuffer is on an iconified or invisible frame, + make it visible now. */ + Fmake_frame_visible (mini_frame); + + if (minibuffer_auto_raise) + Fraise_frame (mini_frame); +#endif val = current_buffer->directory; Fset_buffer (get_minibuffer (minibuf_level)); @@ -180,8 +213,9 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) CONSP (buf_list); buf_list = XCONS (buf_list)->cdr) { - Lisp_Object other_buf = XCONS (XCONS (buf_list)->car)->cdr; + Lisp_Object other_buf; + other_buf = XCONS (XCONS (buf_list)->car)->cdr; if (XTYPE (XBUFFER (other_buf)->directory) == Lisp_String) { current_buffer->directory = XBUFFER (other_buf)->directory; @@ -191,7 +225,8 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) } #ifdef MULTI_FRAME - Fredirect_frame_focus (Fselected_frame (), mini_frame); + if (XFRAME (mini_frame) != selected_frame) + Fredirect_frame_focus (Fselected_frame (), mini_frame); #endif Fmake_local_variable (Qprint_escape_newlines); print_escape_newlines = 1; @@ -222,9 +257,20 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) Vminibuffer_history_position = histpos; Vminibuffer_history_variable = histvar; + /* Run our hook, but not if it is empty. + (run-hooks would do nothing if it is empty, + but it's important to save time here in the usual case. */ + if (!NILP (Vminibuffer_setup_hook) && !EQ (Vminibuffer_setup_hook, Qunbound) + && !NILP (Vrun_hooks)) + call1 (Vrun_hooks, Qminibuffer_setup_hook); + /* ??? MCC did redraw_screen here if switching screens. */ recursive_edit_1 (); + if (!NILP (Vminibuffer_exit_hook) && !EQ (Vminibuffer_exit_hook, Qunbound) + && !NILP (Vrun_hooks)) + call1 (Vrun_hooks, Qminibuffer_exit_hook); + /* If cursor is on the minibuffer line, show the user we have exited by putting it in column 0. */ if ((FRAME_CURSOR_Y (selected_frame) @@ -239,25 +285,44 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos) val = make_buffer_string (1, Z); bcopy (GAP_END_ADDR, XSTRING (val)->data + GPT - BEG, Z - GPT); + /* VAL is the string of minibuffer text. */ + last_minibuf_string = val; + /* Add the value to the appropriate history list. */ if (XTYPE (Vminibuffer_history_variable) == Lisp_Symbol && ! EQ (XSYMBOL (Vminibuffer_history_variable)->value, Qunbound)) - Fset (Vminibuffer_history_variable, - Fcons (val, Fsymbol_value (Vminibuffer_history_variable))); - - unbind_to (count, Qnil); /* The appropriate frame will get selected - in set-window-configuration. */ - - UNGCPRO; - - /* VAL is the string of minibuffer text. */ - last_minibuf_string = val; + { + /* If the caller wanted to save the value read on a history list, + then do so if the value is not already the front of the list. */ + Lisp_Object histval; + histval = Fsymbol_value (Vminibuffer_history_variable); + + /* The value of the history variable must be a cons or nil. Other + values are unacceptable. We silently ignore these values. */ + if (NILP (histval) + || (CONSP (histval) + && NILP (Fequal (last_minibuf_string, Fcar (histval))))) + Fset (Vminibuffer_history_variable, + Fcons (last_minibuf_string, histval)); + } - /* If Lisp form desired instead of string, parse it */ + /* If Lisp form desired instead of string, parse it. */ if (expflag) - val = Fread (val); + { + Lisp_Object expr_and_pos; + unsigned char *p; + + expr_and_pos = Fread_from_string (val, Qnil, Qnil); + /* Ignore trailing whitespace; any other trailing junk is an error. */ + for (p = XSTRING (val)->data + XINT (Fcdr (expr_and_pos)); *p; p++) + if (*p != ' ' && *p != '\t' && *p != '\n') + error ("Trailing garbage following expression"); + val = Fcar (expr_and_pos); + } - return val; + UNGCPRO; + return unbind_to (count, val); /* The appropriate frame will get selected + in set-window-configuration. */ } /* Return a buffer to be used as the minibuffer at depth `depth'. @@ -269,7 +334,7 @@ get_minibuffer (depth) int depth; { Lisp_Object tail, num, buf; - char name[14]; + char name[24]; extern Lisp_Object nconc2 (); XFASTINT (num) = depth; @@ -357,27 +422,27 @@ Fifth arg HIST, if non-nil, specifies a history list\n\ DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, 5, 0, 0 /* See immediately above */) - (prompt, initial_input, keymap, read, hist) - Lisp_Object prompt, initial_input, keymap, read, hist; + (prompt, initial_contents, keymap, read, hist) + Lisp_Object prompt, initial_contents, keymap, read, hist; { int pos = 0; Lisp_Object histvar, histpos, position; position = Qnil; CHECK_STRING (prompt, 0); - if (!NILP (initial_input)) + if (!NILP (initial_contents)) { - if (XTYPE (initial_input) == Lisp_Cons) + if (XTYPE (initial_contents) == Lisp_Cons) { - position = Fcdr (initial_input); - initial_input = Fcar (initial_input); + position = Fcdr (initial_contents); + initial_contents = Fcar (initial_contents); } - CHECK_STRING (initial_input, 1); + CHECK_STRING (initial_contents, 1); if (!NILP (position)) { CHECK_NUMBER (position, 0); /* Convert to distance from end of input. */ - pos = XINT (position) - 1 - XSTRING (initial_input)->size; + pos = XINT (position) - 1 - XSTRING (initial_contents)->size; } } @@ -401,7 +466,7 @@ DEFUN ("read-from-minibuffer", Fread_from_minibuffer, Sread_from_minibuffer, 1, if (NILP (histpos)) XFASTINT (histpos) = 0; - return read_minibuf (keymap, initial_input, prompt, + return read_minibuf (keymap, initial_contents, prompt, make_number (pos), !NILP (read), histvar, histpos); } @@ -414,7 +479,7 @@ is a string to insert in the minibuffer before reading.") { CHECK_STRING (prompt, 0); if (!NILP (initial_contents)) - CHECK_STRING (initial_contents, 1) + CHECK_STRING (initial_contents, 1); return read_minibuf (Vminibuffer_local_map, initial_contents, prompt, Qnil, 1, Qminibuffer_history, make_number (0)); } @@ -440,7 +505,7 @@ If non-nil second arg INITIAL-INPUT is a string to insert before reading.") return Fread_from_minibuffer (prompt, initial_input, Qnil, Qnil, Qnil); } -DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 2, 2, 0, +DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 2, 0, "Args PROMPT and INIT, strings. Read a string from the terminal, not allowing blanks.\n\ Prompt with PROMPT, and provide INIT as an initial value of the input string.") (prompt, init) @@ -600,12 +665,27 @@ The argument given to PREDICATE is the alist element or the symbol from the obar /* Is this element a possible completion? */ - if (XTYPE (eltstring) == Lisp_String && - XSTRING (string)->size <= XSTRING (eltstring)->size && - 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data, - XSTRING (string)->size)) + if (XTYPE (eltstring) == Lisp_String + && XSTRING (string)->size <= XSTRING (eltstring)->size + && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data, + XSTRING (string)->size)) { /* Yes. */ + Lisp_Object regexps; + Lisp_Object zero; + XFASTINT (zero) = 0; + + /* Ignore this element if it fails to match all the regexps. */ + for (regexps = Vcompletion_regexp_list; CONSP (regexps); + regexps = XCONS (regexps)->cdr) + { + tem = Fstring_match (XCONS (regexps)->car, eltstring, zero); + if (NILP (tem)) + break; + } + if (CONSP (regexps)) + continue; + /* Ignore this element if there is a predicate and the predicate doesn't like it. */ @@ -789,13 +869,31 @@ The argument given to PREDICATE is the alist element or the symbol from the obar /* Is this element a possible completion? */ - if (XTYPE (eltstring) == Lisp_String && - XSTRING (string)->size <= XSTRING (eltstring)->size && - XSTRING (eltstring)->data[0] != ' ' && - 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data, - XSTRING (string)->size)) + if (XTYPE (eltstring) == Lisp_String + && XSTRING (string)->size <= XSTRING (eltstring)->size + /* Reject alternatives that start with space + unless the input starts with space. */ + && ((XSTRING (string)->size > 0 && XSTRING (string)->data[0] == ' ') + || XSTRING (eltstring)->data[0] != ' ') + && 0 > scmp (XSTRING (eltstring)->data, XSTRING (string)->data, + XSTRING (string)->size)) { /* Yes. */ + Lisp_Object regexps; + Lisp_Object zero; + XFASTINT (zero) = 0; + + /* Ignore this element if it fails to match all the regexps. */ + for (regexps = Vcompletion_regexp_list; CONSP (regexps); + regexps = XCONS (regexps)->cdr) + { + tem = Fstring_match (XCONS (regexps)->car, eltstring, zero); + if (NILP (tem)) + break; + } + if (CONSP (regexps)) + continue; + /* Ignore this element if there is a predicate and the predicate doesn't like it. */ @@ -926,11 +1024,11 @@ temp_echo_area_glyphs (m) SET_PT (osize); Vinhibit_quit = Qt; Fsit_for (make_number (2), Qnil, Qnil); - del_range (point, ZV); + del_range (PT, ZV); if (!NILP (Vquit_flag)) { Vquit_flag = Qnil; - unread_command_events = Fcons (make_number (Ctl ('g')), Qnil); + unread_command_events = Fcons (make_number (quit_char), Qnil); } Vinhibit_quit = oinhibit; } @@ -952,7 +1050,9 @@ do_completion () Lisp_Object completion, tem; int completedp; Lisp_Object last; + struct gcpro gcpro1, gcpro2; + GCPRO2 (completion, last); completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table, Vminibuffer_completion_predicate); last = last_exact_completion; @@ -962,11 +1062,15 @@ do_completion () { bitch_at_user (); temp_echo_area_glyphs (" [No match]"); + UNGCPRO; return 0; } if (EQ (completion, Qt)) /* exact and unique match */ - return 1; + { + UNGCPRO; + return 1; + } /* compiler bug */ tem = Fstring_equal (completion, Fbuffer_string()); @@ -1004,7 +1108,9 @@ do_completion () Qlambda); if (NILP (tem)) - { /* not an exact match */ + { + /* not an exact match */ + UNGCPRO; if (completedp) return 5; else if (auto_help) @@ -1014,7 +1120,10 @@ do_completion () return 6; } else if (completedp) - return 4; + { + UNGCPRO; + return 4; + } /* If the last exact completion and this one were the same, it means we've already given a "Complete but not unique" message and the user's hit TAB again, so now we give him help. */ @@ -1025,9 +1134,10 @@ do_completion () if (!NILP (Fequal (tem, last))) Fminibuffer_completion_help (); } + UNGCPRO; return 3; } - + /* Like assoc but assumes KEY is a string, and ignores case if appropriate. */ Lisp_Object @@ -1058,10 +1168,43 @@ assoc_for_completion (key, list) } DEFUN ("minibuffer-complete", Fminibuffer_complete, Sminibuffer_complete, 0, 0, "", - "Complete the minibuffer contents as far as possible.") + "Complete the minibuffer contents as far as possible.\n\ +Return nil if there is no valid completion, else t.\n\ +If no characters can be completed, display a list of possible completions.\n\ +If you repeat this command after it displayed such a list,\n\ +scroll the window of possible completions.") () { - register int i = do_completion (); + register int i; + Lisp_Object window, tem; + + /* If the previous command was not this, then mark the completion + buffer obsolete. */ + if (! EQ (last_command, this_command)) + Vminibuf_scroll_window = Qnil; + + window = Vminibuf_scroll_window; + /* If there's a fresh completion window with a live buffer, + and this command is repeated, scroll that window. */ + if (! NILP (window) && ! NILP (XWINDOW (window)->buffer) + && !NILP (XBUFFER (XWINDOW (window)->buffer)->name)) + { + struct buffer *obuf = current_buffer; + + Fset_buffer (XWINDOW (window)->buffer); + tem = Fpos_visible_in_window_p (make_number (ZV), window); + if (! NILP (tem)) + /* If end is in view, scroll up to the beginning. */ + Fset_window_start (window, BEGV); + else + /* Else scroll down one screen. */ + Fscroll_other_window (Qnil); + + set_buffer_internal (obuf); + return Qnil; + } + + i = do_completion (); switch (i) { case 0: @@ -1121,15 +1264,17 @@ DEFUN ("minibuffer-complete-word", Fminibuffer_complete_word, Sminibuffer_comple 0, 0, "", "Complete the minibuffer contents at most a single word.\n\ After one word is completed as much as possible, a space or hyphen\n\ -is added, provided that matches some possible completion.") +is added, provided that matches some possible completion.\n\ +Return nil if there is no valid completion, else t.") () { Lisp_Object completion, tem; register int i; register unsigned char *completion_string; - /* We keep calling Fbuffer_string - rather than arrange for GC to hold onto a pointer to - one of the strings thus made. */ + struct gcpro gcpro1; + + /* We keep calling Fbuffer_string rather than arrange for GC to + hold onto a pointer to one of the strings thus made. */ completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table, @@ -1143,7 +1288,7 @@ is added, provided that matches some possible completion.") if (EQ (completion, Qt)) return Qnil; -#if 0 /* How the below code used to look, for reference */ +#if 0 /* How the below code used to look, for reference. */ tem = Fbuffer_string (); b = XSTRING (tem)->data; i = ZV - 1 - XSTRING (completion)->size; @@ -1164,6 +1309,19 @@ is added, provided that matches some possible completion.") int buffer_length, completion_length; tem = Fbuffer_string (); + /* If reading a file name, + expand any $ENVVAR refs in the buffer and in TEM. */ + if (EQ (Vminibuffer_completion_table, Qread_file_name_internal)) + { + Lisp_Object substituted; + substituted = Fsubstitute_in_file_name (tem); + if (! EQ (substituted, tem)) + { + tem = substituted; + Ferase_buffer (); + insert_from_string (tem, 0, XSTRING (tem)->size, 0); + } + } buffer_string = XSTRING (tem)->data; completion_string = XSTRING (completion)->data; buffer_length = XSTRING (tem)->size; /* ie ZV - BEGV */ @@ -1187,19 +1345,26 @@ is added, provided that matches some possible completion.") i = ZV - BEGV; /* If completion finds next char not unique, - consider adding a space or a hyphen */ + consider adding a space or a hyphen. */ if (i == XSTRING (completion)->size) { + GCPRO1 (completion); tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")), Vminibuffer_completion_table, Vminibuffer_completion_predicate); + UNGCPRO; + if (XTYPE (tem) == Lisp_String) completion = tem; else { - tem = Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")), - Vminibuffer_completion_table, - Vminibuffer_completion_predicate); + GCPRO1 (completion); + tem = + Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")), + Vminibuffer_completion_table, + Vminibuffer_completion_predicate); + UNGCPRO; + if (XTYPE (tem) == Lisp_String) completion = tem; } @@ -1207,6 +1372,7 @@ is added, provided that matches some possible completion.") /* Now find first word-break in the stuff found by completion. i gets index in string of where to stop completing. */ + completion_string = XSTRING (completion)->data; for (; i < XSTRING (completion)->size; i++) @@ -1226,7 +1392,7 @@ is added, provided that matches some possible completion.") /* Otherwise insert in minibuffer the chars we got */ Ferase_buffer (); - insert_from_string (completion, 0, i); + insert_from_string (completion, 0, i, 1); return Qt; } @@ -1234,7 +1400,10 @@ DEFUN ("display-completion-list", Fdisplay_completion_list, Sdisplay_completion_ 1, 1, 0, "Display the list of completions, COMPLETIONS, using `standard-output'.\n\ Each element may be just a symbol or string\n\ -or may be a list of two strings to be printed as if concatenated.") +or may be a list of two strings to be printed as if concatenated.\n\ +`standard-output' must be a buffer.\n\ +At the end, run the normal hook `completion-setup-hook'.\n\ +It can find the completion buffer in `standard-output'.") (completions) Lisp_Object completions; { @@ -1248,7 +1417,8 @@ or may be a list of two strings to be printed as if concatenated.") set_buffer_internal (XBUFFER (Vstandard_output)); if (NILP (completions)) - write_string ("There are no possible completions of what you have typed.", -1); + write_string ("There are no possible completions of what you have typed.", + -1); else { write_string ("Possible completions are:", -1); @@ -1306,6 +1476,10 @@ or may be a list of two strings to be printed as if concatenated.") if (XTYPE (Vstandard_output) == Lisp_Buffer) set_buffer_internal (old); + + if (!NILP (Vrun_hooks)) + call1 (Vrun_hooks, intern ("completion-setup-hook")); + return Qnil; } @@ -1360,6 +1534,25 @@ DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0, return make_number (minibuf_level); } +DEFUN ("minibuffer-prompt", Fminibuffer_prompt, Sminibuffer_prompt, 0, 0, 0, + "Return the prompt string of the currently-active minibuffer.\n\ +If no minibuffer is active, return nil.") + () +{ + if (!minibuf_prompt) + return Qnil; + return build_string (minibuf_prompt); +} + +DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width, + Sminibuffer_prompt_width, 0, 0, 0, + "Return the display width of the minibuffer prompt.") + () +{ + Lisp_Object width; + XFASTINT (width) = minibuf_prompt_width; + return width; +} init_minibuf_once () { @@ -1374,6 +1567,9 @@ syms_of_minibuf () minibuf_save_vector_size = 5; minibuf_save_vector = (struct minibuf_save_data *) malloc (5 * sizeof (struct minibuf_save_data)); + Qread_file_name_internal = intern ("read-file-name-internal"); + staticpro (&Qread_file_name_internal); + Qminibuffer_completion_table = intern ("minibuffer-completion-table"); staticpro (&Qminibuffer_completion_table); @@ -1383,6 +1579,9 @@ syms_of_minibuf () Qminibuffer_completion_predicate = intern ("minibuffer-completion-predicate"); staticpro (&Qminibuffer_completion_predicate); + staticpro (&last_exact_completion); + last_exact_completion = Qnil; + staticpro (&last_minibuf_string); last_minibuf_string = Qnil; @@ -1392,6 +1591,20 @@ syms_of_minibuf () Qminibuffer_history = intern ("minibuffer-history"); staticpro (&Qminibuffer_history); + Qminibuffer_setup_hook = intern ("minibuffer-setup-hook"); + staticpro (&Qminibuffer_setup_hook); + + Qminibuffer_exit_hook = intern ("minibuffer-exit-hook"); + staticpro (&Qminibuffer_exit_hook); + + DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook, + "Normal hook run just after entry to minibuffer."); + Vminibuffer_setup_hook = Qnil; + + DEFVAR_LISP ("minibuffer-exit-hook", &Vminibuffer_exit_hook, + "Normal hook run just after exit from minibuffer."); + Vminibuffer_exit_hook = Qnil; + DEFVAR_BOOL ("completion-auto-help", &auto_help, "*Non-nil means automatically provide help for invalid completion input."); auto_help = 1; @@ -1444,6 +1657,14 @@ Each minibuffer output is added with\n\ "Current position of redoing in the history list."); Vminibuffer_history_position = Qnil; + DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise, + "*Non-nil means entering the minibuffer raises the minibuffer's frame."); + minibuffer_auto_raise = 0; + + DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list, + "List of regexps that should restrict possible completions."); + Vcompletion_regexp_list = Qnil; + defsubr (&Sread_from_minibuffer); defsubr (&Seval_minibuffer); defsubr (&Sread_minibuffer); @@ -1453,6 +1674,8 @@ Each minibuffer output is added with\n\ defsubr (&Sread_buffer); defsubr (&Sread_no_blanks_input); defsubr (&Sminibuffer_depth); + defsubr (&Sminibuffer_prompt); + defsubr (&Sminibuffer_prompt_width); defsubr (&Stry_completion); defsubr (&Sall_completions);