aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--apps/AddPath.hs20
-rw-r--r--apps/Banner.hs31
-rw-r--r--apps/FixNtSymbolPath.hs21
-rw-r--r--apps/Prompt.hs (renamed from apps/Utils.hs)22
-rw-r--r--apps/RemovePath.hs13
-rw-r--r--apps/SetEnv.hs19
-rw-r--r--apps/UnsetEnv.hs19
-rw-r--r--windows-env.cabal6
8 files changed, 86 insertions, 65 deletions
diff --git a/apps/AddPath.hs b/apps/AddPath.hs
index db0dcc2..343207c 100644
--- a/apps/AddPath.hs
+++ b/apps/AddPath.hs
@@ -9,12 +9,12 @@ module Main (main) where
import Control.Monad (void, when)
import Data.List (union)
import Data.Maybe (fromMaybe)
-import Text.Printf (printf)
import Options.Applicative
import qualified Windows.Environment as Env
-import qualified Utils
+import Banner
+import Prompt
data Options = Options
{ optName :: Env.VarName
@@ -56,18 +56,18 @@ addPath options = do
let newPaths = union oldPaths pathsToAdd
when (length oldPaths /= length newPaths) $ do
let newValue = Env.pathJoin newPaths
- let promptBanner = Utils.engraveBanner profile varName oldValue newValue
- void $ prompt promptBanner $ Env.engrave profile varName newValue
+ let banner = engraveBanner profile varName oldValue newValue
+ void $ prompt banner $ Env.engrave profile varName newValue
where
varName = optName options
pathsToAdd = optPaths options
forAllUsers = optGlobal options
- profile = if forAllUsers
- then Env.AllUsers
- else Env.CurrentUser
+ profile
+ | forAllUsers = Env.AllUsers
+ | otherwise = Env.CurrentUser
skipPrompt = optYes options
- prompt = if skipPrompt
- then const Utils.withoutPrompt
- else Utils.withPrompt
+ prompt
+ | skipPrompt = const withoutPrompt
+ | otherwise = withPrompt
diff --git a/apps/Banner.hs b/apps/Banner.hs
new file mode 100644
index 0000000..c25741b
--- /dev/null
+++ b/apps/Banner.hs
@@ -0,0 +1,31 @@
+{-
+ - Copyright 2016 Egor Tensin <Egor.Tensin@gmail.com>
+ - This file is licensed under the terms of the MIT License.
+ - See LICENSE.txt for details.
+-}
+
+module Banner
+ ( engraveBanner
+ , wipeBanner
+ ) where
+
+import Data.Maybe (fromJust, isJust)
+import Text.Printf (printf)
+
+import qualified Windows.Environment as Env
+
+engraveBanner :: Env.Profile -> Env.VarName -> Maybe Env.VarValue -> Env.VarValue -> String
+engraveBanner profile name oldValue newValue =
+ warning ++ valuesStr
+ where
+ warning = printf "Saving variable '%s' to '%s'...\n" name (Env.profileKeyPath profile)
+ valuesStr
+ | isJust oldValue = oldValueStr ++ newValueStr
+ | otherwise = theValueStr
+ oldValueStr = printf "\tOld value: %s\n" $ fromJust oldValue
+ newValueStr = printf "\tNew value: %s\n" newValue
+ theValueStr = printf "\tValue: %s\n" newValue
+
+wipeBanner :: Env.Profile -> Env.VarName -> String
+wipeBanner profile name =
+ printf "Deleting variable '%s' from '%s'...\n" name (Env.profileKeyPath profile)
diff --git a/apps/FixNtSymbolPath.hs b/apps/FixNtSymbolPath.hs
index 8c999a8..219ceb2 100644
--- a/apps/FixNtSymbolPath.hs
+++ b/apps/FixNtSymbolPath.hs
@@ -15,7 +15,8 @@ import System.FilePath (combine)
import Options.Applicative
import qualified Windows.Environment as Env
-import qualified Utils
+import Banner
+import Prompt
data Options = Options
{ optYes :: Bool
@@ -72,22 +73,22 @@ fixNtSymbolPath options = do
let newPaths = union oldPaths $ dirPaths remoteDirs
when (length oldPaths /= length newPaths) $ do
let newValue = Env.pathJoin newPaths
- let promptBanner = Utils.engraveBanner profile varName oldValue newValue
- confirmed <- prompt promptBanner $ Env.engrave profile varName newValue
- when confirmed $
+ let banner = engraveBanner profile varName oldValue newValue
+ agreed <- prompt banner $ Env.engrave profile varName newValue
+ when agreed $
createDirs localDirs
where
varName = "_NT_SYMBOL_PATH"
forAllUsers = optGlobal options
- profile = if forAllUsers
- then Env.AllUsers
- else Env.CurrentUser
+ profile
+ | forAllUsers = Env.AllUsers
+ | otherwise = Env.CurrentUser
skipPrompt = optYes options
- prompt = if skipPrompt
- then const Utils.withoutPrompt
- else Utils.withPrompt
+ prompt
+ | skipPrompt = const withoutPrompt
+ | otherwise = withPrompt
main :: IO ()
main = execParser parser >>= fixNtSymbolPath
diff --git a/apps/Utils.hs b/apps/Prompt.hs
index e34950f..97c23fa 100644
--- a/apps/Utils.hs
+++ b/apps/Prompt.hs
@@ -4,21 +4,14 @@
- See LICENSE.txt for details.
-}
-module Utils
+module Prompt
( withPrompt
, withoutPrompt
-
- , engraveBanner
- , wipeBanner
) where
import Control.Monad (liftM, void, when)
-import Data.Maybe (fromJust, isJust)
import Data.Char (toLower)
import System.IO (hFlush, stdout)
-import Text.Printf (printf)
-
-import Windows.Environment (Profile, profileKeyPath, VarName, VarValue)
prompt :: String -> IO String
prompt banner = do
@@ -51,16 +44,3 @@ withPrompt banner m = do
withoutPrompt :: IO a -> IO Bool
withoutPrompt m = m >> return True
-
-engraveBanner :: Profile -> VarName -> Maybe VarValue -> VarValue -> String
-engraveBanner profile name oldValue newValue =
- header ++ values
- where
- header = printf "Saving variable '%s' to '%s'...\n" name (profileKeyPath profile)
- values = if isJust oldValue
- then printf "\tOld value: %s\n\tNew value: %s\n" (fromJust oldValue) newValue
- else printf "\tValue: %s\n" newValue
-
-wipeBanner :: Profile -> VarName -> String
-wipeBanner profile name =
- printf "Deleting variable '%s' from '%s'...\n" name (profileKeyPath profile)
diff --git a/apps/RemovePath.hs b/apps/RemovePath.hs
index ecc56c0..871ebef 100644
--- a/apps/RemovePath.hs
+++ b/apps/RemovePath.hs
@@ -13,7 +13,8 @@ import Data.Maybe (fromJust, isJust)
import Options.Applicative
import qualified Windows.Environment as Env
-import qualified Utils
+import Banner
+import Prompt
data Options = Options
{ optName :: Env.VarName
@@ -65,10 +66,10 @@ removePath options = do
let newPaths = oldPaths \\ pathsToRemove
when (length oldPaths /= length newPaths) $ do
let newValue = Env.pathJoin newPaths
- let promptBanner = Utils.engraveBanner profile varName oldValue newValue
- void $ prompt promptBanner $ Env.engrave profile varName newValue
+ let banner = engraveBanner profile varName oldValue newValue
+ void $ prompt banner $ Env.engrave profile varName newValue
skipPrompt = optYes options
- prompt = if skipPrompt
- then const Utils.withoutPrompt
- else Utils.withPrompt
+ prompt
+ | skipPrompt = const withoutPrompt
+ | otherwise = withPrompt
diff --git a/apps/SetEnv.hs b/apps/SetEnv.hs
index a48fbe6..e94e350 100644
--- a/apps/SetEnv.hs
+++ b/apps/SetEnv.hs
@@ -11,7 +11,8 @@ import Control.Monad (void)
import Options.Applicative
import qualified Windows.Environment as Env
-import qualified Utils
+import Banner
+import Prompt
data Options = Options
{ optYes :: Bool
@@ -47,19 +48,19 @@ main = execParser parser >>= setEnv
fullDesc <> progDesc "Set environment variable"
setEnv :: Options -> IO ()
-setEnv options = void $ prompt confirmationBanner $ Env.engrave profile varName varValue
+setEnv options = void $ prompt banner $ Env.engrave profile varName varValue
where
- confirmationBanner = Utils.engraveBanner profile varName Nothing varValue
+ banner = engraveBanner profile varName Nothing varValue
varName = optName options
varValue = optValue options
forAllUsers = optGlobal options
- profile = if forAllUsers
- then Env.AllUsers
- else Env.CurrentUser
+ profile
+ | forAllUsers = Env.AllUsers
+ | otherwise = Env.CurrentUser
skipPrompt = optYes options
- prompt = if skipPrompt
- then const Utils.withoutPrompt
- else Utils.withPrompt
+ prompt
+ | skipPrompt = const withoutPrompt
+ | otherwise = withPrompt
diff --git a/apps/UnsetEnv.hs b/apps/UnsetEnv.hs
index 88101d9..eebef00 100644
--- a/apps/UnsetEnv.hs
+++ b/apps/UnsetEnv.hs
@@ -11,7 +11,8 @@ import Control.Monad (void)
import Options.Applicative
import qualified Windows.Environment as Env
-import qualified Utils
+import Banner
+import Prompt
data Options = Options
{ optYes :: Bool
@@ -42,18 +43,18 @@ main = execParser parser >>= unsetEnv
fullDesc <> progDesc "Unset environment variable"
unsetEnv :: Options -> IO ()
-unsetEnv options = void $ prompt confirmationBanner $ Env.wipe profile varName
+unsetEnv options = void $ prompt banner $ Env.wipe profile varName
where
- confirmationBanner = Utils.wipeBanner profile varName
+ banner = wipeBanner profile varName
varName = optName options
forAllUsers = optGlobal options
- profile = if forAllUsers
- then Env.AllUsers
- else Env.CurrentUser
+ profile
+ | forAllUsers = Env.AllUsers
+ | otherwise = Env.CurrentUser
skipPrompt = optYes options
- prompt = if skipPrompt
- then const Utils.withoutPrompt
- else Utils.withPrompt
+ prompt
+ | skipPrompt = const withoutPrompt
+ | otherwise = withPrompt
diff --git a/windows-env.cabal b/windows-env.cabal
index d34684f..5a2857d 100644
--- a/windows-env.cabal
+++ b/windows-env.cabal
@@ -24,6 +24,7 @@ library
executable add_path
hs-source-dirs: apps
main-is: AddPath.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base
, optparse-applicative
@@ -33,6 +34,7 @@ executable add_path
executable fix_nt_symbol_path
hs-source-dirs: apps
main-is: FixNtSymbolPath.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base, directory, filepath
, optparse-applicative
@@ -42,6 +44,7 @@ executable fix_nt_symbol_path
executable list_path
hs-source-dirs: apps
main-is: ListPath.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base, directory
, optparse-applicative
@@ -51,6 +54,7 @@ executable list_path
executable remove_path
hs-source-dirs: apps
main-is: RemovePath.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base
, optparse-applicative
@@ -60,6 +64,7 @@ executable remove_path
executable set_env
hs-source-dirs: apps
main-is: SetEnv.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base
, optparse-applicative
@@ -69,6 +74,7 @@ executable set_env
executable unset_env
hs-source-dirs: apps
main-is: UnsetEnv.hs
+ other-modules: Banner, Prompt
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends: base
, optparse-applicative