diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2017-03-25 05:56:02 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2017-03-25 05:56:02 +0300 |
commit | 80f6847645459dfd21e531946e1eeaf2384a2dff (patch) | |
tree | 8a93e818fe647974bd724be08092e9475d03425f /apps/AddPath.hs | |
parent | add README to the package (diff) | |
download | windows-env-80f6847645459dfd21e531946e1eeaf2384a2dff.tar.gz windows-env-80f6847645459dfd21e531946e1eeaf2384a2dff.zip |
rename directories
Diffstat (limited to 'apps/AddPath.hs')
-rw-r--r-- | apps/AddPath.hs | 83 |
1 files changed, 0 insertions, 83 deletions
diff --git a/apps/AddPath.hs b/apps/AddPath.hs deleted file mode 100644 index 73d86d0..0000000 --- a/apps/AddPath.hs +++ /dev/null @@ -1,83 +0,0 @@ --- | --- Copyright : (c) 2015 Egor Tensin <Egor.Tensin@gmail.com> --- License : MIT --- Maintainer : Egor.Tensin@gmail.com --- Stability : experimental --- Portability : Windows-only - -module Main (main) where - -import Control.Monad (void, when) -import Control.Monad.Trans.Except (catchE, runExceptT, throwE) -import Data.List (union) -import System.IO.Error (ioError, isDoesNotExistError) - -import Options.Applicative - -import qualified WindowsEnv - -import Prompt -import PromptMessage - -data Options = Options - { optName :: WindowsEnv.VarName - , optYes :: Bool - , optGlobal :: Bool - , optPaths :: [WindowsEnv.VarValue] - } deriving (Eq, Show) - -optionParser :: Parser Options -optionParser = Options - <$> optNameDesc - <*> optYesDesc - <*> optGlobalDesc - <*> optPathsDesc - where - optNameDesc = strOption - $ long "name" <> short 'n' - <> metavar "NAME" <> value "PATH" - <> help "Variable name ('PATH' by default)" - optYesDesc = switch - $ long "yes" <> short 'y' - <> help "Skip confirmation prompt" - optGlobalDesc = switch - $ long "global" <> short 'g' - <> help "Add for all users" - optPathsDesc = many $ argument str - $ metavar "PATH" - <> help "Directories to add" - -main :: IO () -main = execParser parser >>= addPath - where - parser = info (helper <*> optionParser) $ - fullDesc <> progDesc "Add directories to your PATH" - -addPath :: Options -> IO () -addPath options = runExceptT doAddPath >>= either ioError return - where - varName = optName options - pathsToAdd = optPaths options - - forAllUsers = optGlobal options - profile - | forAllUsers = WindowsEnv.AllUsers - | otherwise = WindowsEnv.CurrentUser - - skipPrompt = optYes options - - emptyIfMissing e - | isDoesNotExistError e = return "" - | otherwise = throwE e - - doAddPath = do - oldValue <- WindowsEnv.query profile varName `catchE` emptyIfMissing - let oldPaths = WindowsEnv.pathSplit oldValue - let newPaths = oldPaths `union` pathsToAdd - when (length oldPaths /= length newPaths) $ do - let newValue = WindowsEnv.pathJoin newPaths - let promptAnd = if skipPrompt - then withoutPrompt - else withPrompt $ oldNewMessage profile varName oldValue newValue - let engrave = WindowsEnv.engrave profile varName newValue - void $ promptAnd engrave |