diff options
author | Tiago Cunha <tcunha@gmx.com> | 2009-07-30 20:45:20 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2009-07-30 20:45:20 +0000 |
commit | 1650b8552ff0eec77dde62066312bea60c1200ae (patch) | |
tree | c2ad69d1c7a82b29f3069d15d091e12d65368087 /cmd-generic.c | |
parent | ec1396c9ee38e43d99d18a52d72fd315795abc8a (diff) | |
download | rtmux-1650b8552ff0eec77dde62066312bea60c1200ae.tar.gz rtmux-1650b8552ff0eec77dde62066312bea60c1200ae.tar.bz2 rtmux-1650b8552ff0eec77dde62066312bea60c1200ae.zip |
Sync OpenBSD patchset 200:
Merge pane number into the target specification for pane commands. Instead of
using -p index, a target pane is now addressed with the normal -t window form
but suffixed with a period and a pane index, for example :0.2 or
mysess:mywin.1. An unadorned number such as -t 1 is tried as a pane index in
the current window, if that fails the same rules are followed as for a target
window and the current pane in that window used.
As a side-effect this now means that swap-pane can swap panes between
different windows.
Note that this changes the syntax of the break-pane, clear-history, kill-pane,
resize-pane, select-pane and swap-pane commands.
Diffstat (limited to 'cmd-generic.c')
-rw-r--r-- | cmd-generic.c | 92 |
1 files changed, 1 insertions, 91 deletions
diff --git a/cmd-generic.c b/cmd-generic.c index b61a102d..f1a61734 100644 --- a/cmd-generic.c +++ b/cmd-generic.c @@ -1,4 +1,4 @@ -/* $Id: cmd-generic.c,v 1.31 2009-07-28 22:12:16 tcunha Exp $ */ +/* $Id: cmd-generic.c,v 1.32 2009-07-30 20:45:20 tcunha Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> @@ -467,93 +467,3 @@ cmd_option_print(struct cmd *self, char *buf, size_t len) off += xsnprintf(buf + off, len - off, " %s", data->value); return (off); } - -void -cmd_pane_init(struct cmd *self, unused int key) -{ - struct cmd_pane_data *data; - - self->data = data = xmalloc(sizeof *data); - data->chflags = 0; - data->target = NULL; - data->arg = NULL; - data->pane = -1; -} - -int -cmd_pane_parse(struct cmd *self, int argc, char **argv, char **cause) -{ - struct cmd_pane_data *data; - const struct cmd_entry *entry = self->entry; - int opt, n; - const char *errstr; - - /* Don't use the entry version since it may be dependent on key. */ - cmd_pane_init(self, 0); - data = self->data; - - while ((opt = cmd_getopt(argc, argv, "p:t:", entry->chflags)) != -1) { - if (cmd_flags(opt, entry->chflags, &data->chflags) == 0) - continue; - switch (opt) { - case 'p': - if (data->pane == -1) { - n = strtonum(optarg, 0, INT_MAX, &errstr); - if (errstr != NULL) { - xasprintf(cause, "pane %s", errstr); - goto error; - } - data->pane = n; - } - break; - case 't': - if (data->target == NULL) - data->target = xstrdup(optarg); - break; - default: - goto usage; - } - } - argc -= optind; - argv += optind; - - if (cmd_fill_argument(self->entry->flags, &data->arg, argc, argv) != 0) - goto usage; - return (0); - -usage: - xasprintf(cause, "usage: %s %s", self->entry->name, self->entry->usage); - -error: - self->entry->free(self); - return (-1); -} - -void -cmd_pane_free(struct cmd *self) -{ - struct cmd_pane_data *data = self->data; - - if (data->target != NULL) - xfree(data->target); - if (data->arg != NULL) - xfree(data->arg); - xfree(data); -} - -size_t -cmd_pane_print(struct cmd *self, char *buf, size_t len) -{ - struct cmd_pane_data *data = self->data; - size_t off = 0; - - off += xsnprintf(buf, len, "%s", self->entry->name); - if (data == NULL) - return (off); - off += cmd_print_flags(buf, len, off, data->chflags); - if (off < len && data->target != NULL) - off += cmd_prarg(buf + off, len - off, " -t ", data->target); - if (off < len && data->arg != NULL) - off += cmd_prarg(buf + off, len - off, " ", data->arg); - return (off); -} |