Clojure 如何在Leiningen REPL中捕获Ctrl-C?

Clojure 如何在Leiningen REPL中捕获Ctrl-C?,clojure,signals,leiningen,read-eval-print-loop,Clojure,Signals,Leiningen,Read Eval Print Loop,如何在Leiningen REPL中捕获Ctrl-C 设置中断处理程序似乎没有效果: user=> (set-break-handler! (fn [sig] (println "HERE!" sig))) #object[clojure.repl.proxy$java.lang.Object$SignalHandler$d8c00ec7 0x22e61b57 "clojure.repl.proxy$java.lang.Object$SignalHandler$d8c00ec7@22e

如何在Leiningen REPL中捕获Ctrl-C

设置中断处理程序似乎没有效果:

user=> (set-break-handler! (fn [sig] (println "HERE!" sig)))
#object[clojure.repl.proxy$java.lang.Object$SignalHandler$d8c00ec7 0x22e61b57
  "clojure.repl.proxy$java.lang.Object$SignalHandler$d8c00ec7@22e61b57"]
user=> 
第二次提示后的有趣字符(如果你能看到的话)是ASCII 3。这就是我按下Ctrl-C键时出现的情况。看来Leiningen已经禁用了Ctrl-C和SIGINT信号之间的连接。(这是在Linux系统上)Leiningen将Ctrl-C视为另一个字符。如果我按Enter键,Clojure编译器会抱怨它无法解析符号
。(同样,您可能无法看到它;在大多数字体中,Ctrl-C不是可打印的标志符号。)

我之所以要这样做,是为了让我可以运行一些我正在作为无限循环进行试验的代码,看看它会做什么,停止它,稍微更改一下,再试一次,等等。实际上,我不想通过直接在REPL处调用
set break handler
来设置INT处理程序。我想把它放到我的代码中,这样它就可以清理线程并终止子进程


顺便说一句,我想看看Leiningen是否干扰了我的stty设置,所以我键入了以下内容:

user=> (clojure.java.shell/sh "stty" "-a")
{:exit 1, :out "", :err "stty: standard input: Invalid argument\n"}
什么<如果我在shell提示符下键入,code>stty-a
可以正常工作。这是问题的线索吗