2009-05-01 13 views
6

Estoy usando pdb para depurar programas de Python y no estoy satisfecho con su comportamiento.Emacs: Impedir que gud y pdb controlen Windows

Tengo la pantalla dividida en varias ventanas de emacs, y cuando ejecuto pdb, ¿(al azar?) Reemplaza una de las ventanas con el resultado del depurador * gud *.

También, cuando se encuentra un punto de interrupción, incluso si el buffer de depuración ya es visible en una ventana, por lo general pone este búfer en otra ventana , y reemplaza a otro de mis ventanas con el contenido del archivo de origen. (por cierto, me gusta que salta a la línea correcta en el archivo fuente)

¿Cómo puedo desactivar gud/pdb para que no administre mis ventanas? ¿Es posible en emacs para evitar toda la manipulación programática del diseño de pantalla de Windows &?

Edición: He encontrado la respuesta que resuelve parcialmente este en otro post: toggle dedicated windows

Respuesta

3

Mira en sticky windows.

+0

configuración set-window-dedicated-p tiene la desventaja de que el archivo de búsqueda C-f llamado desde una ventana abre intuitivamente el archivo en otra ventana. que fue capaz de anular este comportamiento mediante la adición de (set-window-p-dedicado (get-buffer-ventana (current-buffer)) nil) a una versión personalizada de find-file – EoghanM

+0

ventanas pegajosas no lo hará evita que gud/pdb intente robar tus ventanas adhesivas donde reside tu buffer de código fuente. Si gud/pdb no puede robar la ventana, se abrirá un nuevo marco de Emacs. Vea mi respuesta para una solución a este problema. –

2

Debe usar Sticky Windows para hacer que sus ventanas y búferes permanezcan donde están pero Sticky Windows no evitará que gud/pdb intente robar sus ventanas. Cuando gud/pdb no puede robar su ventana de código fuente, abre un nuevo Marco Emacs, incluso si hay otra ventana en el cuadro actual.

Esto proviene del hecho de que la función que intenta saltar al búfer GUD-PDB (py-pdbtrack-track-stack-file) pop-to-buffer función con el argumento other-window establecido en t llama.

Para evitar este comportamiento para todas las bibliotecas que llama pop-to-buffer, se podría cancelar la función de otros VENTANA-definiendo un consejo sobre pop-to-buffer (en su .emacs):

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

(ad-activate 'pop-to-buffer) 

Usted debe también personalice la variable pop-up-windows en nil para forzar display-buffer (la rutina de bajo nivel utilizada para mostrar un búfer particular en ventanas y marcos) para no crear una nueva ventana.

+0

Tenga en cuenta que los argumentos para 'pop-to-buffer' han cambiado en Emacs 24, y ese consejo causa algunos estragos – phils

3

Probé todos estos planteamientos sin éxito en Emacs 24. Si usted todavía está interesado me volvió al antiguo comportamiento GDB usando 'GUD-BGF que implementa el comportamiento anterior de la interacción GDB/emacs (no hay ventanas y dedicados sin buffer de E/S). Si no desea llamar a M-x gud-gdb cuando lo utiliza, puede definir un alias para M-x gdb

+0

¡Finalmente algo que funciona con la última versión de emacs! – DomCote

3

Tengo una solución que impide que el gdb robe ventanas. Funciona con Emacs 24.4 (instantánea de 2014-07-18) y no requiere la dedicación de búferes. El beneficio con respecto a otras respuestas es que no tendrá que preocuparse por dedicar y desempenar búferes cada vez que cambie búferes, lo que rápidamente se vuelve tedioso.

lugar este consejo en su .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) 

Esto reemplaza efectivamente esta función tal como se define en el IAE-mi.el y elimina la rama que llama IAE-display-buffer, que es la causa de la robo de ventanas.

Cuestiones relacionadas