2013-02-16 90 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中间件会是一个更好的方法。