stitch

Note taking for messy minimalists

git clone git://mccd.space/stitch
commit b9728e919b074b2bf9690eca04d8d96e64b3207a
parent c3a52f259f3a3b70ab25fba98ab7450e0fa69e67
Author: Marc Coquand <marc@mccd.space>
Date:   Sun, 19 May 2024 08:50:43 -0500

Set Stitch to fail if STITCH_DIRECTORY is not set

Diffstat:
Mlib/stitch.ml | 105++++++++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 56 insertions(+), 49 deletions(-)
diff --git a/lib/stitch.ml b/lib/stitch.ml
@@ -12,52 +12,59 @@ let start (tag : string) () =
 
      It does create a rather funky, cyclical state though.
   *)
-  let term = Common.Term.create () in
-  let restore_headline_state = ref (fun () -> ()) in
-  let restore_done_state = ref (fun () -> ()) in
-  let restore_todo_state = ref (fun () -> ()) in
-  (* DONE *)
-  let goto_todo_from_done new_done_state =
-    restore_done_state := new_done_state;
-    !restore_todo_state ()
-  in
-  let goto_headlines_from_done new_done_state =
-    restore_done_state := new_done_state;
-    !restore_headline_state ()
-  in
-  (restore_done_state
-   := fun () ->
-        let done_state =
-          Done.init
-            ~goto_headlines:goto_headlines_from_done
-            ~goto_todo:goto_todo_from_done
-        in
-        Done.render term done_state);
-  (* TODO *)
-  let goto_done_from_todo new_todo_state =
-    restore_todo_state := new_todo_state;
-    !restore_done_state ()
-  in
-  let goto_headline_from_todo new_todo_state =
-    restore_todo_state := new_todo_state;
-    !restore_headline_state ()
-  in
-  (restore_todo_state
-   := fun () ->
-        let todo =
-          Todos.init
-            ~goto_headlines:goto_headline_from_todo
-            ~goto_done:goto_done_from_todo
-        in
-        Todos.render term todo);
-  let headline =
-    Headlines.init
-      ~goto_done_view:(fun new_state ->
-        restore_headline_state := new_state;
-        !restore_done_state ())
-      ~goto_todos_view:(fun new_state ->
-        restore_headline_state := new_state;
-        !restore_todo_state ())
-      ~regexp:tag
-  in
-  Headlines.render term headline
+  if String.equal String.empty (String.trim Grep.execution_directory)
+  then
+    print_endline
+      "Execution directory is not set. You will need to set environment variable \
+       STITCH_DIRECTORY to the absolute path of your notes. For example: \
+       STITCH_DIRECTORY='/home/you/notes'."
+  else (
+    let term = Common.Term.create () in
+    let restore_headline_state = ref (fun () -> ()) in
+    let restore_done_state = ref (fun () -> ()) in
+    let restore_todo_state = ref (fun () -> ()) in
+    (* DONE *)
+    let goto_todo_from_done new_done_state =
+      restore_done_state := new_done_state;
+      !restore_todo_state ()
+    in
+    let goto_headlines_from_done new_done_state =
+      restore_done_state := new_done_state;
+      !restore_headline_state ()
+    in
+    (restore_done_state
+     := fun () ->
+          let done_state =
+            Done.init
+              ~goto_headlines:goto_headlines_from_done
+              ~goto_todo:goto_todo_from_done
+          in
+          Done.render term done_state);
+    (* TODO *)
+    let goto_done_from_todo new_todo_state =
+      restore_todo_state := new_todo_state;
+      !restore_done_state ()
+    in
+    let goto_headline_from_todo new_todo_state =
+      restore_todo_state := new_todo_state;
+      !restore_headline_state ()
+    in
+    (restore_todo_state
+     := fun () ->
+          let todo =
+            Todos.init
+              ~goto_headlines:goto_headline_from_todo
+              ~goto_done:goto_done_from_todo
+          in
+          Todos.render term todo);
+    let headline =
+      Headlines.init
+        ~goto_done_view:(fun new_state ->
+          restore_headline_state := new_state;
+          !restore_done_state ())
+        ~goto_todos_view:(fun new_state ->
+          restore_headline_state := new_state;
+          !restore_todo_state ())
+        ~regexp:tag
+    in
+    Headlines.render term headline)