simple-prompt 0.2.2 → 0.2.3
raw patch · 4 files changed
+28/−16 lines, 4 filesdep +safe
Dependencies added: safe
Files
- ChangeLog.md +4/−0
- simple-prompt.cabal +6/−4
- src/SimplePrompt.hs +5/−5
- src/SimplePrompt/Internal.hs +13/−7
ChangeLog.md view
@@ -1,5 +1,9 @@ # Revision history for simple-prompt +## 0.2.3 (2024-06-13)+- getGenericPrompt: adapt prompt suffix for final newline or colon+- clearedInput no longer prints short duration for any buffered input+ ## 0.2.2 (2023-10-27) - add promptKeyPress
simple-prompt.cabal view
@@ -1,5 +1,5 @@ name: simple-prompt-version: 0.2.2+version: 0.2.3 synopsis: Simple commandline text prompt functions description: The library provides prompt functions for reading user input:@@ -10,7 +10,7 @@ license-file: LICENSE author: Jens Petersen <juhpetersen@gmail.com> maintainer: Jens Petersen <juhpetersen@gmail.com>-copyright: 2023 Jens Petersen <juhpetersen@gmail.com>+copyright: 2023-2024 Jens Petersen <juhpetersen@gmail.com> category: System homepage: https://github.com/juhp/simple-prompt bug-reports: https://github.com/juhp/simple-prompt/issues@@ -24,8 +24,9 @@ || == 8.10.7 || == 9.0.2 || == 9.2.8- || == 9.4.7- || == 9.6.3+ || == 9.4.8+ || == 9.6.5+ || == 9.8.2 source-repository head type: git@@ -36,6 +37,7 @@ exceptions, extra, haskeline > 0.8,+ safe, time default-language: Haskell2010
src/SimplePrompt.hs view
@@ -22,14 +22,14 @@ #include "monadconstraint.h" -- FIXME use haveTerminalUI ?--- | prompt which drops buffered input (using clearedInput)+-- | prompt which drops buffered input (using `clearedInput`) -- -- Ignores buffered input lines (ie if input line gotten in under 5ms) prompt :: MONADCONSTRAINT => String -> m String prompt = runPrompt . clearedInput . getPromptLine -- FIXME non-empty?--- | reads string with initial input (using clearedInput)+-- | reads string with initial input (using `clearedInput`) promptInitial :: MONADCONSTRAINT => String -> String -> m String promptInitial s = runPrompt . clearedInput . getPromptInitial s @@ -37,7 +37,7 @@ promptBuffered :: MONADCONSTRAINT => String -> m String promptBuffered = runPrompt . getPromptLine --- | reads non-empty string (using nonEmptyInput)+-- | reads non-empty string (using `nonEmptyInput`) promptNonEmpty :: MONADCONSTRAINT => String -> m String promptNonEmpty = runPrompt . nonEmptyInput . getPromptLine @@ -45,7 +45,7 @@ promptPassword :: MONADCONSTRAINT => String -> m String promptPassword = runPrompt . nonEmptyInput . getPromptPassword --- | prompt for character key+-- | prompt for a printable character promptChar :: MONADCONSTRAINT => String -> m Char promptChar = runPrompt . clearedInput . getPromptChar@@ -73,7 +73,7 @@ "no" -> Just False _ -> Nothing --- | Yes-No prompt with default (uses clearedInput)+-- | Yes-No prompt with default (uses `clearedInput`) yesNoDefault :: MONADCONSTRAINT => Bool -> String -> m Bool yesNoDefault yes desc = runPrompt . mapInput maybeYN' . clearedInput . getPromptLine $
src/SimplePrompt/Internal.hs view
@@ -24,6 +24,7 @@ #endif import Control.Monad.IO.Class (liftIO, MonadIO) import Data.Time.Clock (diffUTCTime, getCurrentTime)+import Safe (lastMay) import System.Console.Haskeline @@ -33,20 +34,26 @@ getGenericPrompt :: MonadIO m => (String -> InputT m (Maybe a)) -> String -> InputT m a getGenericPrompt prompter s =- prompter (s ++ ": ") >>=+ let suff =+ case lastMay s of+ Just '\n' -> ""+ Just ':' -> " "+ _ -> ": "+ in+ prompter (s ++ suff) >>= maybe (error "could not read input!") return --- | like getInputLine, but error if fails+-- | like `getInputLine`, but error if fails getPromptLine :: MONADCONSTRAINT => String -> InputT m String getPromptLine = getGenericPrompt getInputLine --- | like getPromptLine, but with initial input+-- | like `getPromptLine`, but with initial input getPromptInitial :: MONADCONSTRAINT => String -> String -> InputT m String getPromptInitial s i = getGenericPrompt (`getInputLineWithInitial` (i,"")) s --- | like getInputChar, but error if fails+-- | like `getInputChar`, but error if fails getPromptChar :: MONADCONSTRAINT => String -> InputT m Char getPromptChar = getGenericPrompt getInputChar@@ -87,9 +94,8 @@ start <- liftIO getCurrentTime input <- prompter end <- liftIO getCurrentTime- let diff = diffUTCTime end start- if diff < 0.005+ if diffUTCTime end start < 0.005 then do- outputStrLn $ "ignoring buffered input: " ++ show diff ++ " too quick"+ outputStrLn "dropped buffered input" clearedInput prompter else return input