diff options
author | Jonas Fonseca <jonas.fonseca@gmail.com> | 2014-03-12 01:05:53 -0400 |
---|---|---|
committer | Jonas Fonseca <jonas.fonseca@gmail.com> | 2014-03-12 01:22:37 -0400 |
commit | 4ccbbb28c5888eadc7b39b630296e81cc54c6dd6 (patch) | |
tree | 060f96b3bdc778cf1a71061a3a932f595370db49 | |
parent | 0b0b39b1e4cc9c135a169b32389bf46905e19770 (diff) |
Move run request flags parsing to add_run_request
This changes option_bind_command to no longer parse the flags when
adding run requests.
-rw-r--r-- | include/tig/keys.h | 18 | ||||
-rw-r--r-- | src/help.c | 2 | ||||
-rw-r--r-- | src/keys.c | 28 | ||||
-rw-r--r-- | src/options.c | 29 | ||||
-rw-r--r-- | src/tig.c | 16 |
5 files changed, 41 insertions, 52 deletions
diff --git a/include/tig/keys.h b/include/tig/keys.h index fd0d478e..16acf7d0 100644 --- a/include/tig/keys.h +++ b/include/tig/keys.h @@ -66,26 +66,22 @@ enum status_code add_keybinding(struct keymap *table, enum request request, stru const char *get_keys(struct keymap *keymap, enum request request, bool all); #define get_view_key(view, request) get_keys(&(view)->ops->keymap, request, FALSE) -enum run_request_flag { - RUN_REQUEST_DEFAULT = 0, - RUN_REQUEST_SILENT = 2, - RUN_REQUEST_CONFIRM = 4, - RUN_REQUEST_EXIT = 8, - RUN_REQUEST_INTERNAL = 16, +struct run_request_flags { + bool silent; + bool confirm; + bool exit; + bool internal; }; struct run_request { struct keymap *keymap; struct key_input input; + struct run_request_flags flags; const char **argv; - bool silent; - bool confirm; - bool exit; - bool internal; }; struct run_request *get_run_request(enum request request); -enum status_code add_run_request(struct keymap *keymap, struct key_input *input, const char **argv, enum run_request_flag flags); +enum status_code add_run_request(struct keymap *keymap, struct key_input *input, const char **argv); #endif /* vim: set ts=8 sw=8 noexpandtab: */ @@ -50,7 +50,7 @@ help_draw(struct view *view, struct line *line, unsigned int lineno) } else if (help->request > REQ_RUN_REQUESTS) { struct run_request *req = get_run_request(help->request); const char *key = get_key_name(&req->input); - const char *sep = req->internal ? ":" : "!"; + const char *sep = req->flags.internal ? ":" : "!"; int i; if (draw_field(view, LINE_DEFAULT, key, state->keys_width + 2, ALIGN_RIGHT, FALSE)) @@ -279,9 +279,30 @@ static size_t run_requests; DEFINE_ALLOCATOR(realloc_run_requests, struct run_request, 8) enum status_code -add_run_request(struct keymap *keymap, struct key_input *input, const char **argv, enum run_request_flag flags) +add_run_request(struct keymap *keymap, struct key_input *input, const char **argv) { struct run_request *req; + struct run_request_flags flags = {}; + + if (!strchr(":!?@<", *argv[0])) + return ERROR_UNKNOWN_REQUEST_NAME; + + while (*argv[0]) { + if (*argv[0] == ':') { + flags.internal = 1; + argv[0]++; + break; + } else if (*argv[0] == '@') { + flags.silent = 1; + } else if (*argv[0] == '?') { + flags.confirm = 1; + } else if (*argv[0] == '<') { + flags.exit = 1; + } else if (*argv[0] != '!') { + break; + } + argv[0]++; + } if (!realloc_run_requests(&run_request, run_requests, 1)) return ERROR_OUT_OF_MEMORY; @@ -290,10 +311,7 @@ add_run_request(struct keymap *keymap, struct key_input *input, const char **arg return ERROR_OUT_OF_MEMORY; req = &run_request[run_requests++]; - req->silent = flags & RUN_REQUEST_SILENT; - req->confirm = flags & RUN_REQUEST_CONFIRM; - req->exit = flags & RUN_REQUEST_EXIT; - req->internal = flags & RUN_REQUEST_INTERNAL; + req->flags = flags; req->keymap = keymap; req->input = *input; diff --git a/src/options.c b/src/options.c index 7fedb3fa..10f3d858 100644 --- a/src/options.c +++ b/src/options.c @@ -541,33 +541,8 @@ option_bind_command(int argc, const char *argv[]) } } - if (request == REQ_UNKNOWN) { - enum run_request_flag flags = RUN_REQUEST_DEFAULT; - - if (strchr("!?@<", *argv[2])) { - while (*argv[2]) { - if (*argv[2] == '@') { - flags |= RUN_REQUEST_SILENT; - } else if (*argv[2] == '?') { - flags |= RUN_REQUEST_CONFIRM; - } else if (*argv[2] == '<') { - flags |= RUN_REQUEST_EXIT; - } else if (*argv[2] != '!') { - break; - } - argv[2]++; - } - - } else if (*argv[2] == ':') { - argv[2]++; - flags |= RUN_REQUEST_INTERNAL; - - } else { - return ERROR_UNKNOWN_REQUEST_NAME; - } - - return add_run_request(keymap, &input, argv + 2, flags); - } + if (request == REQ_UNKNOWN) + return add_run_request(keymap, &input, argv + 2); return add_keybinding(keymap, request, &input); } @@ -172,7 +172,7 @@ open_run_request(struct view *view, enum request request) } if (argv_format(view->env, &argv, req->argv, FALSE, TRUE)) { - if (req->internal) { + if (req->flags.internal) { char cmd[SIZEOF_STR]; if (argv_to_string(argv, cmd, sizeof(cmd), " ")) { @@ -180,11 +180,11 @@ open_run_request(struct view *view, enum request request) } } else { - confirmed = !req->confirm; + confirmed = !req->flags.confirm; - if (req->confirm) { + if (req->flags.confirm) { char cmd[SIZEOF_STR], prompt[SIZEOF_STR]; - const char *and_exit = req->exit ? " and exit" : ""; + const char *and_exit = req->flags.exit ? " and exit" : ""; if (argv_to_string(argv, cmd, sizeof(cmd), " ") && string_format(prompt, "Run `%s`%s?", cmd, and_exit) && @@ -194,10 +194,10 @@ open_run_request(struct view *view, enum request request) } if (confirmed && argv_remove_quotes(argv)) { - if (req->silent) + if (req->flags.silent) io_run_bg(argv); else - open_external_viewer(argv, NULL, !req->exit, ""); + open_external_viewer(argv, NULL, !req->flags.exit, ""); } } } @@ -207,10 +207,10 @@ open_run_request(struct view *view, enum request request) free(argv); if (request == REQ_NONE) { - if (req->confirm && !confirmed) + if (req->flags.confirm && !confirmed) request = REQ_NONE; - else if (req->exit) + else if (req->flags.exit) request = REQ_QUIT; else if (view_has_flags(view, VIEW_REFRESH) && !view->unrefreshable) |