diff src/minibuf.c @ 85516:6260015b7802

Allow minibuffer default to be a list of default values. With empty input use the first element of this list as returned default. (string_to_object): (read_minibuf_noninteractive): If defalt is cons, set val to its car. (read_minibuf): If defalt is cons, set histstring to its car. (Fread_string): If default_value is cons, set val to its car. (Fread_buffer): If def is cons, use its car. (Fcompleting_read): If defalt is cons, set val to its car.
author Juri Linkov <juri@jurta.org>
date Mon, 22 Oct 2007 00:19:51 +0000
parents f7d19cfed7da
children a1ea2ab31c31
line wrap: on
line diff
--- a/src/minibuf.c	Mon Oct 22 00:17:55 2007 +0000
+++ b/src/minibuf.c	Mon Oct 22 00:19:51 2007 +0000
@@ -257,9 +257,13 @@
 
   GCPRO2 (val, defalt);
 
-  if (STRINGP (val) && SCHARS (val) == 0
-      && STRINGP (defalt))
-    val = defalt;
+  if (STRINGP (val) && SCHARS (val) == 0)
+    {
+      if (STRINGP (defalt))
+	val = defalt;
+      else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
+	val = XCAR (defalt);
+    }
 
   expr_and_pos = Fread_from_string (val, Qnil, Qnil);
   pos = XINT (Fcdr (expr_and_pos));
@@ -337,7 +341,7 @@
 
   /* If Lisp form desired instead of string, parse it. */
   if (expflag)
-    val = string_to_object (val, defalt);
+    val = string_to_object (val, CONSP (defalt) ? XCAR (defalt) : defalt);
 
   return val;
 }
@@ -785,6 +789,8 @@
     histstring = val;
   else if (STRINGP (defalt))
     histstring = defalt;
+  else if (CONSP (defalt) && STRINGP (XCAR (defalt)))
+    histstring = XCAR (defalt);
   else
     histstring = Qnil;
 
@@ -1102,7 +1108,7 @@
 			       Qnil, history, default_value,
 			       inherit_input_method);
   if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (default_value))
-    val = default_value;
+    val = CONSP (default_value) ? XCAR (default_value) : default_value;
   return val;
 }
 
@@ -1225,7 +1231,7 @@
 
 	  args[0] = build_string ("%s (default %s): ");
 	  args[1] = prompt;
-	  args[2] = def;
+	  args[2] = CONSP (def) ? XCAR (def) : def;
 	  prompt = Fformat (3, args);
 	}
 
@@ -1835,7 +1841,7 @@
 		      !NILP (inherit_input_method));
 
   if (STRINGP (val) && SCHARS (val) == 0 && ! NILP (def))
-    val = def;
+    val = CONSP (def) ? XCAR (def) : def;
 
   RETURN_UNGCPRO (unbind_to (count, val));
 }