Command-line and Emacs Calendar Client
1(* Main entry point for the calendar CLI *)
2
3open Cmdliner
4
5let list_cmd = List_cmd.cmd
6let search_cmd = Search_cmd.cmd
7let doc = "Command-line calendar tool for managing local .ics files"
8let version = "%%VERSION%%"
9
10let main env =
11 let exit_info =
12 [
13 Cmd.Exit.info ~doc:"on success." 0;
14 Cmd.Exit.info
15 ~doc:
16 "on error (including invalid date format, file access issues, or \
17 other errors)."
18 1;
19 ]
20 in
21 let info = Cmd.info "caled" ~version ~doc ~exits:exit_info in
22 let default =
23 Term.(ret (const (fun () -> `Help (`Pager, None)) $ const ()))
24 in
25 let calendar_dir_path =
26 match Sys.getenv_opt "CALENDAR_DIR" with
27 | Some dir -> dir
28 | None -> Filename.concat (Sys.getenv "HOME") ".calendar"
29 in
30 let fs = Eio.Stdenv.fs env in
31 match Caledonia_lib.Calendar_dir.create ~fs calendar_dir_path with
32 | Error (`Msg e) ->
33 Printf.eprintf "%s" e;
34 1
35 | Ok calendar_dir -> (
36 match
37 Cmd.eval_value
38 (Cmd.group info ~default
39 [ list_cmd ~fs calendar_dir; search_cmd ~fs calendar_dir ])
40 with
41 | Ok (`Ok n) -> n
42 | Ok _ -> 0
43 | Error _ -> 1)
44
45let () = Eio_main.run @@ fun env -> exit (main env)