我正在编写一个循环,它只适用于单字符输入。根据用户按下的内容(不按ENTER键),我希望显示用户键入的键,然后重复。如果用户按下"q",则循环必须退出。
制约因素:
。
这能办到吗?一些搜索让我找到了jline2,它有ConsoleReader类,但它似乎在jline3中消失了。
发布于 2019-10-28 04:08:41
我看到了https://gist.github.com/mikeananev/f5138eeee12144a3ca82136184e7a742,并使用了链接的重复答案,得到了以下结果:
; Need `(:import [org.jline.terminal TerminalBuilder Terminal])`
(defn new-terminal
"creates new JLine3 Terminal.
returns terminal object"
^Terminal [term-name]
(let [terminal (-> (TerminalBuilder/builder)
(.jna true)
(.system true)
(.name term-name)
(.build))]
terminal))
(defn interactive-loop []
(let [t (new-terminal "xxx")]
(.enterRawMode t)
(let [reader (.reader t)]
(loop [char-int (.read reader)]
(case (char char-int)
\q (do
(println "Bye!")
(.close reader)
(.close t))
(do (println (char char-int))
(recur (.read reader))))))))我在NixOS上,显然jline3库依赖于正在安装的infocmp二进制文件,这是流行的ncurses包的一部分。不幸的是,我目前使用的Nixpkgs版本没有打包这个二进制文件,所以我在这里输入了一个PR:https://github.com/NixOS/nixpkgs/pull/72135
https://stackoverflow.com/questions/58571928
复制相似问题