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)