2013-08-04 13 views
1

我正在運行一個命令compile,所以我可以從錯誤消息鏈接到關聯的源,但我需要轉換匹配行的內容塊來獲取文件鏈接到。 (實線表示一個Clojure的命名空間,等foo-bar.quux,需要被轉化爲foo_bar/quux.clj。)如何從編譯錯誤 - 正則表達式文件函數獲取當前匹配的行?

compilation-error-regexp-alist文檔說,部分

每個ELT具有形式(REGEXP FILE [LINE COLUMN TYPE HYPERLINK HIGHLIGHT ...])。 ... FILE也可以具有表格(FILE FORMAT ...),其中FORMAT(例如\「%s.c \」)將依次應用於識別的文件 名稱,直到找到該名稱的文件。或FILE也可以是一個返回(FILENAME)或(RELATIVE-FILENAME。DIRNAME)的函數。在前一種情況下,FILENAME可能是相對的或絕對的。

當我添加條目compilation-error-regexp-alist-alistcompilation-error-regexp-alistFILE位置的功能,我的函數被調用時不帶參數。如何獲得該函數內的匹配行?

+1

調用函數是正確的行爲(雖然我同意這不是很聰明)。至於得到匹配的錯誤,你有沒有嘗試過使用'(match-string 0)'? – Malabarba

回答

1

開幕compile.el,然後用C-s (funcall搜索躍升我:

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

這似乎是相關的現貨和顯示功能的確是叫不帶任何參數,而且match-data仍然是非常有效的,所以你可以用(match-string <the-file-sub-group>)提取文件名。

+1

工程很棒。謝謝。我是emacs lisp的新手,對通過可變全局狀態完成多少工作感到驚訝(並且有點不安)。 –

+1

我同意這很可怕。 – Stefan