version 1.39, 2021/10/18 09:48:35 |
version 1.40, 2021/10/22 17:12:50 |
|
|
struct cmdq_item *qitem, struct client *c, struct cmd_find_state *fs) |
struct cmdq_item *qitem, struct client *c, struct cmd_find_state *fs) |
{ |
{ |
struct menu_item *new_item; |
struct menu_item *new_item; |
const char *key, *cmd; |
const char *key = NULL, *cmd, *suffix = ""; |
char *s, *name; |
char *s, *name; |
u_int width; |
u_int width, max_width; |
int line; |
int line; |
|
size_t keylen, slen; |
|
|
line = (item == NULL || item->name == NULL || *item->name == '\0'); |
line = (item == NULL || item->name == NULL || *item->name == '\0'); |
if (line && menu->count == 0) |
if (line && menu->count == 0) |
|
|
menu->count--; |
menu->count--; |
return; |
return; |
} |
} |
|
max_width = c->tty.sx - 4; |
|
|
|
slen = strlen(s); |
if (*s != '-' && 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, 0); |
key = key_string_lookup_key(item->key, 0); |
|
keylen = strlen(key) + 3; /* 3 = space and two brackets */ |
|
|
|
/* |
|
* Only add the key if there is space for the entire item text |
|
* and the key. |
|
*/ |
|
if (keylen >= max_width || slen >= max_width - keylen) |
|
key = NULL; |
|
} |
|
|
|
if (key != NULL) |
xasprintf(&name, "%s#[default] #[align=right](%s)", s, key); |
xasprintf(&name, "%s#[default] #[align=right](%s)", s, key); |
} else |
else { |
xasprintf(&name, "%s", s); |
if (slen > max_width) { |
|
max_width--; |
|
suffix = ">"; |
|
} |
|
xasprintf(&name, "%.*s%s", (int)max_width, s, suffix); |
|
} |
new_item->name = name; |
new_item->name = name; |
free(s); |
free(s); |
|
|