如果我有这样的话:
main :: IO ()
main = do
hSetBuffering stdin NoBuffering
c <- getChar
我如何比较c以查看是否有一个转义序列,如箭头键或ctrl加一个键。
由于
答案 0 :(得分: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等终端进行交互。