Command-line and Emacs Calendar Client
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