mirror of
https://github.com/tmux/tmux.git
synced 2025-01-08 08:58:47 +00:00
Indicate the marked pane in choose mode in reverse and add key to set
and clear it (m and M) and a key to jump to the starting pane (H).
This commit is contained in:
parent
662728d6c7
commit
899b3d2436
38
mode-tree.c
38
mode-tree.c
@ -256,8 +256,8 @@ mode_tree_expand_current(struct mode_tree_data *mtd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static int
|
||||||
mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
|
mode_tree_get_tag(struct mode_tree_data *mtd, uint64_t tag, u_int *found)
|
||||||
{
|
{
|
||||||
u_int i;
|
u_int i;
|
||||||
|
|
||||||
@ -266,15 +266,41 @@ mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i != mtd->line_size) {
|
if (i != mtd->line_size) {
|
||||||
mtd->current = i;
|
*found = i;
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mode_tree_expand(struct mode_tree_data *mtd, uint64_t tag)
|
||||||
|
{
|
||||||
|
u_int found;
|
||||||
|
|
||||||
|
if (!mode_tree_get_tag(mtd, tag, &found))
|
||||||
|
return;
|
||||||
|
if (!mtd->line_list[found].item->expanded) {
|
||||||
|
mtd->line_list[found].item->expanded = 1;
|
||||||
|
mode_tree_build(mtd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
|
||||||
|
{
|
||||||
|
u_int found;
|
||||||
|
|
||||||
|
if (mode_tree_get_tag(mtd, tag, &found)) {
|
||||||
|
mtd->current = found;
|
||||||
if (mtd->current > mtd->height - 1)
|
if (mtd->current > mtd->height - 1)
|
||||||
mtd->offset = mtd->current - mtd->height + 1;
|
mtd->offset = mtd->current - mtd->height + 1;
|
||||||
else
|
else
|
||||||
mtd->offset = 0;
|
mtd->offset = 0;
|
||||||
} else {
|
return (1);
|
||||||
mtd->current = 0;
|
|
||||||
mtd->offset = 0;
|
|
||||||
}
|
}
|
||||||
|
mtd->current = 0;
|
||||||
|
mtd->offset = 0;
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
u_int
|
u_int
|
||||||
|
3
tmux.h
3
tmux.h
@ -2621,7 +2621,8 @@ typedef void (*mode_tree_each_cb)(void *, void *, struct client *, key_code);
|
|||||||
u_int mode_tree_count_tagged(struct mode_tree_data *);
|
u_int mode_tree_count_tagged(struct mode_tree_data *);
|
||||||
void *mode_tree_get_current(struct mode_tree_data *);
|
void *mode_tree_get_current(struct mode_tree_data *);
|
||||||
void mode_tree_expand_current(struct mode_tree_data *);
|
void mode_tree_expand_current(struct mode_tree_data *);
|
||||||
void mode_tree_set_current(struct mode_tree_data *, uint64_t);
|
void mode_tree_expand(struct mode_tree_data *, uint64_t);
|
||||||
|
int mode_tree_set_current(struct mode_tree_data *, uint64_t);
|
||||||
void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb,
|
void mode_tree_each_tagged(struct mode_tree_data *, mode_tree_each_cb,
|
||||||
struct client *, key_code, int);
|
struct client *, key_code, int);
|
||||||
void mode_tree_down(struct mode_tree_data *, int);
|
void mode_tree_down(struct mode_tree_data *, int);
|
||||||
|
@ -37,9 +37,11 @@ static void window_tree_key(struct window_mode_entry *,
|
|||||||
|
|
||||||
#define WINDOW_TREE_DEFAULT_FORMAT \
|
#define WINDOW_TREE_DEFAULT_FORMAT \
|
||||||
"#{?pane_format," \
|
"#{?pane_format," \
|
||||||
"#{pane_current_command} \"#{pane_title}\"" \
|
"#{?pane_marked,#[reverse],}" \
|
||||||
|
"#{pane_current_command}#{?pane_active,*,}#{?pane_marked,M,} \"#{pane_title}\"" \
|
||||||
"," \
|
"," \
|
||||||
"#{?window_format," \
|
"#{?window_format," \
|
||||||
|
"#{?window_marked_flag,#[reverse],}" \
|
||||||
"#{window_name}#{window_flags} " \
|
"#{window_name}#{window_flags} " \
|
||||||
"(#{window_panes} panes)" \
|
"(#{window_panes} panes)" \
|
||||||
"#{?#{==:#{window_panes},1}, \"#{pane_title}\",}" \
|
"#{?#{==:#{window_panes},1}, \"#{pane_title}\",}" \
|
||||||
@ -56,6 +58,7 @@ static void window_tree_key(struct window_mode_entry *,
|
|||||||
static const struct menu_item window_tree_menu_items[] = {
|
static const struct menu_item window_tree_menu_items[] = {
|
||||||
{ "Select", '\r', NULL },
|
{ "Select", '\r', NULL },
|
||||||
{ "Expand", KEYC_RIGHT, NULL },
|
{ "Expand", KEYC_RIGHT, NULL },
|
||||||
|
{ "Mark", 'm', NULL },
|
||||||
{ "", KEYC_NONE, NULL },
|
{ "", KEYC_NONE, NULL },
|
||||||
{ "Tag", 't', NULL },
|
{ "Tag", 't', NULL },
|
||||||
{ "Tag All", '\024', NULL },
|
{ "Tag All", '\024', NULL },
|
||||||
@ -1170,7 +1173,7 @@ window_tree_key(struct window_mode_entry *wme, struct client *c,
|
|||||||
struct window_tree_modedata *data = wme->data;
|
struct window_tree_modedata *data = wme->data;
|
||||||
struct window_tree_itemdata *item, *new_item;
|
struct window_tree_itemdata *item, *new_item;
|
||||||
char *name, *prompt = NULL;
|
char *name, *prompt = NULL;
|
||||||
struct cmd_find_state fs;
|
struct cmd_find_state fs, *fsp = &data->fs;
|
||||||
int finished;
|
int finished;
|
||||||
u_int tagged, x, y, idx;
|
u_int tagged, x, y, idx;
|
||||||
struct session *ns;
|
struct session *ns;
|
||||||
@ -1192,6 +1195,21 @@ window_tree_key(struct window_mode_entry *wme, struct client *c,
|
|||||||
case '>':
|
case '>':
|
||||||
data->offset++;
|
data->offset++;
|
||||||
break;
|
break;
|
||||||
|
case 'H':
|
||||||
|
mode_tree_expand(data->data, (uint64_t)fsp->s);
|
||||||
|
mode_tree_expand(data->data, (uint64_t)fsp->wl);
|
||||||
|
if (!mode_tree_set_current(data->data, (uint64_t)wme->wp))
|
||||||
|
mode_tree_set_current(data->data, (uint64_t)fsp->wl);
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
window_tree_pull_item(item, &ns, &nwl, &nwp);
|
||||||
|
server_set_marked(ns, nwl, nwp);
|
||||||
|
mode_tree_build(data->data);
|
||||||
|
break;
|
||||||
|
case 'M':
|
||||||
|
server_clear_marked();
|
||||||
|
mode_tree_build(data->data);
|
||||||
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
window_tree_pull_item(item, &ns, &nwl, &nwp);
|
window_tree_pull_item(item, &ns, &nwl, &nwp);
|
||||||
switch (item->type) {
|
switch (item->type) {
|
||||||
|
Loading…
Reference in New Issue
Block a user