summaryrefslogtreecommitdiffstats
path: root/window-copy.c
diff options
context:
space:
mode:
authornicm <nicm>2019-03-07 20:24:21 +0000
committernicm <nicm>2019-03-07 20:24:21 +0000
commitf98c66ece81953c777cd332c6bd29d707b1685e5 (patch)
treeb84b2b0bcefcc9e1f2e082234b46f5b6688e34ae /window-copy.c
parent3c24bc5617bfdf90f94cc088f3769397c7569649 (diff)
Add a separate mode struct for the active window mode if any.
Diffstat (limited to 'window-copy.c')
-rw-r--r--window-copy.c936
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);