unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* This code won't match buffer names.  Why not?
@ 2009-08-22  0:31 Chris Seberino
  2009-08-22  1:09 ` Benjamin Andresen
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Chris Seberino @ 2009-08-22  0:31 UTC (permalink / raw)
  To: help-gnu-emacs

When I cycle through buffers, I'd like to skip *scratch*, *Messages*
and *Whitespace Errors* buffers.

I wrote following code to skip one more buffer if I'm sitting in
either of those 3.

However, it never matches those buffers.  Why not?

(BTW, the (end-kbd-macro) is just a dummy function since "if" needs an
"else" command.
Is there a better dummy command I can add there?)


; Sets F10 to execute a function that moves to another buffer.
(global-set-key [f10] (lambda () (interactive)
                                 (next-buffer)
                                 (if (equal (current-buffer)
"*scratch*")
                                     (next-buffer)
                                     (end-kbd-macro))
                                 (if (equal (current-buffer)
"*Messages*")
                                     (next-buffer)
                                     (end-kbd-macro))
                                 (if (equal (current-buffer)
                                            "*Whitespace Errors*")
                                     (next-buffer)
                                     (end-kbd-macro))))


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-22  0:31 This code won't match buffer names. Why not? Chris Seberino
@ 2009-08-22  1:09 ` Benjamin Andresen
  2009-08-22  1:12   ` Benjamin Andresen
  2009-08-29 13:06   ` David Kastrup
  2009-08-22  2:50 ` Xah Lee
  2009-08-22  7:27 ` Ivan Kanis
  2 siblings, 2 replies; 8+ messages in thread
From: Benjamin Andresen @ 2009-08-22  1:09 UTC (permalink / raw)
  To: help-gnu-emacs

Chris Seberino <cseberino@gmail.com> writes:

> When I cycle through buffers, I'd like to skip *scratch*, *Messages*
> and *Whitespace Errors* buffers.
>
> I wrote following code to skip one more buffer if I'm sitting in
> either of those 3.
>
> However, it never matches those buffers.  Why not?

(current-buffer) returns an buffer and not the buffer-name.
You can check that with M-: (current-buffer)

Use (buffer-name (current-buffer)) and string-match. Or see below.

> (BTW, the (end-kbd-macro) is just a dummy function since "if" needs an
> "else" command.
> Is there a better dummy command I can add there?)

`if' also need an else part. Check C-h f if

> ; Sets F10 to execute a function that moves to another buffer.
> (global-set-key [f10] (lambda () (interactive)
>                                  (next-buffer)
>                                  (if (equal (current-buffer)
> "*scratch*")
>                                      (next-buffer)
>                                      (end-kbd-macro))
>                                  (if (equal (current-buffer)
> "*Messages*")
>                                      (next-buffer)
>                                      (end-kbd-macro))
>                                  (if (equal (current-buffer)
>                                             "*Whitespace Errors*")
>                                      (next-buffer)
>                                      (end-kbd-macro))))

The rewritten code would be better written like this:

(global-set-key (kbd "<f10>")
                '(lambda ()
                  (interactive)
                  (next-buffer)
                  (while (member (buffer-name (current-buffer))
                                 '("*scratch*" "*Messages*" "*Whitespace Errors*"))
                    (next-buffer))))

HTH,
benny


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-22  1:09 ` Benjamin Andresen
@ 2009-08-22  1:12   ` Benjamin Andresen
  2009-08-29 13:06   ` David Kastrup
  1 sibling, 0 replies; 8+ messages in thread
From: Benjamin Andresen @ 2009-08-22  1:12 UTC (permalink / raw)
  To: help-gnu-emacs

Benjamin Andresen <benny@in-ulm.de> writes:

> `if' also need an else part. Check C-h f if
           ^ doesn't


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names. Why not?
  2009-08-22  0:31 This code won't match buffer names. Why not? Chris Seberino
  2009-08-22  1:09 ` Benjamin Andresen
