Skip to content

Commit

Permalink
add -p: disable stdin buffering when interactive.singlekey is set
Browse files Browse the repository at this point in the history
The builtin "add -p" reads the key "F2" as three separate keys "^[",
"O" and "Q". The "Q" causes it to quit which is probably not what the
user was expecting. This is because it uses poll() to check for
pending input when reading escape sequences but reads the input with
getchar() which is buffered by default and so hoovers up all the
pending input leading poll() think there isn't anything pending. Fix
this by calling setbuf() to disable input buffering if
interactive.singlekey is set.

Looking at the comment above mingw_getchar() in terminal.c I wonder if
that function is papering over this bug and could be removed.
Unfortunately I don't have access to windows to test that.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
phillipwood authored and gitster committed Feb 23, 2022
1 parent 2c68602 commit ac618c4
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions add-interactive.c
Expand Up @@ -70,6 +70,8 @@ void init_add_i_state(struct add_i_state *s, struct repository *r)
&s->interactive_diff_algorithm);

git_config_get_bool("interactive.singlekey", &s->use_single_key);
if (s->use_single_key)
setbuf(stdin, NULL);
}

void clear_add_i_state(struct add_i_state *s)
Expand Down

0 comments on commit ac618c4

Please sign in to comment.