diff options
author | Colin Okay <okay@toyful.space> | 2022-03-18 16:45:53 -0500 |
---|---|---|
committer | Colin Okay <okay@toyful.space> | 2022-03-18 16:45:53 -0500 |
commit | 90eebfe3109994eb2359f70e4cbaaedb48e2d9be (patch) | |
tree | 66e51dca2194ffb6d0e518aba96850cd194034b3 /lib/state.lisp | |
parent | d30575d46cf61132a0a35bf2b650b4f05fc73595 (diff) |
Squashed commit of the following:
commit e12b0ae984e5f106721ed866a96f918f19137295
Merge: 2cf6a98 d30575d
Author: Colin Okay <okay@toyful.space>
Date: Fri Mar 18 16:44:57 2022 -0500
Merge branch 'main' into rc-upstream
commit 2cf6a9883b59fe27fc6cd4888261416a2e929be3
Author: Colin Okay <okay@toyful.space>
Date: Tue Mar 15 16:33:56 2022 -0500
fixed odd help printout on `ol help`
commit 3a19876d855ec8d2279293892e24716b28c4b48a
Author: Colin Okay <okay@toyful.space>
Date: Tue Mar 15 16:29:53 2022 -0500
added --confirm option. refactored run-item & co to accomodate
commit fbce85871c6e995ece00e3136cf7dfdeeeff2bb7
Author: Colin Okay <okay@toyful.space>
Date: Tue Mar 15 15:45:20 2022 -0500
bugfix: handle user interrupt in new and edit
commit 130ae266f51f63ac423a65b17749a4d38dda1018
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 19:36:18 2022 -0500
Added a --verbose / -v option to RUN
commit 67c793633bfcd46997155341dd4b1776fb6a6728
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 19:19:24 2022 -0500
Added help topic explaining icons in printouts
commit 08fd723502bb3ee021911c0c9db0f743b575ad68
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 19:06:36 2022 -0500
Added variables help topic
commit 3c8b1804a7e520f465ced563bbf9b416b4abb8ab
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 19:00:54 2022 -0500
added EDITOR CONFIGURATION help topic
commit 6dd2563a0f2b848e84f297a0a2296756c65f6246
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 14:22:09 2022 -0500
made the note while hacking comment more visible
commit 1a1de0bb8c18798064d103b70a1c06d20eb3ad05
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 08:48:50 2022 -0500
moved host assertion inside handler-case
commit e2091250cbc8dce679b52636647949d0b417e6be
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 08:21:12 2022 -0500
CONTRIBUTING rewording
commit 86f7cdb2ce0f99aee0328617999f35b63694b4a6
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 08:15:27 2022 -0500
argument checking for run and clip
commit f18dddd766af9e06ba4f66487701322de495de59
Author: Colin Okay <okay@toyful.space>
Date: Mon Mar 14 08:11:58 2022 -0500
tweaks to help menu printing
commit 4b390fcde69013393bae325be2e8d2f5944cd15b
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 22:23:46 2022 -0500
tabulating help menu command listing
commit 57bae08a8b9accc1d4bfb7165080e7d5a5ef2a30
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 17:40:45 2022 -0500
deletion support; some cache syncing in client functions;
commit 7a97e9d6ba5737f1088dd3a81b9b16121cf47c39
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:45:28 2022 -0500
only print drafts when *drafts* is non null
commit 6890b0349f79c0fbbbe5b8b7b3dbf8c2d2262e79
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:43:59 2022 -0500
better printing of drafts
commit 6a6c2ec8e2ef6cc9fa91f769d7dbe79387529619
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:39:55 2022 -0500
printing drafts
commit 8ba6552132fab6daef1f2b10adf932c87947e2ec
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:31:12 2022 -0500
can run the edit command on drafts with --redraft
commit 5531288c433641d81d1359e0afa69f86d4bf5d07
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:24:16 2022 -0500
can also edit drafts
commit 7bcf634c789c00a95237ad74e5f923a4214020c8
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 14:21:33 2022 -0500
can make, run, and publish drafts
commit 7ae6cbff1875ea271fa1724d6e53bc3d3d48dd26
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 13:56:49 2022 -0500
support for running drafts; drafts accounted for in with-local-state
commit 07183b5bbb4d2e65514e3ec3e7cdf7e421f97749
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 11:57:06 2022 -0500
added intial drafting code to new
commit 80bf9816c6e35bf7ffcc1e4349d5abf056c4df7f
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 11:22:21 2022 -0500
updating helptexts; drafts-file function
commit b5b0204d6742c68a90a6388593b980864ae301c3
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 10:58:19 2022 -0500
removed old main
commit 3236933be611f91183ea6b61890c7fbd0b892d8b
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 10:57:54 2022 -0500
removed spurious function
commit 3a412cda20b45a2e6617d43e66c6c006924dad88
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 10:57:05 2022 -0500
cosmetic change to command section printout
commit 82a0911f93760a0059addc056340733f8797ae91
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 10:46:41 2022 -0500
new main in app.lisp; exports to oneliners.cli package
commit ebc79c386d4db262ae76bb2ba0386460a35648f9
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 10:17:18 2022 -0500
tweaks to synopsis definition
commit f39523d713c538f81d6f0cdc056fa750ae8a257e
Author: Colin Okay <okay@toyful.space>
Date: Sun Mar 13 09:58:09 2022 -0500
rewrote clon synopsis form
Diffstat (limited to 'lib/state.lisp')
-rw-r--r-- | lib/state.lisp | 90 |
1 files changed, 64 insertions, 26 deletions
diff --git a/lib/state.lisp b/lib/state.lisp index 0f69ff3..5ca5a7b 100644 --- a/lib/state.lisp +++ b/lib/state.lisp @@ -25,7 +25,7 @@ (host "") (shell "bash")) -;;; DYNAMIC VARS FOR CONFIG AND CACHE, AND SOME GETTERS +;;; CONFIG VAR AND OPERATIONS (defvar *config* nil "Holds a config struct instance.") @@ -50,9 +50,58 @@ (defun shell () (config-shell *config*)) + +;;; CACHE VAR AND OPERATIONS + (defvar *cache* nil "Holds cached oneliners as a list.") +(defun merge-oneliners (new) + "Modifies *CACHE*. Merge updated oneliners into the *cache*, ensuring to remove old versions." + (setf *cache* + (nconc + new + (delete-if + (lambda (old-oneliner) + (find (oneliner-id old-oneliner) + new + :key #'oneliner-id + :test #'equal)) + *cache*)))) + +(defun get-cached (id-or-name) + "Looks up a oneliner instance by ID-OR-NAME using the current binding of *cache*. " + (find id-or-name + *cache* + :key (etypecase id-or-name + (integer #'oneliner-id) + (string #'oneliner-name)) + :test #'equal)) + +(defun remove-from-cache (id-or-name) + "Removes an item from the contents of *cache*." + (a:when-let (found (get-cached id-or-name)) + (setf *cache* (delete found *cache*)))) + +;;; DRAFTS VAR AND OPERATIONS + +(defvar *drafts* nil + "Holds a list of oneliner drafts yet to be sent to the server.") + +(defun fetch-draft (name) + "Fetch a draft by name form the *DRAFTS* association list." + (cdr (assoc name *drafts* :test #'string-equal))) + +(defun drop-draft (name) + "Drop a draft by NAME from the *DFRAFTS* association list." + (setf *DRAFTS* (delete (assoc name *DRAFTS* :test #'string-equal) *DRAFTS*))) + +(defun put-draft (name draft) + "Modifies *DRAFTS*, adding a new DRAFT associated with NAME. If NAME +is already associated, that old association is deleted." + (drop-draft name) + (push (cons name draft) *drafts*)) + ;;; LOADING AND SAVING STATE (defun config-file () @@ -63,6 +112,10 @@ "Returns the pathname holding the location of the cache." (merge-pathnames ".cache/oneliners.cache" (user-homedir-pathname))) +(defun drafts-file () + "Returns the pathame holding the location of the oneliner drafts file." + (merge-pathnames ".cache/oneliners.drafts" (user-homedir-pathname))) + (defun wipe-cache () "Deletes the cache, if present." (uiop:delete-file-if-exists (cached-oneliners-file))) @@ -94,6 +147,12 @@ CACHED-ONELINERS-FILE. NIL if there is no such file." :shell (prompt "With which shell should oneliners be run? " :prefill "bash"))) +(defun read-drafts-file () + (read-from-file (drafts-file))) + +(defun write-drafts-to-disk () + (print-to-file *drafts* (drafts-file))) + (defun ensure-config () "Ensures that a configuration file exists on disk, prompting the user for some input if it does not." @@ -101,29 +160,6 @@ user for some input if it does not." (read-config-file) (make-fresh-config))) -;;; GETTING AND SETTING STATE, DYNAMICALLY BOUND - -(defun merge-oneliners (new) - "Modifies *CACHE*. Merge updated oneliners into the *cache*, ensuring to remove old versions." - (setf *cache* - (nconc - new - (delete-if - (lambda (old-oneliner) - (find (oneliner-id old-oneliner) - new - :key #'oneliner-id - :test #'equal)) - *cache*)))) - -(defun get-cached (id-or-name) - "Looks up a oneliner instance by ID-OR-NAME using the current binding of *cache*. " - (find id-or-name - *cache* - :key (etypecase id-or-name - (integer #'oneliner-id) - (string #'oneliner-name)) - :test #'equal)) ;;; STATE LOADING MACRO @@ -132,13 +168,15 @@ user for some input if it does not." sets the api's *host* variable. If BODY produces no errors, the " `(let* ((*config* (ensure-config)) (*cache* (read-cache-file)) + (*drafts* (read-drafts-file)) (api:*host* (config-host *config*))) - (assert api:*host* () "ol must be configured with a server host.") - (set-term-width) (handler-case (progn + (assert api:*host* () "ol must be configured with a server host.") + (set-term-width) ,@body ;; only if there is no error do we save the local state. + (write-drafts-to-disk) (write-cache-to-disk) (write-config-to-disk)) (error (e) |