mirror of
https://github.com/tmux/tmux.git
synced 2024-11-05 18:38:48 +00:00
Merge branch 'obsd-master'
This commit is contained in:
commit
eba6cf61c9
@ -24,6 +24,52 @@
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
#define DEFAULT_CLIENT_MENU \
|
||||
" 'Detach' 'd' {detach-client}" \
|
||||
" 'Detach & Kill' 'X' {detach-client -P}" \
|
||||
" 'Detach Others' 'o' {detach-client -a}" \
|
||||
" ''" \
|
||||
" 'Lock' 'l' {lock-client}"
|
||||
#define DEFAULT_SESSION_MENU \
|
||||
" 'Next' 'n' {switch-client -n}" \
|
||||
" 'Previous' 'p' {switch-client -p}" \
|
||||
" ''" \
|
||||
" 'Renumber' 'N' {move-window -r}" \
|
||||
" 'Rename' 'n' {command-prompt -I \"#S\" \"rename-session -- '%%'\"}" \
|
||||
" ''" \
|
||||
" 'New Session' 's' {new-session}" \
|
||||
" 'New Window' 'w' {new-window}"
|
||||
#define DEFAULT_WINDOW_MENU \
|
||||
" 'Swap Left' 'l' {swap-window -t:-1}" \
|
||||
" 'Swap Right' 'r' {swap-window -t:+1}" \
|
||||
" '#{?pane_marked_set,,-}Swap Marked' 's' {swap-window}" \
|
||||
" ''" \
|
||||
" 'Kill' 'X' {kill-window}" \
|
||||
" 'Respawn' 'R' {respawn-window -k}" \
|
||||
" '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" \
|
||||
" 'Rename' 'n' {command-prompt -I \"#W\" \"rename-window -- '%%'\"}" \
|
||||
" ''" \
|
||||
" 'New After' 'w' {new-window -a}" \
|
||||
" 'New At End' 'W' {new-window}"
|
||||
#define DEFAULT_PANE_MENU \
|
||||
" '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {send-keys -l -- \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {set-buffer -- \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_line,Copy Line,}' 'l' {set-buffer -- \"#{q:mouse_line}\"}" \
|
||||
" ''" \
|
||||
" 'Horizontal Split' 'h' {split-window -h}" \
|
||||
" 'Vertical Split' 'v' {split-window -v}" \
|
||||
" ''" \
|
||||
" 'Swap Up' 'u' {swap-pane -U}" \
|
||||
" 'Swap Down' 'd' {swap-pane -D}" \
|
||||
" '#{?pane_marked_set,,-}Swap Marked' 's' {swap-pane}" \
|
||||
" ''" \
|
||||
" 'Kill' 'X' {kill-pane}" \
|
||||
" 'Respawn' 'R' {respawn-pane -k}" \
|
||||
" '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}" \
|
||||
" '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}"
|
||||
|
||||
|
||||
static int key_bindings_cmp(struct key_binding *, struct key_binding *);
|
||||
RB_GENERATE_STATIC(key_bindings, key_binding, entry, key_bindings_cmp);
|
||||
static int key_table_cmp(struct key_table *, struct key_table *);
|
||||
@ -278,53 +324,15 @@ key_bindings_init(void)
|
||||
"bind -n WheelDownStatus next-window",
|
||||
"bind -n WheelUpStatus previous-window",
|
||||
"bind -n MouseDrag1Pane if -Ft= '#{mouse_any_flag}' 'if -Ft= \"#{pane_in_mode}\" \"copy-mode -M\" \"send-keys -M\"' 'copy-mode -M'",
|
||||
"bind -n MouseDown3Pane if -Ft= '#{||:mouse_any_flag,pane_in_mode}' 'select-pane -t=; send-keys -M' 'select-pane -mt='",
|
||||
"bind -n WheelUpPane if -Ft= '#{mouse_any_flag}' 'send-keys -M' 'if -Ft= \"#{pane_in_mode}\" \"send-keys -M\" \"copy-mode -et=\"'",
|
||||
|
||||
"bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\""
|
||||
" 'Detach' 'd' {detach-client}"
|
||||
" 'Detach & Kill' 'X' {detach-client -P}"
|
||||
" 'Detach Others' 'o' {detach-client -a}"
|
||||
" ''"
|
||||
" 'Lock' 'l' {lock-client}",
|
||||
"bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\""
|
||||
" 'Next' 'n' {switch-client -n}"
|
||||
" 'Previous' 'p' {switch-client -p}"
|
||||
" ''"
|
||||
" 'Renumber' 'N' {move-window -r}"
|
||||
" 'Rename' 'n' {command-prompt -I \"#S\" \"rename-session -- '%%'\"}"
|
||||
" ''"
|
||||
" 'New Session' 's' {new-session}"
|
||||
" 'New Window' 'w' {new-window}",
|
||||
"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}"
|
||||
" ''"
|
||||
" 'Kill' 'X' {kill-window}"
|
||||
" 'Respawn' 'R' {respawn-window -k}"
|
||||
" '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}"
|
||||
" 'Rename' 'n' {command-prompt -I \"#W\" \"rename-window -- '%%'\"}"
|
||||
" ''"
|
||||
" 'New After' 'w' {new-window -a}"
|
||||
" 'New At End' 'W' {new-window}",
|
||||
"bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\""
|
||||
" '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {copy-mode -t=; send -Xt= search-backward \"#{q:mouse_word}\"}"
|
||||
" '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {send-keys -l -- \"#{q:mouse_word}\"}"
|
||||
" '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {set-buffer -- \"#{q:mouse_word}\"}"
|
||||
" '#{?mouse_line,Copy Line,}' 'l' {set-buffer -- \"#{q:mouse_line}\"}"
|
||||
" ''"
|
||||
" 'Horizontal Split' 'h' {split-window -h}"
|
||||
" 'Vertical Split' 'v' {split-window -v}"
|
||||
" ''"
|
||||
" 'Swap Up' 'u' {swap-pane -U}"
|
||||
" 'Swap Down' 'd' {swap-pane -D}"
|
||||
" '#{?pane_marked_set,,#[dim]}Swap Marked' 's' {swap-pane}"
|
||||
" ''"
|
||||
" 'Kill' 'X' {kill-pane}"
|
||||
" 'Respawn' 'R' {respawn-pane -k}"
|
||||
" '#{?pane_marked,Unmark,Mark}' 'm' {select-pane -m}"
|
||||
" '#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}",
|
||||
"bind -n MouseDown3StatusRight display-menu -t= -xM -yS -T \"#[align=centre]#{client_name}\" " DEFAULT_CLIENT_MENU,
|
||||
"bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T \"#[align=centre]#{session_name}\" " DEFAULT_SESSION_MENU,
|
||||
"bind -n MouseDown3Status display-menu -t= -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU,
|
||||
"bind C-m display-menu -xW -yS -T \"#[align=centre]#{window_index}:#{window_name}\" " DEFAULT_WINDOW_MENU,
|
||||
"bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{pane_in_mode}}' 'select-pane -t=; send-keys -M' {display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU "}",
|
||||
"bind -n M-MouseDown3Pane display-menu -t= -xM -yM -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU,
|
||||
"bind M-m display-menu -xP -yP -T \"#[align=centre]#{pane_index} (#{pane_id})\" " DEFAULT_PANE_MENU,
|
||||
|
||||
"bind -Tcopy-mode C-Space send -X begin-selection",
|
||||
"bind -Tcopy-mode C-a send -X start-of-line",
|
||||
|
22
menu.c
22
menu.c
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
2
tmux.1
2
tmux.1
@ -4681,6 +4681,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
|
||||
|
Loading…
Reference in New Issue
Block a user