* minibuf.c (temp_echo_area_glyphs): Change reference to
authorJim Blandy <jimb@redhat.com>
Mon, 16 Nov 1992 00:46:19 +0000 (00:46 +0000)
committerJim Blandy <jimb@redhat.com>
Mon, 16 Nov 1992 00:46:19 +0000 (00:46 +0000)
unread_command_char to unread_command_event.

* minibuf.c (read_minibuf): If get_minibuffer gives the
new minibuffer a nil default directory, find another buffer with a
better default directory and use that one's instead.

src/minibuf.c

index 62de9d9..c362556 100644 (file)
@@ -161,7 +161,35 @@ read_minibuf (map, initial, prompt, backup_n, expflag, histvar, histpos)
 
   val = current_buffer->directory;
   Fset_buffer (get_minibuffer (minibuf_level));
-  current_buffer->directory = val;
+
+  /* The current buffer's default directory is usually the right thing
+     for our minibuffer here.  However, if you're typing a command at
+     a minibuffer-only frame when minibuf_level is zero, then buf IS
+     the current_buffer, so reset_buffer leaves buf's default
+     directory unchanged.  This is a bummer when you've just started
+     up Emacs and buf's default directory is Qnil.  Here's a hack; can
+     you think of something better to do?  Find another buffer with a
+     better directory, and use that one instead.  */
+  if (XTYPE (val) == Lisp_String)
+    current_buffer->directory = val;
+  else
+    {
+      Lisp_Object buf_list;
+
+      for (buf_list = Vbuffer_alist;
+          CONSP (buf_list);
+          buf_list = XCONS (buf_list)->cdr)
+       {
+         Lisp_Object other_buf = XCONS (XCONS (buf_list)->car)->cdr;
+
+         if (XTYPE (XBUFFER (other_buf)->directory) == Lisp_String)
+           {
+             current_buffer->directory = XBUFFER (other_buf)->directory;
+             break;
+           }
+       }
+    }
+
 #ifdef MULTI_FRAME
   Fredirect_frame_focus (Fselected_frame (), mini_frame);
 #endif
@@ -265,6 +293,7 @@ get_minibuffer (depth)
     }
   else
     reset_buffer (XBUFFER (buf));
+
   return buf;
 }
 
@@ -901,7 +930,7 @@ temp_echo_area_glyphs (m)
   if (!NILP (Vquit_flag))
     {
       Vquit_flag = Qnil;
-      XFASTINT (unread_command_char) = Ctl ('g');
+      XFASTINT (unread_command_event) = Ctl ('g');
     }
   Vinhibit_quit = oinhibit;
 }