【问题标题】:How can you make an emacs macro wait for cscope query results?如何让 emacs 宏等待 cscope 查询结果?
【发布时间】:2010-05-31 21:28:07
【问题描述】:

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

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

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

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

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


详情:

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

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

【问题讨论】:

    标签: emacs macros elisp ctags cscope


    【解决方案1】:

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

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

    【讨论】:

    • 感谢埃里克的提示!我想我需要做一些挖掘工作。好消息是我热爱整个 LISP 业务。
    猜你喜欢
    • 1970-01-01
    • 2017-10-30
    • 2012-10-28
    • 2019-04-02
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多