aboutsummaryrefslogtreecommitdiff
path: root/window-copy.c
diff options
context:
space:
mode:
Diffstat (limited to 'window-copy.c')
-rw-r--r--window-copy.c105
1 files changed, 47 insertions, 58 deletions
diff --git a/window-copy.c b/window-copy.c
index 1c1ea29c..a28cdecc 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -942,21 +942,21 @@ int
window_copy_search_compare(struct grid *gd, u_int px, u_int py,
struct grid *sgd, u_int spx, int cis)
{
- const struct grid_cell *gc, *sgc;
- struct utf8_data ud, sud;
+ struct grid_cell gc, sgc;
+ const struct utf8_data *ud, *sud;
- gc = grid_peek_cell(gd, px, py);
- grid_cell_get(gc, &ud);
- sgc = grid_peek_cell(sgd, spx, 0);
- grid_cell_get(sgc, &sud);
+ grid_get_cell(gd, px, py, &gc);
+ ud = &gc.data;
+ grid_get_cell(sgd, spx, 0, &sgc);
+ sud = &sgc.data;
- if (ud.size != sud.size || ud.width != sud.width)
+ if (ud->size != sud->size || ud->width != sud->width)
return (0);
- if (cis && ud.size == 1)
- return (tolower(ud.data[0]) == sud.data[0]);
+ if (cis && ud->size == 1)
+ return (tolower(ud->data[0]) == sud->data[0]);
- return (memcmp(ud.data, sud.data, ud.size) == 0);
+ return (memcmp(ud->data, sud->data, ud->size) == 0);
}
int
@@ -1541,12 +1541,12 @@ window_copy_append_selection(struct window_pane *wp, const char *bufname)
}
void
-window_copy_copy_line(struct window_pane *wp,
- char **buf, size_t *off, u_int sy, u_int sx, u_int ex)
+window_copy_copy_line(struct window_pane *wp, char **buf, size_t *off, u_int sy,
+ u_int sx, u_int ex)
{
struct window_copy_mode_data *data = wp->modedata;
struct grid *gd = data->backing->grid;
- const struct grid_cell *gc;
+ struct grid_cell gc;
struct grid_line *gl;
struct utf8_data ud;
u_int i, xx, wrapped = 0;
@@ -1575,11 +1575,11 @@ window_copy_copy_line(struct window_pane *wp,
if (sx < ex) {
for (i = sx; i < ex; i++) {
- gc = grid_peek_cell(gd, i, sy);
- if (gc->flags & GRID_FLAG_PADDING)
+ grid_get_cell(gd, i, sy, &gc);
+ if (gc.flags & GRID_FLAG_PADDING)
continue;
- grid_cell_get(gc, &ud);
- if (ud.size == 1 && (gc->attr & GRID_ATTR_CHARSET)) {
+ utf8_copy(&ud, &gc.data);
+ if (ud.size == 1 && (gc.attr & GRID_ATTR_CHARSET)) {
s = tty_acs_get(NULL, ud.data[0]);
if (s != NULL && strlen(s) <= sizeof ud.data) {
ud.size = strlen(s);
@@ -1618,16 +1618,17 @@ int
window_copy_in_set(struct window_pane *wp, u_int px, u_int py, const char *set)
{
struct window_copy_mode_data *data = wp->modedata;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
+ const struct utf8_data *ud;
+
+ grid_get_cell(data->backing->grid, px, py, &gc);
- gc = grid_peek_cell(data->backing->grid, px, py);
- grid_cell_get(gc, &ud);
- if (ud.size != 1 || gc->flags & GRID_FLAG_PADDING)
+ ud = &gc.data;
+ if (ud->size != 1 || (gc.flags & GRID_FLAG_PADDING))
return (0);
- if (*ud.data == 0x00 || *ud.data == 0x7f)
+ if (*ud->data == 0x00 || *ud->data == 0x7f)
return (0);
- return (strchr(set, *ud.data) != NULL);
+ return (strchr(set, *ud->data) != NULL);
}
u_int
@@ -1635,8 +1636,7 @@ window_copy_find_length(struct window_pane *wp, u_int py)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = data->backing;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
u_int px;
/*
@@ -1649,9 +1649,8 @@ window_copy_find_length(struct window_pane *wp, u_int py)
if (px > screen_size_x(s))
px = screen_size_x(s);
while (px > 0) {
- gc = grid_peek_cell(s->grid, px - 1, py);
- grid_cell_get(gc, &ud);
- if (ud.size != 1 || *ud.data != ' ')
+ grid_get_cell(s->grid, px - 1, py, &gc);
+ if (gc.data.size != 1 || *gc.data.data != ' ')
break;
px--;
}
@@ -1685,17 +1684,15 @@ window_copy_cursor_back_to_indentation(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
u_int px, py, xx;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
px = 0;
py = screen_hsize(data->backing) + data->cy - data->oy;
xx = window_copy_find_length(wp, py);
while (px < xx) {
- gc = grid_peek_cell(data->backing->grid, px, py);
- grid_cell_get(gc, &ud);
- if (ud.size != 1 || *ud.data != ' ')
+ grid_get_cell(data->backing->grid, px, py, &gc);
+ if (gc.data.size != 1 || *gc.data.data != ' ')
break;
px++;
}
@@ -1909,8 +1906,7 @@ window_copy_cursor_jump(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *back_s = data->backing;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
u_int px, py, xx;
px = data->cx + 1;
@@ -1918,10 +1914,9 @@ window_copy_cursor_jump(struct window_pane *wp)
xx = window_copy_find_length(wp, py);
while (px < xx) {
- gc = grid_peek_cell(back_s->grid, px, py);
- grid_cell_get(gc, &ud);
- if (!(gc->flags & GRID_FLAG_PADDING) &&
- ud.size == 1 && *ud.data == data->jumpchar) {
+ grid_get_cell(back_s->grid, px, py, &gc);
+ if (!(gc.flags & GRID_FLAG_PADDING) &&
+ gc.data.size == 1 && *gc.data.data == data->jumpchar) {
window_copy_update_cursor(wp, px, data->cy);
if (window_copy_update_selection(wp, 1))
window_copy_redraw_lines(wp, data->cy, 1);
@@ -1936,8 +1931,7 @@ window_copy_cursor_jump_back(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *back_s = data->backing;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
u_int px, py;
px = data->cx;
@@ -1947,10 +1941,9 @@ window_copy_cursor_jump_back(struct window_pane *wp)
px--;
for (;;) {
- gc = grid_peek_cell(back_s->grid, px, py);
- grid_cell_get(gc, &ud);
- if (!(gc->flags & GRID_FLAG_PADDING) &&
- ud.size == 1 && *ud.data == data->jumpchar) {
+ grid_get_cell(back_s->grid, px, py, &gc);
+ if (!(gc.flags & GRID_FLAG_PADDING) &&
+ gc.data.size == 1 && *gc.data.data == data->jumpchar) {
window_copy_update_cursor(wp, px, data->cy);
if (window_copy_update_selection(wp, 1))
window_copy_redraw_lines(wp, data->cy, 1);
@@ -1967,8 +1960,7 @@ window_copy_cursor_jump_to(struct window_pane *wp, int jump_again)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *back_s = data->backing;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
u_int px, py, xx;
px = data->cx + 1 + jump_again;
@@ -1976,10 +1968,9 @@ window_copy_cursor_jump_to(struct window_pane *wp, int jump_again)
xx = window_copy_find_length(wp, py);
while (px < xx) {
- gc = grid_peek_cell(back_s->grid, px, py);
- grid_cell_get(gc, &ud);
- if (!(gc->flags & GRID_FLAG_PADDING) &&
- ud.size == 1 && *ud.data == data->jumpchar) {
+ grid_get_cell(back_s->grid, px, py, &gc);
+ if (!(gc.flags & GRID_FLAG_PADDING) &&
+ gc.data.size == 1 && *gc.data.data == data->jumpchar) {
window_copy_update_cursor(wp, px - 1, data->cy);
if (window_copy_update_selection(wp, 1))
window_copy_redraw_lines(wp, data->cy, 1);
@@ -1994,8 +1985,7 @@ window_copy_cursor_jump_to_back(struct window_pane *wp, int jump_again)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *back_s = data->backing;
- const struct grid_cell *gc;
- struct utf8_data ud;
+ struct grid_cell gc;
u_int px, py;
px = data->cx;
@@ -2008,10 +1998,9 @@ window_copy_cursor_jump_to_back(struct window_pane *wp, int jump_again)
px--;
for (;;) {
- gc = grid_peek_cell(back_s->grid, px, py);
- grid_cell_get(gc, &ud);
- if (!(gc->flags & GRID_FLAG_PADDING) &&
- ud.size == 1 && *ud.data == data->jumpchar) {
+ grid_get_cell(back_s->grid, px, py, &gc);
+ if (!(gc.flags & GRID_FLAG_PADDING) &&
+ gc.data.size == 1 && *gc.data.data == data->jumpchar) {
window_copy_update_cursor(wp, px + 1, data->cy);
if (window_copy_update_selection(wp, 1))
window_copy_redraw_lines(wp, data->cy, 1);