Emacs 如何从编译错误regexp alist file函数中获取当前匹配的行?

Emacs 如何从编译错误regexp alist file函数中获取当前匹配的行?,emacs,elisp,compile-mode,Emacs,Elisp,Compile Mode,我正在使用compile运行一个命令,这样我就可以从错误消息链接到相关的源代码,但我需要转换匹配行的一块内容,以获得要链接到的文件。(该行显示clojure命名空间,如foo bar.qux,需要将其转换为foo\u bar/qux.clj) 编译错误regexp-alist的文档部分说明 每个elt都有以下格式(REGEXP文件[行-列类型超链接突出显示…])。。。文件也可以具有格式(文件格式…),其中格式(例如\%s.c\)将依次应用于识别的文件 名称,直到找到该名称的文件。或文件也可以是返

我正在使用
compile
运行一个命令,这样我就可以从错误消息链接到相关的源代码,但我需要转换匹配行的一块内容,以获得要链接到的文件。(该行显示clojure命名空间,如
foo bar.qux
,需要将其转换为
foo\u bar/qux.clj

编译错误regexp-alist
的文档部分说明

每个elt都有以下格式(REGEXP文件[行-列类型超链接突出显示…])。。。文件也可以具有格式(文件格式…),其中格式(例如\%s.c\)将依次应用于识别的文件 名称,直到找到该名称的文件。或文件也可以是返回(FILENAME)或(RELATIVE-FILENAME.DIRNAME)的函数。在前一种情况下,文件名可以是相对的,也可以是绝对的


当我在
文件
位置使用函数向
编译错误正则表达式列表
编译错误正则表达式列表
添加条目时,调用我的函数时不带任何参数。如何获取该函数中的匹配行?

打开
compile.el
,然后用
C-s(funcall
搜索,我跳到:

           (setq file (if (functionp file) (funcall file)
                        (match-string-no-properties file))))

这似乎是相关的点,表明函数确实是在没有参数的情况下调用的,
匹配数据
仍然非常有效,因此您可以使用
(匹配字符串)

提取文件名调用函数是正确的行为(尽管我同意这不是很聪明)。至于获取匹配的错误,您是否尝试过使用
(匹配字符串0)
?效果很好。谢谢。我是emacs lisp新手,对通过可变全局状态完成的工作感到惊讶(并且有点不安)。