Command-line and Emacs Calendar Client
at main 1.7 kB view raw
1open Cmdliner 2open Caledonia_lib 3 4let run ~event_id ~format ~fs calendar_dir = 5 let ( let* ) = Result.bind in 6 let filter = Event.with_id event_id in 7 let* events = Calendar_dir.get_events ~fs calendar_dir in 8 let results = Event.query_without_recurrence events ~filter () in 9 if results = [] then print_endline "No events found." 10 else print_endline (Event.format_events ~format results); 11 Ok () 12 13let event_id_arg = 14 let doc = "ID of the event to show" in 15 Arg.(required & pos 0 (some string) None & info [] ~docv:"EVENT_ID" ~doc) 16 17let format_arg = 18 let doc = "Output format (text, id, json, csv, ics, table, sexp)" in 19 Arg.( 20 value 21 & opt (enum Query_args.format_enum) `Entries 22 & info [ "format"; "o" ] ~docv:"FORMAT" ~doc) 23 24let cmd ~fs calendar_dir = 25 let run event_id format () = 26 match run ~event_id ~format ~fs calendar_dir with 27 | Error (`Msg msg) -> 28 Printf.eprintf "Error: %s\n%!" msg; 29 1 30 | Ok () -> 0 31 in 32 let term = Term.(const run $ event_id_arg $ format_arg) in 33 let doc = "Show details of a specific event" in 34 let man = 35 [ 36 `S Manpage.s_description; 37 `P "Show detailed information about a specific event by its ID."; 38 `P "You can find event IDs by using the `list` or `search` commands."; 39 `S Manpage.s_examples; 40 `P "Show event details:"; 41 `P " caled show 12345678-1234-5678-1234-567812345678"; 42 `P "Show event details in JSON format:"; 43 `P " caled show 12345678-1234-5678-1234-567812345678 --format json"; 44 `S Manpage.s_options; 45 ] 46 in 47 let exit_info = 48 [ Cmd.Exit.info ~doc:"on success." 0; Cmd.Exit.info ~doc:"on error." 1 ] 49 in 50 let info = Cmd.info "show" ~doc ~man ~exits:exit_info in 51 Cmd.v info term