Emacs:防止gud&来自控制窗口的pdb

时间:2009-05-01 16:47:34

标签: emacs elisp

我正在使用pdb来调试Python程序,并对它的行为不满意。

我将屏幕划分为多个emacs窗口,当我执行pdb时,它(随机?)用* gud *调试器的输出替换其中一个窗口。

此外,遇到断点时,即使调试缓冲区已经在窗口中可见,它通常会将此缓冲区放入另一个窗口,并将其他窗口替换为其中的内容。源文件。 (顺便说一下,我喜欢它跳转到源文件中的正确行)

如何禁用gud / pdb来管理我的窗口?是否有可能在emacs中阻止所有编程操作windows&屏幕布局?

编辑:我在另一篇文章中找到了部分解决此问题的答案:toggle dedicated windows

4 个答案:

答案 0 :(得分:3)

查看sticky windows

答案 1 :(得分:3)

我在Emacs 24上尝试了所有这些方法但没有成功。 如果你仍然感兴趣我使用'gud-gdb'恢复了旧的gdb行为,它实现了gdb / emacs交互的旧行为(没有专用窗口和没有I / O缓冲区)。如果你不想在使用它时调用M-x gud-gdb,你可以为M-x gdb定义一个别名

答案 2 :(得分:3)

我有一个防止gdb窃取窗口的解决方案。它适用于Emacs 24.4(2014-07-18快照),不需要专用缓冲区。与其他答案相比的好处是,无论何时更换缓冲区,您都不必费心专用和非专用缓冲区,这很快就会变得乏味。

将此建议放在.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)

这有效地替换了gdb-mi.el中定义的这个函数,并删除了调用gdb-display-buffer的分支,这是导致窗口盗窃的原因。

答案 3 :(得分:2)

您应该使用Sticky Windows使您的窗口和缓冲区保持原状,但Sticky Windows不会阻止gud / pdb试图窃取您的窗口。当gud / pdb无法窃取您的源代码窗口时,即使当前帧上有另一个窗口,它也会打开一个新的Emacs Frame。

这是因为尝试跳转到gud-pdb缓冲区(py-pdbtrack-track-stack-file)的函数调用函数pop-to-buffer,并将参数OTHER-WINDOW设置为t

为了避免调用pop-to-buffer的所有库的这种行为,你可以通过在pop-to-buffer(在你的.emacs中)定义一个建议来取消OTHER-WINDOW的角色:

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

(ad-activate 'pop-to-buffer)

您还应该将变量pop-up-windows自定义为nil,以强制display-buffer(用于在窗口和框架上显示特定缓冲区的低级例程)不创建新窗口。

相关问题