diff options
author | nicm <nicm> | 2019-03-07 20:24:21 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-03-07 20:24:21 +0000 |
commit | f98c66ece81953c777cd332c6bd29d707b1685e5 (patch) | |
tree | b84b2b0bcefcc9e1f2e082234b46f5b6688e34ae /window-copy.c | |
parent | 3c24bc5617bfdf90f94cc088f3769397c7569649 (diff) |
Add a separate mode struct for the active window mode if any.
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 936 |
1 files changed, 494 insertions, 442 deletions
diff --git a/window-copy.c b/window-copy.c index a79e3bf4..9efc6a46 100644 --- a/window-copy.c +++ b/window-copy.c @@ -24,85 +24,93 @@ #include "tmux.h" -static const char *window_copy_key_table(struct window_pane *); -static void window_copy_command(struct window_pane *, struct client *, +static const char *window_copy_key_table(struct window_mode_entry *); +static void window_copy_command(struct window_mode_entry *, struct client *, struct session *, struct winlink *, struct args *, struct mouse_event *); -static struct screen *window_copy_init(struct window_pane *, +static struct screen *window_copy_init(struct window_mode_entry *, struct cmd_find_state *, struct args *); -static void window_copy_free(struct window_pane *); -static void window_copy_resize(struct window_pane *, u_int, u_int); -static void window_copy_formats(struct window_pane *, struct format_tree *); -static int window_copy_pagedown(struct window_pane *, int, int); -static void window_copy_next_paragraph(struct window_pane *); -static void window_copy_previous_paragraph(struct window_pane *); - -static void window_copy_redraw_selection(struct window_pane *, u_int); -static void window_copy_redraw_lines(struct window_pane *, u_int, u_int); -static void window_copy_redraw_screen(struct window_pane *); -static void window_copy_write_line(struct window_pane *, +static void window_copy_free(struct window_mode_entry *); +static void window_copy_resize(struct window_mode_entry *, u_int, u_int); +static void window_copy_formats(struct window_mode_entry *, + struct format_tree *); +static void window_copy_pageup1(struct window_mode_entry *, int); +static int window_copy_pagedown(struct window_mode_entry *, int, int); +static void window_copy_next_paragraph(struct window_mode_entry *); +static void window_copy_previous_paragraph(struct window_mode_entry *); + +static void window_copy_redraw_selection(struct window_mode_entry *, u_int); +static void window_copy_redraw_lines(struct window_mode_entry *, u_int, + u_int); +static void window_copy_redraw_screen(struct window_mode_entry *); +static void window_copy_write_line(struct window_mode_entry *, struct screen_write_ctx *, u_int); -static void window_copy_write_lines(struct window_pane *, +static void window_copy_write_lines(struct window_mode_entry *, struct screen_write_ctx *, u_int, u_int); -static void window_copy_scroll_to(struct window_pane *, u_int, u_int); +static void window_copy_scroll_to(struct window_mode_entry *, u_int, u_int); static int window_copy_search_compare(struct grid *, u_int, u_int, struct grid *, u_int, int); static int window_copy_search_lr(struct grid *, struct grid *, u_int *, u_int, u_int, u_int, int); static int window_copy_search_rl(struct grid *, struct grid *, u_int *, u_int, u_int, u_int, int); -static int window_copy_search_marks(struct window_pane *, struct screen *); -static void window_copy_clear_marks(struct window_pane *); +static int window_copy_search_marks(struct window_mode_entry *, + struct screen *); +static void window_copy_clear_marks(struct window_mode_entry *); static void window_copy_move_left(struct screen *, u_int *, u_int *); static void window_copy_move_right(struct screen *, u_int *, u_int *); static int window_copy_is_lowercase(const char *); -static int window_copy_search_jump(struct window_pane *, struct grid *, - struct grid *, u_int, u_int, u_int, int, int, int); -static int window_copy_search(struct window_pane *, int); -static int window_copy_search_up(struct window_pane *); -static int window_copy_search_down(struct window_pane *); -static void window_copy_goto_line(struct window_pane *, const char *); -static void window_copy_update_cursor(struct window_pane *, u_int, u_int); -static void window_copy_start_selection(struct window_pane *); -static int window_copy_adjust_selection(struct window_pane *, u_int *, - u_int *); -static int window_copy_set_selection(struct window_pane *, int); -static int window_copy_update_selection(struct window_pane *, int); -static void window_copy_synchronize_cursor(struct window_pane *); -static void *window_copy_get_selection(struct window_pane *, size_t *); -static void window_copy_copy_buffer(struct window_pane *, void *, size_t); -static void window_copy_copy_pipe(struct window_pane *, struct session *, +static int window_copy_search_jump(struct window_mode_entry *, + struct grid *, struct grid *, u_int, u_int, u_int, int, int, + int); +static int window_copy_search(struct window_mode_entry *, int); +static int window_copy_search_up(struct window_mode_entry *); +static int window_copy_search_down(struct window_mode_entry *); +static void window_copy_goto_line(struct window_mode_entry *, const char *); +static void window_copy_update_cursor(struct window_mode_entry *, u_int, + u_int); +static void window_copy_start_selection(struct window_mode_entry *); +static int window_copy_adjust_selection(struct window_mode_entry *, + u_int *, u_int *); +static int window_copy_set_selection(struct window_mode_entry *, int); +static int window_copy_update_selection(struct window_mode_entry *, int); +static void window_copy_synchronize_cursor(struct window_mode_entry *); +static void *window_copy_get_selection(struct window_mode_entry *, size_t *); +static void window_copy_copy_buffer(struct window_mode_entry *, void *, + size_t); +static void window_copy_copy_pipe(struct window_mode_entry *, + struct session *, const char *); +static void window_copy_copy_selection(struct window_mode_entry *); +static void window_copy_append_selection(struct window_mode_entry *); +static void window_copy_clear_selection(struct window_mode_entry *); +static void window_copy_copy_line(struct window_mode_entry *, char **, + size_t *, u_int, u_int, u_int); +static int window_copy_in_set(struct window_mode_entry *, u_int, u_int, const char *); -static void window_copy_copy_selection(struct window_pane *); -static void window_copy_append_selection(struct window_pane *); -static void window_copy_clear_selection(struct window_pane *); -static void window_copy_copy_line(struct window_pane *, char **, size_t *, - u_int, u_int, u_int); -static int window_copy_in_set(struct window_pane *, u_int, u_int, +static u_int window_copy_find_length(struct window_mode_entry *, u_int); +static void window_copy_cursor_start_of_line(struct window_mode_entry *); +static void window_copy_cursor_back_to_indentation( + struct window_mode_entry *); +static void window_copy_cursor_end_of_line(struct window_mode_entry *); +static void window_copy_other_end(struct window_mode_entry *); +static void window_copy_cursor_left(struct window_mode_entry *); +static void window_copy_cursor_right(struct window_mode_entry *); +static void window_copy_cursor_up(struct window_mode_entry *, int); +static void window_copy_cursor_down(struct window_mode_entry *, int); +static void window_copy_cursor_jump(struct window_mode_entry *); +static void window_copy_cursor_jump_back(struct window_mode_entry *); +static void window_copy_cursor_jump_to(struct window_mode_entry *); +static void window_copy_cursor_jump_to_back(struct window_mode_entry *); +static void window_copy_cursor_next_word(struct window_mode_entry *, const char *); -static u_int window_copy_find_length(struct window_pane *, u_int); -static void window_copy_cursor_start_of_line(struct window_pane *); -static void window_copy_cursor_back_to_indentation(struct window_pane *); -static void window_copy_cursor_end_of_line(struct window_pane *); -static void window_copy_other_end(struct window_pane *); -static void window_copy_cursor_left(struct window_pane *); -static void window_copy_cursor_right(struct window_pane *); -static void window_copy_cursor_up(struct window_pane *, int); -static void window_copy_cursor_down(struct window_pane *, int); -static void window_copy_cursor_jump(struct window_pane *); -static void window_copy_cursor_jump_back(struct window_pane *); -static void window_copy_cursor_jump_to(struct window_pane *); -static void window_copy_cursor_jump_to_back(struct window_pane *); -static void window_copy_cursor_next_word(struct window_pane *, +static void window_copy_cursor_next_word_end(struct window_mode_entry *, const char *); -static void window_copy_cursor_next_word_end(struct window_pane *, +static void window_copy_cursor_previous_word(struct window_mode_entry *, const char *); -static void window_copy_cursor_previous_word(struct window_pane *, - const char *); -static void window_copy_scroll_up(struct window_pane *, u_int); -static void window_copy_scroll_down(struct window_pane *, u_int); -static void window_copy_rectangle_toggle(struct window_pane *); +static void window_copy_scroll_up(struct window_mode_entry *, u_int); +static void window_copy_scroll_down(struct window_mode_entry *, u_int); +static void window_copy_rectangle_toggle(struct window_mode_entry *); static void window_copy_move_mouse(struct mouse_event *); static void window_copy_drag_update(struct client *, struct mouse_event *); @@ -196,13 +204,14 @@ struct window_copy_mode_data { }; static struct screen * -window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, - __unused struct args *args) +window_copy_init(struct window_mode_entry *wme, + __unused struct cmd_find_state *fs, __unused struct args *args) { + struct window_pane *wp = wme->wp; struct window_copy_mode_data *data; struct screen *s; - wp->modedata = data = xcalloc(1, sizeof *data); + wme->data = data = xcalloc(1, sizeof *data); data->cursordrag = CURSORDRAG_NONE; data->lineflag = LINE_SEL_NONE; @@ -235,12 +244,13 @@ window_copy_init(struct window_pane *wp, __unused struct cmd_find_state *fs, void window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) { - struct window_copy_mode_data *data = wp->modedata; + struct window_mode_entry *wme = wp->mode; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; u_int i; - if (wp->mode != &window_copy_mode) + if (wme == NULL || wme->mode != &window_copy_mode) fatalx("not in copy mode"); data->backing = &wp->base; @@ -253,7 +263,7 @@ window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) screen_write_start(&ctx, NULL, s); for (i = 0; i < screen_size_y(s); i++) - window_copy_write_line(wp, &ctx, i); + window_copy_write_line(wme, &ctx, i); screen_write_cursormove(&ctx, data->cx, data->cy); screen_write_stop(&ctx); } @@ -261,23 +271,28 @@ window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) void window_copy_init_for_output(struct window_pane *wp) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data; - if (wp->mode == &window_copy_mode && data->backing != &wp->base) - return; + if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) { + data = wp->mode->data; + if (data->backing != &wp->base) + return; + } window_pane_reset_mode(wp); + window_pane_set_mode(wp, &window_copy_mode, NULL, NULL); + data = wp->mode->data; - data = wp->modedata; data->backing = xmalloc(sizeof *data->backing); screen_init(data->backing, screen_size_x(&wp->base), screen_size_y(&wp->base), UINT_MAX); } static void -window_copy_free(struct window_pane *wp) +window_copy_free(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; if (wp->fd != -1) bufferevent_enable(wp->event, EV_READ|EV_WRITE); @@ -307,7 +322,8 @@ window_copy_add(struct window_pane *wp, const char *fmt, ...) void window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) { - struct window_copy_mode_data *data = wp->modedata; + struct window_mode_entry *wme = wp->mode; + struct window_copy_mode_data *data = wme->data; struct screen *backing = data->backing; struct screen_write_ctx back_ctx, ctx; struct grid_cell gc; @@ -342,10 +358,10 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) * (If there's any history at all, it has changed.) */ if (screen_hsize(data->backing)) - window_copy_redraw_lines(wp, 0, 1); + window_copy_redraw_lines(wme, 0, 1); /* Write the new lines. */ - window_copy_redraw_lines(wp, old_cy, backing->cy - old_cy + 1); + window_copy_redraw_lines(wme, old_cy, backing->cy - old_cy + 1); screen_write_stop(&ctx); } @@ -353,12 +369,18 @@ window_copy_vadd(struct window_pane *wp, const char *fmt, va_list ap) void window_copy_pageup(struct window_pane *wp, int half_page) { - struct window_copy_mode_data *data = wp->modedata; + window_copy_pageup1(wp->mode, half_page); +} + +static void +window_copy_pageup1(struct window_mode_entry *wme, int half_page) +{ + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int n, ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; @@ -385,25 +407,26 @@ window_copy_pageup(struct window_pane *wp, int half_page) if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static int -window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) +window_copy_pagedown(struct window_mode_entry *wme, int half_page, + int scroll_exit) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int n, ox, oy, px, py; oy = screen_hsize(data->backing) + data->cy - data->oy; - ox = window_copy_find_length(wp, oy); + ox = window_copy_find_length(wme, oy); if (data->cx != ox) { data->lastcx = data->cx; @@ -430,60 +453,60 @@ window_copy_pagedown(struct window_pane *wp, int half_page, int scroll_exit) if (data->screen.sel == NULL || !data->rectflag) { py = screen_hsize(data->backing) + data->cy - data->oy; - px = window_copy_find_length(wp, py); + px = window_copy_find_length(wme, py); if ((data->cx >= data->lastsx && data->cx != px) || data->cx > px) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); } if (scroll_exit && data->oy == 0) return (1); - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); return (0); } static void -window_copy_previous_paragraph(struct window_pane *wp) +window_copy_previous_paragraph(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; u_int oy; oy = screen_hsize(data->backing) + data->cy - data->oy; - while (oy > 0 && window_copy_find_length(wp, oy) == 0) + while (oy > 0 && window_copy_find_length(wme, oy) == 0) oy--; - while (oy > 0 && window_copy_find_length(wp, oy) > 0) + while (oy > 0 && window_copy_find_length(wme, oy) > 0) oy--; - window_copy_scroll_to(wp, 0, oy); + window_copy_scroll_to(wme, 0, oy); } static void -window_copy_next_paragraph(struct window_pane *wp) +window_copy_next_paragraph(struct window_mode_entry *wme) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; u_int maxy, ox, oy; oy = screen_hsize(data->backing) + data->cy - data->oy; maxy = screen_hsize(data->backing) + screen_size_y(s) - 1; - while (oy < maxy && window_copy_find_length(wp, oy) == 0) + while (oy < maxy && window_copy_find_length(wme, oy) == 0) oy++; - while (oy < maxy && window_copy_find_length(wp, oy) > 0) + while (oy < maxy && window_copy_find_length(wme, oy) > 0) oy++; - ox = window_copy_find_length(wp, oy); - window_copy_scroll_to(wp, ox, oy); + ox = window_copy_find_length(wme, oy); + window_copy_scroll_to(wme, ox, oy); } static void -window_copy_formats(struct window_pane *wp, struct format_tree *ft) +window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; format_add(ft, "selection_present", "%d", data->screen.sel != NULL); format_add(ft, "scroll_position", "%d", data->oy); @@ -491,9 +514,10 @@ window_copy_formats(struct window_pane *wp, struct format_tree *ft) } static void -window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) +window_copy_resize(struct window_mode_entry *wme, u_int sx, u_int sy) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *s = &data->screen; struct screen_write_ctx ctx; @@ -508,37 +532,41 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int sy) if (data->oy > screen_hsize(data->backing)) data->oy = screen_hsize(data->backing); - window_copy_clear_selection(wp); + window_copy_clear_selection(wme); screen_write_start(&ctx, NULL, s); - window_copy_write_lines(wp, &ctx, 0, screen_size_y(s) - 1); + window_copy_write_lines(wme, &ctx, 0, screen_size_y(s) - 1); screen_write_stop(&ctx); if (data->searchmark != NULL) - window_copy_search_marks(wp, NULL); + window_copy_search_marks(wme, NULL); data->searchx = data->cx; data->searchy = data->cy; data->searcho = data->oy; - window_copy_redraw_screen(wp); + window_copy_redraw_screen(wme); } static const char * -window_copy_key_table(struct window_pane *wp) +window_copy_key_table(struct window_mode_entry *wme) { + struct window_pane *wp = wme->wp; + if (options_get_number(wp->window->options, "mode-keys") == MODEKEY_VI) return ("copy-mode-vi"); return ("copy-mode"); } static void -window_copy_command(struct window_pane *wp, struct client *c, struct session *s, - __unused struct winlink *wl, struct args *args, struct mouse_event *m) +window_copy_command(struct window_mode_entry *wme, struct client *c, + struct session *s, __unused struct winlink *wl, struct args *args, + struct mouse_event *m) { - struct window_copy_mode_data *data = wp->modedata; + struct window_pane *wp = wme->wp; + struct window_copy_mode_data *data = wme->data; struct screen *sn = &data->screen; const char *command, *argument, *ws; - u_int np = wp->modeprefix; + u_int np = wme->prefix; int cancel = 0, redraw = 0, scroll_exit; char prefix; @@ -552,25 +580,25 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (args->argc == 1) { if (strcmp(command, "append-selection") == 0) { if (s != NULL) - window_copy_append_selection(wp); - window_copy_clear_selection(wp); + window_copy_append_selection(wme); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "append-selection-and-cancel") == 0) { if (s != NULL) - window_copy_append_selection(wp); - window_copy_clear_selection(wp); + window_copy_append_selection(wme); + window_copy_clear_selection(wme); redraw = 1; cancel = 1; } if (strcmp(command, "back-to-indentation") == 0) - window_copy_cursor_back_to_indentation(wp); + window_copy_cursor_back_to_indentation(wme); if (strcmp(command, "begin-selection") == 0) { if (m != NULL) window_copy_start_drag(c, m); else { data->lineflag = LINE_SEL_NONE; - window_copy_start_selection(wp); + window_copy_start_selection(wme); redraw = 1; } } @@ -579,71 +607,71 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (strcmp(command, "bottom-line") == 0) { data->cx = 0; data->cy = screen_size_y(sn) - 1; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "cancel") == 0) cancel = 1; if (strcmp(command, "clear-selection") == 0) { - window_copy_clear_selection(wp); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "copy-end-of-line") == 0) { - window_copy_start_selection(wp); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp); + window_copy_copy_selection(wme); cancel = 1; } } if (strcmp(command, "copy-line") == 0) { - window_copy_cursor_start_of_line(wp); - window_copy_start_selection(wp); + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; if (s != NULL) { - window_copy_copy_selection(wp); + window_copy_copy_selection(wme); cancel = 1; } } if (strcmp(command, "copy-selection") == 0) { if (s != NULL) - window_copy_copy_selection(wp); - window_copy_clear_selection(wp); + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); redraw = 1; } if (strcmp(command, "copy-selection-and-cancel") == 0) { if (s != NULL) - window_copy_copy_selection(wp); - window_copy_clear_selection(wp); + window_copy_copy_selection(wme); + window_copy_clear_selection(wme); redraw = 1; cancel = 1; } if (strcmp(command, "cursor-down") == 0) { for (; np != 0; np--) - window_copy_cursor_down(wp, 0); + window_copy_cursor_down(wme, 0); } if (strcmp(command, "cursor-left") == 0) { for (; np != 0; np--) - window_copy_cursor_left(wp); + window_copy_cursor_left(wme); } if (strcmp(command, "cursor-right") == 0) { for (; np != 0; np--) - window_copy_cursor_right(wp); + window_copy_cursor_right(wme); } if (strcmp(command, "cursor-up") == 0) { for (; np != 0; np--) - window_copy_cursor_up(wp, 0); + window_copy_cursor_up(wme, 0); } if (strcmp(command, "end-of-line") == 0) - window_copy_cursor_end_of_line(wp); + window_copy_cursor_end_of_line(wme); if (strcmp(command, "halfpage-down") == 0 || strcmp(command, "halfpage-down-and-cancel") == 0) { if (strcmp(command, "halfpage-down-and-cancel") == 0) @@ -651,7 +679,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 1, scroll_exit)) { + if (window_copy_pagedown(wme, 1, scroll_exit)) { cancel = 1; break; } @@ -659,39 +687,39 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "halfpage-up") == 0) { for (; np != 0; np--) - window_copy_pageup(wp, 1); + window_copy_pageup1(wme, 1); } if (strcmp(command, "history-bottom") == 0) { data->cx = 0; data->cy = screen_size_y(sn) - 1; data->oy = 0; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "history-top") == 0) { data->cx = 0; data->cy = 0; data->oy = screen_hsize(data->backing); - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "jump-again") == 0) { switch (data->jumptype) { case WINDOW_COPY_JUMPFORWARD: for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); break; case WINDOW_COPY_JUMPBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); break; case WINDOW_COPY_JUMPTOFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); break; case WINDOW_COPY_JUMPTOBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); break; } } @@ -699,53 +727,53 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, switch (data->jumptype) { case WINDOW_COPY_JUMPFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); break; case WINDOW_COPY_JUMPBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); break; case WINDOW_COPY_JUMPTOFORWARD: for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); break; case WINDOW_COPY_JUMPTOBACKWARD: for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); break; } } if (strcmp(command, "middle-line") == 0) { data->cx = 0; data->cy = (screen_size_y(sn) - 1) / 2; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } if (strcmp(command, "next-paragraph") == 0) { for (; np != 0; np--) - window_copy_next_paragraph(wp); + window_copy_next_paragraph(wme); } if (strcmp(command, "next-space") == 0) { for (; np != 0; np--) - window_copy_cursor_next_word(wp, " "); + window_copy_cursor_next_word(wme, " "); } if (strcmp(command, "next-space-end") == 0) { for (; np != 0; np--) - window_copy_cursor_next_word_end(wp, " "); + window_copy_cursor_next_word_end(wme, " "); } if (strcmp(command, "next-word") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_next_word(wp, ws); + window_copy_cursor_next_word(wme, ws); } if (strcmp(command, "next-word-end") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_next_word_end(wp, ws); + window_copy_cursor_next_word_end(wme, ws); } if (strcmp(command, "other-end") == 0) { if ((np % 2) != 0) - window_copy_other_end(wp); + window_copy_other_end(wme); } if (strcmp(command, "page-down") == 0 || strcmp(command, "page-down-and-cancel") == 0) { @@ -754,7 +782,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) { - if (window_copy_pagedown(wp, 0, scroll_exit)) { + if (window_copy_pagedown(wme, 0, scroll_exit)) { cancel = 1; break; } @@ -762,24 +790,24 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strcmp(command, "page-up") == 0) { for (; np != 0; np--) - window_copy_pageup(wp, 0); + window_copy_pageup1(wme, 0); } if (strcmp(command, "previous-paragraph") == 0) { for (; np != 0; np--) - window_copy_previous_paragraph(wp); + window_copy_previous_paragraph(wme); } if (strcmp(command, "previous-space") == 0) { for (; np != 0; np--) - window_copy_cursor_previous_word(wp, " "); + window_copy_cursor_previous_word(wme, " "); } if (strcmp(command, "previous-word") == 0) { ws = options_get_string(s->options, "word-separators"); for (; np != 0; np--) - window_copy_cursor_previous_word(wp, ws); + window_copy_cursor_previous_word(wme, ws); } if (strcmp(command, "rectangle-toggle") == 0) { data->lineflag = LINE_SEL_NONE; - window_copy_rectangle_toggle(wp); + window_copy_rectangle_toggle(wme); } if (strcmp(command, "scroll-down") == 0 || strcmp(command, "scroll-down-and-cancel") == 0) { @@ -788,110 +816,110 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, else scroll_exit = data->scroll_exit; for (; np != 0; np--) - window_copy_cursor_down(wp, 1); + window_copy_cursor_down(wme, 1); if (scroll_exit && data->oy == 0) cancel = 1; } if (strcmp(command, "scroll-up") == 0) { for (; np != 0; np--) - window_copy_cursor_up(wp, 1); + window_copy_cursor_up(wme, 1); } if (strcmp(command, "search-again") == 0) { if (data->searchtype == WINDOW_COPY_SEARCHUP) { for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } } if (strcmp(command, "search-reverse") == 0) { if (data->searchtype == WINDOW_COPY_SEARCHUP) { for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } else if (data->searchtype == WINDOW_COPY_SEARCHDOWN) { for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } } if (strcmp(command, "select-line") == 0) { data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; - window_copy_cursor_start_of_line(wp); - window_copy_start_selection(wp); + window_copy_cursor_start_of_line(wme); + window_copy_start_selection(wme); for (; np > 1; np--) - window_copy_cursor_down(wp, 0); - window_copy_cursor_end_of_line(wp); + window_copy_cursor_down(wme, 0); + window_copy_cursor_end_of_line(wme); redraw = 1; } if (strcmp(command, "select-word") == 0) { data->lineflag = LINE_SEL_LEFT_RIGHT; data->rectflag = 0; ws = options_get_string(s->options, "word-separators"); - window_copy_cursor_previous_word(wp, ws); - window_copy_start_selection(wp); - window_copy_cursor_next_word_end(wp, ws); + window_copy_cursor_previous_word(wme, ws); + window_copy_start_selection(wme); + window_copy_cursor_next_word_end(wme, ws); redraw = 1; } if (strcmp(command, "start-of-line") == 0) - window_copy_cursor_start_of_line(wp); + window_copy_cursor_start_of_line(wme); if (strcmp(command, "top-line") == 0) { data->cx = 0; data->cy = 0; - window_copy_update_selection(wp, 1); + window_copy_update_selection(wme, 1); redraw = 1; } } else if (args->argc == 2 && *args->argv[1] != '\0') { argument = args->argv[1]; if (strcmp(command, "copy-pipe") == 0) { if (s != NULL) - window_copy_copy_pipe(wp, s, argument); + window_copy_copy_pipe(wme, s, argument); } if (strcmp(command, "copy-pipe-and-cancel") == 0) { if (s != NULL) { - window_copy_copy_pipe(wp, s, argument); + window_copy_copy_pipe(wme, s, argument); cancel = 1; } } if (strcmp(command, "goto-line") == 0) - window_copy_goto_line(wp, argument); + window_copy_goto_line(wme, argument); if (strcmp(command, "jump-backward") == 0) { data->jumptype = WINDOW_COPY_JUMPBACKWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_back(wp); + window_copy_cursor_jump_back(wme); } if (strcmp(command, "jump-forward") == 0) { data->jumptype = WINDOW_COPY_JUMPFORWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump(wp); + window_copy_cursor_jump(wme); } if (strcmp(command, "jump-to-backward") == 0) { data->jumptype = WINDOW_COPY_JUMPTOBACKWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_to_back(wp); + window_copy_cursor_jump_to_back(wme); } if (strcmp(command, "jump-to-forward") == 0) { data->jumptype = WINDOW_COPY_JUMPTOFORWARD; data->jumpchar = *argument; for (; np != 0; np--) - window_copy_cursor_jump_to(wp); + window_copy_cursor_jump_to(wme); } if (strcmp(command, "search-backward") == 0) { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); for (; np != 0; np--) - window_copy_search_up(wp); + window_copy_search_up(wme); } if (strcmp(command, "search-forward") == 0) { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); for (; np != 0; np--) - window_copy_search_down(wp); + window_copy_search_down(wme); } if (strcmp(command, "search-backward-incremental") == 0) { prefix = *argument++; @@ -907,22 +935,22 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; } if (*argument == '\0') { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; } else if (prefix == '=' || prefix == '-') { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } else if (prefix == '+') { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } @@ -941,22 +969,22 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, redraw = 1; } if (*argument == '\0') { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; } else if (prefix == '=' || prefix == '+') { data->searchtype = WINDOW_COPY_SEARCHDOWN; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_down(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_down(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } else if (prefix == '-') { data->searchtype = WINDOW_COPY_SEARCHUP; free(data->searchstr); data->searchstr = xstrdup(argument); - if (!window_copy_search_up(wp)) { - window_copy_clear_marks(wp); + if (!window_copy_search_up(wme)) { + window_copy_clear_marks(wme); redraw = 1; } } @@ -964,7 +992,7 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, } if (strncmp(command, "search-", 7) != 0 && data->searchmark != NULL) { - window_copy_clear_marks(wp); + window_copy_clear_marks(wme); redraw = 1; data->searchx = data->searchy = -1; } @@ -972,14 +1000,14 @@ window_copy_command(struct window_pane *wp, struct client *c, struct session *s, if (cancel) window_pane_reset_mode(wp); else if (redraw) - window_copy_redraw_screen(wp); - wp->modeprefix = 1; + window_copy_redraw_screen(wme); + wme->prefix = 1; } static void -window_copy_scroll_to(struct window_pane *wp, u_int px, u_int py) +window_copy_scroll_to(struct window_mode_entry *wme, u_int px, u_int py) { - struct window_copy_mode_data *data = wp->modedata; + struct window_copy_mode_data *data = wme->data; struct grid *gd = data->backing->grid; u_int offset, gap; @@ -1002,8 +1030,8 @@ window_copy_scroll_to(struct window_pane *wp, u_int px, u_int py) data->oy = gd->hsize - offset; } - window_copy_update_selection(wp, 1); - window_copy_redraw_screen(wp); + window_copy_update_selection(wme, 1); + window_copy_redraw_screen(wme); } static int @@ -1119,7 +1147,7 @@ window_copy_is_lowercase(const char *ptr) * not found. */ static int -window_copy_search_jump(struct window_pane *wp, struct grid *gd, +window_copy_search_jump(struct window_mode_entry *wme, struct grid *gd, struct grid *sgd, u_int fx, u_int fy, u_int endline, int cis, int wrap, int direction) { @@ -1148,11 +1176,11 @@ window_copy_search_jump(struct window_pane *wp, struct grid *gd, } if (found) { - window_copy_scroll_to(wp, px, i); + window_copy_scroll_to(wme, px, i); |