4 import qualified Data.Text as T
8 import System.Console.Haskeline
9 import System.Environment (getEnv)
12 import Text.Printf (printf)
14 getInputMarkdown :: String -> IO String
15 getInputMarkdown placeholder = do
16 id <- toString <$> Data.UUID.V4.nextRandom
17 editor <- appendFile ("/tmp/xdg-ninja." ++ id ++ ".md") placeholder >> (getEnv "EDITOR")
18 (_, _, _, p) <- createProcess (shell (editor ++ " /tmp/xdg-ninja." ++ id ++ ".md"))
21 ExitSuccess -> readFile ("/tmp/xdg-ninja." ++ id ++ ".md")
22 ExitFailure a -> return ""
24 getProp :: T.Text -> T.Text -> IO String
25 getProp prompt placeholder = do
26 let string_prompt = T.unpack prompt
27 let string_placholder = T.unpack placeholder
28 x <- runInputT defaultSettings (getInputLineWithInitial string_prompt (string_placholder, ""))
33 data Answer = Yes | No | Unknown
35 stringToBool :: String -> Answer
36 stringToBool s = case lower s of
45 promptBool :: T.Text -> T.Text -> T.Text -> IO Bool
46 promptBool prompt prompt_unrecognised placeholder = do
47 x <- getProp prompt placeholder
48 case stringToBool x of
51 Unknown -> printf "%s\n" prompt_unrecognised >> promptBool prompt prompt_unrecognised placeholder