2016-12-07 45 views
2

如果我有这样的事情:如何比较char和逃避终端转义序列

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)对于它的含义非常安静! –