@ 2009-08-22  2:50 ` Xah Lee
  2009-08-22  7:27 ` Ivan Kanis
  2 siblings, 0 replies; 8+ messages in thread
From: Xah Lee @ 2009-08-22  2:50 UTC (permalink / raw)
  To: help-gnu-emacs

On Aug 21, 5:31 pm, Chris Seberino <cseber...@gmail.com> wrote:
> When I cycle through buffers, I'd like to skip *scratch*, *Messages*
> and *Whitespace Errors* buffers.
>
> I wrote following code to skip one more buffer if I'm sitting in
> either of those 3.
>
> However, it never matches those buffers.  Why not?
>
> (BTW, the (end-kbd-macro) is just a dummy function since "if" needs an
> "else" command.
> Is there a better dummy command I can add there?)
>
> ; Sets F10 to execute a function that moves to another buffer.
> (global-set-key [f10] (lambda () (interactive)
>                                  (next-buffer)
>                                  (if (equal (current-buffer)
> "*scratch*")
>                                      (next-buffer)
>                                      (end-kbd-macro))
>                                  (if (equal (current-buffer)
> "*Messages*")
>                                      (next-buffer)
>                                      (end-kbd-macro))
>                                  (if (equal (current-buffer)
>                                             "*Whitespace Errors*")
>                                      (next-buffer)
>                                      (end-kbd-macro))))


Wee, the code to skip emacs buffers is in ergoemacs here:
http://code.google.com/p/ergoemacs/

by default it's Ctrl + Page up/down is the shortcut, similar to
Firefox et al for switching tabs.
With shift key down, it cycle among emacs's buffers.

here's the relevant code:

(defun next-user-buffer ()
  "Switch to the next user buffer.
User buffers are those whose name does not start with *."
  (interactive)
  (next-buffer)
  (let ((i 0))
    (while (and (string-match "^*" (buffer-name)) (< i 50))
      (setq i (1+ i)) (next-buffer) )))

  Xah
∑ http://xahlee.org/^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-22  0:31 This code won't match buffer names. Why not? Chris Seberino
  2009-08-22  1:09 ` Benjamin Andresen
  2009-08-22  2:50 ` Xah Lee
@ 2009-08-22  7:27 ` Ivan Kanis
  2 siblings, 0 replies; 8+ messages in thread
From: Ivan Kanis @ 2009-08-22  7:27 UTC (permalink / raw)
  To: Chris Seberino; +Cc: help-gnu-emacs

Chris Seberino <cseberino@gmail.com> wrote:

> ; Sets F10 to execute a function that moves to another buffer.
> (global-set-key [f10] (lambda () (interactive)
>                                  (next-buffer)
>                                  (if (equal (current-buffer)
> "*scratch*")
>                                      (next-buffer)
>                                      (end-kbd-macro))

Try buffer-name instead of current-buffer and maybe string= instead of
equal. I am not sure why you call end-kbd-macro. Also there is no need
to put interactive because you won't call an anonymous function.
-- 
Ivan
Kanis http://kanis.fr

Deep Hack Mode--that mysterious and frightening state of
consciousness where Mortal Users fear to tread.
    -- Matt Welsh 




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-22  1:09 ` Benjamin Andresen
  2009-08-22  1:12   ` Benjamin Andresen
@ 2009-08-29 13:06   ` David Kastrup
  2009-08-31  9:13     ` Pascal J. Bourguignon
  1 sibling, 1 reply; 8+ messages in thread
From: David Kastrup @ 2009-08-29 13:06 UTC (permalink / raw)
  To: help-gnu-emacs

Benjamin Andresen <benny@in-ulm.de> writes:

> The rewritten code would be better written like this:
>
> (global-set-key (kbd "<f10>")
>                 '(lambda ()
>                   (interactive)
>                   (next-buffer)
>                   (while (member (buffer-name (current-buffer))
>                                  '("*scratch*" "*Messages*" "*Whitespace Errors*"))
>                     (next-buffer))))

What if only *scratch* is left?

-- 
David Kastrup


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-29 13:06   ` David Kastrup
@ 2009-08-31  9:13     ` Pascal J. Bourguignon
  2009-08-31 12:03       ` David Kastrup
  0 siblings, 1 reply; 8+ messages in thread
