version 1.27, 2018/10/18 08:04:14 |
version 1.28, 2018/10/18 08:38:01 |
|
|
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
|
|
#include <stdlib.h> |
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
/* |
/* |
|
|
.name = "refresh-client", |
.name = "refresh-client", |
.alias = "refresh", |
.alias = "refresh", |
|
|
.args = { "C:lSt:", 0, 0 }, |
.args = { "cC:DlLRSt:U", 0, 1 }, |
.usage = "[-lS] [-C size] " CMD_TARGET_CLIENT_USAGE, |
.usage = "[-cDlLRSU] [-C size] " CMD_TARGET_CLIENT_USAGE " [adjustment]", |
|
|
.flags = CMD_AFTERHOOK, |
.flags = CMD_AFTERHOOK, |
.exec = cmd_refresh_client_exec |
.exec = cmd_refresh_client_exec |
|
|
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
struct client *c; |
struct client *c; |
const char *size; |
struct tty *tty; |
u_int w, h; |
struct window *w; |
|
const char *size, *errstr; |
|
u_int x, y, adjust; |
|
|
if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) |
if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
|
tty = &c->tty; |
|
|
|
if (args_has(args, 'c') || |
|
args_has(args, 'L') || |
|
args_has(args, 'R') || |
|
args_has(args, 'U') || |
|
args_has(args, 'D')) |
|
{ |
|
if (args->argc == 0) |
|
adjust = 1; |
|
else { |
|
adjust = strtonum(args->argv[0], 1, INT_MAX, &errstr); |
|
if (errstr != NULL) { |
|
cmdq_error(item, "adjustment %s", errstr); |
|
return (CMD_RETURN_ERROR); |
|
} |
|
} |
|
|
|
if (args_has(args, 'c')) |
|
c->pan_window = NULL; |
|
else { |
|
w = c->session->curw->window; |
|
if (c->pan_window != w) { |
|
c->pan_window = w; |
|
c->pan_ox = tty->oox; |
|
c->pan_oy = tty->ooy; |
|
} |
|
if (args_has(args, 'L')) { |
|
if (c->pan_ox > adjust) |
|
c->pan_ox -= adjust; |
|
else |
|
c->pan_ox = 0; |
|
} else if (args_has(args, 'R')) { |
|
c->pan_ox += adjust; |
|
if (c->pan_ox > w->sx - tty->osx) |
|
c->pan_ox = w->sx - tty->osx; |
|
} else if (args_has(args, 'U')) { |
|
if (c->pan_oy > adjust) |
|
c->pan_oy -= adjust; |
|
else |
|
c->pan_oy = 0; |
|
} else if (args_has(args, 'D')) { |
|
c->pan_oy += adjust; |
|
if (c->pan_oy > w->sy - tty->osy) |
|
c->pan_oy = w->sy - tty->osy; |
|
} |
|
} |
|
tty_update_client_offset(c); |
|
server_redraw_client(c); |
|
return (CMD_RETURN_NORMAL); |
|
} |
|
|
if (args_has(args, 'l')) { |
if (args_has(args, 'l')) { |
if (c->session != NULL) |
if (c->session != NULL) |
tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); |
tty_putcode_ptr2(&c->tty, TTYC_MS, "", "?"); |
|
|
cmdq_error(item, "missing size"); |
cmdq_error(item, "missing size"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
if (sscanf(size, "%u,%u", &w, &h) != 2) { |
if (sscanf(size, "%u,%u", &x, &y) != 2 && |
|
sscanf(size, "%ux%u", &x, &y)) { |
cmdq_error(item, "bad size argument"); |
cmdq_error(item, "bad size argument"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
if (w < PANE_MINIMUM || w > 5000 || |
if (x < WINDOW_MINIMUM || x > WINDOW_MAXIMUM || |
h < PANE_MINIMUM || h > 5000) { |
y < WINDOW_MINIMUM || y > WINDOW_MAXIMUM) { |
cmdq_error(item, "size too small or too big"); |
cmdq_error(item, "size too small or too big"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
|
|
cmdq_error(item, "not a control client"); |
cmdq_error(item, "not a control client"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
tty_set_size(&c->tty, w, h); |
tty_set_size(&c->tty, x, y); |
c->flags |= CLIENT_SIZECHANGED; |
c->flags |= CLIENT_SIZECHANGED; |
recalculate_sizes(); |
recalculate_sizes(); |
} else if (args_has(args, 'S')) { |
return (CMD_RETURN_NORMAL); |
|
} |
|
|
|
if (args_has(args, 'S')) { |
c->flags |= CLIENT_STATUSFORCE; |
c->flags |= CLIENT_STATUSFORCE; |
server_status_client(c); |
server_status_client(c); |
} else { |
} else { |
c->flags |= CLIENT_STATUSFORCE; |
c->flags |= CLIENT_STATUSFORCE; |
server_redraw_client(c); |
server_redraw_client(c); |
} |
} |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |