我需要实线,直到按下 ESC 按钮。我怎样才能检查它?
lines
= do
line <- getLine
if (== "/ESC") --this condition is wrong
then ...
else do
ln <- lines
return ...
有人可以解决我的问题吗?
正确的转义方法是使用反斜杠,字符是'\ESC'
,所以条件是
if line == "\ESC"
但我不确定每个终端都会通过'\ESC'
应用程序。
如果您想在按下键时立即停止ESC,则类似于
module Main (main) where
import System.IO
main :: IO ()
main = do
hSetBuffering stdin NoBuffering
getUntilEsc ""
getUntilEsc :: String -> IO ()
getUntilEsc acc = do
c <- getChar
case c of
'\ESC' -> return ()
'\n' -> do putStrLn $ "You entered " ++ reverse acc
getUntilEsc ""
_ -> getUntilEsc (c:acc)
是你需要的。您必须按字符阅读,并且需要关闭 的缓冲stdin
,因此字符可以立即可供阅读,而不仅仅是在输入换行符之后。
请注意,在 Windows 上关闭缓冲不起作用。不知道最近有没有修复。此外,正如@Daniel Wagner 报告的那样,很可能是 Windows 命令提示符没有将 传递ESC给应用程序。