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