Вы можете напрямую читать из в с помощью (. *in* read)
, хотя то, как к вам доберутся символы, будет зависеть от многих вещей, особенно в том случае, когда браузер, вероятно, закодирует их http транспорт, прежде чем вы даже начать.
Я поддерживаю защищенный прокси-терминал терминала, который должен обрабатывать все комбинации управляющих символов, поэтому я решил передать несколько замечаний:
- они не одного символа в длину. вам нужно до шести символов, чтобы представить их. попробуйте нажать Esc - Ctrl - alt - стрелка влево .
- esc означает Alt , но alt не означает esc . если первый символ является esc , то следующий символ является meta / alt его значения символа. так что если вы видите esc - b , это Alt - b
- некоторые клавиши (например, страница вверх ) отправляют esc автоматически.
- esc - esc - это свое дело (я не могу сказать, что полностью понимаю).
Лучший способ - написать небольшую программу, которая будет считывать с клавиатуры по одному символу за раз, а затем начать играть на клавиатуре и посмотреть, что вы можете придумать.
Здесь я прочитаю символ из в дважды и нажму home в первый раз и end во второй
clojure.core=> (. *in* read)
10
clojure.core=> (. *in* read)
10
Так что одного символа недостаточно, чтобы различить эти два ключа, как насчет двух символов?
Следующий пример не будет выполняться в 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)))))
Запуск и нажатие этих двух клавиш приводит к следующему:
^[OF
27
79
70
10 <-- this is the newline
^[OH
27 <-- esc start marker look for this
79
72
10 <-- this is the newline
Вот esc - end
^[^[OF
27
27
79
70
10
И главный призер персонажа ctrl на данный момент esc - стрелка вправо
^[[1;5C
27
91
49
59
53
67
10
получение приза в шести байтах.