我已经开始通过emacs 23.3中的gud使用pdb,如何挂接从缓冲区发送到调试器的命令消息?我写了下面的建议与gdb一起使用,以持久保持comint的响,但是找不到与pdb Hook 的等效函数。我正在使用python-mode.el作为我的主要模式。
谢谢。
(defadvice gdb-send-item (before gdb-save-history first nil activate)
"write input ring on quit"
(if (equal (type-of item) 'string) ; avoid problems with 'unprintable' structures sent to this function..
(if (string-match "^q\\(u\\|ui\\|uit\\)?$" item)
(progn (comint-write-input-ring)
(message "history file '%s' written" comint-input-ring-file-name)))))
最佳答案
我想我也许可以通过稍加挖掘来回答我自己的问题,但是第一个gdb解决方案宁愿在旧的学习前沿将其从我身上剔除。我恢复了,所以..
-
C-s专业
经过一些滚动后,我们可以将“comint-send-input”识别为与键“enter”绑定(bind)的功能。查看此函数的源代码,comint.el:1765是对'run-hook-with-args'的调用。这是我们意识到没有地方专门使用'pdb'来执行所需操作的地方。
gud是一个通用包装器,用于调用外部调试过程并返回结果。因此elisp中没有控件。与gdb相同,但是在外部调用周围有一个不错的(预先存在的)包装器,这使建议该函数感觉“干净”。
因此,“comint-send-input-input”上方的hack ..就是“comint-add-to-input-history” ..非常简单。
;;save command history
(defadvice comint-add-to-input-history (before pdb-save-history activate compile)
"write input ring on exit"
(message "%s" cmd)
(if (string-match "^e\\(x\\|xi\\|xit\\)?$" cmd)
(progn (comint-write-input-ring)
(message "history file '%s' written" comint-input-ring-file-name)))
)
仅供引用,我有这些来启动调试 session 的输入环
;#debugger history
(defun debug-history-ring (file)
(comint-read-input-ring t)
(setq comint-input-ring-file-name file)
(setq comint-input-ring-size 1000)
(setq comint-input-ignoredups t))
(let ((hooks '((gdb-mode-hook . (lambda () (debug-history-ring "~/.gdbhist")))
(pdb-mode-hook . (lambda () (debug-history-ring "~/.pythonhist"))))))
(dolist (hook hooks) (print (cdr hook)) (add-hook (car hook) (cdr hook))))
..并在调试缓冲区被杀死的情况下写入历史文件
(add-hook 'kill-buffer-hook 'comint-write-input-ring)
干杯。