@@ -36,19 +36,22 @@ module Graphics.Vty.Config where
37import Control.Applicative hiding (many)
37import Control.Applicative hiding (many)
39−import Control.Exception (catch, IOException)
39+import Control.Exception (tryJust, catch, IOException)
40−import Control.Monad (void)
40+import Control.Monad (void, guard)
41import Control.Monad.Trans.Class
41import Control.Monad.Trans.Class
42import Control.Monad.Trans.Writer
42import Control.Monad.Trans.Writer
44import qualified Data.ByteString as BS
44import qualified Data.ByteString as BS
45import Data.Default
45import Data.Default
46+import Data.Either (either)
46import Data.Monoid
47import Data.Monoid
48import Graphics.Vty.Input.Events
49import Graphics.Vty.Input.Events
50import System.Directory (getAppUserDataDirectory)
51import System.Directory (getAppUserDataDirectory)
51−import System.Environment (lookupEnv)
52+import System.Environment (getEnv)
53+import System.IO.Error (isDoesNotExistError)
52import Text.Parsec hiding ((<|>))
55import Text.Parsec hiding ((<|>))
53import Text.Parsec.Token ( GenLanguageDef(..) )
56import Text.Parsec.Token ( GenLanguageDef(..) )
54import qualified Text.Parsec.Token as P
57import qualified Text.Parsec.Token as P
@@ -87,7 +90,8 @@ type ConfigParser s a = ParsecT s () (Writer Config) a
87userConfig :: IO Config
90userConfig :: IO Config
88userConfig = do
91userConfig = do
89 vtyConfig <- (mappend <$> getAppUserDataDirectory "vty" <*> pure "/config") >>= parseConfigFile
92 vtyConfig <- (mappend <$> getAppUserDataDirectory "vty" <*> pure "/config") >>= parseConfigFile
90− overrideConfig <- lookupEnv "VTY_CONFIG_FILE" >>= maybe (return def) parseConfigFile
93+ overridePath <- tryJust (guard . isDoesNotExistError) $ getEnv "VTY_CONFIG_FILE"
94+ overrideConfig <- either (const $ return def) parseConfigFile overridePath
91 return $ vtyConfig `mappend` overrideConfig
95 return $ vtyConfig `mappend` overrideConfig
93parseConfigFile :: FilePath -> IO Config
97parseConfigFile :: FilePath -> IO Config