From: Pascal J. Bourguignon @ 2009-08-31  9:13 UTC (permalink / raw)
  To: help-gnu-emacs

David Kastrup <dak@gnu.org> writes:

> Benjamin Andresen <benny@in-ulm.de> writes:
>
>> The rewritten code would be better written like this:
>>
>> (global-set-key (kbd "<f10>")
>>                 '(lambda ()
>>                   (interactive)
>>                   (next-buffer)
>>                   (while (member (buffer-name (current-buffer))
>>                                  '("*scratch*" "*Messages*" "*Whitespace Errors*"))
>>                     (next-buffer))))
>
> What if only *scratch* is left?

(defvar *bad-buffers* '("*scratch*" "*Messages*" "*Whitespace Errors*"))

(defun next-good-buffer ()
   (interactive)
   (unless (= 1 (length (buffer-list)))
      (next-buffer)
      (while (member (buffer-name (current-buffer)) *bad-buffers*)
          (next-buffer))))

(global-set-key (kbd "<f10>") 'next-good-buffer)

-- 
__Pascal Bourguignon__


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: This code won't match buffer names.  Why not?
  2009-08-31  9:13     ` Pascal J. Bourguignon
@ 2009-08-31 12:03       ` David Kastrup
  0 siblings, 0 replies; 8+ messages in thread
From: David Kastrup @ 2009-08-31 12:03 UTC (permalink / raw)
  To: help-gnu-emacs

pjb@informatimago.com (Pascal J. Bourguignon) writes:

> David Kastrup <dak@gnu.org> writes:
>
>> Benjamin Andresen <benny@in-ulm.de> writes:
>>
>>> The rewritten code would be better written like this:
>>>
>>> (global-set-key (kbd "<f10>")
>>>                 '(lambda ()
>>>                   (interactive)
>>>                   (next-buffer)
>>>                   (while (member (buffer-name (current-buffer))
>>>                                  '("*scratch*" "*Messages*" "*Whitespace Errors*"))
>>>                     (next-buffer))))
>>
>> What if only *scratch* is left?
>
> (defvar *bad-buffers* '("*scratch*" "*Messages*" "*Whitespace Errors*"))
>
> (defun next-good-buffer ()
>    (interactive)
>    (unless (= 1 (length (buffer-list)))
>       (next-buffer)
>       (while (member (buffer-name (current-buffer)) *bad-buffers*)
>           (next-buffer))))
>
> (global-set-key (kbd "<f10>") 'next-good-buffer)

What if both *scratch* and *Messages* are left?

I mean, think before you post.

Something like
(defun next-good-buffer ()
  (interactive)
  (let ((old-buffer (current-buffer)))
    (while (and (not (eq old-buffer (progn (next-buffer) (current-buffer))))
                (member (buffer-name (current-buffer)) *bad-buffers*)))))

I am not sure whether next-buffer is supposed to revisit a hidden buffer
when starting out from it, so this is not completely fool-proof.  But I
am short of time right now...

-- 
David Kastrup


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-08-31 12:03 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-22  0:31 This code won't match buffer names. Why not? Chris Seberino
2009-08-22  1:09 ` Benjamin Andresen
2009-08-22  1:12   ` Benjamin Andresen
2009-08-29 13:06   ` David Kastrup
2009-08-31  9:13     ` Pascal J. Bourguignon
2009-08-31 12:03       ` David Kastrup
2009-08-22  2:50 ` Xah Lee
2009-08-22  7:27 ` Ivan Kanis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).