diff options
author | jao <jao@gnu.org> | 2018-11-25 03:49:15 +0000 |
---|---|---|
committer | jao <jao@gnu.org> | 2018-11-25 03:49:15 +0000 |
commit | 3852d6b5e354b9b03b30f04803a87b2224aeb85c (patch) | |
tree | 88213d8fd2e2c5454e3a9ba696ef644c16b8f71b /src/lib/Xmobar/System | |
parent | 0691071716e6cfa6040044be0ca782771fe6104c (diff) | |
download | xmobar-3852d6b5e354b9b03b30f04803a87b2224aeb85c.tar.gz xmobar-3852d6b5e354b9b03b30f04803a87b2224aeb85c.tar.bz2 |
Xmobar.System.Environment
Diffstat (limited to 'src/lib/Xmobar/System')
-rw-r--r-- | src/lib/Xmobar/System/Environment.hs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/lib/Xmobar/System/Environment.hs b/src/lib/Xmobar/System/Environment.hs new file mode 100644 index 0000000..86197db --- /dev/null +++ b/src/lib/Xmobar/System/Environment.hs @@ -0,0 +1,49 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMobar.Environment +-- Copyright : (c) William Song +-- License : BSD-style (see LICENSE) +-- +-- Maintainer : Will Song <incertia@incertia.net> +-- Stability : stable +-- Portability : portable +-- +-- A function to expand environment variables in strings +-- +----------------------------------------------------------------------------- +module Xmobar.System.Environment(expandEnv) where + +import Control.Applicative ((<$>)) +import Data.Maybe (fromMaybe) +import System.Environment (lookupEnv) + +expandEnv :: String -> IO String +expandEnv "" = return "" +expandEnv (c:s) = case c of + '$' -> do + envVar <- fromMaybe "" <$> lookupEnv e + remainder <- expandEnv s' + return $ envVar ++ remainder + where (e, s') = getVar s + getVar "" = ("", "") + getVar ('{':s'') = (takeUntil "}" s'', drop 1 . dropUntil "}" $ s'') + getVar s'' = (takeUntil filterstr s'', dropUntil filterstr s'') + filterstr = ",./? \t;:\"'~`!@#$%^&*()<>-+=\\|" + takeUntil f = takeWhile (not . flip elem f) + dropUntil f = dropWhile (not . flip elem f) + + '\\' -> case s == "" of + True -> return "\\" + False -> do + remainder <- expandEnv $ drop 1 s + return $ escString s ++ remainder + where escString s' = let (cc:_) = s' in + case cc of + 't' -> "\t" + 'n' -> "\n" + '$' -> "$" + _ -> [cc] + + _ -> do + remainder <- expandEnv s + return $ c : remainder |