Emacs: запретить gud и pdb управлять окнами

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

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

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

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

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


person EoghanM    schedule 01.05.2009    source источник


Ответы (4)


Загляните в закрепленные окна.

person Charlie Martin    schedule 01.05.2009
comment
Установка set-window-special-p имеет тот недостаток, что C-f find-file, вызываемый из окна, неинтуитивно открывает файл в другом окне. Мне удалось переопределить это поведение, добавив (set-window-special-p (get-buffer-window (current-buffer)) nil) в пользовательскую версию find-file - person EoghanM; 02.05.2009
comment
Закрепленные окна не остановят gud / pdb от попытки украсть ваши залипающие окна, в которых находится буфер исходного кода. Если gud / pdb не может украсть окно, он откроет новый фрейм Emacs. См. Мой ответ для решения этой проблемы. - person Jérôme Radix; 03.03.2011

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

person RodrigoP    schedule 22.03.2013
comment
Наконец то, что работает с последней версией emacs! - person DomCote; 05.03.2016
comment
Да! gud-gdb работает как я привык. Новое поведение работает хорошо до тех пор, пока не перестает - его отказ оставляет emacs в каком-то странном состоянии. - person wcochran; 19.08.2020

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

person holocronweaver    schedule 24.07.2014

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

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

person Jérôme Radix    schedule 03.03.2011
comment
Обратите внимание, что аргументы pop-to-buffer были изменены в Emacs 24, и этот совет вызывает некоторый хаос. - person phils; 04.11.2011