From 3c7c985982ee3de6b710cca1b75cdd82c531fe42 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 14 Mar 2026 11:40:37 +0100 Subject: init --- lib/Terminal.hs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/Terminal.hs (limited to 'lib') diff --git a/lib/Terminal.hs b/lib/Terminal.hs new file mode 100644 index 0000000..607ca23 --- /dev/null +++ b/lib/Terminal.hs @@ -0,0 +1,41 @@ +{-# LANGUAGE RecordWildCards #-} +module Terminal + ( Config(..) + , setConfig + , withConfig + ) + where + +import Control.Exception +import Data.List +import System.IO + +data Config = Config + { hin :: Handle + , hout :: Handle + , hinEcho :: Bool + , hinBufferMode :: BufferMode + , houtBufferMode :: BufferMode + , decsetPm :: [Int] + , decrstPm :: [Int] + } + +setConfig :: Config -> IO Config +setConfig Config{..} = get <* set where + get = Config <$> pure hin + <*> pure hout + <*> hGetEcho hin + <*> hGetBuffering hin + <*> hGetBuffering hout + <*> pure decrstPm + <*> pure decsetPm + set = do + hSetEcho hin hinEcho + hSetBuffering hin hinBufferMode + hSetBuffering hout houtBufferMode + hPutStr hout $ "\ESC[?" <> intercalate ";" (map show decsetPm) <> "h" + hPutStr hout $ "\ESC[?" <> intercalate ";" (map show decrstPm) <> "l" + hFlush hout + +withConfig :: Config -> IO a -> IO a +withConfig s = bracket (setConfig s) setConfig . const -- cgit v1.2.3