/* Minibuffer input and completion.
- Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998
+ Copyright (C) 1985, 1986, 1993, 1994, 1995, 1996, 1997, 1998, 1999
Free Software Foundation, Inc.
This file is part of GNU Emacs.
extern Lisp_Object Qmouse_face;
+extern Lisp_Object Qfield;
\f
/* Put minibuf on currently selected frame's minibuffer.
We do this whenever the user starts a new minibuffer
Fcons (Vminibuffer_history_position,
Fcons (Vminibuffer_history_variable,
minibuf_save_list))))));
- minibuf_save_list
- = Fcons (current_buffer->prompt_end_charpos,
- minibuf_save_list);
record_unwind_protect (read_minibuf_unwind, Qnil);
minibuf_level++;
Fmake_local_variable (Qprint_escape_newlines);
print_escape_newlines = 1;
- XSETFASTINT (current_buffer->prompt_end_charpos, 0);
/* Erase the buffer. */
{
/* Insert the prompt, record where it ends. */
Finsert (1, &minibuf_prompt);
- XSETFASTINT (current_buffer->prompt_end_charpos, PT);
if (PT > BEG)
{
Fput_text_property (make_number (BEG), make_number (PT),
Qfront_sticky, Qt, Qnil);
Fput_text_property (make_number (BEG), make_number (PT),
Qrear_nonsticky, Qt, Qnil);
+ Fput_text_property (make_number (BEG), make_number (PT),
+ Qfield, Qt, Qnil);
Fput_text_property (make_number (BEG), make_number (PT),
Qread_only, Qt, Qnil);
}
/* Make minibuffer contents into a string. */
Fset_buffer (minibuffer);
- val = make_buffer_string (current_buffer->prompt_end_charpos,
- Z, allow_props);
+ val = Ffield_string (make_number (ZV), allow_props ? Qt : Qnil);
/* VAL is the string of minibuffer text. */
Fset_buffer (XWINDOW (window)->buffer);
/* Restore prompt, etc, from outer minibuffer level. */
- current_buffer->prompt_end_charpos = Fcar (minibuf_save_list);
- minibuf_save_list = Fcdr (minibuf_save_list);
-
minibuf_prompt = Fcar (minibuf_save_list);
minibuf_save_list = Fcdr (minibuf_save_list);
minibuf_prompt_width = XFASTINT (Fcar (minibuf_save_list));
Lisp_Object last;
struct gcpro gcpro1, gcpro2;
- completion = Ftry_completion (Fbuffer_string (), Vminibuffer_completion_table,
+ completion = Ftry_completion (Ffield_string (ZV),
+ Vminibuffer_completion_table,
Vminibuffer_completion_predicate);
last = last_exact_completion;
last_exact_completion = Qnil;
}
/* compiler bug */
- tem = Fstring_equal (completion, Fbuffer_string());
+ tem = Fstring_equal (completion, Ffield_string(ZV));
completedp = NILP (tem);
if (completedp)
{
- Ferase_buffer (); /* Some completion happened */
+ Ferase_field (make_number (ZV)); /* Some completion happened */
Finsert (1, &completion);
}
/* It did find a match. Do we match some possibility exactly now? */
- tem = test_completion (Fbuffer_string ());
+ tem = test_completion (Ffield_string(ZV));
if (NILP (tem))
{
/* not an exact match */
last_exact_completion = completion;
if (!NILP (last))
{
- tem = Fbuffer_string ();
+ tem = Ffield_string (ZV);
if (!NILP (Fequal (tem, last)))
Fminibuffer_completion_help ();
}
Lisp_Object val;
/* Allow user to specify null string */
- if (XFASTINT (current_buffer->prompt_end_charpos) == ZV)
+ if (Ffield_beginning (ZV, Qnil) == ZV)
goto exit;
- if (!NILP (test_completion (Fbuffer_string ())))
+ if (!NILP (test_completion (Ffield_string (ZV))))
goto exit;
/* Call do_completion, but ignore errors. */
register int i, i_byte;
register unsigned char *completion_string;
struct gcpro gcpro1, gcpro2;
+ int prompt_end_charpos;
/* 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 (),
+ completion = Ftry_completion (Ffield_string (ZV),
Vminibuffer_completion_table,
Vminibuffer_completion_predicate);
if (NILP (completion))
return Qnil;
#if 0 /* How the below code used to look, for reference. */
- tem = Fbuffer_string ();
+ tem = Ffield_string (ZV);
b = XSTRING (tem)->data;
i = ZV - 1 - XSTRING (completion)->size;
p = XSTRING (completion)->data;
int buffer_nchars, completion_nchars;
CHECK_STRING (completion, 0);
- tem = Fbuffer_string ();
+ tem = Ffield_string (ZV);
GCPRO2 (completion, tem);
/* If reading a file name,
expand any $ENVVAR refs in the buffer and in TEM. */
if (! EQ (substituted, tem))
{
tem = substituted;
- Ferase_buffer ();
+ Ferase_field (make_number (ZV));
insert_from_string (tem, 0, 0, XSTRING (tem)->size,
STRING_BYTES (XSTRING (tem)), 0);
}
}
#endif /* Rewritten code */
+ prompt_end_charpos = Ffield_beginning (make_number (ZV), Qnil);
+
{
- int prompt_end_charpos, prompt_end_bytepos;
- prompt_end_charpos = XFASTINT (current_buffer->prompt_end_charpos);
+ int prompt_end_bytepos;
prompt_end_bytepos = CHAR_TO_BYTE (prompt_end_charpos);
i = ZV - prompt_end_charpos;
i_byte = ZV_BYTE - prompt_end_bytepos;
if (i == XSTRING (completion)->size)
{
GCPRO1 (completion);
- tem = Ftry_completion (concat2 (Fbuffer_string (), build_string (" ")),
+ tem = Ftry_completion (concat2 (Ffield_string (ZV), build_string (" ")),
Vminibuffer_completion_table,
Vminibuffer_completion_predicate);
UNGCPRO;
{
GCPRO1 (completion);
tem =
- Ftry_completion (concat2 (Fbuffer_string (), build_string ("-")),
+ Ftry_completion (concat2 (Ffield_string (ZV), build_string ("-")),
Vminibuffer_completion_table,
Vminibuffer_completion_predicate);
UNGCPRO;
/* If got no characters, print help for user. */
- if (i == ZV - XFASTINT (current_buffer->prompt_end_charpos))
+ if (i == ZV - prompt_end_charpos)
{
if (auto_help)
Fminibuffer_completion_help ();
/* Otherwise insert in minibuffer the chars we got */
- Ferase_buffer ();
+ Ferase_field (make_number (ZV));
insert_from_string (completion, 0, 0, i, i_byte, 1);
return Qt;
}
Lisp_Object completions;
message ("Making completion list...");
- completions = Fall_completions (Fbuffer_string (),
+ completions = Fall_completions (Ffield_string (ZV),
Vminibuffer_completion_table,
Vminibuffer_completion_predicate,
Qt);
return Fcopy_sequence (minibuf_prompt);
}
-DEFUN ("minibuffer-prompt-width", Fminibuffer_prompt_width,
- Sminibuffer_prompt_width, 0, 0, 0,
- "Return the display width of the minibuffer prompt.")
- ()
-{
- return make_number (minibuf_prompt_width);
-}
-
-
-DEFUN ("minibuffer-prompt-end", Fminibuffer_prompt_end,
- Sminibuffer_prompt_end, 0, 0, 0,
- "Return the end buffer position of the mini-buffer prompt.\n\
-Value is 0 if current buffer is not a mini-buffer.")
- ()
-{
- return (NILP (current_buffer->prompt_end_charpos)
- ? make_number (0)
- : make_number (current_buffer->prompt_end_charpos));
-}
-
-
\f
/* Temporarily display the string M at the end of the current
minibuffer contents. This is used to display things like
defsubr (&Sread_no_blanks_input);
defsubr (&Sminibuffer_depth);
defsubr (&Sminibuffer_prompt);
- defsubr (&Sminibuffer_prompt_width);
- defsubr (&Sminibuffer_prompt_end);
defsubr (&Stry_completion);
defsubr (&Sall_completions);