我正在使用Emacs来编辑和调试python代码,我想知道如何使用单个字母命令在emacs pdb中重启我的调试会话。在perldb
中,有一个命令R
等同于restart
脚本,但我找不到python中restart
的等效单字母指令。 / p>
有没有办法在pdb中挂钩R
来做restart
?
答案 0 :(得分:0)
您可以通过以下方式将pdb-restart
(可能不存在)等函数绑定到“R”:
(define-key gud-mode-map "R" 'pdb-restart)
虽然这会影响所有gud会话。如果在其他gud会话中不需要,您可以始终设置特定挂钩来覆盖此行为。
编辑:
更好的方法是使用pdb-mode-hook
而不是修改gud-mode-map
:
(add-hook 'pdb-mode-hook '(define-key (current-local-map) "R" 'pdb-restart))
我自己尝试重新启动pdb会话,最后必须编写自己的命令来执行此操作。它首先尝试使用comint-send-input发送一个很好的'restart',但如果这不起作用,它会回退到杀死缓冲区(以及底层的pdb进程),并重新启动pdb会话,使用相同的目录和参数作为最后一次启动的pdb会话。
(defun pdb-restart ()
(interactive)
(comint-insert-send "restart")
(sleep-for .5)
(when
(or
(last-lines-match "raise Restart.*
Restart")
(last-lines-match "restart")
(not (get-buffer-process (current-buffer))))
(let ((kill-buffer-query-functions nil );disable confirming for process kill
(pdbcmd (car-safe (symbol-value (gud-symbol 'history nil 'pdb))))
(default-directory default-directory))
(kill-this-buffer)
(cd default-directory)
(pdb pdbcmd)))
(comint-insert-send "n"))