emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: position on changing defaults?


From: Juri Linkov
Subject: Re: position on changing defaults?
Date: Tue, 11 Mar 2008 00:29:18 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (x86_64-unknown-linux-gnu)

>     1. After typing C-x b: each M-n (or down-arrow) key will put the
>     next buffer name to the minibuffer, starting with the most recent
>     buffer and going in the order buffers are stored in the buffer list.
>
> That sounds nice -- and hurts nothing.

Below is a patch this implements the same to the small letter "b"
in the interactive specification.  It keeps the original logic
of processing of "B" and "b", and doesn't skip the current buffer
in the buffer list for "b" if not in the minibuffer.

Index: src/callint.c
===================================================================
RCS file: /sources/emacs/emacs/src/callint.c,v
retrieving revision 1.161
diff -c -r1.161 callint.c
*** src/callint.c       19 Feb 2008 04:03:01 -0000      1.161
--- src/callint.c       10 Mar 2008 22:27:46 -0000
***************
*** 513,528 ****
          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);
          break;
  
          case 'c':             /* Character */
--- 517,551 ----
          break;
  
        case 'b':               /* Name of existing buffer */
        case 'B':               /* Name of buffer, possibly nonexistent */
!         {
!           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 */

-- 
Juri Linkov
http://www.jurta.org/emacs/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]