自定义repl / nrepl错误消息

时间:2013-02-16 17:54:44

标签: emacs error-handling clojure runtime-error

我偶尔会在Clojure中做错,而且我不经常这么做但还不知道我忘记了什么,但我仍然经常这样做,它真的真的烦人

基本上在使用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 个答案:

答案 0 :(得分:1)

您必须在nrepl.el中更改nrepl-default-err-handler才能达到预期的效果。您可以选择建议(使用defadvicenrepl-default-err-handler来替换其输出(如果它与特定模式匹配)。不过,从nrepl.el这样做对我来说似乎并不是特别好。也许nREPL中间件是一种更好的方法。