2009-05-01 5 views
6

Ich benutze pdb, um Python-Programme zu debuggen und bin unzufrieden mit seinem Verhalten.Emacs: Verhindern, dass gud & pdb Windows steuert

Ich habe den Bildschirm in mehrere Emacs Windows unterteilt, und wenn ich PDB ausführen, ersetzt es (zufällig?) Eines der Fenster mit der Ausgabe des * Gud * Debuggers.

Auch wenn ein Haltepunkt angetroffen wird, selbst wenn der Debugging-Puffer bereits in einem Fenster sichtbar ist, wird dieser Puffer normalerweise in ein anderes-Fenster, und ersetzt ein anderes meiner Windows mit dem Inhalt der Quelldatei. (übrigens mag ich es, dass es auf die richtige Zeile in der Quelldatei springt)

Wie kann ich gud/pdb von der Verwaltung meiner Fenster für mich deaktivieren? Ist es in Emacs möglich, alle programmatische Manipulation von Windows & Bildschirmlayout zu verhindern?

Edit: Ich fand die Antwort, dass diese teilweise in einem anderen Beitrag löst: toggle dedicated windows

Antwort

3

Blick in sticky windows.

+0

setting-window-dedicated-p hat den Nachteil, dass C-f find-Datei aus einem Fenster unintuitiv die Datei in einem anderen Fenster öffnet. ich in der Lage war, dieses Verhalten zu überschreiben, indem das Hinzufügen (Set-Fenster-dedicated-p (get-Puffer-Fenster (Strom-Puffer)) nil) auf eine benutzerdefinierte Version von find-Datei – EoghanM

+0

Sticky Windows nicht Stoppen Sie GUD/Pdb davon, Ihre Sticky-Windows zu stehlen, wo sich der Quellcode-Puffer befindet. Wenn gud/pdb das Fenster nicht stehlen kann, wird ein neuer Emacs Frame geöffnet. Siehe meine Antwort für eine Lösung für dieses Problem. –

2

Sie sollten Sticky Windows verwenden, um Ihre Windows und Puffer zu machen, wo sie sind, aber Sticky Windows wird gud/pdb nicht davon abhalten, Ihre Fenster zu stehlen. Wenn gud/pdb das Quellcodefenster nicht stehlen kann, wird ein neuer Emacs-Frame geöffnet, selbst wenn sich ein anderes Fenster im aktuellen Frame befindet. Diese

kommt von der Tatsache, dass die Funktion, die den GUD-PDB-Puffers zu springen versucht (py-pdbtrack-track-stack-file) ruft Funktion pop-to-buffer mit Argumente OTHER-WINDOW auf t.

Um dieses Verhalten für alle Bibliotheken zu umgehen, die Pop-to-Buffer ruft, Sie durch die Definition einer Beratung über pop-to-buffer (in .emacs) die Rolle anderer FENSTER aufheben könnte:

(defadvice pop-to-buffer (before cancel-other-window first) 
    (ad-set-arg 1 nil)) 

(ad-activate 'pop-to-buffer) 

Sie sollten Passen Sie auch die Variable pop-up-windows auf Null an, um display-buffer (die Low-Level-Routine, die zum Anzeigen eines bestimmten Puffers für Fenster und Frames verwendet wird) zu erzwingen, um kein neues Fenster zu erstellen.

+0

Beachten Sie, dass sich die Argumente für "pop-to-buffer" in Emacs 24 geändert haben und dass dieser Rat einige Verwüstungen verursacht. – phils

3

Ich habe alle diese Ansätze ohne Erfolg auf Emacs 24 versucht. Wenn Sie noch interessiert sind, kehrte ich zum alten gdb-Verhalten mit 'Gud-Gdb', die das alte Verhalten der Interaktion Gdb/Emacs implementiert (keine dedicated-Windows und kein I/O-Puffer). Wenn Sie M-x gud-gdb nicht benutzen wollen, wenn Sie es benutzen, können Sie einen Alias ​​für M-x gdb definieren.

+0

Endlich etwas, das mit der neuesten Version von emacs funktioniert! – DomCote

3

Ich habe eine Lösung, die die gdb daran hindert, Fenster zu stehlen. Es funktioniert mit Emacs 24.4 (Snapshot 2014-07-18) und erfordert keine dedizierten Puffer. Der Vorteil gegenüber anderen Antworten besteht darin, dass Sie die Puffersysteme nicht mehr dedizieren und neu zuweisen müssen, wenn Sie Puffer ändern, was schnell langweilig wird.

Diese Beratung in Ihrer .emacs:

(defadvice gdb-inferior-filter 
    (around gdb-inferior-filter-without-stealing) 
    (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) 
    (comint-output-filter proc string))) 
(ad-activate 'gdb-inferior-filter) 

Diese effektiv diese Funktion ersetzt, wie in GDB-mi.el definiert und entfernt den Zweig, die GDB-Display-Puffer aufruft, die die Ursache für die ist Fenster Diebstahl.

Verwandte Themen