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)