@@ -356,6 +356,57 @@ delegate_to_kitten_if_possible(int argc, char *argv[], char* exe_dir) {
356
356
if (argc > 3 && strcmp (argv [1 ], "+" ) == 0 && strcmp (argv [2 ], "kitten" ) == 0 && is_wrapped_kitten (argv [3 ])) exec_kitten (argc - 2 , argv + 2 , exe_dir );
357
357
}
358
358
359
+ static bool
360
+ is_boolean_flag (const char * x ) {
361
+ static const char * all_boolean_options = KITTY_CLI_BOOL_OPTIONS ;
362
+ char buf [128 ];
363
+ snprintf (buf , sizeof (buf ), " %s " , x );
364
+ return strstr (all_boolean_options , buf ) != NULL ;
365
+ }
366
+
367
+ static void
368
+ handle_fast_commandline (int argc , char * argv []) {
369
+ char current_option_expecting_argument [128 ] = {0 };
370
+ bool version_requested = false;
371
+ for (int i = 1 ; i < argc ; i ++ ) {
372
+ const char * arg = argv [i ];
373
+ if (current_option_expecting_argument [0 ]) {
374
+ current_option_expecting_argument [0 ] = 0 ;
375
+ } else {
376
+ if (!arg || !arg [0 ] || !arg [1 ] || arg [0 ] != '-' || strcmp (arg , "--" ) == 0 ) break ;
377
+ if (arg [1 ] == '-' ) { // long opt
378
+ const char * equal = strchr (arg , '=' );
379
+ if (equal == NULL ) {
380
+ if (strcmp (arg + 2 , "version" ) == 0 ) {
381
+ version_requested = true;
382
+ } else if (!is_boolean_flag (arg + 2 )) {
383
+ strncpy (current_option_expecting_argument , arg + 2 , sizeof (current_option_expecting_argument )- 1 );
384
+ }
385
+ }
386
+ } else {
387
+ char buf [2 ] = {0 };
388
+ for (int i = 1 ; arg [i ] != 0 ; i ++ ) {
389
+ switch (arg [i ]) {
390
+ case 'v' : version_requested = true; break ;
391
+ default :
392
+ buf [0 ] = arg [i ]; buf [1 ] = 0 ;
393
+ if (!is_boolean_flag (buf )) { current_option_expecting_argument [0 ] = arg [i ]; current_option_expecting_argument [1 ] = 0 ; }
394
+ }
395
+ }
396
+ }
397
+ }
398
+ }
399
+
400
+ if (version_requested ) {
401
+ if (isatty (STDOUT_FILENO )) {
402
+ printf ("\x1b[3mkitty\x1b[23m \x1b[32m%s\x1b[39m created by \x1b[1;34mKovid Goyal\x1b[22;39m\n" , KITTY_VERSION );
403
+ } else {
404
+ printf ("kitty %s created by Kovid Goyal\n" , KITTY_VERSION );
405
+ }
406
+ exit (0 );
407
+ }
408
+ }
409
+
359
410
int main (int argc , char * argv [], char * envp []) {
360
411
if (argc < 1 || !argv ) { fprintf (stderr , "Invalid argc/argv\n" ); return 1 ; }
361
412
if (!ensure_working_stdio ()) return 1 ;
@@ -370,6 +421,7 @@ int main(int argc, char *argv[], char* envp[]) {
370
421
strncpy (exe_dir_buf , exe , sizeof (exe_dir_buf ));
371
422
char * exe_dir = dirname (exe_dir_buf );
372
423
delegate_to_kitten_if_possible (argc , argv , exe_dir );
424
+ handle_fast_commandline (argc , argv );
373
425
int num , ret = 0 ;
374
426
char lib [PATH_MAX + 1 ] = {0 };
375
427
if (KITTY_LIB_PATH [0 ] == '/' ) {
0 commit comments