1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-28 07:45:00 +00:00

(Fminibuffer_complete_and_exit): Supply value for new

ESCAPE_FROM_EDGE parameter to Ffield_beginning.
(Fminibuffer_complete_word): Use
Ffield_beginning to find the prompt end.
(Fminibuffer_complete_and_exit): Test for an empty
input string by seeing where the field begins, instead of
looking at text-properties.
(read_minibuf): Don't save minibuffer prompt length on
minibuf_save_list.
Don't initialize minibuffer prompt length.
Wrap prompt text-properties around the entire prompt.
Add 'prompt text-property to prompt.
Get final value with Ffield_string instead of make_buffer_string.
(read_minibuf_unwind): Don't restore minibuffer prompt length from
minibuf_save_list.
(do_completion): Get minibuffer input with Ffield_string
instead of Fbuffer_string.
Erase minibuffer input with Ferase_field instead of erase_buffer.
(Fminibuffer_complete_and_exit): Likewise.
Test whether buffer is empty by looking for the 'prompt text
property at the end.
Set prompt length by looking for the end of the prompt text property,
and save prompt length for later use (since there is no longer a
buffer variable to get it from).
(Fminibuffer_prompt_width, Fminibuffer_prompt_end): Functions removed.
(syms_of_minibuf): Remove initializations of
Sminibuffer_prompt_width and Sminibuffer_prompt_end.
This commit is contained in:
Gerd Moellmann 1999-10-17 12:55:49 +00:00
parent 0daf6e8d79
commit 8e9968c634

View File

@ -1,5 +1,5 @@
/* 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.
@ -131,6 +131,7 @@ Lisp_Object Qcurrent_input_method, Qactivate_input_method;
extern Lisp_Object Qmouse_face;
extern Lisp_Object Qfield;
/* Put minibuf on currently selected frame's minibuffer.
We do this whenever the user starts a new minibuffer
@ -318,9 +319,6 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
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++;
@ -385,7 +383,6 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
Fmake_local_variable (Qprint_escape_newlines);
print_escape_newlines = 1;
XSETFASTINT (current_buffer->prompt_end_charpos, 0);
/* Erase the buffer. */
{
@ -401,13 +398,14 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
/* 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);
}
@ -457,8 +455,7 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
/* 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. */
@ -610,9 +607,6 @@ read_minibuf_unwind (data)
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));
@ -1484,7 +1478,8 @@ do_completion ()
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;
@ -1506,16 +1501,16 @@ do_completion ()
}
/* 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 */
@ -1539,7 +1534,7 @@ do_completion ()
last_exact_completion = completion;
if (!NILP (last))
{
tem = Fbuffer_string ();
tem = Ffield_string (ZV);
if (!NILP (Fequal (tem, last)))
Fminibuffer_completion_help ();
}
@ -1660,10 +1655,10 @@ a repetition of this command will exit.")
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. */
@ -1706,11 +1701,12 @@ Return nil if there is no valid completion, else t.")
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))
@ -1723,7 +1719,7 @@ Return nil if there is no valid completion, else t.")
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;
@ -1742,7 +1738,7 @@ Return nil if there is no valid completion, else t.")
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. */
@ -1753,7 +1749,7 @@ Return nil if there is no valid completion, else t.")
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);
}
@ -1795,9 +1791,10 @@ Return nil if there is no valid completion, else t.")
}
#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;
@ -1808,7 +1805,7 @@ Return nil if there is no valid completion, else t.")
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;
@ -1819,7 +1816,7 @@ Return nil if there is no valid completion, else t.")
{
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;
@ -1851,7 +1848,7 @@ Return nil if there is no valid completion, else t.")
/* 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 ();
@ -1860,7 +1857,7 @@ Return nil if there is no valid completion, else t.")
/* 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;
}
@ -2054,7 +2051,7 @@ DEFUN ("minibuffer-completion-help", Fminibuffer_completion_help, Sminibuffer_co
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);
@ -2106,27 +2103,6 @@ If no minibuffer is active, return nil.")
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));
}
/* Temporarily display the string M at the end of the current
minibuffer contents. This is used to display things like
@ -2342,8 +2318,6 @@ with completion; they always discard text properties.");
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);