Emacs: предотвращение управления окнами gud & pdb

Я использую pdb для отладки программ на Python и недоволен его поведением.

У меня экран разделен на несколько окон emacs, и когда я выполняю pdb, он (случайно?) Заменяет одно из окон выводом отладчика *gud*.

Кроме того, когда встречается точка останова, даже если буфер отладки уже виден в окне, он обычно помещает этот буфер в другое окно и заменяет другое из моих окон содержимым исходного файла. (кстати мне нравится, что он переходит на правильную строку в исходном файле)

Как я могу отключить gud/pdb для управления своими окнами для меня? Возможно ли в emacs предотвратить все программные манипуляции с окнами и компоновкой экрана?

Изменить: я нашел ответ, который частично решает эту проблему в другом посте: переключение выделенных окон

4 ответа

Решение

Посмотри в липкие окна.

Я попробовал все эти подходы без успеха на Emacs 24. Если вы все еще заинтересованы, я вернулся к старому поведению gdb, используя 'gud-gdb', который реализует старое поведение взаимодействия gdb/emacs (нет выделенных окон и нет буфера ввода / вывода). Если вы не хотите вызывать Mx gud-gdb при его использовании, вы можете определить псевдоним для Mx gdb

У меня есть решение, которое не позволяет 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, которая является причиной перебоя окна.

Вы должны использовать Sticky Windows, чтобы ваши окна и буферы оставались там, где они есть, но Sticky Windows не остановит gud / pdb от попыток украсть ваши окна. Когда gud / pdb не может украсть ваше окно исходного кода, он открывает новый фрейм Emacs, даже если в текущем фрейме есть другое окно.

Это связано с тем, что функция, которая пытается перейти к буферу gud-pdb (py-pdbtrack-track-stack-file) вызывает функцию pop-to-buffer с аргументом OTHER-WINDOW, установленным в t,

Чтобы обойти это поведение для всех библиотек, которые вызывают pop-to-buffer, вы можете отменить роль OTHER-WINDOW, определив рекомендации по pop-to-buffer (в вашем.emacs):

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

(ad-activate 'pop-to-buffer)

Вы также должны настроить переменную pop-up-windows ноль, чтобы заставить display-buffer (низкоуровневая процедура, используемая для отображения определенного буфера на окнах и фреймах), чтобы не создавать новое окно.

Другие вопросы по тегам