diff options
author | Jim Blandy <jimb@redhat.com> | 1992-11-16 00:46:19 +0000 |
---|---|---|
committer | Jim Blandy <jimb@redhat.com> | 1992-11-16 00:46:19 +0000 |
commit | 64a3a3c0b4ff590ca41431dd4287d234f4fd6349 (patch) | |
tree | 3aa1afd099042242165a0f4934f2496237af464c /src | |
parent | 2705099422b12fb373afdc6781a28b9aef4ba823 (diff) | |
download | emacs-64a3a3c0b4ff590ca41431dd4287d234f4fd6349.tar.gz |
* minibuf.c (temp_echo_area_glyphs): Change reference to
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/minibuf.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/minibuf.c b/src/minibuf.c index 62de9d9b15a..c3625565000 100644 --- a/src/minibuf.c +++ b/src/minibuf.c @@ -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; } |