我正在尝试编写一个宏,它调用缓冲区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”的缓冲区。