version 1.209, 2019/03/08 10:29:25 |
version 1.210, 2019/03/08 10:34:20 |
|
|
struct mouse_event *); |
struct mouse_event *); |
static struct screen *window_copy_init(struct window_mode_entry *, |
static struct screen *window_copy_init(struct window_mode_entry *, |
struct cmd_find_state *, struct args *); |
struct cmd_find_state *, struct args *); |
|
static struct screen *window_copy_view_init(struct window_mode_entry *, |
|
struct cmd_find_state *, struct args *); |
static void window_copy_free(struct window_mode_entry *); |
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_resize(struct window_mode_entry *, u_int, u_int); |
static void window_copy_formats(struct window_mode_entry *, |
static void window_copy_formats(struct window_mode_entry *, |
|
|
.formats = window_copy_formats, |
.formats = window_copy_formats, |
}; |
}; |
|
|
|
const struct window_mode window_view_mode = { |
|
.name = "view-mode", |
|
|
|
.init = window_copy_view_init, |
|
.free = window_copy_free, |
|
.resize = window_copy_resize, |
|
.key_table = window_copy_key_table, |
|
.command = window_copy_command, |
|
.formats = window_copy_formats, |
|
}; |
|
|
enum { |
enum { |
WINDOW_COPY_OFF, |
WINDOW_COPY_OFF, |
WINDOW_COPY_SEARCHUP, |
WINDOW_COPY_SEARCHUP, |
|
|
char jumpchar; |
char jumpchar; |
}; |
}; |
|
|
static struct screen * |
static struct window_copy_mode_data * |
window_copy_init(struct window_mode_entry *wme, |
window_copy_common_init(struct window_mode_entry *wme) |
__unused struct cmd_find_state *fs, __unused struct args *args) |
|
{ |
{ |
struct window_pane *wp = wme->wp; |
struct window_pane *wp = wme->wp; |
struct window_copy_mode_data *data; |
struct window_copy_mode_data *data; |
struct screen *s; |
struct screen *base = &wp->base; |
|
|
wme->data = data = xcalloc(1, sizeof *data); |
wme->data = data = xcalloc(1, sizeof *data); |
|
|
|
|
data->searchmark = NULL; |
data->searchmark = NULL; |
data->searchx = data->searchy = data->searcho = -1; |
data->searchx = data->searchy = data->searcho = -1; |
|
|
if (wp->fd != -1) |
|
bufferevent_disable(wp->event, EV_READ|EV_WRITE); |
|
|
|
data->jumptype = WINDOW_COPY_OFF; |
data->jumptype = WINDOW_COPY_OFF; |
data->jumpchar = '\0'; |
data->jumpchar = '\0'; |
|
|
s = &data->screen; |
screen_init(&data->screen, screen_size_x(base), screen_size_y(base), 0); |
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); |
|
data->modekeys = options_get_number(wp->window->options, "mode-keys"); |
data->modekeys = options_get_number(wp->window->options, "mode-keys"); |
|
|
data->backing = NULL; |
return (data); |
|
|
return (s); |
|
} |
} |
|
|
void |
static struct screen * |
window_copy_init_from_pane(struct window_pane *wp, int scroll_exit) |
window_copy_init(struct window_mode_entry *wme, |
|
__unused struct cmd_find_state *fs, struct args *args) |
{ |
{ |
struct window_mode_entry *wme = wp->mode; |
struct window_pane *wp = wme->wp; |
struct window_copy_mode_data *data = wme->data; |
struct window_copy_mode_data *data; |
struct screen *s = &data->screen; |
struct screen_write_ctx ctx; |
struct screen_write_ctx ctx; |
|
u_int i; |
u_int i; |
|
|
if (wme == NULL || wme->mode != &window_copy_mode) |
data = window_copy_common_init(wme); |
fatalx("not in copy mode"); |
|
|
|
|
if (wp->fd != -1) |
|
bufferevent_disable(wp->event, EV_READ|EV_WRITE); |
|
|
data->backing = &wp->base; |
data->backing = &wp->base; |
data->cx = data->backing->cx; |
data->cx = data->backing->cx; |
data->cy = data->backing->cy; |
data->cy = data->backing->cy; |
data->scroll_exit = scroll_exit; |
|
|
|
s->cx = data->cx; |
data->scroll_exit = args_has(args, 'e'); |
s->cy = data->cy; |
|
|
|
screen_write_start(&ctx, NULL, s); |
data->screen.cx = data->cx; |
for (i = 0; i < screen_size_y(s); i++) |
data->screen.cy = data->cy; |
|
|
|
screen_write_start(&ctx, NULL, &data->screen); |
|
for (i = 0; i < screen_size_y(&data->screen); i++) |
window_copy_write_line(wme, &ctx, i); |
window_copy_write_line(wme, &ctx, i); |
screen_write_cursormove(&ctx, data->cx, data->cy); |
screen_write_cursormove(&ctx, data->cx, data->cy); |
screen_write_stop(&ctx); |
screen_write_stop(&ctx); |
|
|
|
return (&data->screen); |
} |
} |
|
|
void |
static struct screen * |
window_copy_init_for_output(struct window_pane *wp) |
window_copy_view_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 window_copy_mode_data *data; |
|
struct screen *base = &wp->base; |
|
struct screen *s; |
|
|
if (wp->mode != NULL && wp->mode->mode == &window_copy_mode) { |
data = window_copy_common_init(wme); |
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->backing = s = xmalloc(sizeof *data->backing); |
data = wp->mode->data; |
screen_init(s, screen_size_x(base), screen_size_y(base), UINT_MAX); |
|
|
data->backing = xmalloc(sizeof *data->backing); |
return (&data->screen); |
screen_init(data->backing, screen_size_x(&wp->base), |
|
screen_size_y(&wp->base), UINT_MAX); |
|
} |
} |
|
|
static void |
static void |