31 lines
958 B
Haskell
31 lines
958 B
Haskell
{-# LANGUAGE BangPatterns #-}
|
|
{-# LANGUAGE DeriveDataTypeable #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
{-# LANGUAGE RebindableSyntax #-}
|
|
{-# LANGUAGE NoImplicitPrelude #-}
|
|
{-# LANGUAGE CPP #-}
|
|
module Basement.Terminal
|
|
( initialize
|
|
, getDimensions
|
|
) where
|
|
|
|
import Basement.Compat.Base
|
|
import Basement.Terminal.Size (getDimensions)
|
|
#ifdef mingw32_HOST_OS
|
|
import System.IO (hSetEncoding, utf8, hPutStrLn, stderr, stdin, stdout)
|
|
import System.Win32.Console (setConsoleCP, setConsoleOutputCP, getConsoleCP, getConsoleOutputCP)
|
|
#endif
|
|
|
|
initialize :: IO ()
|
|
initialize = do
|
|
#ifdef mingw32_HOST_OS
|
|
query getConsoleOutputCP (\e -> setConsoleOutputCP e >> hSetEncoding stdout utf8 >> hSetEncoding stderr utf8) utf8Code
|
|
query getConsoleCP (\e -> setConsoleCP e >> hSetEncoding stdin utf8) utf8Code
|
|
where
|
|
utf8Code = 65001
|
|
query get set expected = do
|
|
v <- get
|
|
if v == expected then pure () else set expected
|
|
#else
|
|
pure ()
|
|
#endif
|