2013-02-16 116 views
0

有一個錯誤,我在Clojure偶爾一直這樣做,我不經常做足夠的事情,但是立即知道我忘了什麼,但我仍然經常做到這一點,它真的得到真的煩人。自定義repl/nrepl錯誤消息

使用nrepl-jack-in後基本上,我經常忘了更改爲正確的命名空間。

所以在nrepl user>提示我輸入一個函數,我得到:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1) 

印在nrepl緩衝給我回user>提示之前。

所以我想通了,而不是試圖搞砸了與Java/Clojure的,有可能直接從Emacs中給出一個提示,只使用一些魔法Emacs的一種簡單的方法。

如何添加掛鉤(?)或類似於Emacs/nrepl-mode的東西,以便在打印特定消息時(例如,包含「無法解析符號」和「在此上下文中」 )我可以添加一行說是這樣的:

"Didn't you forget to change namespace?" 

甚至:

"There's a .clj buffer opened using namespace abc.defk, didn't you forget to enter: (ns abc.def) ?" 

有相當多,我覺得挺神祕的Clojure中的一些錯誤消息,並且通常需要我一段時間來弄清楚我做錯了什麼。如果我能夠直接從Emacs「個性化」這些錯誤消息,我會贏得相當一段時間。

所以,我怎麼能「攔截」 nrepl輸出,並使其適合我的需要?

回答

1

你必須改變nrepl-default-err-handler在nrepl.el達到預期的效果。替代你可以告知。(與defadvicenrepl-default-err-handler,如果它匹配特定模式取代它的輸出。儘管如此,從nrepl.el這樣做對我來說並不是特別好主意。也許一個nREPL中間件會是一個更好的方法。