【发布时间】:2019-12-09 10:22:27
【问题描述】:
我正在尝试在debugger-eval-expression 或edebug-eval-expression 调用read--expression 期间为来自backtrace-frames 的帧局部变量添加完成。
我构造了以下完成表,以将框架局部变量添加到本地 elisp 变量的现有表中,
;; completion table for locals in current frame
(defvar my-backtrace-locals-completion-table
(completion-table-in-turn
(completion-table-dynamic
(lambda (_string)
(when-let* ((idx (backtrace-get-index)) ;backtrace.el
(frame (nth idx backtrace-frames)))
(backtrace-frame-locals frame)))
'do-switch-buffer)
elisp--local-variables-completion-table)) ;elisp-mode.el
这似乎工作正常,例如。重现
(1) 评估
;; debug-on-error = t
(let ((my-local-var '(1 2))) (mapcan #'car this-local-var))
(2) 来自调试器的第二帧,使用 eval-expression 评估
(funcall my-backtrace-locals-completion-table "my-" nil t)
返回预期的("my-local-var")。
问题是按照上面的步骤,但是调用debugger-eval-expression 不起作用。评估表的环境找不到backtrace-frame(有或没有do-switch-buffer)。
如何在适当的缓冲区中定义要评估的表?
emacs v27.0.50
【问题讨论】:
标签: debugging emacs code-completion backtrace