Download raw body.
tog: abort compound command
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
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);
--
Mark Jamsek <fnc.bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
tog: abort compound command