From 136d7d82cdab45b50cafc7c3f53cac7805e3cb7c Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Sun, 26 Mar 2017 15:31:08 +0300 Subject: put utility modules to bin/Utils/ --- bin/AddPath.hs | 4 ++-- bin/Prompt.hs | 50 ---------------------------------------------- bin/PromptMessage.hs | 39 ------------------------------------ bin/RemovePath.hs | 4 ++-- bin/SetEnv.hs | 4 ++-- bin/UnsetEnv.hs | 4 ++-- bin/Utils/Prompt.hs | 50 ++++++++++++++++++++++++++++++++++++++++++++++ bin/Utils/PromptMessage.hs | 39 ++++++++++++++++++++++++++++++++++++ windows-env.cabal | 10 +++++----- 9 files changed, 102 insertions(+), 102 deletions(-) delete mode 100644 bin/Prompt.hs delete mode 100644 bin/PromptMessage.hs create mode 100644 bin/Utils/Prompt.hs create mode 100644 bin/Utils/PromptMessage.hs diff --git a/bin/AddPath.hs b/bin/AddPath.hs index 73d86d0..683b82f 100644 --- a/bin/AddPath.hs +++ b/bin/AddPath.hs @@ -16,8 +16,8 @@ import Options.Applicative import qualified WindowsEnv -import Prompt -import PromptMessage +import Utils.Prompt +import Utils.PromptMessage data Options = Options { optName :: WindowsEnv.VarName diff --git a/bin/Prompt.hs b/bin/Prompt.hs deleted file mode 100644 index 404c582..0000000 --- a/bin/Prompt.hs +++ /dev/null @@ -1,50 +0,0 @@ --- | --- Copyright : (c) 2015 Egor Tensin --- License : MIT --- Maintainer : Egor.Tensin@gmail.com --- Stability : experimental --- Portability : portable - -module Prompt - ( withPrompt - , withoutPrompt - ) where - -import Control.Monad (void, when) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Except (ExceptT) -import Data.Char (toLower) -import System.IO (hFlush, stdout) - -prompt :: String -> IO String -prompt msg = do - putStr msg - hFlush stdout - getLine - -promptYesNo :: String -> IO Bool -promptYesNo msg = do - response <- map toLower <$> prompt msg - if response `elem` yeses - then return True - else if response `elem` noes - then return False - else promptToContinue - where - yeses = ["y", "yes"] - noes = ["n", "no"] - -promptToContinue :: IO Bool -promptToContinue = promptYesNo "Continue? (y/n) " - -withPrompt :: String -> ExceptT IOError IO a -> ExceptT IOError IO Bool -withPrompt msg m = do - lift $ do - putStr msg - hFlush stdout - agreed <- lift promptToContinue - when agreed $ void m - return agreed - -withoutPrompt :: ExceptT IOError IO a -> ExceptT IOError IO Bool -withoutPrompt m = m >> return True diff --git a/bin/PromptMessage.hs b/bin/PromptMessage.hs deleted file mode 100644 index a3ff776..0000000 --- a/bin/PromptMessage.hs +++ /dev/null @@ -1,39 +0,0 @@ --- | --- Copyright : (c) 2016 Egor Tensin --- License : MIT --- Maintainer : Egor.Tensin@gmail.com --- Stability : experimental --- Portability : Windows-only - -module PromptMessage - ( oldNewMessage - , newMessage - , wipeMessage - ) where - -import Text.Printf (printf) - -import qualified WindowsEnv - -oldNewMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> WindowsEnv.VarValue -> String -oldNewMessage profile name oldValue newValue = - descrMsg ++ oldValueMsg ++ newValueMsg - where - profileKey = WindowsEnv.profileKeyPath profile - descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey) - oldValueMsg = printf "\tOld value: %s\n" oldValue - newValueMsg = printf "\tNew value: %s\n" newValue - -newMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> String -newMessage profile name newValue = - descrMsg ++ newValueMsg - where - profileKey = WindowsEnv.profileKeyPath profile - descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey) - newValueMsg = printf "\tNew value: %s\n" newValue - -wipeMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> String -wipeMessage profile name = - printf "Deleting variable '%s' from '%s'...\n" name (show profileKey) - where - profileKey = WindowsEnv.profileKeyPath profile diff --git a/bin/RemovePath.hs b/bin/RemovePath.hs index 7d0c104..6f2174b 100644 --- a/bin/RemovePath.hs +++ b/bin/RemovePath.hs @@ -16,8 +16,8 @@ import Options.Applicative import qualified WindowsEnv -import Prompt -import PromptMessage +import Utils.Prompt +import Utils.PromptMessage data Options = Options { optName :: WindowsEnv.VarName diff --git a/bin/SetEnv.hs b/bin/SetEnv.hs index 87d7812..5948d3e 100644 --- a/bin/SetEnv.hs +++ b/bin/SetEnv.hs @@ -15,8 +15,8 @@ import Options.Applicative import qualified WindowsEnv -import Prompt -import PromptMessage +import Utils.Prompt +import Utils.PromptMessage data Options = Options { optYes :: Bool diff --git a/bin/UnsetEnv.hs b/bin/UnsetEnv.hs index f60503b..98b52e3 100644 --- a/bin/UnsetEnv.hs +++ b/bin/UnsetEnv.hs @@ -15,8 +15,8 @@ import Options.Applicative import qualified WindowsEnv -import Prompt -import PromptMessage +import Utils.Prompt +import Utils.PromptMessage data Options = Options { optYes :: Bool diff --git a/bin/Utils/Prompt.hs b/bin/Utils/Prompt.hs new file mode 100644 index 0000000..51b3f0c --- /dev/null +++ b/bin/Utils/Prompt.hs @@ -0,0 +1,50 @@ +-- | +-- Copyright : (c) 2015 Egor Tensin +-- License : MIT +-- Maintainer : Egor.Tensin@gmail.com +-- Stability : experimental +-- Portability : portable + +module Utils.Prompt + ( withPrompt + , withoutPrompt + ) where + +import Control.Monad (void, when) +import Control.Monad.Trans.Class (lift) +import Control.Monad.Trans.Except (ExceptT) +import Data.Char (toLower) +import System.IO (hFlush, stdout) + +prompt :: String -> IO String +prompt msg = do + putStr msg + hFlush stdout + getLine + +promptYesNo :: String -> IO Bool +promptYesNo msg = do + response <- map toLower <$> prompt msg + if response `elem` yeses + then return True + else if response `elem` noes + then return False + else promptToContinue + where + yeses = ["y", "yes"] + noes = ["n", "no"] + +promptToContinue :: IO Bool +promptToContinue = promptYesNo "Continue? (y/n) " + +withPrompt :: String -> ExceptT IOError IO a -> ExceptT IOError IO Bool +withPrompt msg m = do + lift $ do + putStr msg + hFlush stdout + agreed <- lift promptToContinue + when agreed $ void m + return agreed + +withoutPrompt :: ExceptT IOError IO a -> ExceptT IOError IO Bool +withoutPrompt m = m >> return True diff --git a/bin/Utils/PromptMessage.hs b/bin/Utils/PromptMessage.hs new file mode 100644 index 0000000..37fc1e6 --- /dev/null +++ b/bin/Utils/PromptMessage.hs @@ -0,0 +1,39 @@ +-- | +-- Copyright : (c) 2016 Egor Tensin +-- License : MIT +-- Maintainer : Egor.Tensin@gmail.com +-- Stability : experimental +-- Portability : Windows-only + +module Utils.PromptMessage + ( oldNewMessage + , newMessage + , wipeMessage + ) where + +import Text.Printf (printf) + +import qualified WindowsEnv + +oldNewMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> WindowsEnv.VarValue -> String +oldNewMessage profile name oldValue newValue = + descrMsg ++ oldValueMsg ++ newValueMsg + where + profileKey = WindowsEnv.profileKeyPath profile + descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey) + oldValueMsg = printf "\tOld value: %s\n" oldValue + newValueMsg = printf "\tNew value: %s\n" newValue + +newMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> WindowsEnv.VarValue -> String +newMessage profile name newValue = + descrMsg ++ newValueMsg + where + profileKey = WindowsEnv.profileKeyPath profile + descrMsg = printf "Saving variable '%s' to '%s'...\n" name (show profileKey) + newValueMsg = printf "\tNew value: %s\n" newValue + +wipeMessage :: WindowsEnv.Profile -> WindowsEnv.VarName -> String +wipeMessage profile name = + printf "Deleting variable '%s' from '%s'...\n" name (show profileKey) + where + profileKey = WindowsEnv.profileKeyPath profile diff --git a/windows-env.cabal b/windows-env.cabal index b7d4d89..876cb5a 100644 --- a/windows-env.cabal +++ b/windows-env.cabal @@ -36,7 +36,7 @@ library executable addpath hs-source-dirs: bin main-is: AddPath.hs - other-modules: Prompt, PromptMessage + other-modules: Utils.Prompt, Utils.PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base , optparse-applicative @@ -47,7 +47,7 @@ executable addpath executable paths hs-source-dirs: bin main-is: ListPaths.hs - other-modules: Prompt, PromptMessage + other-modules: Utils.Prompt, Utils.PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base, directory , optparse-applicative @@ -58,7 +58,7 @@ executable paths executable delpath hs-source-dirs: bin main-is: RemovePath.hs - other-modules: Prompt, PromptMessage + other-modules: Utils.Prompt, Utils.PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base , optparse-applicative @@ -69,7 +69,7 @@ executable delpath executable setenv hs-source-dirs: bin main-is: SetEnv.hs - other-modules: Prompt, PromptMessage + other-modules: Utils.Prompt, Utils.PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base , optparse-applicative @@ -80,7 +80,7 @@ executable setenv executable delenv hs-source-dirs: bin main-is: UnsetEnv.hs - other-modules: Prompt, PromptMessage + other-modules: Utils.Prompt, Utils.PromptMessage ghc-options: -Wall -Werror -threaded -rtsopts -with-rtsopts=-N build-depends: base , optparse-applicative -- cgit v1.2.3