From 3d9bf15cfc2fc3e21d346bd65d763ef1304d7c05 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Fri, 4 Jul 2025 15:02:56 +0200 Subject: [PATCH] switch to external gum util lib --- bb.edn | 3 ++- src/cli_cms/cli_utils.clj | 49 --------------------------------------- src/cli_cms/create.clj | 2 +- src/cli_cms/delete.clj | 2 +- src/cli_cms/edit.clj | 23 ++++++++---------- src/cli_cms/main.clj | 2 +- src/cli_cms/view.clj | 2 +- 7 files changed, 16 insertions(+), 67 deletions(-) delete mode 100644 src/cli_cms/cli_utils.clj diff --git a/bb.edn b/bb.edn index 4439192..0563655 100644 --- a/bb.edn +++ b/bb.edn @@ -1,2 +1,3 @@ {:paths ["src"] - :deps {}} + :deps {com.travisshears/gum-utils {:git/url "https://git.travisshears.com/travisshears/gum-utils" + :git/sha "748b21d358b62db0476bc3577cb5398acc533ba1"}}} diff --git a/src/cli_cms/cli_utils.clj b/src/cli_cms/cli_utils.clj deleted file mode 100644 index cddaf69..0000000 --- a/src/cli_cms/cli_utils.clj +++ /dev/null @@ -1,49 +0,0 @@ -(ns cli-cms.cli-utils - (:require - [clojure.string :as str] - [clojure.pprint :refer [pprint]] - [babashka.process :refer [shell]])) - -(defn select - "Select from a list of options using gum filter. - Args: - l list of {:item any :value string}" - [l] - (let [values (map :value l) - selected-value (str/trim (:out (apply shell {:out :string} (concat '("gum" "filter") values)))) - selected-item (:item (first (filter #(= (:value %) selected-value) l)))] - selected-item)) - -(defn color-print - ([text] (color-print text "5")) - ([text color] - (shell (format "gum style --foreground %s \"%s\"" color text)))) - -(defn print-markdown [text] - (shell (format "gum format \"%s\"" text))) - -(defn prompt-for [placeholder & {:keys [prefill]}] - (let [cmd (if prefill - (format "gum input --placeholder='%s' --value='%s'" placeholder prefill) - (format "gum input --placeholder='%s'" placeholder) - )] - (str/trim (-> (shell {:out :string} cmd) :out)))) - -(defn prompt-for-many - ([placeholder] - (let [val (prompt-for (str placeholder ", enter done to finish"))] - (println val) - (if (= val "done") - nil - (prompt-for-many placeholder `(~val))))) - ([placeholder carry] - (let [val (prompt-for (str placeholder ", enter done to finish"))] - (println val) - (if (= val "done") - carry - (prompt-for-many placeholder (conj carry val)))))) - -(defn prompt-for-long-form [placeholder & {:keys [prefill]}] - (if prefill - (-> (shell {:out :string :extra-env {"GUM_WRITE_VALUE" prefill}} (format "gum write --placeholder='%s'" placeholder)) :out) - (-> (shell {:out :string} (format "gum write --placeholder='%s'" placeholder)) :out))) diff --git a/src/cli_cms/create.clj b/src/cli_cms/create.clj index 5607584..e1521b0 100644 --- a/src/cli_cms/create.clj +++ b/src/cli_cms/create.clj @@ -1,6 +1,6 @@ (ns cli-cms.create (:require - [cli-cms.cli-utils :as utils] + [com.travisshears.gum-utils :as utils] [clojure.string :as str] [cli-cms.config :refer [config]] [babashka.http-client :as http] diff --git a/src/cli_cms/delete.clj b/src/cli_cms/delete.clj index 8793e78..211ae14 100644 --- a/src/cli_cms/delete.clj +++ b/src/cli_cms/delete.clj @@ -1,6 +1,6 @@ (ns cli-cms.delete (:require - [cli-cms.cli-utils :as utils] + [com.travisshears.gum-utils :as utils] [cli-cms.config :refer [config]] [clojure.pprint :refer [pprint]] [babashka.http-client :as http] diff --git a/src/cli_cms/edit.clj b/src/cli_cms/edit.clj index 1104d9f..4b2e847 100644 --- a/src/cli_cms/edit.clj +++ b/src/cli_cms/edit.clj @@ -5,21 +5,19 @@ [cli-cms.config :refer [config]] [cli-cms.view :as view] [cheshire.core :as json] - [cli-cms.cli-utils :as utils])) + [com.travisshears.gum-utils :as utils])) (defn fetch-snippets [] (let [res (http/get (str (:backend-host config) "/api/snippets?limit=25"))] (json/parse-string (:body res) true))) (defn prompt-for-edit-type [] - (utils/select (map #(hash-map :value (name %) :item %)'( - :title - :markdown - :slug - :remove-tag - :add-tags - :done - )))) + (utils/select (map #(hash-map :value (name %) :item %) '(:title + :markdown + :slug + :remove-tag + :add-tags + :done)))) (defn send-patch [id patch] (http/patch (str (:backend-host config) "/api/snippet") @@ -39,10 +37,9 @@ :remove-tag (let [tag-to-remove (utils/select (map #(hash-map :value % :item %) (:tags snippet))) tags (remove #(= % tag-to-remove) (:tags snippet))] (edit (assoc snippet :tags tags) (assoc changes :tags tags))) - :add-tags (let [ - new-tags (utils/prompt-for-many "tags") - tags (concat new-tags (:tags snippet))] - (edit (assoc snippet :tags tags) (assoc changes :tags tags))) + :add-tags (let [new-tags (utils/prompt-for-many "tags") + tags (concat new-tags (:tags snippet))] + (edit (assoc snippet :tags tags) (assoc changes :tags tags))) :markdown (let [new-markdown (utils/prompt-for-long-form "markdown" :prefill (:markdown snippet))] (edit (assoc snippet :markdown new-markdown) (assoc changes :markdown new-markdown))) :done changes))) diff --git a/src/cli_cms/main.clj b/src/cli_cms/main.clj index 8176820..1f9acea 100644 --- a/src/cli_cms/main.clj +++ b/src/cli_cms/main.clj @@ -3,7 +3,7 @@ [cli-cms.create :as create] [cli-cms.edit :as edit] [cli-cms.delete :as delete] - [cli-cms.cli-utils :as utils] + [com.travisshears.gum-utils :as utils] [cli-cms.view :as view])) (defn color-test [] diff --git a/src/cli_cms/view.clj b/src/cli_cms/view.clj index c267dea..6e30e03 100644 --- a/src/cli_cms/view.clj +++ b/src/cli_cms/view.clj @@ -5,7 +5,7 @@ [cli-cms.config :refer [config]] [cheshire.core :as json] [clojure.string :as str] - [cli-cms.cli-utils :as utils])) + [com.travisshears.gum-utils :as utils])) (defn fetch-snippets [] (let [res (http/get (str (:backend-host config) "/api/snippets?limit=25"))]