2
如果我有这样的事情:如何比较char和逃避终端转义序列
main :: IO()
main = do
hSetBuffering stdin NoBuffering
c <- getChar
我怎么会去比较C键来查看,如果我有像箭头键或Ctrl加一个转义序列键。
感谢
如果我有这样的事情:如何比较char和逃避终端转义序列
main :: IO()
main = do
hSetBuffering stdin NoBuffering
c <- getChar
我怎么会去比较C键来查看,如果我有像箭头键或Ctrl加一个转义序列键。
感谢
您可以查找使用的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。
呵呵,我从来没有对这种'\^L'语法有新的看法。 [报告](https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-200002.6)对于它的含义非常安静! –