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 show_cmd = Show_cmd.cmd
8let add_cmd = Add_cmd.cmd
9let delete_cmd = Delete_cmd.cmd
10let edit_cmd = Edit_cmd.cmd
11let doc = "Command-line calendar tool for managing local .ics files"
12let version = "%%VERSION%%"
13
14let main env =
15 let exit_info =
16 [
17 Cmd.Exit.info ~doc:"on success." 0;
18 Cmd.Exit.info
19 ~doc:
20 "on error (including invalid date format, file access issues, or \
21 other errors)."
22 1;
23 ]
24 in
25 let info = Cmd.info "caled" ~version ~doc ~exits:exit_info in
26 let default =
27 Term.(ret (const (fun () -> `Help (`Pager, None)) $ const ()))
28 in
29 let calendar_dir_path =
30 match Sys.getenv_opt "CALENDAR_DIR" with
31 | Some dir -> dir
32 | None -> Filename.concat (Sys.getenv "HOME") ".calendar"
33 in
34 let fs = Eio.Stdenv.fs env in
35 match Caledonia_lib.Calendar_dir.create ~fs calendar_dir_path with
36 | Error (`Msg e) ->
37 Printf.eprintf "%s" e;
38 1
39 | Ok calendar_dir -> (
40 match
41 Cmd.eval_value
42 (Cmd.group info ~default
43 [
44 list_cmd ~fs calendar_dir;
45 search_cmd ~fs calendar_dir;
46 show_cmd ~fs calendar_dir;
47 add_cmd ~fs calendar_dir;
48 edit_cmd ~fs calendar_dir;
49 delete_cmd ~fs calendar_dir;
50 ])
51 with
52 | Ok (`Ok n) -> n
53 | Ok _ -> 0
54 | Error _ -> 1)
55
56let () = Eio_main.run @@ fun env -> exit (main env)