@@ -66,6 +66,10 @@ module Graphics.Vty.Config
66 , parseConfigFile
66 , parseConfigFile
67 , defaultConfig
67 , defaultConfig
68 , getTtyEraseChar
68 , getTtyEraseChar
72+ , terminalWidthTablePath
@@ -91,6 +95,7 @@ import GHC.Generics
92import System.Directory (getAppUserDataDirectory)
96import System.Directory (getAppUserDataDirectory)
93import System.Environment (lookupEnv)
97import System.Environment (lookupEnv)
98+import System.FilePath ((</>))
94import System.Posix.IO (stdInput, stdOutput)
99import System.Posix.IO (stdInput, stdOutput)
95import System.Posix.Types (Fd(..))
100import System.Posix.Types (Fd(..))
96import Foreign.C.Types (CInt(..), CChar(..))
101import Foreign.C.Types (CInt(..), CChar(..))
@@ -175,15 +180,30 @@ instance Monoid Config where
175 mappend = (<>)
180 mappend = (<>)
183+vtyDataDirectory :: IO FilePath
184+vtyDataDirectory = getAppUserDataDirectory "vty"
178-- | Load a configuration from @'getAppUserDataDirectory'/config@ and
186-- | Load a configuration from @'getAppUserDataDirectory'/config@ and
179-- @$VTY_CONFIG_FILE@.
187-- @$VTY_CONFIG_FILE@.
180userConfig :: IO Config
188userConfig :: IO Config
181userConfig = do
189userConfig = do
182− configFile <- (mappend <$> getAppUserDataDirectory "vty" <*> pure "/config") >>= parseConfigFile
190+ configFile <- (mappend <$> vtyDataDirectory <*> pure "/config") >>= parseConfigFile
183 overrideConfig <- maybe (return defaultConfig) parseConfigFile =<< lookupEnv "VTY_CONFIG_FILE"
191 overrideConfig <- maybe (return defaultConfig) parseConfigFile =<< lookupEnv "VTY_CONFIG_FILE"
184 let base = configFile <> overrideConfig
192 let base = configFile <> overrideConfig
185 mappend base <$> overrideEnvConfig
193 mappend base <$> overrideEnvConfig
195+widthTableFilename :: String -> String
196+widthTableFilename term = "width_table_" <> term <> ".dat"
198+terminalWidthTablePath :: IO (Maybe FilePath)
199+terminalWidthTablePath = do
200+ dataDir <- vtyDataDirectory
201+ result <- lookupEnv "TERM"
203+ Nothing -> return Nothing
205+ return $ Just $ dataDir </> widthTableFilename term
187overrideEnvConfig :: IO Config
207overrideEnvConfig :: IO Config
188overrideEnvConfig = do
208overrideEnvConfig = do
189 d <- lookupEnv "VTY_DEBUG_LOG"
209 d <- lookupEnv "VTY_DEBUG_LOG"