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
(низкоуровневая процедура, используемая для отображения определенного буфера на окнах и фреймах), чтобы не создавать новое окно.