mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		@@ -34,8 +34,8 @@ const struct cmd_entry cmd_break_pane_entry = {
 | 
				
			|||||||
	.name = "break-pane",
 | 
						.name = "break-pane",
 | 
				
			||||||
	.alias = "breakp",
 | 
						.alias = "breakp",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.args = { "dPF:n:s:t:", 0, 0 },
 | 
						.args = { "adPF:n:s:t:", 0, 0 },
 | 
				
			||||||
	.usage = "[-dP] [-F format] [-n window-name] [-s src-pane] "
 | 
						.usage = "[-adP] [-F format] [-n window-name] [-s src-pane] "
 | 
				
			||||||
		 "[-t dst-window]",
 | 
							 "[-t dst-window]",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.source = { 's', CMD_FIND_PANE, 0 },
 | 
						.source = { 's', CMD_FIND_PANE, 0 },
 | 
				
			||||||
@@ -63,17 +63,31 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	const char		*template;
 | 
						const char		*template;
 | 
				
			||||||
	char			*cp;
 | 
						char			*cp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (idx != -1 && winlink_find_by_index(&dst_s->windows, idx) != NULL) {
 | 
						if (args_has(args, 'a')) {
 | 
				
			||||||
		cmdq_error(item, "index %d already in use", idx);
 | 
							if (target->wl != NULL)
 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
								idx = winlink_shuffle_up(dst_s, target->wl);
 | 
				
			||||||
	}
 | 
							else
 | 
				
			||||||
 | 
								idx = winlink_shuffle_up(dst_s, dst_s->curw);
 | 
				
			||||||
	if (window_count_panes(w) == 1) {
 | 
							if (idx == -1)
 | 
				
			||||||
		cmdq_error(item, "can't break with only one pane");
 | 
								return (CMD_RETURN_ERROR);
 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	server_unzoom_window(w);
 | 
						server_unzoom_window(w);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (window_count_panes(w) == 1) {
 | 
				
			||||||
 | 
							if (server_link_window(src_s, wl, dst_s, idx, 0,
 | 
				
			||||||
 | 
							    !args_has(args, 'd'), &cause) != 0) {
 | 
				
			||||||
 | 
								cmdq_error(item, "%s", cause);
 | 
				
			||||||
 | 
								free(cause);
 | 
				
			||||||
 | 
								return (CMD_RETURN_ERROR);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							server_unlink_window(src_s, wl);
 | 
				
			||||||
 | 
							return (CMD_RETURN_NORMAL);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (idx != -1 && winlink_find_by_index(&dst_s->windows, idx) != NULL) {
 | 
				
			||||||
 | 
							cmdq_error(item, "index in use: %d", idx);
 | 
				
			||||||
 | 
							return (CMD_RETURN_ERROR);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TAILQ_REMOVE(&w->panes, wp, entry);
 | 
						TAILQ_REMOVE(&w->panes, wp, entry);
 | 
				
			||||||
	window_lost_pane(w, wp);
 | 
						window_lost_pane(w, wp);
 | 
				
			||||||
	layout_close_pane(wp);
 | 
						layout_close_pane(wp);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,8 +49,8 @@ const struct cmd_entry cmd_move_pane_entry = {
 | 
				
			|||||||
	.name = "move-pane",
 | 
						.name = "move-pane",
 | 
				
			||||||
	.alias = "movep",
 | 
						.alias = "movep",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.args = { "bdhvp:l:s:t:", 0, 0 },
 | 
						.args = { "bdfhvp:l:s:t:", 0, 0 },
 | 
				
			||||||
	.usage = "[-bdhv] [-l size] " CMD_SRCDST_PANE_USAGE,
 | 
						.usage = "[-bdfhv] [-l size] " CMD_SRCDST_PANE_USAGE,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	.source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED },
 | 
						.source = { 's', CMD_FIND_PANE, CMD_FIND_DEFAULT_MARKED },
 | 
				
			||||||
	.target = { 't', CMD_FIND_PANE, 0 },
 | 
						.target = { 't', CMD_FIND_PANE, 0 },
 | 
				
			||||||
@@ -71,16 +71,11 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	struct window		*src_w, *dst_w;
 | 
						struct window		*src_w, *dst_w;
 | 
				
			||||||
	struct window_pane	*src_wp, *dst_wp;
 | 
						struct window_pane	*src_wp, *dst_wp;
 | 
				
			||||||
	char			*cause = NULL;
 | 
						char			*cause = NULL;
 | 
				
			||||||
	int			 size, percentage, dst_idx, not_same_window;
 | 
						int			 size, percentage, dst_idx;
 | 
				
			||||||
	int			 flags;
 | 
						int			 flags;
 | 
				
			||||||
	enum layout_type	 type;
 | 
						enum layout_type	 type;
 | 
				
			||||||
	struct layout_cell	*lc;
 | 
						struct layout_cell	*lc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (cmd_get_entry(self) == &cmd_join_pane_entry)
 | 
					 | 
				
			||||||
		not_same_window = 1;
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		not_same_window = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	dst_s = target->s;
 | 
						dst_s = target->s;
 | 
				
			||||||
	dst_wl = target->wl;
 | 
						dst_wl = target->wl;
 | 
				
			||||||
	dst_wp = target->wp;
 | 
						dst_wp = target->wp;
 | 
				
			||||||
@@ -93,11 +88,7 @@ cmd_join_pane_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	src_w = src_wl->window;
 | 
						src_w = src_wl->window;
 | 
				
			||||||
	server_unzoom_window(src_w);
 | 
						server_unzoom_window(src_w);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (not_same_window && src_w == dst_w) {
 | 
						if (src_wp == dst_wp) {
 | 
				
			||||||
		cmdq_error(item, "can't join a pane to its own window");
 | 
					 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (!not_same_window && src_wp == dst_wp) {
 | 
					 | 
				
			||||||
		cmdq_error(item, "source and target panes must be different");
 | 
							cmdq_error(item, "source and target panes must be different");
 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
							return (CMD_RETURN_ERROR);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,9 +63,9 @@ cmd_move_window_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	struct cmd_find_state	*source = cmdq_get_source(item);
 | 
						struct cmd_find_state	*source = cmdq_get_source(item);
 | 
				
			||||||
	struct cmd_find_state	 target;
 | 
						struct cmd_find_state	 target;
 | 
				
			||||||
	const char		*tflag = args_get(args, 't');
 | 
						const char		*tflag = args_get(args, 't');
 | 
				
			||||||
	struct session		*src;
 | 
						struct session		*src = source->s;
 | 
				
			||||||
	struct session		*dst;
 | 
						struct session		*dst;
 | 
				
			||||||
	struct winlink		*wl;
 | 
						struct winlink		*wl = source->wl;
 | 
				
			||||||
	char			*cause;
 | 
						char			*cause;
 | 
				
			||||||
	int			 idx, kflag, dflag, sflag;
 | 
						int			 idx, kflag, dflag, sflag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -83,9 +83,7 @@ cmd_move_window_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	if (cmd_find_target(&target, item, tflag, CMD_FIND_WINDOW,
 | 
						if (cmd_find_target(&target, item, tflag, CMD_FIND_WINDOW,
 | 
				
			||||||
	    CMD_FIND_WINDOW_INDEX) != 0)
 | 
						    CMD_FIND_WINDOW_INDEX) != 0)
 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
							return (CMD_RETURN_ERROR);
 | 
				
			||||||
	src = source->s;
 | 
					 | 
				
			||||||
	dst = target.s;
 | 
						dst = target.s;
 | 
				
			||||||
	wl = source->wl;
 | 
					 | 
				
			||||||
	idx = target.idx;
 | 
						idx = target.idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kflag = args_has(args, 'k');
 | 
						kflag = args_has(args, 'k');
 | 
				
			||||||
@@ -93,12 +91,16 @@ cmd_move_window_exec(struct cmd *self, struct cmdq_item *item)
 | 
				
			|||||||
	sflag = args_has(args, 's');
 | 
						sflag = args_has(args, 's');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (args_has(args, 'a')) {
 | 
						if (args_has(args, 'a')) {
 | 
				
			||||||
		if ((idx = winlink_shuffle_up(dst, dst->curw)) == -1)
 | 
							if (target.wl != NULL)
 | 
				
			||||||
 | 
								idx = winlink_shuffle_up(dst, target.wl);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								idx = winlink_shuffle_up(dst, dst->curw);
 | 
				
			||||||
 | 
							if (idx == -1)
 | 
				
			||||||
			return (CMD_RETURN_ERROR);
 | 
								return (CMD_RETURN_ERROR);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) {
 | 
						if (server_link_window(src, wl, dst, idx, kflag, !dflag, &cause) != 0) {
 | 
				
			||||||
		cmdq_error(item, "can't link window: %s", cause);
 | 
							cmdq_error(item, "%s", cause);
 | 
				
			||||||
		free(cause);
 | 
							free(cause);
 | 
				
			||||||
		return (CMD_RETURN_ERROR);
 | 
							return (CMD_RETURN_ERROR);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1714,7 +1714,7 @@ from which the layout was originally defined.
 | 
				
			|||||||
Commands related to windows and panes are as follows:
 | 
					Commands related to windows and panes are as follows:
 | 
				
			||||||
.Bl -tag -width Ds
 | 
					.Bl -tag -width Ds
 | 
				
			||||||
.It Xo Ic break-pane
 | 
					.It Xo Ic break-pane
 | 
				
			||||||
.Op Fl dP
 | 
					.Op Fl adP
 | 
				
			||||||
.Op Fl F Ar format
 | 
					.Op Fl F Ar format
 | 
				
			||||||
.Op Fl n Ar window-name
 | 
					.Op Fl n Ar window-name
 | 
				
			||||||
.Op Fl s Ar src-pane
 | 
					.Op Fl s Ar src-pane
 | 
				
			||||||
@@ -1725,6 +1725,10 @@ Break
 | 
				
			|||||||
.Ar src-pane
 | 
					.Ar src-pane
 | 
				
			||||||
off from its containing window to make it the only pane in
 | 
					off from its containing window to make it the only pane in
 | 
				
			||||||
.Ar dst-window .
 | 
					.Ar dst-window .
 | 
				
			||||||
 | 
					With
 | 
				
			||||||
 | 
					.Fl a ,
 | 
				
			||||||
 | 
					the window is moved to the next index up (following windows
 | 
				
			||||||
 | 
					are moved if necessary).
 | 
				
			||||||
If
 | 
					If
 | 
				
			||||||
.Fl d
 | 
					.Fl d
 | 
				
			||||||
is given, the new window does not become the current window.
 | 
					is given, the new window does not become the current window.
 | 
				
			||||||
@@ -1873,12 +1877,15 @@ The following keys may be used in tree mode:
 | 
				
			|||||||
.It Li "<" Ta "Scroll list of previews left"
 | 
					.It Li "<" Ta "Scroll list of previews left"
 | 
				
			||||||
.It Li ">" Ta "Scroll list of previews right"
 | 
					.It Li ">" Ta "Scroll list of previews right"
 | 
				
			||||||
.It Li "C-s" Ta "Search by name"
 | 
					.It Li "C-s" Ta "Search by name"
 | 
				
			||||||
 | 
					.It Li "m" Ta "Set the marked pane"
 | 
				
			||||||
 | 
					.It Li "M" Ta "Clear the marked pane"
 | 
				
			||||||
.It Li "n" Ta "Repeat last search"
 | 
					.It Li "n" Ta "Repeat last search"
 | 
				
			||||||
.It Li "t" Ta "Toggle if item is tagged"
 | 
					.It Li "t" Ta "Toggle if item is tagged"
 | 
				
			||||||
.It Li "T" Ta "Tag no items"
 | 
					.It Li "T" Ta "Tag no items"
 | 
				
			||||||
.It Li "C-t" Ta "Tag all items"
 | 
					.It Li "C-t" Ta "Tag all items"
 | 
				
			||||||
.It Li "\&:" Ta "Run a command for each tagged item"
 | 
					.It Li "\&:" Ta "Run a command for each tagged item"
 | 
				
			||||||
.It Li "f" Ta "Enter a format to filter items"
 | 
					.It Li "f" Ta "Enter a format to filter items"
 | 
				
			||||||
 | 
					.It Li "H" Ta "Jump to the starting pane"
 | 
				
			||||||
.It Li "O" Ta "Change sort field"
 | 
					.It Li "O" Ta "Change sort field"
 | 
				
			||||||
.It Li "r" Ta "Reverse sort order"
 | 
					.It Li "r" Ta "Reverse sort order"
 | 
				
			||||||
.It Li "v" Ta "Toggle preview"
 | 
					.It Li "v" Ta "Toggle preview"
 | 
				
			||||||
@@ -2125,19 +2132,14 @@ See the
 | 
				
			|||||||
.Sx FORMATS
 | 
					.Sx FORMATS
 | 
				
			||||||
section.
 | 
					section.
 | 
				
			||||||
.It Xo Ic move-pane
 | 
					.It Xo Ic move-pane
 | 
				
			||||||
.Op Fl bdhv
 | 
					.Op Fl bdfhv
 | 
				
			||||||
.Op Fl l Ar size
 | 
					.Op Fl l Ar size
 | 
				
			||||||
.Op Fl s Ar src-pane
 | 
					.Op Fl s Ar src-pane
 | 
				
			||||||
.Op Fl t Ar dst-pane
 | 
					.Op Fl t Ar dst-pane
 | 
				
			||||||
.Xc
 | 
					.Xc
 | 
				
			||||||
.D1 (alias: Ic movep )
 | 
					.D1 (alias: Ic movep )
 | 
				
			||||||
Like
 | 
					Does the same as
 | 
				
			||||||
.Ic join-pane ,
 | 
					.Ic join-pane .
 | 
				
			||||||
but
 | 
					 | 
				
			||||||
.Ar src-pane
 | 
					 | 
				
			||||||
and
 | 
					 | 
				
			||||||
.Ar dst-pane
 | 
					 | 
				
			||||||
may belong to the same window.
 | 
					 | 
				
			||||||
.It Xo Ic move-window
 | 
					.It Xo Ic move-window
 | 
				
			||||||
.Op Fl ardk
 | 
					.Op Fl ardk
 | 
				
			||||||
.Op Fl s Ar src-window
 | 
					.Op Fl s Ar src-window
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								tmux.h
									
									
									
									
									
								
							@@ -2623,7 +2623,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) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user