From 364345c59d190c720d639397e4da87631212636d Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sun, 25 Dec 2016 18:24:42 +0300 Subject: rename source files --- apps/ListPath.hs | 82 ------------------------------------------------------- apps/ListPaths.hs | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ windows-env.cabal | 2 +- 3 files changed, 83 insertions(+), 83 deletions(-) delete mode 100644 apps/ListPath.hs create mode 100644 apps/ListPaths.hs diff --git a/apps/ListPath.hs b/apps/ListPath.hs deleted file mode 100644 index 65d374b..0000000 --- a/apps/ListPath.hs +++ /dev/null @@ -1,82 +0,0 @@ --- | --- Copyright : (c) 2015 Egor Tensin --- License : MIT --- Maintainer : Egor.Tensin@gmail.com --- Stability : experimental - -module Main (main) where - -import Control.Monad (filterM) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Except (runExceptT) -import Data.Maybe (fromMaybe) -import System.Directory (doesDirectoryExist) -import System.Environment (lookupEnv) -import System.IO.Error (ioError) - -import Options.Applicative - -import qualified Windows.Environment as Env - -data WhichPaths = All | ExistingOnly | MissingOnly - deriving (Eq, Show) - -shouldListPath :: WhichPaths -> Env.VarValue -> IO Bool -shouldListPath All = return . const True -shouldListPath ExistingOnly = doesDirectoryExist -shouldListPath MissingOnly = fmap not . doesDirectoryExist - -data Source = Environment | Registry Env.Profile - deriving (Eq, Show) - -data Options = Options - { optName :: Env.VarName - , optWhichPaths :: WhichPaths - , optSource :: Source - } deriving (Eq, Show) - -optionParser :: Parser Options -optionParser = Options - <$> optNameDesc - <*> optWhichPathsDesc - <*> optSourceDesc - where - optNameDesc = strOption - $ long "name" <> short 'n' - <> metavar "NAME" <> value "PATH" - <> help "Variable name ('PATH' by default)" - optWhichPathsDesc = pure All - <|> flag' ExistingOnly (long "existing" <> short 'e' - <> help "List existing paths only") - <|> flag' MissingOnly (long "missing" <> short 'm' - <> help "List missing paths only") - optSourceDesc = pure Environment - <|> flag' (Registry Env.CurrentUser) (long "user" <> short 'u' - <> help "List current user's paths only") - <|> flag' (Registry Env.AllUsers) (long "global" <> short 'g' - <> help "List global (all users') paths only") - -main :: IO () -main = execParser parser >>= listPath - where - parser = info (helper <*> optionParser) $ - fullDesc <> progDesc "List directories in your PATH" - -listPath :: Options -> IO () -listPath options = runExceptT doListPath >>= either ioError return - where - varName = optName options - whichPaths = optWhichPaths options - source = optSource options - - query = queryFrom source - - queryFrom Environment = lift $ fromMaybe "" <$> lookupEnv varName - queryFrom (Registry profile) = Env.query profile varName - - doListPath = do - paths <- query - lift $ printPaths $ Env.pathSplit paths - - printPaths paths = - filterM (shouldListPath whichPaths) paths >>= mapM_ putStrLn diff --git a/apps/ListPaths.hs b/apps/ListPaths.hs new file mode 100644 index 0000000..65d374b --- /dev/null +++ b/apps/ListPaths.hs @@ -0,0 +1,82 @@ +-- | +-- Copyright : (c) 2015 Egor Tensin +-- License : MIT +-- Maintainer : Egor.Tensin@gmail.com +-- Stability : experimental + +module Main (main) where + +import Control.Monad (filterM) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Except (runExceptT) +import Data.Maybe (fromMaybe) +import System.Directory (doesDirectoryExist) +import System.Environment (lookupEnv) +import System.IO.Error (ioError) + +import Options.Applicative + +import qualified Windows.Environment as Env + +data WhichPaths = All | ExistingOnly | MissingOnly + deriving (Eq, Show) + +shouldListPath :: WhichPaths -> Env.VarValue -> IO Bool +shouldListPath All = return . const True +shouldListPath ExistingOnly = doesDirectoryExist +shouldListPath MissingOnly = fmap not . doesDirectoryExist + +data Source = Environment | Registry Env.Profile + deriving (Eq, Show) + +data Options = Options + { optName :: Env.VarName + , optWhichPaths :: WhichPaths + , optSource :: Source + } deriving (Eq, Show) + +optionParser :: Parser Options +optionParser = Options + <$> optNameDesc + <*> optWhichPathsDesc + <*> optSourceDesc + where + optNameDesc = strOption + $ long "name" <> short 'n' + <> metavar "NAME" <> value "PATH" + <> help "Variable name ('PATH' by default)" + optWhichPathsDesc = pure All + <|> flag' ExistingOnly (long "existing" <> short 'e' + <> help "List existing paths only") + <|> flag' MissingOnly (long "missing" <> short 'm' + <> help "List missing paths only") + optSourceDesc = pure Environment + <|> flag' (Registry Env.CurrentUser) (long "user" <> short 'u' + <> help "List current user's paths only") + <|> flag' (Registry Env.AllUsers) (long "global" <> short 'g' + <> help "List global (all users') paths only") + +main :: IO () +main = execParser parser >>= listPath + where + parser = info (helper <*> optionParser) $ + fullDesc <> progDesc "List directories in your PATH" + +listPath :: Options -> IO () +listPath options = runExceptT doListPath >>= either ioError return + where + varName = optName options + whichPaths = optWhichPaths options + source = optSource options + + query = queryFrom source + + queryFrom Environment = lift $ fromMaybe "" <$> lookupEnv varName + queryFrom (Registry profile) = Env.query profile varName + + doListPath = do + paths <- query + lift $ printPaths $ Env.pathSplit paths + + printPaths paths = + filterM (shouldListPath whichPaths) paths >>= mapM_ putStrLn diff --git a/windows-env.cabal b/windows-env.cabal index 2a00ff5..2be4095 100644 --- a/windows-env.cabal +++ b/windows-env.cabal @@ -39,7 +39,7 @@ executable addpath executable paths hs-source-dirs: apps - main-is: ListPath.hs + main-is: ListPaths.hs other-modules: Prompt, PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base, directory -- cgit v1.2.3