2009-10-15 3 views
7

Also habe ich im Allgemeinen 3 Puffer in Emacs offen.Wie kann ich Fensterbewegungsbefehle veranlassen, ein bestimmtes Fenster zu ignorieren?

  1. Ein Puffer für den tatsächlichen Code, den ich schreibe.
  2. Ein Puffer für den Komponententest für diesen Code.
  3. Ein dritter Puffer, der die Ergebnisse des Komponententests anzeigt. Dieser Puffer kommt unter den zwei anderen Puffern, wenn ich meinen Komponententest C-x SPACE.

Wie kann ich diesen dritten Puffer zu deaktivieren, so dass, wenn ich drücken C-x o ich nur das Umschalten zwischen Puffer 1 und 2 Puffer? Momentan wechsle ich zwischen Puffer 1, dann Puffer 2, dann Puffer 3, dann Puffer 1 usw. Um genau zu sein, möchte ich C-x o nur zwischen Puffer 1 und 2 wechseln.

Vielen Dank.

+0

Keine Antwort, aber ein Workaround, der Ihnen helfen könnte: http://StackOverflow.com/questions/91071/emacs-switch-active-window –

+0

Es klingt wie Sie bitten, ein * Fenster * zu überspringen, wenn es enthält ein bestimmter Puffer, in den Sie nicht wechseln möchten. Richtig? –

+0

Stephen, darf ich vorschlagen, dass Sie den Titel und die Frage aktualisieren, um Fenster statt Puffer zu setzen? buffer/window/frame haben in emacs eine bestimmte Bedeutung: Frame ist das Äquivalent zu dem, was ein Windows-Manager ein Fenster (das Gehäuse, in dem Sie sich bewegen können) nennt. Fenster ist das, worauf Sie sich beziehen: eine Teilmenge des Rahmens, die etwas Text zeigt. Ein Puffer repräsentiert den tatsächlich angezeigten Inhalt. Es wird im Allgemeinen durch einen Namen identifiziert, der in der Modelllinie angezeigt wird. Sie können denselben Puffer in 2 Fenstern anzeigen, z. – Bahbar

Antwort

7

Eine allgemeine Lösung dieses Problems die folgende (aussehen kann) so etwas wie:

(defvar ignore-windows-containing-buffers-matching-res '("\\*Help") 
     "List of regular expressions specifying windows to skip (if window contains buffer that matches, skip)") 

(defadvice other-window (before other-window-ignore-windows-containing activate) 
    "skip over windows containing buffers which match regular expressions in 'ignore-windows-containing-buffers-matching-res" 
    (if (and (= 1 (ad-get-arg 0)) (interactive-p)) 
     (let* ((win (next-window)) 
      (bname (buffer-name (window-buffer win)))) 
     (when (some 'identity (mapcar '(lambda (re) 
             (string-match re bname)) 
            ignore-windows-containing-buffers-matching-res)) 
      (ad-set-arg 0 2))))) 

die Variable Anpassen einer regulären Ausdruck entspricht der Puffer Namen, die Sie überspringen wollen.

+0

Ich habe das in meine .emacs-Datei kopiert. Ich habe dann einfach "* Help" durch "* Ruby-Test *" ersetzt (was der Name des Puffers war, in dem der Ruby-Test ausgeführt wurde). Jetzt, wenn ich zwischen Puffern umschalte, schaltet es nur zwischen Puffer 1 und 2 um. Scheint wie eine gute Lösung. Vielen Dank. –

5

Treys Antwort wird genau das tun, was Sie wollen (zumindest sieht es so aus; ich habe es nicht ausprobiert). Eine allgemeinere Lösung wäre, swbuff entweder mit swbuff-x oder meinem eigenen swbuff-advice zu verwenden. Informationen über alle drei finden Sie auf der Emacs Wiki swbuff page.