gpt4 book ai didi

haskell - 防止输入字符出现在终端中

转载 作者:行者123 更新时间:2023-12-02 18:07:00 24 4
gpt4 key购买 nike

我正在制作一个愚蠢的终端游戏,它使用键盘输入来控制角色在棋盘上移动。当用户按下某个键时,我的代码使用 getChar 正确响应,但用户按下的字符也会出现在终端中。有没有办法在终端应用程序中接收键盘输入,而不显示用户输入的内容?

编辑:我使用的是 Mac,但很高兴知道在所有平台上的情况。

最佳答案

基本上,为了实现目标,您必须做两件事:

  1. 您必须禁用终端中的任何缓冲,以便您的程序立即获取按下的键(并且您不必使用 ENTER 进行确认)。

    hSetBuffering stdin NoBuffering
  2. 然后您必须确保该字符不会回显到终端。

    hSetEcho stdin False

请注意,在您的程序退出之前,它必须恢复以前的设置,以便进一步使用终端。

将所有内容放在一起,代码将如下所示:

import System.IO
import Control.Exception (bracket)

withHiddenTerminalInput :: IO a -> IO a
withHiddenTerminalInput io = bracket
(do prevBuff <- hGetBuffering stdin
prevEcho <- hGetEcho stdin

hSetBuffering stdin NoBuffering
hSetEcho stdin False

return (prevBuff, prevEcho)
)

(\(prevBuff, prevEcho) -> do
hSetBuffering stdin prevBuff
hSetEcho stdin prevEcho
)

(const io)

关于haskell - 防止输入字符出现在终端中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com