aboutsummaryrefslogtreecommitdiff
path: root/src/lib.lisp
diff options
context:
space:
mode:
authorColin Okay <okay@toyful.space>2022-02-28 14:54:59 -0600
committerColin Okay <okay@toyful.space>2022-02-28 14:54:59 -0600
commitfc55695743a15e8e3945b2e5718763378a5ae362 (patch)
tree2a05a7f34cc94a5de58de11c019da9d5a1135c56 /src/lib.lisp
parent65bf3a5a5f00b40d3f219a469cea1eaa86e1aa95 (diff)
added --timeout
Diffstat (limited to 'src/lib.lisp')
-rw-r--r--src/lib.lisp29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/lib.lisp b/src/lib.lisp
index 3df4006..e81c7af 100644
--- a/src/lib.lisp
+++ b/src/lib.lisp
@@ -13,6 +13,8 @@
(defvar *config* nil
"A configuration plist")
+(defvar *ol-output-timeout* 0.8)
+
(defun valid-config-p (config)
(and (listp config)
(evenp (length config))
@@ -224,9 +226,10 @@ the directories that appear in the value of that variable."
(handle-run-oneliner oneliner (or force-clip (equalp runstyle "manual"))))))
-(defun run-item (item-number args &optional force-clip)
- (with-cached-result (ol item-number)
- (bind-vars-and-run-oneliner ol args force-clip)))
+(defun run-item (item-number args &key force-clip (timeout nil timeout-p))
+ (let ((*ol-output-timeout* (if timeout-p timeout *ol-output-timeout*)))
+ (with-cached-result (ol item-number)
+ (bind-vars-and-run-oneliner ol args force-clip))))
(defun valid-oneliner-string-p (string)
(and (not (find #\newline string))
@@ -495,13 +498,16 @@ have passed or CHECK returns non-nil."
for ,var = (progn ,@check)
when ,var
return ,var
- do (sleep ,poll-every))))
+ do (sleep ,poll-every)
+ finally (return nil))))
+
+
(defun run-with-shell
(command
&key
(shell-name (parent-process-name))
- (await-output-p 0.8)
+ (await-output-p *ol-output-timeout*)
(output-stream *standard-output*))
"run COMMAND, a string, in a fresh shell environment, initialized
with SHELL-NAME. The output from the command read line by line and is
@@ -512,10 +518,11 @@ printed to OUTPUT-STREAM. "
(shell-output (uiop:process-info-output shell)))
(write-line command shell-input)
(finish-output shell-input)
- (when await-output-p
- (wait-until (:timeout await-output-p :poll-every 0.005)
- (listen shell-output))
- (loop while (listen shell-output)
- do (princ (read-line shell-output) output-stream)
- (terpri output-stream))))))
+ (if (and await-output-p
+ (wait-until (:timeout await-output-p :poll-every 0.005)
+ (listen shell-output)))
+ (loop while (listen shell-output)
+ do (princ (read-line shell-output) output-stream)
+ (terpri output-stream))
+ (format t "Timed out waiting for output. Try a longer --timeout.~%")))))