Download raw body.
tog: abort compound command
Mark Jamsek <mark@jamsek.com> wrote:
> stsp noticed that if you run 9999j in the log view, in a large enough
> repo you have to wait till 9999 lines have been scrolled, or in
> smaller repos until the end of the commit history.
>
> This enables aborting the command with C-g or backspace.
>
> I remembered both op and naddy were partial to C-g abort semantics, so
> for consistency I've added C-g to the existing backspace option to abort
> search and G in log view.
>
> The diff also removes a couple trailing whitespace in tog.1
had the same issues as stsp with tog.1, but the diff reads fine and the
edits in tog.c works perfectly!
ok op@
> diff /home/mark/src/git/got-current
> commit - f0032ce63b4f4f035e5f7894a406a96931f99f3f
> path + /home/mark/src/git/got-current
> blob - 18d37fe0f1b21d153863f1bcf024ecca990a307a
> file + tog/tog.1
> --- tog/tog.1
> +++ tog/tog.1
> @@ -62,6 +62,10 @@ operation as indicated.
> will echo digits to the screen when count modifiers are entered, and complete
> the sequence upon input of the first non-numeric character.
> Count modifiers can be aborted by entering an unmapped key.
> +Once a compound command is executed, the operation can be cancelled with
> +.Cm C-g
> +or
> +.Cm Backspace .
> The global key bindings are:
> .Bl -tag -width Ds
> .It Cm Q
> @@ -138,6 +142,8 @@ Move the cursor to the oldest commit.
> This will traverse all commits on the current branch which may take
> a long time depending on the number of commits in branch history.
> If needed, this operation can be cancelled with
> +.Cm C-g
> +or
> .Cm Backspace .
> .It Cm Enter
> Open a
> @@ -163,14 +169,18 @@ Regular expression syntax is documented in
> .It Cm n
> Find the Nth next commit which matches the current search pattern (default: 1).
> .br
> -Searching continues until either a match is found or the
> +Searching continues until either a match is found or
> +.Cm C-g
> +or the
> .Cm Backspace
> key is pressed.
> .It Cm N
> Find the Nth previous commit which matches the current search pattern
> (default: 1).
> .br
> -Searching continues until either a match is found or the
> +Searching continues until either a match is found or
> +.Cm C-g
> +or the
> .Cm Backspace
> key is pressed.
> .It Cm Ctrl+l
> @@ -295,7 +305,7 @@ Find the Nth previous line which matches the current s
> Toggle display of whitespace-only changes.
> .It Cm A
> Change the diff algorithm.
> -Supported diff algorithms are Myers and Patience.
> +Supported diff algorithms are Myers and Patience.
> This is a global setting which also affects the
> .Cm blame
> view.
> @@ -385,7 +395,7 @@ Find the Nth previous line which matches the current s
> (default: 1).
> .It Cm A
> Change the diff algorithm.
> -Supported diff algorithms are Myers and Patience.
> +Supported diff algorithms are Myers and Patience.
> This is a global setting which also affects the
> .Cm diff
> view.
> blob - 9cc2f49357acdfea63b9c2c89ad3b280d9054d53
> file + tog/tog.c
> --- tog/tog.c
> +++ tog/tog.c
> @@ -972,12 +972,14 @@ view_search_start(struct tog_view *view)
> mvwaddstr(v->window, v->nlines - 1, 0, "/");
> wclrtoeol(v->window);
>
> + nodelay(view->window, FALSE); /* block for search term input */
> nocbreak();
> echo();
> ret = wgetnstr(v->window, pattern, sizeof(pattern));
> wrefresh(v->window);
> cbreak();
> noecho();
> + nodelay(view->window, TRUE);
> if (ret == ERR)
> return NULL;
>
> @@ -1072,22 +1074,29 @@ view_input(struct tog_view **new, int *done, struct to
> return NULL;
> }
>
> - nodelay(stdscr, FALSE);
> + nodelay(view->window, FALSE);
> /* Allow threads to make progress while we are waiting for input. */
> errcode = pthread_mutex_unlock(&tog_mutex);
> if (errcode)
> return got_error_set_errno(errcode, "pthread_mutex_unlock");
> - /* If we have an unfinished count, don't get a new key map. */
> - ch = view->ch;
> - if ((view->count && --view->count == 0) || !view->count) {
> + /* If we have an unfinished count, let C-g or backspace abort. */
> + if (view->count && --view->count) {
> + cbreak();
> + nodelay(view->window, TRUE);
> ch = wgetch(view->window);
> + if (ch == CTRL('g') || ch == KEY_BACKSPACE)
> + view->count = 0;
> + else
> + ch = view->ch;
> + } else {
> + ch = wgetch(view->window);
> if (ch >= '1' && ch <= '9')
> view->ch = ch = get_compound_key(view, ch);
> }
> errcode = pthread_mutex_lock(&tog_mutex);
> if (errcode)
> return got_error_set_errno(errcode, "pthread_mutex_lock");
> - nodelay(stdscr, TRUE);
> + nodelay(view->window, TRUE);
>
> if (tog_sigwinch_received || tog_sigcont_received) {
> tog_resizeterm();
> @@ -2556,7 +2565,7 @@ search_next_log_view(struct tog_view *view)
> if (errcode)
> return got_error_set_errno(errcode,
> "pthread_mutex_lock");
> - if (ch == KEY_BACKSPACE) {
> + if (ch == CTRL('g') || ch == KEY_BACKSPACE) {
> view->search_next_done = TOG_SEARCH_HAVE_MORE;
> return NULL;
> }
> @@ -2921,7 +2930,7 @@ input_log_view(struct tog_view **new_view, struct tog_
> int begin_x = 0, begin_y = 0, eos, n, nscroll;
>
> if (s->thread_args.load_all) {
> - if (ch == KEY_BACKSPACE)
> + if (ch == CTRL('g') || ch == KEY_BACKSPACE)
> s->thread_args.load_all = 0;
> else if (s->thread_args.log_complete) {
> err = log_move_cursor_down(view, s->commits.ncommits);
tog: abort compound command