/* Processes all non-general command-line arguments. */ static void process_non_general_args(args_t *args) { if(args->remote_cmds != NULL && !ipc_server()) { ipc_send(args->remote_cmds); quit_on_arg_parsing(EXIT_SUCCESS); return; } if(args->file_picker) { vim_get_list_file_path(args->chosen_files_out, sizeof(args->chosen_files_out)); } if(args->chosen_files_out[0] != '\0') { stats_set_chosen_files_out(args->chosen_files_out); } if(args->chosen_dir_out[0] != '\0') { stats_set_chosen_dir_out(args->chosen_dir_out); } if(args->delimiter != NULL) { stats_set_output_delimiter(args->delimiter); } if(args->on_choose) { stats_set_on_choose(args->on_choose); } }
/* Sub-loop of the main loop that "asynchronously" queries for the input * performing the following tasks while waiting for input: * - checks for new IPC messages; * - checks whether contents of displayed directories changed; * - redraws UI if requested. * Returns KEY_CODE_YES for functional keys, OK for wide character and ERR * otherwise (e.g. after timeout). */ static int get_char_async_loop(WINDOW *win, wint_t *c, int timeout) { const int IPC_F = (ipc_enabled() && ipc_server()) ? 10 : 1; do { int i; if(should_check_views_for_changes()) { check_view_for_changes(curr_view); check_view_for_changes(other_view); } process_scheduled_updates(); for(i = 0; i < IPC_F; ++i) { int result; ipc_check(); wtimeout(win, MIN(cfg.min_timeout_len, timeout)/IPC_F); result = compat_wget_wch(win, c); if(result != ERR) { return result; } process_scheduled_updates(); } timeout -= cfg.min_timeout_len; } while(timeout > 0); return ERR; }
static void parse_args(int argc, char *argv[], const char *dir, char *lwin_path, char *rwin_path, int *lwin_handle, int *rwin_handle) { int x; int select = 0; (void)my_chdir(dir); /* Get Command Line Arguments */ for(x = 1; x < argc; x++) { if(!strcmp(argv[x], "--select")) { select = 1; } else if(!strcmp(argv[x], "--remote")) { if(!ipc_server()) { ipc_send(argv + x + 1); quit_on_invalid_arg(); } } else if(!strcmp(argv[x], "-f")) { cfg.vim_filter = 1; } else if(!strcmp(argv[x], "--no-configs")) { } else if(!strcmp(argv[x], "--version") || !strcmp(argv[x], "-v")) { show_version_msg(); quit_on_invalid_arg(); } else if(!strcmp(argv[x], "--help") || !strcmp(argv[x], "-h")) { show_help_msg(); quit_on_invalid_arg(); } else if(!strcmp(argv[x], "--logging")) { /* do nothing, it's handeled in main() */ } else if(!strcmp(argv[x], "-c")) { if(x == argc - 1) { puts("Argument missing after \"-c\""); quit_on_invalid_arg(); } /* do nothing, it's handeled in exec_startup_commands() */ x++; } else if(argv[x][0] == '+') { /* do nothing, it's handeled in exec_startup_commands() */ } else if(path_exists(argv[x]) || is_path_absolute(argv[x]) || is_root_dir(argv[x])) { if(lwin_path[0] != '\0') { parse_path(dir, argv[x], rwin_path); *rwin_handle = !select; } else { parse_path(dir, argv[x], lwin_path); *lwin_handle = !select; } select = 0; } else if(curr_stats.load_stage == 0) { show_help_msg(); quit_on_invalid_arg(); } else { show_error_msgf("--remote error", "Invalid argument: %s", argv[x]); } } }