]> git.eshelyaron.com Git - emacs.git/commitdiff
(Vread_buffer_function): New var.
authorKarl Heuer <kwzh@gnu.org>
Fri, 19 Dec 1997 14:54:55 +0000 (14:54 +0000)
committerKarl Heuer <kwzh@gnu.org>
Fri, 19 Dec 1997 14:54:55 +0000 (14:54 +0000)
(syms_of_minibuf): Set up Lisp var.
(Fread_buffer): Use Vread_buffer_function.

src/minibuf.c

index b8c9f503af3ba3c476e266e797d49567845e8a2c..2465808211deaed1ad04a9882da72baf9ce5eeb2 100644 (file)
@@ -86,6 +86,9 @@ Lisp_Object Qread_file_name_internal;
 Lisp_Object Qminibuffer_setup_hook, Vminibuffer_setup_hook;
 Lisp_Object Qminibuffer_exit_hook, Vminibuffer_exit_hook;
 
+/* Function to call to read a buffer name.  */
+Lisp_Object Vread_buffer_function; 
+
 /* Nonzero means completion ignores case.  */
 
 int completion_ignore_case;
@@ -792,19 +795,32 @@ If optional third arg REQUIRE-MATCH is non-nil, only existing buffer names are a
      Lisp_Object prompt, def, require_match;
 {
   Lisp_Object tem;
-  Lisp_Object args[3];
-
+  Lisp_Object args[4];
+  
   if (BUFFERP (def))
     def = XBUFFER (def)->name;
-  if (!NILP (def))
+
+  if (NILP (Vread_buffer_function))
+    {
+      if (!NILP (def))
+       {
+         args[0] = build_string ("%s(default %s) ");
+         args[1] = prompt;
+         args[2] = def;
+         prompt = Fformat (3, args);
+       }
+
+      return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
+                              require_match, Qnil, Qnil, def, Qnil);
+    }
+  else
     {
-      args[0] = build_string ("%s(default %s) ");
+      args[0] = Vread_buffer_function;
       args[1] = prompt;
       args[2] = def;
-      prompt = Fformat (3, args);
+      args[3] = require_match;
+      return Ffuncall(4, args);
     }
-  return Fcompleting_read (prompt, Vbuffer_alist, Qnil,
-                          require_match, Qnil, Qnil, def, Qnil);
 }
 \f
 DEFUN ("try-completion", Ftry_completion, Stry_completion, 2, 3, 0,
@@ -1982,6 +1998,10 @@ syms_of_minibuf ()
   Qactivate_input_method = intern ("activate-input-method");
   staticpro (&Qactivate_input_method);
 
+  DEFVAR_LISP ("read-buffer-function", &Vread_buffer_function, 
+    "If this is non-nil, `read-buffer' does its work by calling this function.");
+  Vread_buffer_function = Qnil;
+
   DEFVAR_LISP ("minibuffer-setup-hook", &Vminibuffer_setup_hook, 
     "Normal hook run just after entry to minibuffer.");
   Vminibuffer_setup_hook = Qnil;