From ad569632207c7e6bc019c418d6b9673c94616759 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Sat, 7 Jun 2025 17:51:50 +0200 Subject: [PATCH] prompt for all data needed to create snippet --- README.md | 7 +++++++ src/cli_cms/cli_utils.clj | 27 +++++++++++++++++++++++++++ src/cli_cms/create.clj | 17 ++++++++++++++++- src/cli_cms/main.clj | 6 ++++-- 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 src/cli_cms/cli_utils.clj diff --git a/README.md b/README.md new file mode 100644 index 0000000..e0322a5 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## Snippets CLI CMS + +A simple command-line interface for managing my code snippets. + +Written in Clojure via Babashka. + +Interactive elements are powered by [Gum](https://github.com/charmbracelet/gum). diff --git a/src/cli_cms/cli_utils.clj b/src/cli_cms/cli_utils.clj new file mode 100644 index 0000000..38a7cfa --- /dev/null +++ b/src/cli_cms/cli_utils.clj @@ -0,0 +1,27 @@ +(ns cli-cms.cli-utils + (:require + [clojure.string :as str] + [babashka.process :refer [shell]])) + +(defn print [text] + (shell (format "gum style --foreground 212 %s" text))) + +(defn prompt-for [placeholder] + (str/trim (-> (shell {:out :string} (format "gum input --placeholder='%s'" placeholder)) :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] + (-> (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 69847fa..a72cced 100644 --- a/src/cli_cms/create.clj +++ b/src/cli_cms/create.clj @@ -1 +1,16 @@ -(ns cli-cms.create) +(ns cli-cms.create + (:require + [cli-cms.cli-utils :as utils] + [clojure.string :as str] + [babashka.process :refer [shell]])) + +(defn run [] + (let [title (utils/prompt-for "title") + slug (utils/prompt-for "slug") + tags (utils/prompt-for-many "tags") + markdown (utils/prompt-for-long-form "markdown")] + ;; (utils/print "Please enter a title:") + ;; (println "Please enter a title:") + (println (format "TODO: create post with title: %s and slug %s" title slug)) + (println tags) + (println markdown))) diff --git a/src/cli_cms/main.clj b/src/cli_cms/main.clj index 0b84433..bd48c0e 100644 --- a/src/cli_cms/main.clj +++ b/src/cli_cms/main.clj @@ -1,8 +1,10 @@ (ns cli-cms.main - (:require [babashka.http-client :as http])) + (:require + [cli-cms.create :as create] + [babashka.http-client :as http])) (defn -main [& args] (case (first args) - "create" (println "TODO: implment create snippet") + "create" (create/run) "edit" (println "TODO: implment edit snippet") (println "Missing command. Try 'create' or 'edit'.")))