diff --git a/cmd-run-shell.c b/cmd-run-shell.c index ddb5b1b4..9e224c4e 100644 --- a/cmd-run-shell.c +++ b/cmd-run-shell.c @@ -85,12 +85,18 @@ cmd_run_shell_print(struct job *job, const char *msg) if (cdata->wp_id != -1) wp = window_pane_find_by_id(cdata->wp_id); - if (wp == NULL && cdata->item != NULL && cdata->client != NULL) - wp = server_client_get_pane(cdata->client); - if (wp == NULL && cmd_find_from_nothing(&fs, 0) == 0) - wp = fs.wp; - if (wp == NULL) - return; + if (wp == NULL) { + if (cdata->item != NULL) { + cmdq_print(cdata->item, "%s", msg); + return; + } + if (cdata->item != NULL && cdata->client != NULL) + wp = server_client_get_pane(cdata->client); + if (wp == NULL && cmd_find_from_nothing(&fs, 0) == 0) + wp = fs.wp; + if (wp == NULL) + return; + } wme = TAILQ_FIRST(&wp->modes); if (wme == NULL || wme->mode != &window_view_mode) diff --git a/options-table.c b/options-table.c index 782ce17e..62b9ae99 100644 --- a/options-table.c +++ b/options-table.c @@ -383,6 +383,14 @@ const struct options_table_entry options_table[] = { .text = "Maximum number of commands to keep in history." }, + { .name = "search-wrapped-lines", + .type = OPTIONS_TABLE_FLAG, + .scope = OPTIONS_TABLE_SERVER, + .default_num = 1, + .text = "Whether to include full wrapped lines when searching for " + "text in copy mode." + }, + { .name = "set-clipboard", .type = OPTIONS_TABLE_CHOICE, .scope = OPTIONS_TABLE_SERVER, diff --git a/tmux.1 b/tmux.1 index b73efdd6..cef175a0 100644 --- a/tmux.1 +++ b/tmux.1 @@ -3797,6 +3797,14 @@ each client. .It Ic prompt-history-limit Ar number Set the number of history items to save in the history file for each type of command prompt. +.It Xo Ic search-wrapped-lines +.Op Ic on | off +.Xc +Defines how +.Nm +handles wrapped lines when searching in copy mode. +When disabled, lines are truncated and searching is faster, but matches may be +missed. .It Xo Ic set-clipboard .Op Ic on | external | off .Xc diff --git a/window-copy.c b/window-copy.c index a1f18476..9db17c3d 100644 --- a/window-copy.c +++ b/window-copy.c @@ -3615,11 +3615,13 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd, int direction, int regex) { u_int i, px, sx, ssize = 1; - int found = 0, cflags = REG_EXTENDED; + int wrapped, found = 0, cflags = REG_EXTENDED; char *sbuf; regex_t reg; struct grid_line *gl; + wrapped = options_get_number(global_options, "search-wrapped-lines"); + if (regex) { sbuf = xmalloc(ssize); sbuf[0] = '\0'; @@ -3636,7 +3638,9 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd, if (direction) { for (i = fy; i <= endline; i++) { gl = grid_get_line(gd, i); - if (i != endline && gl->flags & GRID_LINE_WRAPPED) + if (!wrapped && + i != endline && + gl->flags & GRID_LINE_WRAPPED) continue; if (regex) { found = window_copy_search_lr_regex(gd, @@ -3652,7 +3656,9 @@ window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd, } else { for (i = fy + 1; endline < i; i--) { gl = grid_get_line(gd, i - 1); - if (i != endline && gl->flags & GRID_LINE_WRAPPED) + if (!wrapped && + i != endline && + gl->flags & GRID_LINE_WRAPPED) continue; if (regex) { found = window_copy_search_rl_regex(gd,