获取etags.el的结果列表

时间:2014-03-21 00:42:16

标签: emacs elisp ctags exuberant-ctags

我正在使用旺盛的ctags生成一个标签文件(以emacs格式),我传递了这个额外的标志:

--regex-PHP=/do\_action\(\ '([a-zA-Z0-9\_]+)'/\1/a,actions/

哪个成功捕获了我想要的内容,问题是我想使用emacs lisp以列表的形式返回标记为“a”的所有标记 - 或者我甚至会满足于只匹配do_action的正则表达式。

不幸的是,似乎etags.el中的所有内容都面向交互式使用,find-tag-in-order是我能想到的唯一非交互式方式,但无论是否有任何内容,我的代码都会返回错误消息匹配:

(find-tag-in-order
 "test_string"
 find-tag-regexp-search-function
 find-tag-regexp-tag-order
 find-tag-regexp-next-line-after-failure-p
 "matching"
 t)

在进行交互式M-x查找标记时,test_string会将我带到文件和定义它的位置。

理想的用法是: (tags-of-type "a")(tags-matching "do_action")。虽然我理解标签的名称是在我的正则表达式的括号组中匹配的。

有什么想法吗?

更新 虽然这并没有解决以emacs lisp列表的形式获取标签的问题,但我意识到使用--PHP-kinds参数可以为每种类型维护多个标签文件。

在这种方法中,方法(虽然不起作用)将是这样的:

(let ((tags-table-list '("tag-file-1")))
  (tags-search "specific-to-tag-file-1"))

1 个答案:

答案 0 :(得分:2)

我想,你想要的是(tags-completion-table)。它返回一个符号的obarray,这些符号是当前TAGS表中的条目。

在任何情况下,根据你所追求的是什么,我认为函数tags-completion-table及其同名的缓存变量是开始的地方。两者都在库etags.el中定义。

(如果您需要字符串列表而不是符号的obarray,请使用mapatomssymbol-name。)