echo-0.1.3: A cross-platform, cross-console way to handle echoing terminal input

Copyright(C) 2016-2017 Ryan Scott
LicenseBSD-style (see the file LICENSE)
MaintainerRyan Scott
StabilityProvisional
PortabilityPortable
Safe HaskellSafe
LanguageHaskell2010

System.IO.Echo

Contents

Description

Exports functions that handle whether or not terminal input is handled in a way that should be portable across different platforms and consoles.

Synopsis

Public interface

withoutInputEcho :: IO a -> IO a #

Perform a computation with the terminal's input echoing disabled. Before running the computation, the terminal's input EchoState is saved, and the saved EchoState is restored after the computation finishes.

withoutInputEcho action = bracketInputEcho (setInputEchoState echoOff >> action)

bracketInputEcho :: IO a -> IO a #

Save the terminal's current input EchoState, perform a computation, restore the saved EchoState, and then return the result of the computation.

bracketInputEcho action = bracket getInputEchoState setInputEchoState (const action)

getInputEchoState :: IO EchoState #

Return the terminal's current input EchoState.

setInputEchoState :: EchoState -> IO () #

Set the terminal's input EchoState.

data EchoState #

A representation of the terminal input's current echoing state. Example values include echoOff and echoOn.

echoOff :: EchoState #

Indicates that the terminal's input echoing is (or should be) off.

echoOn :: EchoState #

Indicates that the terminal's input echoing is (or should be) on.

Alternative interface

getInputEcho :: IO Bool #

Return whether the terminal's echoing is on (True) or off (False).

Note that while this works on MinTTY, it is not as efficient as getInputEchoState, as it involves a somewhat expensive substring computation.

setInputEcho :: Bool -> IO () #

Set the terminal's echoing on (True) or off (False).