on master help sign in
Raise a VTY specific exception on missing TERM
7f899b5Eric Mertens
src/Graphics/Vty/Config.hs+29−10
@@ -1,4 +1,5 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DeriveDataTypeable #-}
2{-# LANGUAGE FlexibleContexts, FlexibleInstances #-}
3{-# LANGUAGE FlexibleContexts, FlexibleInstances #-}
3{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE ScopedTypeVariables #-}
5{-# LANGUAGE ScopedTypeVariables #-}
@@ -67,6 +68,7 @@
67module Graphics.Vty.Config
68module Graphics.Vty.Config
68 ( InputMap
69 ( InputMap
69 , Config(..)
70 , Config(..)
71+ , VtyConfigurationError(..)
70 , userConfig
72 , userConfig
71 , overrideEnvConfig
73 , overrideEnvConfig
72 , standardIOConfig
74 , standardIOConfig
@@ -82,12 +84,13 @@ import Prelude hiding (catch)
82
84
83import Control.Applicative hiding (many)
85import Control.Applicative hiding (many)
84
86
85−import Control.Exception (catch, IOException)
87+import Control.Exception (catch, IOException, Exception(..), throwIO)
86import Control.Monad (liftM, guard, void)
88import Control.Monad (liftM, guard, void)
87
89
88import qualified Data.ByteString as BS
90import qualified Data.ByteString as BS
89import Data.Default
91import Data.Default
90import Data.Monoid
92import Data.Monoid
93+import Data.Typeable (Typeable)
91
94
92import Graphics.Vty.Input.Events
95import Graphics.Vty.Input.Events
93
96
@@ -102,6 +105,16 @@ import Text.Parsec hiding ((<|>))
102import Text.Parsec.Token ( GenLanguageDef(..) )
105import Text.Parsec.Token ( GenLanguageDef(..) )
103import qualified Text.Parsec.Token as P
106import qualified Text.Parsec.Token as P
104
107
108+-- | Type of errors that can be thrown when configuring VTY
109+data VtyConfigurationError
110+ = VtyMissingTermEnvVar -- ^ TERM environment variable not set
111+ deriving (Show, Eq, Typeable)
112+
113+instance Exception VtyConfigurationError where
114+#if MIN_VERSION_base(4,8,0)
115+ displayException VtyMissingTermEnvVar = "TERM environment variable not set"
116+#endif
117+
105-- | Mappings from input bytes to event in the order specified. Later entries take precedence over
118-- | Mappings from input bytes to event in the order specified. Later entries take precedence over
106-- earlier in the case multiple entries have the same byte string.
119-- earlier in the case multiple entries have the same byte string.
107type InputMap = [(Maybe String, String, Event)]
120type InputMap = [(Maybe String, String, Event)]
@@ -173,17 +186,23 @@ overrideEnvConfig = do
173 d <- getEnv "VTY_DEBUG_LOG"
186 d <- getEnv "VTY_DEBUG_LOG"
174 return $ def { debugLog = d }
187 return $ def { debugLog = d }
175
188
189+-- | Configures VTY using defaults suitable for terminals. This action
190+-- can raise 'VtyConfigurationError'.
176standardIOConfig :: IO Config
191standardIOConfig :: IO Config
177standardIOConfig = do
192standardIOConfig = do
178− Just t <- getEnv "TERM"
193+ mb <- getEnv "TERM"
194+ case mb of
195+ Nothing -> throwIO VtyMissingTermEnvVar
196+ Just t ->
179− return $ def { vmin = Just 1
197+ return def
198+ { vmin = Just 1
180− , mouseMode = Just False
199+ , mouseMode = Just False
181− , bracketedPasteMode = Just False
200+ , bracketedPasteMode = Just False
182− , vtime = Just 100
201+ , vtime = Just 100
183− , inputFd = Just stdInput
202+ , inputFd = Just stdInput
184− , outputFd = Just stdOutput
203+ , outputFd = Just stdOutput
185− , termName = Just t
204+ , termName = Just t
186− }
205+ }
187
206
188parseConfigFile :: FilePath -> IO Config
207parseConfigFile :: FilePath -> IO Config
189parseConfigFile path = do
208parseConfigFile path = do