Elisp:除了顶级之外,还有什么方法可以阻止edebug?

时间:2014-02-17 16:55:48

标签: emacs elisp

我正在研究一个在保持时突破edebug的功能 当前函数绑定的参数。

(defun stop-edebug ()
  "Stop edebugging"
  (interactive)
  (if (not edebug-mode)
      (error "edebug isn't running!")
    (save-excursion
      (beginning-of-defun)
      (if (looking-at "(defun\\s-+\\_<[^ ]+\\_>\\s-+(")
          (progn
            (goto-char (match-end 0))
            (backward-char 1)
            (forward-sexp 1)
            (let ((sexps (mapcar
                          (lambda(x!) (cons x! (symbol-value x!)))
                          (preceding-sexp))))
              (edebug-mode -1)
              (mapc (lambda(x) (set (car x) (cdr x))) sexps)))))))

这样我可以在edebug绑定后按照自己的步调评估函数体 我的函数参数。

问题是(edebug-mode -1)并不是真正的退出方式 edebug。它导致edebug标记在缓冲区中延迟,可能还有其他标记 我不知道的副作用。 通常,退出是通过绑定到top-level q 完成的。 但是我不知道如何在top-level之后调用任何东西 它直接跳到主命令循环。

所以我要求在top-level之后调用某种方法 或者以更好的方式退出edebug而不是(edebug-mode -1)

1 个答案:

答案 0 :(得分:1)

要在调用top-level后运行代码,您可以安排该代码以便以后在计时器中执行。 E.g。

...
(run-with-timer 0 nil 
                (lambda ()
                  (do the thing (here))))
(top-level))