# HG changeset patch # User Romain Francoise # Date 1128105010 0 # Node ID 028c8f536edba2c34bd5740265f3c1d723217d13 # Parent ee26002f84d8f61dcd7ac92398f24740cac3f89e (High-Level Completion): Explain that the prompt given to `read-buffer' should end with a colon and a space. Update usage examples. diff -r ee26002f84d8 -r 028c8f536edb lispref/ChangeLog --- 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 + + * 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 * display.texi (Displaying Messages): Rename argument name diff -r ee26002f84d8 -r 028c8f536edb lispref/minibuf.texi --- 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 diff -r ee26002f84d8 -r 028c8f536edb src/ChangeLog --- 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 + + * minibuf.c (Fread_buffer): Follow convention for reading from the + minibuffer with a default value. Doc fix. + 2005-09-29 Juri Linkov * editfns.c (Fmessage, Fmessage_box, Fmessage_or_box): diff -r ee26002f84d8 -r 028c8f536edb src/minibuf.c --- 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);