=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/status.c,v retrieving revision 1.218 retrieving revision 1.219 diff -c -r1.218 -r1.219 *** src/usr.bin/tmux/status.c 2020/07/27 08:03:10 1.218 --- src/usr.bin/tmux/status.c 2021/01/08 08:22:10 1.219 *************** *** 1,4 **** ! /* $OpenBSD: status.c,v 1.218 2020/07/27 08:03:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: status.c,v 1.219 2021/01/08 08:22:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 543,549 **** prompt_free_cb freecb, void *data, int flags) { struct format_tree *ft; ! char *tmp, *cp; if (fs != NULL) ft = format_create_from_state(NULL, c, fs); --- 543,549 ---- prompt_free_cb freecb, void *data, int flags) { struct format_tree *ft; ! char *tmp; if (fs != NULL) ft = format_create_from_state(NULL, c, fs); *************** *** 563,569 **** c->prompt_string = format_expand_time(ft, msg); ! c->prompt_buffer = utf8_fromcstr(tmp); c->prompt_index = utf8_strlen(c->prompt_buffer); c->prompt_inputcb = inputcb; --- 563,575 ---- c->prompt_string = format_expand_time(ft, msg); ! if (flags & PROMPT_INCREMENTAL) { ! c->prompt_last = xstrdup(tmp); ! c->prompt_buffer = utf8_fromcstr(""); ! } else { ! c->prompt_last = NULL; ! c->prompt_buffer = utf8_fromcstr(tmp); ! } c->prompt_index = utf8_strlen(c->prompt_buffer); c->prompt_inputcb = inputcb; *************** *** 579,589 **** c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_REDRAWSTATUS; ! if ((flags & PROMPT_INCREMENTAL) && *tmp != '\0') { ! xasprintf(&cp, "=%s", tmp); ! c->prompt_inputcb(c, c->prompt_data, cp, 0); ! free(cp); ! } free(tmp); format_free(ft); --- 585,592 ---- c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); c->flags |= CLIENT_REDRAWSTATUS; ! if (flags & PROMPT_INCREMENTAL) ! c->prompt_inputcb(c, c->prompt_data, "=", 0); free(tmp); format_free(ft); *************** *** 599,604 **** --- 602,610 ---- if (c->prompt_freecb != NULL && c->prompt_data != NULL) c->prompt_freecb(c->prompt_data); + free(c->prompt_last); + c->prompt_last = NULL; + free(c->prompt_string); c->prompt_string = NULL; *************** *** 1260,1276 **** status_prompt_clear(c); break; case '\022': /* C-r */ ! if (c->prompt_flags & PROMPT_INCREMENTAL) { prefix = '-'; ! goto changed; ! } ! break; case '\023': /* C-s */ ! if (c->prompt_flags & PROMPT_INCREMENTAL) { prefix = '+'; ! goto changed; ! } ! break; default: goto append_key; } --- 1266,1292 ---- status_prompt_clear(c); break; case '\022': /* C-r */ ! if (~c->prompt_flags & PROMPT_INCREMENTAL) ! break; ! if (c->prompt_buffer[0].size == 0) { ! prefix = '='; ! free (c->prompt_buffer); ! c->prompt_buffer = utf8_fromcstr(c->prompt_last); ! c->prompt_index = utf8_strlen(c->prompt_buffer); ! } else prefix = '-'; ! goto changed; case '\023': /* C-s */ ! if (~c->prompt_flags & PROMPT_INCREMENTAL) ! break; ! if (c->prompt_buffer[0].size == 0) { ! prefix = '='; ! free (c->prompt_buffer); ! c->prompt_buffer = utf8_fromcstr(c->prompt_last); ! c->prompt_index = utf8_strlen(c->prompt_buffer); ! } else prefix = '+'; ! goto changed; default: goto append_key; }