mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +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:
		
							
								
								
									
										38
									
								
								mode-tree.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								mode-tree.c
									
									
									
									
									
								
							@@ -256,8 +256,8 @@ mode_tree_expand_current(struct mode_tree_data *mtd)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
 | 
			
		||||
static int
 | 
			
		||||
mode_tree_get_tag(struct mode_tree_data *mtd, uint64_t tag, u_int *found)
 | 
			
		||||
{
 | 
			
		||||
	u_int	i;
 | 
			
		||||
 | 
			
		||||
@@ -266,15 +266,41 @@ mode_tree_set_current(struct mode_tree_data *mtd, uint64_t tag)
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	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)
 | 
			
		||||
			mtd->offset = mtd->current - mtd->height + 1;
 | 
			
		||||
		else
 | 
			
		||||
			mtd->offset = 0;
 | 
			
		||||
	} else {
 | 
			
		||||
		mtd->current = 0;
 | 
			
		||||
		mtd->offset = 0;
 | 
			
		||||
		return (1);
 | 
			
		||||
	}
 | 
			
		||||
	mtd->current = 0;
 | 
			
		||||
	mtd->offset = 0;
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 *);
 | 
			
		||||
void	*mode_tree_get_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,
 | 
			
		||||
	     struct client *, key_code, 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 \
 | 
			
		||||
	"#{?pane_format," \
 | 
			
		||||
		"#{pane_current_command} \"#{pane_title}\"" \
 | 
			
		||||
		"#{?pane_marked,#[reverse],}" \
 | 
			
		||||
		"#{pane_current_command}#{?pane_active,*,}#{?pane_marked,M,} \"#{pane_title}\"" \
 | 
			
		||||
	"," \
 | 
			
		||||
		"#{?window_format," \
 | 
			
		||||
			"#{?window_marked_flag,#[reverse],}" \
 | 
			
		||||
			"#{window_name}#{window_flags} " \
 | 
			
		||||
			"(#{window_panes} panes)" \
 | 
			
		||||
			"#{?#{==:#{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[] = {
 | 
			
		||||
	{ "Select", '\r', NULL },
 | 
			
		||||
	{ "Expand", KEYC_RIGHT, NULL },
 | 
			
		||||
	{ "Mark", 'm', NULL },
 | 
			
		||||
	{ "", KEYC_NONE, NULL },
 | 
			
		||||
	{ "Tag", 't', 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_itemdata	*item, *new_item;
 | 
			
		||||
	char				*name, *prompt = NULL;
 | 
			
		||||
	struct cmd_find_state		 fs;
 | 
			
		||||
	struct cmd_find_state		 fs, *fsp = &data->fs;
 | 
			
		||||
	int				 finished;
 | 
			
		||||
	u_int				 tagged, x, y, idx;
 | 
			
		||||
	struct session			*ns;
 | 
			
		||||
@@ -1192,6 +1195,21 @@ window_tree_key(struct window_mode_entry *wme, struct client *c,
 | 
			
		||||
	case '>':
 | 
			
		||||
		data->offset++;
 | 
			
		||||
		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':
 | 
			
		||||
		window_tree_pull_item(item, &ns, &nwl, &nwp);
 | 
			
		||||
		switch (item->type) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user