在Clojure中读取无缓冲的键盘输入

Joh*_*hnJ 7 clojure

如何在Clojure中从终端(而不是Swing)读取一次击键?

我尝试过一些东西,包括各种 版本的JLine库,但还没有让它工作(参见下面的例子).

我很乐意接受一个有效的,仅限Unix(Mac,Linux,......)的例子.理想情况下,我想知道如何为stdin和stdout切换缓冲.

这里有一些接近的东西:

;; project.clj dependencies:
;; [[org.clojure/clojure "1.4.0"]
;;  [jline/jline "2.8"]])

(ns slosh.core
  (:import [jline.console ConsoleReader])
  (:gen-class))    

(defn -main []
  (println "start")
  (let [cr (ConsoleReader.)]
    (.readCharacter cr)
    (println "done")))
Run Code Online (Sandbox Code Playgroud)

这将打印"开始"但不响应除control-C之外的任何输入.

小智 5

我不确定你是如何运行它的,但是如果你使用的话lein run,你会遇到问题.尝试使用lein trampoline run.

我会链接java/clojure中的单字符控制台输入, 但我似乎没有足够的Internet点来做到这一点.