Emacs:gud と pdb がウィンドウを制御できないようにする
質問
Python プログラムのデバッグに pdb を使用していますが、その動作に不満があります。
画面を複数の emacs ウィンドウに分割しており、pdb を実行すると、ウィンドウの 1 つが (ランダムに?) *gud* デバッガーの出力に置き換えられます。
また、ブレークポイントに遭遇すると、デバッグ バッファーがすでにウィンドウに表示されている場合でも、通常はこのバッファーが 別の ウィンドウを作成し、別のウィンドウをソース ファイルの内容で置き換えます。(ちなみに、ソースファイル内の正しい行にジャンプするのが気に入っています)
gud/pdb による Windows の管理を無効にするにはどうすればよいですか?Emacs では、プログラムによるウィンドウと画面レイアウトの操作をすべて防止することは可能ですか?
編集:これを部分的に解決する答えを別の投稿で見つけました。 専用ウィンドウを切り替えます
解決
調べてください 粘着性のあるウィンドウ.
他のヒント
Emacs 24 ではこれらのアプローチをすべて試しましたが成功しませんでした。まだ興味がある場合は、gdb/emacs インタラクションの古い動作 (専用ウィンドウや I/O バッファなし) を実装する「gud-gdb」を使用して、古い gdb の動作に戻しました。M-x gud-gdb を使用するときに呼び出したくない場合は、M-x 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 を呼び出すブランチが削除されます。
使用する必要があります スティッキーウィンドウ ウィンドウとバッファをその場所に固定させますが、スティッキー 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
(ウィンドウおよびフレーム上に特定のバッファを表示するために使用される低レベルのルーチン) 新しいウィンドウを作成しません。