Download raw body.
tog: user-defined keymap timeout
As Stefan suggested in the original thread, enable user-defined timeout for compound keymaps, configurable with an envvar. This also increases the default value to 1 second (up from 0.5s). diff refs/heads/main refs/heads/dev/nkeymap blob - 728ba5ee9e20edbde20ed7f0c2ff1cbabad89c0b blob + 7acca5d60fb3d0dfb62ffe6c1848aa16315f03c3 --- tog/tog.1 +++ tog/tog.1 @@ -64,6 +64,11 @@ will wait 500 milliseconds for each successive integer to complete. If this sequence should timeout or does not conclude with a valid key binding, the command is aborted and any preceding count is reset. +This behavior can be customized with the TOG_KEYMAP_TIMEOUT environment +variable. +See +.Sx ENVIRONMENT +for details. The global key bindings are: .Bl -tag -width Ds .It Cm Q @@ -561,6 +566,12 @@ work tree, use the repository path associated with thi .El .Sh ENVIRONMENT .Bl -tag -width TOG_COLORS +.It Ev TOG_KEYMAP_TIMEOUT +Define the timeout interval between compound sequence keypresses. +The value must be an integer between 1 and 255, and specifies how many tenths +of a second +.Nm +will wait before timing out (default: 10). .It Ev TOG_COLORS .Nm shows colorized output if this variable is set to a non-empty value. blob - 87eeaf0b99951e273aa30da21d81e7ab116412c7 blob + 6f9bc97a1dbc436514494bb9e7f79b8ea9e5be02 --- tog/tog.c +++ tog/tog.c @@ -504,6 +504,7 @@ struct tog_view { int lines, cols; /* copies of LINES and COLS */ int ch, count; /* current keymap and count prefix */ int focussed; /* Only set on one parent or child view at a time. */ + int timeout; /* timeout for compound key maps (default: 10=1s) */ int dying; struct tog_view *parent; struct tog_view *child; @@ -899,7 +900,7 @@ get_compound_key(struct tog_view *view, int c) int x, n = 0; view->count = 0; - halfdelay(5); /* block for half a second */ + halfdelay(view->timeout); /* timeout interval between keys */ wattron(view->window, A_BOLD); wmove(view->window, view->nlines - 1, 0); wclrtoeol(view->window); @@ -927,6 +928,20 @@ get_compound_key(struct tog_view *view, int c) return c; } +static void +set_keymap_timeout(struct tog_view *view) +{ + const char *timeout; + + /* fallback to default on error or if not set */ + timeout = getenv("TOG_KEYMAP_TIMEOUT"); + if (timeout != NULL) + view->timeout = strtonum(timeout, 1, 255, NULL); + + if (!view->timeout) + view->timeout = 10; +} + static const struct got_error * view_input(struct tog_view **new, int *done, struct tog_view *view, struct tog_view_list_head *views) @@ -2542,6 +2557,9 @@ open_log_view(struct tog_view *view, struct got_object } } + if (!view->timeout) + set_keymap_timeout(view); + view->show = show_log_view; view->input = input_log_view; view->close = close_log_view; @@ -4001,6 +4019,9 @@ open_diff_view(struct tog_view *view, struct got_objec goto done; } + if (!view->timeout) + set_keymap_timeout(view); + if (log_view && view_is_splitscreen(view)) show_log_view(log_view); /* draw vborder */ diff_view_indicate_progress(view); @@ -4917,6 +4938,9 @@ open_blame_view(struct tog_view *view, char *path, return err; } + if (!view->timeout) + set_keymap_timeout(view); + view->show = show_blame_view; view->input = input_blame_view; view->close = close_blame_view; @@ -5855,6 +5879,9 @@ open_tree_view(struct tog_view *view, struct got_objec goto done; } + if (!view->timeout) + set_keymap_timeout(view); + view->show = show_tree_view; view->input = input_tree_view; view->close = close_tree_view; @@ -6471,6 +6498,9 @@ open_ref_view(struct tog_view *view, struct got_reposi goto done; } + if (!view->timeout) + set_keymap_timeout(view); + view->show = show_ref_view; view->input = input_ref_view; view->close = close_ref_view; -- Mark Jamsek <fnc.bsdbox.org> GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
tog: user-defined keymap timeout