比如company插件(在emacs-lisp-mode 中)显示 候选列表,我猜测在company.el中有个像这样的函数 (defun fff ( 某某字符串) Body ) 可以实现显示候选列表的功能,想要定位这fff 学习fff的源代码, 于是我可以 编写程序 用 scheme中 eval类似的函数 执行一次 company.el,进而得到语法树,然后遍历语法树,对company.el里面的所有函数下记录断点(只要代码运行到这个函数 就把这个函数记录下来存储到文件a.txt中,然后自动继续运行代码), 然后 ,在 scratch 窗口中 输入 (me ,这时候,company.el 中触发的函数肯定被记录 到 a.txt 中了 假如这文件的内容是 f1 f2 f3 f4,把这个a.txt复制到b.txt中,然后回到scratch中,继续输入一个字符s,这时候 那个候选列表一定显示出来了,所以我想要找的fff函数一定记录在a.txt 中了,要想从a.txt中找到需要的fff,只需要把a.txt 和b.txt 对比,假设a.txt 中 是 f1 f2 f3 f4 f5 b.txt中是f1 f2 f3 f4 ,那么f5就可能是显示候选列表的函数, 现在难点 1是如何得到company.el的语法树,2是如何下记录断点
现在 正在研究 eval-buffer 的文档,之前研究了 edebug的文档,是没法直接下记录断点的
(write-region "要记录的内容" nil "~/.emacs.d/db/temp.txt")
,好像没见过在elisp中下断点的
就用 eval-defun 下断点