您可以直接从阅读中使用(. *in* read),虽然人物如何让你将是依赖于很多事情,最特别的是,浏览器很可能会对其编码,以便HTTP传输,你甚至开始之前的情况.
我维护一个安全的终端代理,必须处理控制字符的所有组合,所以我想我会传递一些注释:
最好的方法是编写一个小程序,一次从键盘读取一个字符,然后开始粘贴键盘,看看你能想出什么.
下面笔者就从读取一个字符在两次和命中home的第一次和end第二
clojure.core=> (. *in* read)
10
clojure.core=> (. *in* read)
10
Run Code Online (Sandbox Code Playgroud)
所以显然一个字符不足以区分这两个字符,两个字符怎么样?
下面的例子将不会在REPL运行,因为REPL试图"处理"控制字符你,所以你将不得不作出一个新的项目lein new esc添加此代码,然后lein uberjar和java -jar esc-1.0.0-SNAPSHOT-standalone.jar
(ns esc.core
(:gen-class))
(defn -main []
(dorun (repeatedly #(println (. *in* read)))))
Run Code Online (Sandbox Code Playgroud)
运行它并点击这两个键会产生以下结果:
^[OF
27
79
70
10 <-- this is the newline
^[OH
27 <-- esc start marker look for this
79
72
10 <-- this is the newline
Run Code Online (Sandbox Code Playgroud)
这是esc-end
^[^[OF
27
27
79
70
10
Run Code Online (Sandbox Code Playgroud)
而ctrl这样性格大奖得主远esc-right-arrow
^[[1;5C
27
91
49
59
53
67
10
Run Code Online (Sandbox Code Playgroud)
获得六个字节的奖金.