mirror of
https://github.com/tmux/tmux.git
synced 2024-11-16 01:18:52 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
64da762c15
@ -87,13 +87,11 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_ctx *ctx)
|
|||||||
{
|
{
|
||||||
struct args *args = self->args;
|
struct args *args = self->args;
|
||||||
struct winlink *wl;
|
struct winlink *wl;
|
||||||
struct window *w;
|
|
||||||
const char *layoutname;
|
const char *layoutname;
|
||||||
int next, previous, layout;
|
int next, previous, layout;
|
||||||
|
|
||||||
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
|
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
|
||||||
return (CMD_RETURN_ERROR);
|
return (CMD_RETURN_ERROR);
|
||||||
w = wl->window;
|
|
||||||
|
|
||||||
next = self->entry == &cmd_next_layout_entry;
|
next = self->entry == &cmd_next_layout_entry;
|
||||||
if (args_has(self->args, 'n'))
|
if (args_has(self->args, 'n'))
|
||||||
|
7
format.c
7
format.c
@ -365,6 +365,7 @@ format_window_pane(struct format_tree *ft, struct window_pane *wp)
|
|||||||
unsigned long long size;
|
unsigned long long size;
|
||||||
u_int i;
|
u_int i;
|
||||||
u_int idx;
|
u_int idx;
|
||||||
|
const char *cwd;
|
||||||
|
|
||||||
size = 0;
|
size = 0;
|
||||||
for (i = 0; i < gd->hsize; i++) {
|
for (i = 0; i < gd->hsize; i++) {
|
||||||
@ -390,9 +391,11 @@ format_window_pane(struct format_tree *ft, struct window_pane *wp)
|
|||||||
format_add(ft, "pane_start_command", "%s", wp->cmd);
|
format_add(ft, "pane_start_command", "%s", wp->cmd);
|
||||||
if (wp->cwd != NULL)
|
if (wp->cwd != NULL)
|
||||||
format_add(ft, "pane_start_path", "%s", wp->cwd);
|
format_add(ft, "pane_start_path", "%s", wp->cwd);
|
||||||
format_add(ft, "pane_current_path", "%s", osdep_get_cwd(wp->fd));
|
if ((cwd = get_proc_cwd(wp->fd)) != NULL)
|
||||||
|
format_add(ft, "pane_current_path", "%s", cwd);
|
||||||
format_add(ft, "pane_pid", "%ld", (long) wp->pid);
|
format_add(ft, "pane_pid", "%ld", (long) wp->pid);
|
||||||
format_add(ft, "pane_tty", "%s", wp->tty);
|
if (wp->tty != NULL)
|
||||||
|
format_add(ft, "pane_tty", "%s", wp->tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
41
grid.c
41
grid.c
@ -460,3 +460,44 @@ grid_duplicate_lines(
|
|||||||
dy++;
|
dy++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reflow lines from src grid into dst grid based on width sx. Returns number
|
||||||
|
* of lines fewer in the visible area, or zero.
|
||||||
|
*/
|
||||||
|
u_int
|
||||||
|
grid_reflow(struct grid *dst, const struct grid *src, u_int sx)
|
||||||
|
{
|
||||||
|
u_int px, py, line, cell;
|
||||||
|
int previous_wrapped;
|
||||||
|
struct grid_line *gl;
|
||||||
|
|
||||||
|
px = py = 0;
|
||||||
|
previous_wrapped = 1;
|
||||||
|
for (line = 0; line < src->sy + src->hsize; line++) {
|
||||||
|
gl = src->linedata + line;
|
||||||
|
if (!previous_wrapped) {
|
||||||
|
px = 0;
|
||||||
|
py++;
|
||||||
|
if (py >= dst->hsize + dst->sy)
|
||||||
|
grid_scroll_history(dst);
|
||||||
|
}
|
||||||
|
for (cell = 0; cell < gl->cellsize; cell++) {
|
||||||
|
if (px == sx) {
|
||||||
|
dst->linedata[py].flags |= GRID_LINE_WRAPPED;
|
||||||
|
px = 0;
|
||||||
|
py++;
|
||||||
|
if (py >= dst->hsize + dst->sy)
|
||||||
|
grid_scroll_history(dst);
|
||||||
|
}
|
||||||
|
grid_set_cell(dst, px, py, gl->celldata + cell);
|
||||||
|
px++;
|
||||||
|
}
|
||||||
|
previous_wrapped = gl->flags & GRID_LINE_WRAPPED;
|
||||||
|
}
|
||||||
|
py++; /* account for final line, which never wraps */
|
||||||
|
|
||||||
|
if (py > src->sy)
|
||||||
|
return (0);
|
||||||
|
return (src->sy - py);
|
||||||
|
}
|
||||||
|
20
screen.c
20
screen.c
@ -121,7 +121,7 @@ screen_set_title(struct screen *s, const char *title)
|
|||||||
|
|
||||||
/* Resize screen. */
|
/* Resize screen. */
|
||||||
void
|
void
|
||||||
screen_resize(struct screen *s, u_int sx, u_int sy)
|
screen_resize(struct screen *s, u_int sx, u_int sy, int reflow)
|
||||||
{
|
{
|
||||||
if (sx < 1)
|
if (sx < 1)
|
||||||
sx = 1;
|
sx = 1;
|
||||||
@ -141,6 +141,9 @@ screen_resize(struct screen *s, u_int sx, u_int sy)
|
|||||||
|
|
||||||
if (sy != screen_size_y(s))
|
if (sy != screen_size_y(s))
|
||||||
screen_resize_y(s, sy);
|
screen_resize_y(s, sy);
|
||||||
|
|
||||||
|
if (reflow)
|
||||||
|
screen_reflow(s, sx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -357,3 +360,18 @@ screen_check_selection(struct screen *s, u_int px, u_int py)
|
|||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reflow wrapped lines. */
|
||||||
|
void
|
||||||
|
screen_reflow(struct screen *s, u_int sx)
|
||||||
|
{
|
||||||
|
struct grid *old, *new;
|
||||||
|
|
||||||
|
old = s->grid;
|
||||||
|
new = grid_create(old->sx, old->sy, old->hlimit);
|
||||||
|
|
||||||
|
s->cy -= grid_reflow(new, old, sx);
|
||||||
|
s->grid = new;
|
||||||
|
|
||||||
|
grid_destroy(old);
|
||||||
|
}
|
||||||
|
@ -330,7 +330,7 @@ int
|
|||||||
server_client_assume_paste(struct session *s)
|
server_client_assume_paste(struct session *s)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
u_int t;
|
int t;
|
||||||
|
|
||||||
if ((t = options_get_number(&s->options, "assume-paste-time")) == 0)
|
if ((t = options_get_number(&s->options, "assume-paste-time")) == 0)
|
||||||
return (0);
|
return (0);
|
||||||
|
4
tmux.h
4
tmux.h
@ -1960,6 +1960,7 @@ void grid_move_cells(struct grid *, u_int, u_int, u_int, u_int);
|
|||||||
char *grid_string_cells(struct grid *, u_int, u_int, u_int);
|
char *grid_string_cells(struct grid *, u_int, u_int, u_int);
|
||||||
void grid_duplicate_lines(
|
void grid_duplicate_lines(
|
||||||
struct grid *, u_int, struct grid *, u_int, u_int);
|
struct grid *, u_int, struct grid *, u_int, u_int);
|
||||||
|
u_int grid_reflow(struct grid *, const struct grid *, u_int);
|
||||||
|
|
||||||
/* grid-cell.c */
|
/* grid-cell.c */
|
||||||
u_int grid_cell_width(const struct grid_cell *);
|
u_int grid_cell_width(const struct grid_cell *);
|
||||||
@ -2053,11 +2054,12 @@ void screen_reset_tabs(struct screen *);
|
|||||||
void screen_set_cursor_style(struct screen *, u_int);
|
void screen_set_cursor_style(struct screen *, u_int);
|
||||||
void screen_set_cursor_colour(struct screen *, const char *);
|
void screen_set_cursor_colour(struct screen *, const char *);
|
||||||
void screen_set_title(struct screen *, const char *);
|
void screen_set_title(struct screen *, const char *);
|
||||||
void screen_resize(struct screen *, u_int, u_int);
|
void screen_resize(struct screen *, u_int, u_int, int);
|
||||||
void screen_set_selection(struct screen *,
|
void screen_set_selection(struct screen *,
|
||||||
u_int, u_int, u_int, u_int, u_int, struct grid_cell *);
|
u_int, u_int, u_int, u_int, u_int, struct grid_cell *);
|
||||||
void screen_clear_selection(struct screen *);
|
void screen_clear_selection(struct screen *);
|
||||||
int screen_check_selection(struct screen *, u_int, u_int);
|
int screen_check_selection(struct screen *, u_int, u_int);
|
||||||
|
void screen_reflow(struct screen *, u_int);
|
||||||
|
|
||||||
/* window.c */
|
/* window.c */
|
||||||
extern struct windows windows;
|
extern struct windows windows;
|
||||||
|
@ -203,7 +203,7 @@ window_choose_resize(struct window_pane *wp, u_int sx, u_int sy)
|
|||||||
if (data->selected > sy - 1)
|
if (data->selected > sy - 1)
|
||||||
data->top = data->selected - (sy - 1);
|
data->top = data->selected - (sy - 1);
|
||||||
|
|
||||||
screen_resize(s, sx, sy);
|
screen_resize(s, sx, sy, 0);
|
||||||
window_choose_redraw_screen(wp);
|
window_choose_redraw_screen(wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ window_clock_resize(struct window_pane *wp, u_int sx, u_int sy)
|
|||||||
struct window_clock_mode_data *data = wp->modedata;
|
struct window_clock_mode_data *data = wp->modedata;
|
||||||
struct screen *s = &data->screen;
|
struct screen *s = &data->screen;
|
||||||
|
|
||||||
screen_resize(s, sx, sy);
|
screen_resize(s, sx, sy, 0);
|
||||||
window_clock_draw_screen(wp);
|
window_clock_draw_screen(wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,9 +335,9 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int sy)
|
|||||||
struct screen *s = &data->screen;
|
struct screen *s = &data->screen;
|
||||||
struct screen_write_ctx ctx;
|
struct screen_write_ctx ctx;
|
||||||
|
|
||||||
screen_resize(s, sx, sy);
|
screen_resize(s, sx, sy, 0);
|
||||||
if (data->backing != &wp->base)
|
if (data->backing != &wp->base)
|
||||||
screen_resize(data->backing, sx, sy);
|
screen_resize(data->backing, sx, sy, 0);
|
||||||
|
|
||||||
if (data->cy > sy - 1)
|
if (data->cy > sy - 1)
|
||||||
data->cy = sy - 1;
|
data->cy = sy - 1;
|
||||||
|
8
window.c
8
window.c
@ -854,7 +854,7 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy)
|
|||||||
ws.ws_col = sx;
|
ws.ws_col = sx;
|
||||||
ws.ws_row = sy;
|
ws.ws_row = sy;
|
||||||
|
|
||||||
screen_resize(&wp->base, sx, sy);
|
screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL);
|
||||||
if (wp->mode != NULL)
|
if (wp->mode != NULL)
|
||||||
wp->mode->resize(wp, sx, sy);
|
wp->mode->resize(wp, sx, sy);
|
||||||
|
|
||||||
@ -924,7 +924,7 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc,
|
|||||||
* before copying back.
|
* before copying back.
|
||||||
*/
|
*/
|
||||||
if (sy > wp->saved_grid->sy)
|
if (sy > wp->saved_grid->sy)
|
||||||
screen_resize(s, sx, wp->saved_grid->sy);
|
screen_resize(s, sx, wp->saved_grid->sy, 1);
|
||||||
|
|
||||||
/* Restore the grid, cursor position and cell. */
|
/* Restore the grid, cursor position and cell. */
|
||||||
grid_duplicate_lines(s->grid, screen_hsize(s), wp->saved_grid, 0, sy);
|
grid_duplicate_lines(s->grid, screen_hsize(s), wp->saved_grid, 0, sy);
|
||||||
@ -943,8 +943,8 @@ window_pane_alternate_off(struct window_pane *wp, struct grid_cell *gc,
|
|||||||
* the current size.
|
* the current size.
|
||||||
*/
|
*/
|
||||||
wp->base.grid->flags |= GRID_HISTORY;
|
wp->base.grid->flags |= GRID_HISTORY;
|
||||||
if (sy > wp->saved_grid->sy)
|
if (sy > wp->saved_grid->sy || sx != wp->saved_grid->sx)
|
||||||
screen_resize(s, sx, sy);
|
screen_resize(s, sx, sy, 1);
|
||||||
|
|
||||||
grid_destroy(wp->saved_grid);
|
grid_destroy(wp->saved_grid);
|
||||||
wp->saved_grid = NULL;
|
wp->saved_grid = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user