aboutsummaryrefslogtreecommitdiff
path: root/lib/client.lisp
diff options
context:
space:
mode:
authorColin Okay <okay@toyful.space>2022-03-13 13:56:49 -0500
committerColin Okay <okay@toyful.space>2022-03-13 13:56:49 -0500
commit7ae6cbff1875ea271fa1724d6e53bc3d3d48dd26 (patch)
tree6559b13feda3729cc677cb5d80553dc295b2ccc1 /lib/client.lisp
parent07183b5bbb4d2e65514e3ec3e7cdf7e421f97749 (diff)
support for running drafts; drafts accounted for in with-local-state
Diffstat (limited to 'lib/client.lisp')
-rw-r--r--lib/client.lisp18
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/client.lisp b/lib/client.lisp
index 8d40fd5..db19bda 100644
--- a/lib/client.lisp
+++ b/lib/client.lisp
@@ -45,12 +45,18 @@ not in the local cache, try to fetch from configured server."
(defmacro when-oneliner ((var name-or-id) &body body)
"Finds the oneliner with name-or-id and binds it to var before
running the body. If such a oneliner can be found."
- (assert (symbolp var))
(let ((nvar (gensym)))
`(let ((,nvar ,name-or-id))
(a:when-let (,var (the-oneliner ,nvar))
,@body))))
+(defmacro when-draft ((var name) &body body)
+ "Like when-oneliner but restricts itself to local drafts."
+ (let ((nvar (gensym)))
+ `(let ((,nvar ,name))
+ (a:when-let (,var (fetch-draft ,nvar))
+ ,@body))))
+
(defun newest-oneliners (&optional limit)
(let ((response
(if limit
@@ -76,10 +82,12 @@ running the body. If such a oneliner can be found."
(defvar *ol-output-timeout* 1)
-(defun run-item (ident args &key force-clip (timeout nil timeout-p))
- (when-oneliner (ol ident)
- (let ((*ol-output-timeout* (if timeout-p timeout *ol-output-timeout*)))
- (bind-vars-and-run-oneliner ol args force-clip))))
+(defun run-item (ident args &key force-clip (timeout nil timeout-p) draftp)
+ "Runs a oneliner identified by IDENT (if available) with arguments ARGS."
+ (let ((ol (if draftp (fetch-draft ident) (the-oneliner ident))))
+ (when ol
+ (let ((*ol-output-timeout* (if timeout-p timeout *ol-output-timeout*)))
+ (bind-vars-and-run-oneliner ol args force-clip)))))
(defun bind-vars-and-run-oneliner (ol args &optional force-clip)
(let* ((oneliner (oneliner-oneliner ol))