/* * Copyright 2026 Joel Klinghed * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ #include "args.hh" #include "monitor.hh" #include "notify.hh" #include #include #include #include #ifndef VERSION # define VERSION "" #endif int main(int argc, char** argv) { auto args = Args::create(); auto help = args->option('h', "help", "display this text and exit."); auto version = args->option('V', "version", "display version and exit."); auto opt_font_name = args->option_argument( 'F', "font", "use font named FONT instead of default or Xresources.", "FONT"); auto opt_display = args->option_argument( 'D', "display", "connect to DISPLAY instead of default.", "DISPLAY"); auto notify = args->option('N', "notification", "claude notification ."); std::vector arguments; if (!args->run(argc, argv, &arguments)) { args->print_error(std::cerr); std::cerr << "Try `claudemon --help` for usage.\n"; return EXIT_FAILURE; } if (help->is_set()) { std::cout << "Usage: `claudemon [OPTIONS]`\n" << "Monitors claude.\n" << "\n"; args->print_help(std::cout); return EXIT_SUCCESS; } if (version->is_set()) { std::cout << "Timer " VERSION " written by " << "Joel Klinghed \n"; return EXIT_SUCCESS; } if (!arguments.empty()) { std::cerr << "Unexpected arguments after options.\n" << "Try `claudemon --help` for usage.\n"; return EXIT_FAILURE; } if (notify->is_set()) { return Notify::run(opt_display->has_argument() ? opt_display->argument() : std::optional()); } return Monitor::run( opt_display->has_argument() ? opt_display->argument() : std::optional(), opt_font_name->has_argument() ? opt_font_name->argument() : std::optional()); }