diff options
Diffstat (limited to 'cmd-select-pane.c')
-rw-r--r-- | cmd-select-pane.c | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/cmd-select-pane.c b/cmd-select-pane.c index 67c8c282..8fa71072 100644 --- a/cmd-select-pane.c +++ b/cmd-select-pane.c @@ -1,4 +1,4 @@ -/* $Id: cmd-select-pane.c,v 1.13 2010-03-15 22:03:38 nicm Exp $ */ +/* $Id: cmd-select-pane.c,v 1.14 2011-01-07 14:45:34 tcunha Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> @@ -24,62 +24,57 @@ * Select pane. */ -void cmd_select_pane_init(struct cmd *, int); +void cmd_select_pane_key_binding(struct cmd *, int); int cmd_select_pane_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_select_pane_entry = { "select-pane", "selectp", + "DLRt:U", 0, 0, "[-DLRU] " CMD_TARGET_PANE_USAGE, - 0, "DLRU", - cmd_select_pane_init, - cmd_target_parse, - cmd_select_pane_exec, - cmd_target_free, - cmd_target_print + 0, + cmd_select_pane_key_binding, + NULL, + cmd_select_pane_exec }; void -cmd_select_pane_init(struct cmd *self, int key) +cmd_select_pane_key_binding(struct cmd *self, int key) { - struct cmd_target_data *data; - - cmd_target_init(self, key); - data = self->data; - + self->args = args_create(0); if (key == KEYC_UP) - cmd_set_flag(&data->chflags, 'U'); + args_set(self->args, 'U', NULL); if (key == KEYC_DOWN) - cmd_set_flag(&data->chflags, 'D'); + args_set(self->args, 'D', NULL); if (key == KEYC_LEFT) - cmd_set_flag(&data->chflags, 'L'); + args_set(self->args, 'L', NULL); if (key == KEYC_RIGHT) - cmd_set_flag(&data->chflags, 'R'); + args_set(self->args, 'R', NULL); if (key == 'o') - data->target = xstrdup(":.+"); + args_set(self->args, 't', ":.+"); } int cmd_select_pane_exec(struct cmd *self, struct cmd_ctx *ctx) { - struct cmd_target_data *data = self->data; + struct args *args = self->args; struct winlink *wl; struct window_pane *wp; - if ((wl = cmd_find_pane(ctx, data->target, NULL, &wp)) == NULL) + if ((wl = cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp)) == NULL) return (-1); if (!window_pane_visible(wp)) { - ctx->error(ctx, "pane not visible: %s", data->target); + ctx->error(ctx, "pane not visible"); return (-1); } - if (cmd_check_flag(data->chflags, 'L')) + if (args_has(self->args, 'L')) wp = window_pane_find_left(wp); - else if (cmd_check_flag(data->chflags, 'R')) + else if (args_has(self->args, 'R')) wp = window_pane_find_right(wp); - else if (cmd_check_flag(data->chflags, 'U')) + else if (args_has(self->args, 'U')) wp = window_pane_find_up(wp); - else if (cmd_check_flag(data->chflags, 'D')) + else if (args_has(self->args, 'D')) wp = window_pane_find_down(wp); if (wp == NULL) { ctx->error(ctx, "pane not found"); |