-/* $OpenBSD: cmd-resize-pane.c,v 1.34 2018/06/24 21:24:09 nicm Exp $ */
+/* $OpenBSD: cmd-resize-pane.c,v 1.35 2018/08/18 16:14:03 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
}
}
- if (args_has(self->args, 'x')) {
- x = args_strtonum(self->args, 'x', PANE_MINIMUM, INT_MAX,
- &cause);
+ if (args_has(args, 'x')) {
+ x = args_strtonum(args, 'x', PANE_MINIMUM, INT_MAX, &cause);
if (cause != NULL) {
cmdq_error(item, "width %s", cause);
free(cause);
}
layout_resize_pane_to(wp, LAYOUT_LEFTRIGHT, x);
}
- if (args_has(self->args, 'y')) {
- y = args_strtonum(self->args, 'y', PANE_MINIMUM, INT_MAX,
- &cause);
+ if (args_has(args, 'y')) {
+ y = args_strtonum(args, 'y', PANE_MINIMUM, INT_MAX, &cause);
if (cause != NULL) {
cmdq_error(item, "height %s", cause);
free(cause);
layout_resize_pane_to(wp, LAYOUT_TOPBOTTOM, y);
}
- if (args_has(self->args, 'L'))
+ if (args_has(args, 'L'))
layout_resize_pane(wp, LAYOUT_LEFTRIGHT, -adjust, 1);
- else if (args_has(self->args, 'R'))
+ else if (args_has(args, 'R'))
layout_resize_pane(wp, LAYOUT_LEFTRIGHT, adjust, 1);
- else if (args_has(self->args, 'U'))
+ else if (args_has(args, 'U'))
layout_resize_pane(wp, LAYOUT_TOPBOTTOM, -adjust, 1);
- else if (args_has(self->args, 'D'))
+ else if (args_has(args, 'D'))
layout_resize_pane(wp, LAYOUT_TOPBOTTOM, adjust, 1);
server_redraw_window(wl->window);
-/* $OpenBSD: format.c,v 1.158 2018/07/04 09:44:07 nicm Exp $ */
+/* $OpenBSD: format.c,v 1.159 2018/08/18 16:14:03 nicm Exp $ */
/*
* Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
void
format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
{
+ struct window *w = wp->window;
struct grid *gd = wp->base.grid;
int status = wp->status;
u_int idx;
if (ft->w == NULL)
- ft->w = wp->window;
+ ft->w = w;
ft->wp = wp;
format_add(ft, "history_size", "%u", gd->hsize);
format_add(ft, "pane_height", "%u", wp->sy);
format_add(ft, "pane_title", "%s", wp->base.title);
format_add(ft, "pane_id", "%%%u", wp->id);
- format_add(ft, "pane_active", "%d", wp == wp->window->active);
+ format_add(ft, "pane_active", "%d", wp == w->active);
format_add(ft, "pane_input_off", "%d", !!(wp->flags & PANE_INPUTOFF));
format_add(ft, "pane_pipe", "%d", wp->pipe_fd != -1);
format_add(ft, "pane_at_left", "%d", wp->xoff == 0);
format_add(ft, "pane_at_top", "%d", wp->yoff == 0);
format_add(ft, "pane_at_right", "%d",
- wp->xoff + wp->sx == wp->window->sx);
+ wp->xoff + wp->sx == w->sx);
format_add(ft, "pane_at_bottom", "%d",
- wp->yoff + wp->sy == wp->window->sy);
+ wp->yoff + wp->sy == w->sy);
}
format_add(ft, "pane_in_mode", "%d", wp->screen != &wp->base);
format_add(ft, "pane_mode", "%s", wp->mode->name);
format_add(ft, "pane_synchronized", "%d",
- !!options_get_number(wp->window->options, "synchronize-panes"));
+ !!options_get_number(w->options, "synchronize-panes"));
if (wp->searchstr != NULL)
format_add(ft, "pane_search_string", "%s", wp->searchstr);
-/* $OpenBSD: screen-redraw.c,v 1.51 2018/08/14 11:38:05 nicm Exp $ */
+/* $OpenBSD: screen-redraw.c,v 1.52 2018/08/18 16:14:03 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
u_int sy;
};
-static int screen_redraw_cell_border1(struct window_pane *, u_int, u_int);
-static int screen_redraw_cell_border(struct client *, u_int, u_int);
-static int screen_redraw_check_cell(struct client *, u_int, u_int, int,
- struct window_pane **);
-static int screen_redraw_check_is(u_int, u_int, int, int, struct window *,
- struct window_pane *, struct window_pane *);
-
-static int screen_redraw_make_pane_status(struct client *, struct window *,
- struct window_pane *);
-static void screen_redraw_draw_pane_status(struct client *, int);
-
static void screen_redraw_draw_borders(struct screen_redraw_ctx *);
static void screen_redraw_draw_panes(struct screen_redraw_ctx *);
static void screen_redraw_draw_status(struct screen_redraw_ctx *);
/* Draw pane status. */
static void
-screen_redraw_draw_pane_status(struct client *c, int pane_status)
+screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx)
{
+ struct client *c = ctx->c;
struct window *w = c->session->curw->window;
struct options *oo = c->session->options;
struct tty *tty = &c->tty;
TAILQ_FOREACH(wp, &w->panes, entry) {
if (!window_pane_visible(wp))
continue;
- if (pane_status == CELL_STATUS_TOP)
+ if (ctx->pane_status == CELL_STATUS_TOP)
yoff = wp->yoff - 1;
else
yoff = wp->yoff + wp->sy;
}
}
+/* Set up redraw context. */
+static void
+screen_redraw_set_context(struct client *c, struct screen_redraw_ctx *ctx)
+{
+ struct session *s = c->session;
+ struct options *oo = s->options;
+ struct window *w = s->curw->window;
+ struct options *wo = w->options;
+
+ memset(ctx, 0, sizeof *ctx);
+ ctx->c = c;
+
+ ctx->lines = tty_status_lines(c);
+ if (ctx->lines != 0 && options_get_number(oo, "status-position") == 0)
+ ctx->top = 1;
+ ctx->pane_status = options_get_number(wo, "pane-border-status");
+
+ ctx->sx = c->tty.sx;
+ ctx->sy = c->tty.sy - ctx->lines;
+}
+
/* Redraw entire screen. */
void
screen_redraw_screen(struct client *c, int draw_panes, int draw_status,
int draw_borders)
{
- struct options *oo = c->session->options;
- struct tty *tty = &c->tty;
- struct window *w = c->session->curw->window;
- struct options *wo = w->options;
struct screen_redraw_ctx ctx;
if (c->flags & CLIENT_SUSPENDED)
return;
- memset(&ctx, 0, sizeof ctx);
- ctx.c = c;
-
- if (c->flags & CLIENT_STATUSOFF)
- ctx.lines = 0;
- else
- ctx.lines = status_line_size(c->session);
- if (c->message_string != NULL || c->prompt_string != NULL)
- ctx.lines = (ctx.lines == 0) ? 1 : ctx.lines;
-
- if (ctx.lines != 0 && options_get_number(oo, "status-position") == 0)
- ctx.top = 1;
- ctx.pane_status = options_get_number(wo, "pane-border-status");
-
- ctx.sx = tty->sx;
- ctx.sy = tty->sy - ctx.lines;
+ screen_redraw_set_context(c, &ctx);
if (ctx.lines == 0)
draw_status = 0;
- if (draw_borders) {
- if (ctx.pane_status != CELL_STATUS_OFF)
- screen_redraw_draw_pane_status(c, ctx.pane_status);
+ if (draw_borders)
screen_redraw_draw_borders(&ctx);
- }
+ if (draw_borders && ctx.pane_status != CELL_STATUS_OFF)
+ screen_redraw_draw_pane_status(&ctx);
if (draw_panes)
screen_redraw_draw_panes(&ctx);
if (draw_status)
screen_redraw_draw_status(&ctx);
- tty_reset(tty);
+ tty_reset(&c->tty);
}
/* Draw a single pane. */
-/* $OpenBSD: tmux.h,v 1.837 2018/08/09 09:53:44 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.838 2018/08/18 16:14:03 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
/* tty.c */
void tty_create_log(void);
+u_int tty_status_lines(struct client *);
void tty_raw(struct tty *, const char *);
void tty_attributes(struct tty *, const struct grid_cell *,
const struct window_pane *);
-/* $OpenBSD: tty.c,v 1.303 2018/07/04 09:44:07 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.304 2018/08/18 16:14:03 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
tty_putn(tty, s, n, n);
}
+/* How many lines are taken up by the status line on this client? */
+u_int
+tty_status_lines(struct client *c)
+{
+ u_int lines;
+
+ if (c->flags & CLIENT_STATUSOFF)
+ lines = 0;
+ else
+ lines = status_line_size(c->session);
+ if (c->message_string != NULL || c->prompt_string != NULL)
+ lines = (lines == 0) ? 1 : lines;
+ return (lines);
+}
+
/*
* Is the region large enough to be worth redrawing once later rather than
* probably several times now? Currently yes if it is more than 50% of the