如何比较char和escape终端转义序列

时间:2016-12-07 05:36:46

标签: haskell term

如果我有这样的话:

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

我如何比较c以查看是否有一个转义序列,如箭头键或ctrl加一个键。

由于

1 个答案:

答案 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等终端进行交互。