changeset 65758:028c8f536edb

(High-Level Completion): Explain that the prompt given to `read-buffer' should end with a colon and a space. Update usage examples.
author Romain Francoise <romain@orebokech.com>
date Fri, 30 Sep 2005 18:30:10 +0000
parents ee26002f84d8
children 82fe7575201a
files lispref/ChangeLog lispref/minibuf.texi src/ChangeLog src/minibuf.c
diffstat 4 files changed, 42 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/lispref/ChangeLog	Fri Sep 30 18:29:18 2005 +0000
+++ b/lispref/ChangeLog	Fri Sep 30 18:30:10 2005 +0000
@@ -1,3 +1,9 @@
+2005-09-30  Romain Francoise  <romain@orebokech.com>
+
+	* minibuf.texi (High-Level Completion): Explain that the prompt
+	given to `read-buffer' should end with a colon and a space.
+	Update usage examples.
+
 2005-09-29  Juri Linkov  <juri@jurta.org>
 
 	* display.texi (Displaying Messages): Rename argument name
--- a/lispref/minibuf.texi	Fri Sep 30 18:29:18 2005 +0000
+++ b/lispref/minibuf.texi	Fri Sep 30 18:30:10 2005 +0000
@@ -1044,6 +1044,11 @@
 it should be a string or a buffer.  It is mentioned in the prompt, but
 is not inserted in the minibuffer as initial input.
 
+The argument @var{prompt} should be a string ending with a colon and a
+space.  If @var{default} is non-@code{nil}, the function inserts it in
+@var{prompt} before the colon to follow the convention for reading from
+the minibuffer with a default value (@pxref{Programming Tips}).
+
 If @var{existing} is non-@code{nil}, then the name specified must be
 that of an existing buffer.  The usual commands to exit the minibuffer
 do not exit if the text is not valid, and @key{RET} does completion to
@@ -1058,7 +1063,7 @@
 @samp{minibuffer.texi}, so that name is the value.
 
 @example
-(read-buffer "Buffer name? " "foo" t)
+(read-buffer "Buffer name: " "foo" t)
 @group
 ;; @r{After evaluation of the preceding expression,}
 ;;   @r{the following prompt appears,}
@@ -1067,7 +1072,7 @@
 
 @group
 ---------- Buffer: Minibuffer ----------
-Buffer name? (default foo) @point{}
+Buffer name (default foo): @point{}
 ---------- Buffer: Minibuffer ----------
 @end group
 
--- a/src/ChangeLog	Fri Sep 30 18:29:18 2005 +0000
+++ b/src/ChangeLog	Fri Sep 30 18:30:10 2005 +0000
@@ -1,3 +1,8 @@
+2005-09-30  Romain Francoise  <romain@orebokech.com>
+
+	* minibuf.c (Fread_buffer): Follow convention for reading from the
+	minibuffer with a default value.  Doc fix.
+
 2005-09-29  Juri Linkov  <juri@jurta.org>
 
 	* editfns.c (Fmessage, Fmessage_box, Fmessage_or_box):
--- a/src/minibuf.c	Fri Sep 30 18:29:18 2005 +0000
+++ b/src/minibuf.c	Fri Sep 30 18:30:10 2005 +0000
@@ -1132,11 +1132,14 @@
 Prompt with PROMPT.
 Optional second arg DEF is value to return if user enters an empty line.
 If optional third arg REQUIRE-MATCH is non-nil,
- only existing buffer names are allowed.  */)
+ only existing buffer names are allowed.
+The argument PROMPT should be a string ending with a colon and a space.  */)
      (prompt, def, require_match)
      Lisp_Object prompt, def, require_match;
 {
   Lisp_Object args[4];
+  unsigned char *s;
+  int len;
 
   if (BUFFERP (def))
     def = XBUFFER (def)->name;
@@ -1145,7 +1148,26 @@
     {
       if (!NILP (def))
 	{
-	  args[0] = build_string ("%s(default %s) ");
+	  /* A default value was provided: we must change PROMPT,
+	     editing the default value in before the colon.  To achieve
+	     this, we replace PROMPT with a substring that doesn't
+	     contain the terminal space and colon (if present).  They
+	     are then added back using Fformat.  */
+
+	  if (STRINGP (prompt))
+	    {
+	      s = SDATA (prompt);
+	      len = strlen (s);
+	      if (len >= 2 && s[len - 2] == ':' && s[len - 1] == ' ')
+		len = len - 2;
+	      else if (len >= 1 && (s[len - 1] == ':' || s[len - 1] == ' '))
+		len--;
+
+	      prompt = make_specified_string (s, -1, len,
+					      STRING_MULTIBYTE (prompt));
+	    }
+
+	  args[0] = build_string ("%s (default %s): ");
 	  args[1] = prompt;
 	  args[2] = def;
 	  prompt = Fformat (3, args);