mirror of
https://github.com/tmux/tmux.git
synced 2026-03-06 15:55:33 +00:00
Merge branch 'master' into floating_panes
This commit is contained in:
@@ -51,6 +51,7 @@ 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_style_changed(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_mode_entry *,
|
||||
@@ -158,6 +159,7 @@ const struct window_mode window_copy_mode = {
|
||||
.init = window_copy_init,
|
||||
.free = window_copy_free,
|
||||
.resize = window_copy_resize,
|
||||
.style_changed = window_copy_style_changed,
|
||||
.key_table = window_copy_key_table,
|
||||
.command = window_copy_command,
|
||||
.formats = window_copy_formats,
|
||||
@@ -170,6 +172,7 @@ const struct window_mode window_view_mode = {
|
||||
.init = window_copy_view_init,
|
||||
.free = window_copy_free,
|
||||
.resize = window_copy_resize,
|
||||
.style_changed = window_copy_style_changed,
|
||||
.key_table = window_copy_key_table,
|
||||
.command = window_copy_command,
|
||||
.formats = window_copy_formats,
|
||||
@@ -352,7 +355,7 @@ window_copy_clone_screen(struct screen *src, struct screen *hint, u_int *cx,
|
||||
if (trim) {
|
||||
while (sy > screen_hsize(src)) {
|
||||
gl = grid_peek_line(src->grid, sy - 1);
|
||||
if (gl->cellused != 0)
|
||||
if (gl == NULL || gl->cellused != 0)
|
||||
break;
|
||||
sy--;
|
||||
}
|
||||
@@ -491,7 +494,7 @@ window_copy_view_init(struct window_mode_entry *wme,
|
||||
|
||||
data->backing = xmalloc(sizeof *data->backing);
|
||||
screen_init(data->backing, sx, screen_size_y(base), UINT_MAX);
|
||||
data->ictx = input_init(NULL, NULL, NULL);
|
||||
data->ictx = input_init(NULL, NULL, NULL, NULL);
|
||||
data->mx = data->cx;
|
||||
data->my = screen_hsize(data->backing) + data->cy - data->oy;
|
||||
data->showmark = 0;
|
||||
@@ -3622,6 +3625,10 @@ window_copy_stringify(struct grid *gd, u_int py, u_int first, u_int last,
|
||||
buf = xrealloc(buf, bufsize);
|
||||
|
||||
gl = grid_peek_line(gd, py);
|
||||
if (gl == NULL) {
|
||||
buf[*size - 1] = '\0';
|
||||
return (buf);
|
||||
}
|
||||
bx = *size - 1;
|
||||
for (ax = first; ax < last; ax++) {
|
||||
d = window_copy_cellstring(gl, ax, &dlen, &allocated);
|
||||
@@ -3667,6 +3674,10 @@ window_copy_cstrtocellpos(struct grid *gd, u_int ncells, u_int *ppx, u_int *ppy,
|
||||
px = *ppx;
|
||||
pywrap = *ppy;
|
||||
gl = grid_peek_line(gd, pywrap);
|
||||
if (gl == NULL) {
|
||||
free(cells);
|
||||
return;
|
||||
}
|
||||
while (cell < ncells) {
|
||||
cells[cell].d = window_copy_cellstring(gl, px,
|
||||
&cells[cell].dlen, &cells[cell].allocated);
|
||||
@@ -3676,6 +3687,8 @@ window_copy_cstrtocellpos(struct grid *gd, u_int ncells, u_int *ppx, u_int *ppy,
|
||||
px = 0;
|
||||
pywrap++;
|
||||
gl = grid_peek_line(gd, pywrap);
|
||||
if (gl == NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4077,7 +4090,7 @@ window_copy_visible_lines(struct window_copy_mode_data *data, u_int *start,
|
||||
|
||||
for (*start = gd->hsize - data->oy; *start > 0; (*start)--) {
|
||||
gl = grid_peek_line(gd, (*start) - 1);
|
||||
if (~gl->flags & GRID_LINE_WRAPPED)
|
||||
if (gl == NULL || ~gl->flags & GRID_LINE_WRAPPED)
|
||||
break;
|
||||
}
|
||||
*end = gd->hsize - data->oy + gd->sy;
|
||||
@@ -4268,6 +4281,9 @@ window_copy_clear_marks(struct window_mode_entry *wme)
|
||||
{
|
||||
struct window_copy_mode_data *data = wme->data;
|
||||
|
||||
data->searchcount = -1;
|
||||
data->searchmore = 0;
|
||||
|
||||
free(data->searchmark);
|
||||
data->searchmark = NULL;
|
||||
}
|
||||
@@ -4595,6 +4611,16 @@ window_copy_redraw_screen(struct window_mode_entry *wme)
|
||||
window_copy_redraw_lines(wme, 0, screen_size_y(&data->screen));
|
||||
}
|
||||
|
||||
static void
|
||||
window_copy_style_changed(struct window_mode_entry *wme)
|
||||
{
|
||||
struct window_copy_mode_data *data = wme->data;
|
||||
|
||||
if (data->screen.sel != NULL)
|
||||
window_copy_set_selection(wme, 0, 1);
|
||||
window_copy_redraw_screen(wme);
|
||||
}
|
||||
|
||||
static void
|
||||
window_copy_synchronize_cursor_end(struct window_mode_entry *wme, int begin,
|
||||
int no_reset)
|
||||
@@ -5036,9 +5062,9 @@ static void
|
||||
window_copy_append_selection(struct window_mode_entry *wme)
|
||||
{
|
||||
struct window_pane *wp = wme->wp;
|
||||
char *buf;
|
||||
char *buf, *bufname = NULL;
|
||||
struct paste_buffer *pb;
|
||||
const char *bufdata, *bufname = NULL;
|
||||
const char *bufdata;
|
||||
size_t len, bufsize;
|
||||
struct screen_write_ctx ctx;
|
||||
|
||||
@@ -5063,6 +5089,7 @@ window_copy_append_selection(struct window_mode_entry *wme)
|
||||
}
|
||||
if (paste_set(buf, len, bufname, NULL) != 0)
|
||||
free(buf);
|
||||
free(bufname);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user