vty-unix-0.2.0.0: src/Graphics/Vty/Platform/Unix.hs
-- | The Unix implementation entry point for Vty. This module and
-- @Graphics.Vty.Platform.Unix.Settings@ are the only modules you should
-- ever need to import from this package; the rest is exported for
-- testing purposes only.
--
-- This module provides 'mkVty' to create Vty handles for Unix
-- terminals. Once a 'Vty' handle has been created, the rest of Vty's
-- API can be used it with as usual; see the @vty@ package for details.
module Graphics.Vty.Platform.Unix
( mkVty
, mkVtyWithSettings
)
where
import Control.Monad (when)
import Graphics.Vty (Vty, installCustomWidthTable, mkVtyFromPair)
import Graphics.Vty.Config (VtyUserConfig(..))
import Graphics.Vty.Platform.Unix.Settings
import Graphics.Vty.Platform.Unix.Output
import Graphics.Vty.Platform.Unix.Input
-- | Create a Vty handle. At most one handle should be created
-- at a time for a given terminal device. Uses the default
-- values for 'UnixSettings'. If you need to override those, use
-- 'mkVtyWithSettings'.
--
-- This may raise
-- 'Graphics.Vty.Platform.Unix.Settings.VtyUnixConfigurationError'.
mkVty :: VtyUserConfig
-- ^ The user's Vty configuration or the result of
-- 'Graphics.Vty.Config.defaultConfig'.
-> IO Vty
mkVty userConfig =
mkVtyWithSettings userConfig =<< defaultSettings
-- | Create a Vty handle. At most one handle should be created
-- at a time for a given terminal device.
--
-- This also uses the value of @TERM@ to attempt to load and
-- install a Unicode character width table map. For details, see
-- 'Graphics.Vty.UnicodeWidthTable.Install.installUnicodeWidthTable'.
--
-- This may raise
-- 'Graphics.Vty.Platform.Unix.Settings.VtyUnixConfigurationError'.
mkVtyWithSettings :: VtyUserConfig
-- ^ The user's Vty configuration or the result of
-- 'defaultConfig'.
-> UnixSettings
-- ^ Runtime settings.
-> IO Vty
mkVtyWithSettings userConfig settings = do
when (configAllowCustomUnicodeWidthTables userConfig /= Just False) $
installCustomWidthTable (configDebugLog userConfig)
(Just $ settingTermName settings)
(configTermWidthMaps userConfig)
input <- buildInput userConfig settings
out <- buildOutput userConfig settings
mkVtyFromPair input out