Я думаю, что, возможно, я мог бы ответить на свой собственный вопрос в то время, просто немного покопавшись, но первое решение GDB скорее забрало его у меня на старом фронте обучения.я выздоровел, так что ...
Ch b Cs Major
после небольшой прокрутки мы можем определить 'comint-send-input' как функцию, связанную с клавишей 'enter'.Если взглянуть на источник этой функции, comint.el: 1765 - это вызов 'run-hook-with-args' .. здесь мы понимаем, что нигде конкретно 'pdb' не может делать то, что мы хотим.
gud - это универсальная оболочка для вызова внешних процессов отладки и возврата результатов .. поэтому в elisp отсутствует контроль.то же самое было и с GDB, но вокруг внешнего вызова была хорошая (существовавшая) оболочка, которая давала рекомендации этой функции чувствовать себя «чистой».
так что хак .. чуть выше 'comint-send-Ввод 'лежит' comint-add-to-input-history '.. Dead Easy.
;;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)))
)
Кстати, у меня есть эти, чтобы инициировать входное кольцо для сеансов отладки
;#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)
cheers.