2016-12-07 4 views
2

побег Если у меня есть что-то вроде этого:Как сравнить полукокса и бежать концевую последовательность

main :: IO()      
main = do       
    hSetBuffering stdin NoBuffering 
    c <- getChar     

Как бы я идти о сравнении C, чтобы увидеть, если я получил управляющую последовательность, как клавиши со стрелками или Ctrl плюс ключ.

Благодаря

ответ

6

Вы можете посмотреть на ожидаемые последовательности с использованием Terminfo базы данных.

См. Модуль System.Terminfo.Keys.

Например:

Prelude System.Console.Terminfo> t <- setupTermFromEnv 
Prelude System.Console.Terminfo> getCapability t keyLeft 
Just "\ESCOD" 

Что касается управляющих символов, те просто выглядят как ASCII управления:

Prelude> getChar -- pressing control L 
'\f' 
Prelude> '\f' == '\^L' 
True 

Вы могли бы лучше использовать более полную библиотеку для взаимодействия с терминал как vty.

+2

Да, я никогда не слышал об этом синтаксисе «\^L». [Отчет] (https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-200002.6) удивительно тихий в отношении того, что это значит! –

Смежные вопросы