From c01a55bedd31bd27d4173db74067c59c0633321d Mon Sep 17 00:00:00 2001 From: Bobby Towers Date: Sat, 15 Apr 2023 17:22:17 -0700 Subject: [PATCH] fix eval results clearing --- .calva/output-window/output.calva-repl | 71 ++++++++++++++++++++++++++ resources/public/cljs/codemirror.cljs | 30 ++++++----- 2 files changed, 89 insertions(+), 12 deletions(-) diff --git a/.calva/output-window/output.calva-repl b/.calva/output-window/output.calva-repl index a763b54..0c37a69 100644 --- a/.calva/output-window/output.calva-repl +++ b/.calva/output-window/output.calva-repl @@ -417,3 +417,74 @@ clj꞉user꞉>  #object[sci.impl.fns$fun$arity_0__7874 0xa7f89b1 "sci.impl.fns$fun$arity_0__7874@a7f89b1"]> clj꞉user꞉>  +; : java.lang.String cannot be cast to java.util.regex.Pattern user +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map in" "c (range 8)))"] + +clj꞉user꞉>  +"[\"(def u 7)\" \"\\n\\n(defn t []\\n (map in\" \"c (range 8)))\"]" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map in" "c (range 8)))"] + +clj꞉user꞉>  +"(def u 7) => #'user/u\n\n(defn t []\n (map in => c (range 8)))" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map in" "c (range 8)))"] + +clj꞉user꞉>  +("(def u 7)" "#'user/u\n\n(defn t []\n (map in" "c (range 8)))") + +clj꞉user꞉>  +"#'user/u\n\n(defn t []\n (map in" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +("(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))") + +clj꞉user꞉>  +"#'user/u\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +"[\"(def u 7)\" \"\\n\\n(defn t []\\n (map inc (range 8)))\"]" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +"\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  +" => " + +clj꞉user꞉>  +"\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  +"[\"(def u 7)\" \"\\n\\n(defn t []\\n (map inc (range 8)))\"]" + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +["(def u 7)" "#'user/u\n\n(defn t []\n (map inc (range 8)))"] + +clj꞉user꞉>  +"\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  +"(def u 7)\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  +"(def u 7)\n\n(defn t []\n (map inc (range 8)))" + +clj꞉user꞉>  diff --git a/resources/public/cljs/codemirror.cljs b/resources/public/cljs/codemirror.cljs index e64500f..b422d85 100644 --- a/resources/public/cljs/codemirror.cljs +++ b/resources/public/cljs/codemirror.cljs @@ -61,16 +61,15 @@ true) (defn clear-eval [] - (when (not= "" @last-result) - (reset! last-result "") - (let [code (-> cm - (some-> .-state .-doc str) - str - (str/split #" => ") - first - (str @eval-tail)) - cursor-pos (some-> cm .-state .-selection .-main .-head)] - (update-editor! code (min cursor-pos (count code)))))) + (let [code (some-> cm .-state .-doc str) + cursor-pos (some-> cm .-state .-selection .-main .-head) + result @last-result + splits (str/split code #" => ")] + (when (not= "" @last-result) + (update-editor! (str (first splits) (subs (last splits) (count (str (:result result))))) + cursor-pos) + (reset! last-result "") + (reset! eval-tail "")))) (def extension (.of js/cv.keymap @@ -85,7 +84,10 @@ {:key "ArrowRight" :run clear-eval}]))) (def cm - (let [doc "(map inc (range 8))"] + (let [doc "(def n 7) + +(defn t [] + (map inc (range n)))"] (js/cm.EditorView. #js {:doc doc :extensions #js [js/cm.basicSetup, (js/lc.clojure), (.highest js/cs.Prec extension)] :parent (js/document.querySelector "#app")}))) @@ -94,6 +96,8 @@ ;; what is top-level, anyway? +(def u 7) + (defn t [] (map inc (range 8))) @@ -106,4 +110,6 @@ ;; we parse until we are not enclosed in a form. ;; pretty simple, actually. -;; the contents of the cell are a series of forms. \ No newline at end of file +;; the contents of the cell are a series of forms. +;; evaluate the last one! +;; that is, before the cursor \ No newline at end of file