{- - Copyright 2015 Egor Tensin - This file is licensed under the terms of the MIT License. - See LICENSE.txt for details. -} module Main (main) where import Control.Monad (when) import Options.Applicative import qualified Environment data Options = Options { name :: String , global :: Bool , paths :: [String] } deriving (Eq, Show) options = Options <$> nameOption <*> globalOption <*> pathArgs where nameOption = strOption $ long "name" <> short 'n' <> metavar "NAME" <> value "PATH" <> help "Specify variable name ('PATH' by default)" globalOption = switch $ long "global" <> short 'g' <> help "Whether to remove for all users" pathArgs = many $ argument str $ metavar "PATH" <> help "Directory path(s)" main :: IO () main = execParser parser >>= removePath where parser = info (helper <*> options) $ fullDesc <> progDesc "Remove directories from your PATH" removePath :: Options -> IO () removePath options = do let varName = name options userVal <- Environment.queryFromRegistry Environment.CurrentUserEnvironment varName let userValParts = Environment.splitPaths userVal let newUserValParts = filter (flip notElem $ paths options) userValParts when (length userValParts /= length newUserValParts) $ do Environment.saveToRegistryWithPrompt Environment.CurrentUserEnvironment varName $ Environment.joinPaths newUserValParts when (global options) $ do globalVal <- Environment.queryFromRegistry Environment.AllUsersEnvironment varName let globalValParts = Environment.splitPaths globalVal let newGlobalValParts = filter (flip notElem $ paths options) globalValParts when (length globalValParts /= length newGlobalValParts) $ do Environment.saveToRegistryWithPrompt Environment.AllUsersEnvironment varName $ Environment.joinPaths newGlobalValParts