[PATCH v13 0/1] MR8467: conhost: Implement F1 and F3 support for history retrieval.
F1 and F3 allow partial retrieval of previous entry from console history. They are used as shortcuts such that if the following were entered at the command line: ``` md tmptmp cd <F3> ``` F3 will retrieve the previous line from history past the cursor position, and be auto-completed to "cd tmptmp". F1 works in a similar fashion, but with one character at a time. -- v13: conhost: Implement F1 and F3 support for history retrieval. https://gitlab.winehq.org/wine/wine/-/merge_requests/8467
From: Joe Souza <jsouza(a)yahoo.com> --- programs/conhost/conhost.c | 59 ++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c index 89c030e86c8..6b8c6d4f01d 100644 --- a/programs/conhost/conhost.c +++ b/programs/conhost/conhost.c @@ -774,6 +774,45 @@ static void edit_line_find_in_history( struct console *console ) while (ctx->history_index != start_pos); } +static void edit_line_copy_from_history( struct console *console, int copycount ) +{ + if (console->edit_line.history_index) + { + struct edit_line *ctx = &console->edit_line; + unsigned int index = ctx->history_index - 1; + WCHAR *line = console->history[index]->text; + unsigned int len = console->history[index]->len / sizeof(WCHAR); + + if (len > ctx->cursor) + { + unsigned int ccount = (copycount > 0) ? copycount : len - ctx->cursor; + + if (ctx->cursor == ctx->len) + { + /* Insert new string. */ + if (edit_line_grow(console, ccount)) + { + edit_line_insert( console, &line[ctx->cursor], ccount ); + } + } + else + { + ctx->cursor += ccount; + } + } + } +} + +static void edit_line_copy_one_from_history( struct console *console ) +{ + edit_line_copy_from_history(console, 1); +} + +static void edit_line_copy_all_from_history( struct console *console ) +{ + edit_line_copy_from_history(console, -1); +} + static void edit_line_move_left( struct console *console ) { if (console->edit_line.cursor > 0) console->edit_line.cursor--; @@ -1137,15 +1176,17 @@ static const struct edit_line_key_map emacs_key_map[] = static const struct edit_line_key_entry win32_std_key_map[] = { - { VK_LEFT, edit_line_move_left }, - { VK_RIGHT, edit_line_move_right }, - { VK_HOME, edit_line_move_home }, - { VK_END, edit_line_move_end }, - { VK_UP, edit_line_move_to_prev_hist }, - { VK_DOWN, edit_line_move_to_next_hist }, - { VK_INSERT, edit_line_toggle_insert }, - { VK_F8, edit_line_find_in_history }, - { VK_ESCAPE, edit_line_clear }, + { VK_LEFT, edit_line_move_left }, + { VK_RIGHT, edit_line_move_right }, + { VK_HOME, edit_line_move_home }, + { VK_END, edit_line_move_end }, + { VK_UP, edit_line_move_to_prev_hist }, + { VK_DOWN, edit_line_move_to_next_hist }, + { VK_INSERT, edit_line_toggle_insert }, + { VK_F8, edit_line_find_in_history }, + { VK_ESCAPE, edit_line_clear }, + { VK_F1, edit_line_copy_one_from_history }, + { VK_F3, edit_line_copy_all_from_history }, { 0 } }; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8467
On Sat Jul 12 18:27:36 2025 +0000, Joe Souza wrote:
changed this line in [version 13 of the diff](/wine/wine/-/merge_requests/8467/diffs?diff_id=192792&start_sha=c95faa43f636f4683db0e50a2e43b057384ef8d2#d1f6ceee9c59eda45dd9dd99f99c894449cab85d_793_792) Fixed.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/8467#note_109663
This merge request was approved by eric pouech. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8467
participants (3)
-
eric pouech (@epo) -
Joe Souza -
Joe Souza (@JoeS209)