diff src/minibuf.c @ 26059:2a7f35e0072b

(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.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 17 Oct 1999 12:55:49 +0000
parents f540e1508f05
children d39ec0a27081
line wrap: on
line diff
--- a/src/minibuf.c	Sun Oct 17 12:55:00 1999 +0000
+++ b/src/minibuf.c	Sun Oct 17 12:55:49 1999 +0000
@@ -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 @@
 
 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 @@
 				  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 @@
 
   Fmake_local_variable (Qprint_escape_newlines);
   print_escape_newlines = 1;
-  XSETFASTINT (current_buffer->prompt_end_charpos, 0);
 
   /* Erase the buffer.  */
   {
@@ -401,7 +398,6 @@
 
   /* 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),
@@ -409,6 +405,8 @@
       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 @@
 
   /* 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 @@
   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 @@
   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 @@
     }
 
   /* 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 @@
   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 @@
   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 @@
   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 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 @@
     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 @@
 	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 @@
   }
 #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 @@
   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 @@
 	{
 	  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 @@
 
   /* 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 @@
 
   /* 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 @@
   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 @@
   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 @@
   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);