Emacs: предотвращение управления окнами gud & pdb - PullRequest
6 голосов
/ 01 мая 2009

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

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 24 июля 2014

У меня есть решение, которое предотвращает кражу окон 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 голосов
/ 23 марта 2013

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

3 голосов
/ 01 мая 2009

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

2 голосов
/ 03 марта 2011

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

...