Emacs 自定义repl/nrepl错误消息

Emacs 自定义repl/nrepl错误消息,emacs,error-handling,clojure,runtime-error,Emacs,Error Handling,Clojure,Runtime Error,我偶尔会在Clojure中犯一个错误,虽然我没有经常犯,但是我还是经常犯,这让我很恼火 基本上,在中使用了nrepl插孔之后,我经常忘记更改正确的名称空间 因此,在nrepluser>提示符下,我输入一个函数,得到: CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1) 在返回用户>提示之前

我偶尔会在Clojure中犯一个错误,虽然我没有经常犯,但是我还是经常犯,这让我很恼火

基本上,在中使用了
nrepl插孔之后,我经常忘记更改正确的名称空间

因此,在nrepl
user>
提示符下,我输入一个函数,得到:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1)
在返回
用户>
提示之前,在
nrepl
缓冲区中打印

因此我发现,与其试图搞乱Java/Clojure,还不如用一种简单的方法直接从Emacs中给出提示,只使用一些Emacs魔术

如何添加钩子(?)或类似于Emacs/nrepl模式的内容,以便在打印特定消息时(例如,包含“无法解析符号”和“在此上下文中”)可以添加一行内容,如:

"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输出并根据需要对其进行调整呢?

您必须在nrepl.el中更改
nrepl默认错误处理程序
,以达到预期效果。或者,您可以建议(使用
defadvice
nrepl default err handler
,在其输出与特定模式匹配时替换其输出。不过,从nrepl.el执行此操作对我来说似乎不是特别好的主意。也许nREPL中间件是一种更好的方法