2009-05-01 7 views
6

나는 pdb를 사용하여 파이썬 프로그램을 디버깅하고 있으며 그 동작에 만족하지 않는다.이맥스 : gud와 pdb가 윈도우를 제어하지 못하도록 함

화면이 여러 개의 이맥스 창으로 나뉘어져 있고 pdb를 실행할 때 (임의로?) 창 중 하나가 * gud * 디버거의 출력으로 바뀝니다. 브레이크 포인트가 발생하는 경우도

은 디버깅 버퍼가 이미 창에 표시되는 경우에도, 그것은 일반적으로 에 다른 창을이 버퍼를두고, 소스 파일의 내용과 내 창문의 또 다른 대체합니다. (우연히 나는 그것이 소스 파일의 올바른 줄로 점프하는 것을 좋아한다)

gud/pdb가 내 윈도우를 관리하지 못하게하려면 어떻게해야합니까? 이맥에서 윈도우의 모든 프로그램 조작을 막을 수 있습니까? & 화면 레이아웃?

편집 : sticky windowstoggle dedicated windows

답변

3

봐 : 나는 부분적으로 다른 게시물에이 문제를 해결 해답을 발견했다.

+0

set-window-dedicated-p 설정은 창에서 호출 된 C-f 찾기 파일이 다른 windoow에서 파일을 unintuitively 열어 놓는 단점이 있습니다. 내가 추가하여이 동작을 재정의 할 수 있었다 (받을 버퍼 창 (현재 버퍼)) 설정 윈도우 전용-P (전무)의 사용자 지정 버전 찾을 파일 – EoghanM

+0

스티커 창은하지 않습니다 gud/pdb가 소스 코드 버퍼가있는 끈적한 창을 훔치려는 것을 막으십시오. gud/pdb가 창을 훔칠 수 없다면 새로운 Emacs 프레임을 열 것입니다. 이 문제에 대한 해결책은 내 대답을 참조하십시오. –

2

windows와 버퍼가 어디에 있든 Sticky Windows가 gud/pdb가 windows를 훔치는 것을 막을 수는 없지만, Sticky Windows을 사용해야합니다. gud/pdb가 소스 코드 창을 훔칠 수 없으면 현재 프레임에 다른 창이 있더라도 새 Emacs 프레임을 엽니 다.

이것은 gud-pdb 버퍼 (py-pdbtrack-track-stack-file)로 점프하려고하는 함수가 OTHER-WINDOW 인수를 t으로 설정하여 pop-to-buffer 함수를 호출한다는 사실에서 기인합니다.

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

(ad-activate 'pop-to-buffer) 

당신은해야한다 :

팝 - 투 - 버퍼, 당신은 (당신의 이맥스에서) pop-to-buffer에 대한 조언을 정의하여 다른-WINDOW의 역할을 취소 할 수 호출하는 모든 라이브러리에이 문제를 회피하려면 display-buffer (창과 프레임에 특정 버퍼를 표시하는 데 사용되는 저수준 루틴)을 강제 실행하여 새 창을 만들지 않으려면 변수 pop-up-windows을 nil로 사용자 정의하십시오.

+0

'pop-to-buffer'에 대한 인수가 Emacs 24에서 바뀌었고 그 충고에 의해 약간의 혼란이 일어났습니다. – phils

3

나는 이맥스 24에서 성공하지 못했지만이 모든 접근법을 시도했다. 여전히 흥미가 있다면 gdb/emacs 상호 작용의 이전 동작을 구현하는 'gud-gdb'를 사용하여 이전 gdb 동작으로 복귀했다. I/O 버퍼 없음). M-x gud-gdb를 사용할 때 M-x gdb를 호출하지 않으려면 M-x gdb에 대한 별칭을 정의 할 수 있습니다.

+0

마침내 최신 버전의 emacs에서 작동하는 것! – DomCote

3

gdb가 Windows를 도용하지 못하게하는 솔루션이 있습니다. Emacs 24.4 (2014-07-18 스냅 샷)와 함께 작동하며 전용 버퍼가 필요하지 않습니다. 다른 대답에 대한 이점은 버퍼를 변경할 때마다 전용 버퍼를 지정하지 않아도되므로 번거로워집니다.

놓습니다 이맥스에서이 조언이 효과적으로 GDB-mi.el에 정의 된대로이 기능을 대체하고의 원인 GDB 디스플레이 버퍼를 호출 지점을 제거

(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) 

창 도둑질.

관련 문제