diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-05-28 09:50:55 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2019-05-28 09:50:55 +0000 |
commit | bcb36373eb31b2b8cc4f17544457775cd1388c42 (patch) | |
tree | f06222cf2b43c4f85d48a56f0254c249b936ec25 | |
parent | 35d32f988f665e1cf633099a428990a09f7ac9e4 (diff) |
Allow menu items to be disabled by putting a - at the start of their
name, rather than just including #[dim] which still allowed them to be
chosen.
-rw-r--r-- | usr.bin/tmux/key-bindings.c | 6 | ||||
-rw-r--r-- | usr.bin/tmux/menu.c | 24 | ||||
-rw-r--r-- | usr.bin/tmux/screen-write.c | 17 | ||||
-rw-r--r-- | usr.bin/tmux/tmux.1 | 4 |
4 files changed, 35 insertions, 16 deletions
diff --git a/usr.bin/tmux/key-bindings.c b/usr.bin/tmux/key-bindings.c index d80e808ba43..e63aea45eb6 100644 --- a/usr.bin/tmux/key-bindings.c +++ b/usr.bin/tmux/key-bindings.c @@ -1,4 +1,4 @@ -/* $OpenBSD: key-bindings.c,v 1.95 2019/05/28 07:18:42 nicm Exp $ */ +/* $OpenBSD: key-bindings.c,v 1.96 2019/05/28 09:50:54 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -299,7 +299,7 @@ key_bindings_init(void) "bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\"" " 'Swap Left' 'l' {swap-window -t:-1}" " 'Swap Right' 'r' {swap-window -t:+1}" - " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-window}" + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-window}" " ''" " 'Kill' 'X' {kill-window}" " 'Respawn' 'R' {respawn-window -k}" @@ -319,7 +319,7 @@ key_bindings_init(void) " ''" " 'Swap Up' 'u' {swap-pane -U}" " 'Swap Down' 'd' {swap-pane -D}" - " '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-pane}" + " '#{?pane_marked_set,,-}Swap Marked' 's' {swap-pane}" " ''" " 'Kill' 'X' {kill-pane}" " 'Respawn' 'R' {respawn-pane -k}" diff --git a/usr.bin/tmux/menu.c b/usr.bin/tmux/menu.c index cec97f8d524..b60df9d0b47 100644 --- a/usr.bin/tmux/menu.c +++ b/usr.bin/tmux/menu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: menu.c,v 1.8 2019/05/28 07:18:42 nicm Exp $ */ +/* $OpenBSD: menu.c,v 1.9 2019/05/28 09:50:54 nicm Exp $ */ /* * Copyright (c) 2019 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -80,7 +80,7 @@ menu_add_item(struct menu *menu, const struct menu_item *item, menu->count--; return; } - if (item->key != KEYC_UNKNOWN && item->key != KEYC_NONE) { + if (*s != '-' && item->key != KEYC_UNKNOWN && item->key != KEYC_NONE) { key = key_string_lookup_key(item->key); xasprintf(&name, "%s#[default] #[align=right](%s)", s, key); } else @@ -182,6 +182,7 @@ menu_key_cb(struct client *c, struct key_event *event) const struct menu_item *item; struct cmdq_item *new_item; struct cmd_parse_result *pr; + const char *name; if (KEYC_IS_MOUSE(event->key)) { if (md->flags & MENU_NOMOUSE) @@ -207,21 +208,27 @@ menu_key_cb(struct client *c, struct key_event *event) } switch (event->key) { case KEYC_UP: + if (old == -1) + old = 0; do { if (md->choice == -1 || md->choice == 0) md->choice = count - 1; else md->choice--; - } while (menu->items[md->choice].name == NULL); + name = menu->items[md->choice].name; + } while ((name == NULL || *name == '-') && md->choice != old); c->flags |= CLIENT_REDRAWOVERLAY; return (0); case KEYC_DOWN: + if (old == -1) + old = 0; do { if (md->choice == -1 || md->choice == count - 1) md->choice = 0; - else - md->choice++; - } while (menu->items[md->choice].name == NULL); + else + md->choice++; + name = menu->items[md->choice].name; + } while ((name == NULL || *name == '-') && md->choice != old); c->flags |= CLIENT_REDRAWOVERLAY; return (0); case '\r': @@ -233,6 +240,9 @@ menu_key_cb(struct client *c, struct key_event *event) return (1); } for (i = 0; i < (u_int)count; i++) { + name = menu->items[i].name; + if (name == NULL || *name == '-') + continue; if (event->key == menu->items[i].key) { md->choice = i; goto chosen; @@ -244,7 +254,7 @@ chosen: if (md->choice == -1) return (1); item = &menu->items[md->choice]; - if (item->name == NULL) + if (item->name == NULL || *item->name == '-') return (1); if (md->cb != NULL) { md->cb(md->menu, md->choice, item->key, md->data); diff --git a/usr.bin/tmux/screen-write.c b/usr.bin/tmux/screen-write.c index c4daa153703..de10d577831 100644 --- a/usr.bin/tmux/screen-write.c +++ b/usr.bin/tmux/screen-write.c @@ -1,4 +1,4 @@ -/* $OpenBSD: screen-write.c,v 1.152 2019/05/10 14:12:47 nicm Exp $ */ +/* $OpenBSD: screen-write.c,v 1.153 2019/05/28 09:50:54 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -410,6 +410,7 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu, int choice) struct screen *s = ctx->s; struct grid_cell gc; u_int cx, cy, i, j; + const char *name; cx = s->cx; cy = s->cy; @@ -421,18 +422,24 @@ screen_write_menu(struct screen_write_ctx *ctx, struct menu *menu, int choice) format_draw(ctx, &gc, menu->width, menu->title, NULL); for (i = 0; i < menu->count; i++) { - if (menu->items[i].name == NULL) { + name = menu->items[i].name; + if (name == NULL) { screen_write_cursormove(ctx, cx, cy + 1 + i, 0); screen_write_hline(ctx, menu->width + 4, 1, 1); } else { - if (choice >= 0 && i == (u_int)choice) + if (choice >= 0 && i == (u_int)choice && *name != '-') gc.attr |= GRID_ATTR_REVERSE; screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); for (j = 0; j < menu->width; j++) screen_write_putc(ctx, &gc, ' '); screen_write_cursormove(ctx, cx + 2, cy + 1 + i, 0); - format_draw(ctx, &gc, menu->width, menu->items[i].name, - NULL); + if (*name == '-') { + name++; + gc.attr |= GRID_ATTR_DIM; + format_draw(ctx, &gc, menu->width, name, NULL); + gc.attr &= ~GRID_ATTR_DIM; + } else + format_draw(ctx, &gc, menu->width, name, NULL); if (choice >= 0 && i == (u_int)choice) gc.attr &= ~GRID_ATTR_REVERSE; } diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 24a4e237af5..9057f4b3ec3 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.657 2019/05/28 07:18:42 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.658 2019/05/28 09:50:54 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" @@ -4674,6 +4674,8 @@ The name and command are formats, see the and .Sx STYLES sections. +If the name begins with a hyphen (-), then the item is disabled (shown dim) and +may not be chosen. The name may be empty for a separator line, in which case both the key and command should be omitted. .Pp |