]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fcall_interactively): For interactive code letters
authorJuri Linkov <juri@jurta.org>
Sun, 16 Mar 2008 17:46:19 +0000 (17:46 +0000)
committerJuri Linkov <juri@jurta.org>
Sun, 16 Mar 2008 17:46:19 +0000 (17:46 +0000)
'b' and 'B' put the buffer list into the list of default "future"
values of the minibuffer.

src/ChangeLog
src/callint.c

index 57e5d8311892bf7538711b1107f8c082be6d07e4..a38335d0dc4c2e0fdffce74f6ba3bade04a8908f 100644 (file)
@@ -1,3 +1,9 @@
+2008-03-16  Juri Linkov  <juri@jurta.org>
+
+       * callint.c (Fcall_interactively): For interactive code letters
+       'b' and 'B' put the buffer list into the list of default "future"
+       values of the minibuffer.
+
 2008-03-16  Andreas Schwab  <schwab@suse.de>
 
        * keyboard.c (read_key_sequence): Fix downcasing of letters with
index 8a9f8322d9b889828581598c773c27148f2bd5a2..76d234e86780e7a01149566380657bb72f994ebc 100644 (file)
@@ -513,16 +513,35 @@ invoke it.  If KEYS is omitted or nil, the return value of
          break;
 
        case 'b':               /* Name of existing buffer */
-         args[i] = Fcurrent_buffer ();
-         if (EQ (selected_window, minibuf_window))
-           args[i] = Fother_buffer (args[i], Qnil, Qnil);
-         args[i] = Fread_buffer (callint_message, args[i], Qt);
-         break;
-
        case 'B':               /* Name of buffer, possibly nonexistent */
-         args[i] = Fread_buffer (callint_message,
-                                 Fother_buffer (Fcurrent_buffer (), Qnil, Qnil),
-                                 Qnil);
+         {
+           Lisp_Object tema, temb, temc;
+           int skip_current = 1;
+
+           if (*tem == 'b' && !EQ (selected_window, minibuf_window))
+             skip_current = 0;
+
+           /* Get a list of buffer names (except the current buffer and
+              internal buffers), and use this list for default values.  */
+           tema = Qnil;
+           temc = Fcurrent_buffer ();
+           teml = Fbuffer_list (selected_frame);
+           for (; CONSP (teml); teml = XCDR (teml))
+             {
+               temb = XCAR (teml);
+               if (skip_current && EQ (temb, temc))
+                 continue;
+               if (NILP (temb))
+                 continue;
+               if (NILP (XBUFFER (temb)->name))
+                 continue;
+               if (SREF (XBUFFER (temb)->name, 0) == ' ')
+                 continue;
+               tema = Fcons (XBUFFER (temb)->name, tema);
+             }
+           args[i] = Fread_buffer (callint_message, Fnreverse (tema),
+                                   *tem == 'b' ? Qt : Qnil);
+         }
          break;
 
         case 'c':              /* Character */