=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-select-layout.c,v retrieving revision 1.13 retrieving revision 1.14 diff -c -r1.13 -r1.14 *** src/usr.bin/tmux/cmd-select-layout.c 2012/01/30 20:57:02 1.13 --- src/usr.bin/tmux/cmd-select-layout.c 2012/04/01 13:18:38 1.14 *************** *** 1,4 **** ! /* $OpenBSD: cmd-select-layout.c,v 1.13 2012/01/30 20:57:02 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-select-layout.c,v 1.14 2012/04/01 13:18:38 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 29,36 **** const struct cmd_entry cmd_select_layout_entry = { "select-layout", "selectl", ! "npt:", 0, 1, ! "[-np] " CMD_TARGET_WINDOW_USAGE " [layout-name]", 0, cmd_select_layout_key_binding, NULL, --- 29,36 ---- const struct cmd_entry cmd_select_layout_entry = { "select-layout", "selectl", ! "nprut:", 0, 1, ! "[-npUu] " CMD_TARGET_WINDOW_USAGE " [layout-name]", 0, cmd_select_layout_key_binding, NULL, *************** *** 76,81 **** --- 76,89 ---- case '5' | KEYC_ESCAPE: self->args = args_create(1, "tiled"); break; + case 'u': + self->args = args_create(0); + args_set(self->args, 'u', NULL); + break; + case 'U': + self->args = args_create(0); + args_set(self->args, 'U', NULL); + break; default: self->args = args_create(0); break; *************** *** 87,97 **** --- 95,107 ---- { struct args *args = self->args; struct winlink *wl; + struct window *w; const char *layoutname; int next, previous, layout; if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) return (-1); + w = wl->window; next = self->entry == &cmd_next_layout_entry; if (args_has(self->args, 'n')) *************** *** 100,105 **** --- 110,130 ---- if (args_has(self->args, 'p')) previous = 1; + layout_list_add(w); + if (args_has(self->args, 'U')) { + if ((layoutname = layout_list_redo(w)) == NULL) { + ctx->error(ctx, "no more layout history"); + return (-1); + } + goto set_layout; + } else if (args_has(self->args, 'u')) { + if ((layoutname = layout_list_undo(w)) == NULL) { + ctx->error(ctx, "no more layout history"); + return (-1); + } + goto set_layout; + } + if (next || previous) { if (next) layout = layout_set_next(wl->window); *************** *** 121,136 **** return (0); } ! if (args->argc != 0) { ! layoutname = args->argv[0]; ! if (layout_parse(wl->window, layoutname) == -1) { ! ctx->error(ctx, "can't set layout: %s", layoutname); ! return (-1); ! } ! server_redraw_window(wl->window); ! ctx->info(ctx, "arranging in: %s", layoutname); return (0); ! } return (0); } --- 146,161 ---- return (0); } ! if (args->argc == 0) return (0); ! layoutname = args->argv[0]; + set_layout: + if (layout_parse(wl->window, layoutname) == -1) { + ctx->error(ctx, "can't set layout: %s", layoutname); + return (-1); + } + server_redraw_window(wl->window); + ctx->info(ctx, "arranging in: %s", layoutname); return (0); }