1

我正在尝试编写一个宏,它调用缓冲区cscope-find-functions-calling-this-function中显示的文件中的每个标签*Tags List*(由list-tags命令创建)。这应该创建一个缓冲区,其中包含调用某个文件中定义的一组函数的所有函数的列表。

我只是将点定位在标签列表缓冲区中第一个标签的开头,然后运行以下键盘宏来执行此操作。这是键盘宏中的击键顺序:

1. <f11> ;; cscope-find-functions-calling-this-function                                                                                                           
2. 回复 ;; 换行 [在拆分窗口中显示 cscope 的结果]
3. Cx Cp;; 标记页
4. Cx Cx ;; 冰柱交换点和标记
5. <向上> ;; 上一行
6. <结束> ;; 行尾[已标记要复制的区域]
7. <f7> ;; 将结果附加到缓冲区
8. Cx ESC O ;; [回到右边的分割窗口]
9. Cx b;; icicle-buffer [切换回*标签列表*缓冲区]
10. *标签;; 自插入命令 * 5
11. SPC;; 自插入命令
12. 列表* ;; 自插入命令 * 5
13. 回复;; 新队
14. <向下> ;; next-line [列表中下一个标签的定位点]

问题: 我在缓冲区中没有得到任何结果,我发现这是因为步骤 3-7 甚至在 cscope 打印在步骤 1-2 中进行的查询结果之前执行。

我可以使用 Cx q 在宏中插入暂停,但我希望宏在第 2 步之后等待,直到 cscope 返回结果,然后自动继续。我怀疑这是不可能通过宏实现的,也许是 LISP 函数......我自己不是 lisp 专家。有人可以帮忙吗?谢谢!


细节:

  • 我安装了Icicles,所以默认情况下,我在当前缓冲区中的点处获取单词作为 minibuffer 中的输入。
  • F11 必然 cscope-find-functions-calling-this-function
  • windmove已安装并 Cx <right> (Cx ESC o - 如下所示) 将您带到右侧窗口。
  • F7 绑定 append-results-to-buffer的定义为:
(defun append-results-to-buffer ()
  (交互的)
  (追加到缓冲区 (get-buffer-create "c1") (point) (mark)))

此函数只是将当前标记的区域附加到名为“c1”的缓冲区。

4

1 回答 1

2

CEDET 套件在 cedet-cscope.el 中支持 cscope,它同步调用 cscope。您可能可以从那里借用一些东西来从您的键盘宏中使用。

或者,您可以使用 CEDET 的 symref 工具 (semantic-symref-symbol) 在 CScope 之上完成繁重的工作。它还可以使用 GNU Global 或 IDUtils。

于 2010-06-01T11:42:28.517 回答