1

ESCボタンが押されるまで実際の線を引く必要があります。どうすれば確認できますか?

lines
   = do
      line <- getLine
      if (== "/ESC") --this condition is wrong
         then ...
         else do
            ln <- lines
            return ...

誰かが私の問題を解決できますか?

4

1 に答える 1

4

エスケープする正しい方法はバックスラッシュを使用することで、文字は'\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ます。

于 2012-06-11T19:41:52.560 に答える