/* Minibuffer input and completion.
- Copyright (C) 1985, 1986, 93, 94, 95, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997
+ Free Software Foundation, Inc.
This file is part of GNU Emacs.
Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
+/* Function to call to read a buffer name. */
+Lisp_Object Vread_buffer_function;
+
/* Nonzero means completion ignores case. */
int completion_ignore_case;
\f
/* Actual minibuffer invocation. */
-static void read_minibuf_unwind ();
+static Lisp_Object read_minibuf_unwind ();
Lisp_Object get_minibuffer ();
static Lisp_Object read_minibuf ();
current_buffer->keymap = map;
/* Turn on an input method stored in INPUT_METHOD if any. */
- if (STRINGP (input_method) && Ffboundp (Qactivate_input_method))
+ if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
call1 (Qactivate_input_method, input_method);
/* If appropriate, copy enable-multibyte-characters into the minibuffer. */
if (inherit_input_method)
- current_buffer->enable_multibyte_characters = enable_multibyte_characters;
+ current_buffer->enable_multibyte_characters = enable_multibyte;
/* Run our hook, but not if it is empty.
(run-hooks would do nothing if it is empty,
#endif
/* VAL is the string of minibuffer text. */
+
+ if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (defalt))
+ val = defalt;
+
last_minibuf_string = val;
/* Add the value to the appropriate history list unless it is empty. */
/* This function is called on exiting minibuffer, whether normally or not,
and it restores the current window, buffer, etc. */
-static void
+static Lisp_Object
read_minibuf_unwind (data)
Lisp_Object data;
{
windows_or_buffers_changed++;
XSETFASTINT (XWINDOW (window)->last_modified, 0);
XSETFASTINT (XWINDOW (window)->last_overlay_modified, 0);
+
+ return Qnil;
}
\f
Sixth arg DEFAULT-VALUE is the default value. If non-nil, it is used\n\
for history commands, and as the value to return if the user enters\n\
the empty string.\n\
-Seventh arg INHERIT-INPUT-METHOD non-nil means the minibuffer inherits\n\
- the current input method.\n\
+Seventh arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits\n\
+ the current input method and the setting of enable-multibyte-characters.\n\
If the variable `minibuffer-allow-text-properties is non-nil,\n\
then the string which is returned includes whatever text properties\n\
were present in the minibuffer. Otherwise the value has no text properties.")
histvar, histpos, default_value,
minibuffer_allow_text_properties,
!NILP (inherit_input_method));
- if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (default_value))
- val = default_value;
UNGCPRO;
return val;
}
The third arg HISTORY, if non-nil, specifies a history list\n\
and optionally the initial position in the list.\n\
See `read-from-minibuffer' for details of HISTORY argument.\n\
-The forth arg INHERIT-INPUT-METHOD non-nil means the minibuffer inherits\n\
- the current input method.")
+Fourth arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits\n\
+ the current input method and the setting of enable-multibyte-characters.")
(prompt, initial_input, history, default_value, inherit_input_method)
Lisp_Object prompt, initial_input, history, default_value;
Lisp_Object inherit_input_method;
DEFUN ("read-no-blanks-input", Fread_no_blanks_input, Sread_no_blanks_input, 1, 3, 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.\n\
-The third optional arg INHERIT-INPUT-METHOD non-nil means the minibuffer\n\
- inherits the current input method.")
+Third arg INHERIT-INPUT-METHOD, if non-nil, means the minibuffer inherits\n\
+the current input method and the setting of enable-multibyte-characters.")
(prompt, init, inherit_input_method)
Lisp_Object prompt, init, inherit_input_method;
{
(prompt, default_value)
Lisp_Object prompt, default_value;
{
- return Fintern (Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
- Qnil, Qnil, default_value, Qnil),
- Qnil);
+ Lisp_Object name, default_string;
+
+ if (NILP (default_value))
+ default_string = Qnil;
+ else if (SYMBOLP (default_value))
+ default_string = XSYMBOL (default_value)->name;
+ else
+ default_string = default_value;
+
+ name = Fcompleting_read (prompt, Vobarray, Qcommandp, Qt,
+ Qnil, Qnil, default_string, Qnil);
+ if (NILP (name))
+ return name;
+ return Fintern (name, Qnil);
}
#ifdef NOTDEF
(prompt, default_value)
Lisp_Object prompt, default_value;
{
- return Fintern (Fcompleting_read (prompt, Vobarray,
- Quser_variable_p, Qt,
- Qnil, Qnil, default_value, Qnil),
- Qnil);
+ Lisp_Object name, default_string;
+
+ if (NILP (default_value))
+ default_string = Qnil;
+ else if (SYMBOLP (default_value))
+ default_string = XSYMBOL (default_value)->name;
+ else
+ default_string = default_value;
+
+ name = Fcompleting_read (prompt, Vobarray,
+ Quser_variable_p, Qt,
+ Qnil, Qnil, default_string, Qnil);
+ if (NILP (name))
+ return name;
+ return Fintern (name, Qnil);
}
DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 3, 0,
Lisp_Object prompt, def, require_match;
{
Lisp_Object tem;
- Lisp_Object args[3];
-
+ Lisp_Object args[4];
+
if (BUFFERP (def))
def = XBUFFER (def)->name;
- if (!NILP (def))
+
+ if (NILP (Vread_buffer_function))
+ {
+ if (!NILP (def))
+ {
+ args[0] = build_string ("%s(default %s) ");
+ args[1] = prompt;
+ args[2] = def;
+ prompt = Fformat (3, args);
+ }
+
+ return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
+ require_match, Qnil, Qnil, def, Qnil);
+ }
+ else
{
- args[0] = build_string ("%s(default %s) ");
+ args[0] = Vread_buffer_function;
args[1] = prompt;
args[2] = def;
- prompt = Fformat (3, args);
+ args[3] = require_match;
+ return Ffuncall(4, args);
}
- return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
- require_match, Qnil, Qnil, def, Qnil);
}
\f
DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
DEF, if non-nil, is the default value.\n\
\n\
If INHERIT-INPUT-METHOD is non-nil, the minibuffer inherits\n\
- the current input method.\n\
+ the current input method and the setting of enable-multibyte-characters.\n\
\n\
Completion ignores case if the ambient value of\n\
`completion-ignore-case' is non-nil."
init, prompt, make_number (pos), 0,
histvar, histpos, def, 0,
!NILP (inherit_input_method));
- if (STRINGP (val) && XSTRING (val)->size == 0 && ! NILP (def))
- val = def;
RETURN_UNGCPRO (unbind_to (count, val));
}
\f
that has no possible completions, and other quick, unobtrusive
messages. */
+void
temp_echo_area_glyphs (m)
char *m;
{
return Qnil;
}
\f
+void
init_minibuf_once ()
{
Vminibuffer_list = Qnil;
staticpro (&Vminibuffer_list);
}
+void
syms_of_minibuf ()
{
minibuf_level = 0;
Qactivate_input_method = intern ("activate-input-method");
staticpro (&Qactivate_input_method);
+ DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function,
+ "If this is non-nil, `read-buffer' does its work by calling this function.");
+ Vread_buffer_function = Qnil;
+
DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook,
"Normal hook run just after entry to minibuffer.");
Vminibuffer_setup_hook = Qnil;
DEFVAR_BOOL ("enable-recursive-minibuffers", &enable_recursive_minibuffers,
"*Non-nil means to allow minibuffer commands while in the minibuffer.\n\
-More precisely, this variable makes a difference when the minibuffer window\n\
-is the selected window. If you are in some other window, minibuffer commands\n\
-are allowed even if a minibuffer is active.");
+This variable makes a difference whenever the minibuffer window is active.");
enable_recursive_minibuffers = 0;
DEFVAR_LISP ("minibuffer-completion-table", &Vminibuffer_completion_table,
defsubr (&Sminibuffer_message);
}
+void
keys_of_minibuf ()
{
initial_define_key (Vminibuffer_local_map, Ctl ('g'),