diff options
author | Colin Okay <okay@toyful.space> | 2022-03-11 08:35:55 -0600 |
---|---|---|
committer | Colin Okay <okay@toyful.space> | 2022-03-11 08:35:55 -0600 |
commit | 08ba2769abb7a36817a725d30d64cfd36f5bcf32 (patch) | |
tree | 3068a5d9e1a4afd06a5f8b236658d4094e30dfef /lib/prompt.lisp | |
parent | 62afeb3f21d3d8e8db045a001271e686e944a049 (diff) |
separated app and lib modules, -osicat dep, +packages.lisp
Diffstat (limited to 'lib/prompt.lisp')
-rw-r--r-- | lib/prompt.lisp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/prompt.lisp b/lib/prompt.lisp new file mode 100644 index 0000000..6c847f1 --- /dev/null +++ b/lib/prompt.lisp @@ -0,0 +1,30 @@ +;;;; prompt.lisp -- a function using readlline to collect text from the user + + + +(in-package :oneliners.cli.prompt) + +(defun prompt (prompt + &key + (expect (constantly t)) + retry-text + (prefill "")) + ;; register a prefill hook + (rl:register-hook + :pre-input + (lambda () + (rl:insert-text prefill) + (rl:redisplay))) + (unwind-protect + (loop + with prompt-text = prompt + with should-retry-p = t + while should-retry-p + for line = (rl:readline :prompt prompt-text) + when (funcall expect line) + do (setf should-retry-p nil) + when retry-text + do (setf prompt-text retry-text) + finally (return line)) + ;; unregisters the hook. + (rl:register-hook :pre-input nil))) |