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

时间:2012-11-17 22:45:11

标签: clojure

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

我尝试了一些事情,包括JLine库的various versions,但还没有让它工作(参见下面的示例)。

我很乐意接受一个有效的,仅限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")))

这会打印“开始”但不响应除control-C之外的任何输入。

2 个答案:

答案 0 :(得分:5)

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

我会链接Single character console input in java/clojure,但我似乎没有足够的互联网点数。

答案 1 :(得分:1)

也许还要看看clojure-lanterna