summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2019-05-28 09:50:55 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2019-05-28 09:50:55 +0000
commitbcb36373eb31b2b8cc4f17544457775cd1388c42 (patch)
treef06222cf2b43c4f85d48a56f0254c249b936ec25
parent35d32f988f665e1cf633099a428990a09f7ac9e4 (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.c6
-rw-r--r--usr.bin/tmux/menu.c24
-rw-r--r--usr.bin/tmux/screen-write.c17
-rw-r--r--usr.bin/tmux/tmux.14
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