mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Add -a and -s options to lsp to list all panes in the server or session
respectively. Likewise add -s to lsw. From Ben Boeckel.
This commit is contained in:
		@@ -28,10 +28,14 @@
 | 
			
		||||
 | 
			
		||||
int	cmd_list_panes_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
void	cmd_list_panes_server(struct cmd_ctx *);
 | 
			
		||||
void	cmd_list_panes_session(struct session *, struct cmd_ctx *);
 | 
			
		||||
void	cmd_list_panes_window(struct winlink *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_list_panes_entry = {
 | 
			
		||||
	"list-panes", "lsp",
 | 
			
		||||
	"t:", 0, 0,
 | 
			
		||||
	CMD_TARGET_WINDOW_USAGE,
 | 
			
		||||
	"ast:", 0, 0,
 | 
			
		||||
	"[-as] [-t target]",
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -41,17 +45,54 @@ const struct cmd_entry cmd_list_panes_entry = {
 | 
			
		||||
int
 | 
			
		||||
cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct args		*args = self->args;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
	struct args	*args = self->args;
 | 
			
		||||
	struct session	*s;
 | 
			
		||||
	struct winlink	*wl;
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'a'))
 | 
			
		||||
		cmd_list_panes_server(ctx);
 | 
			
		||||
	else if (args_has(args, 's')) {
 | 
			
		||||
		s = cmd_find_session(ctx, args_get(args, 't'));
 | 
			
		||||
		if (s == NULL)
 | 
			
		||||
			return (-1);
 | 
			
		||||
		cmd_list_panes_session(s, ctx);
 | 
			
		||||
	} else {
 | 
			
		||||
		wl = cmd_find_window(ctx, args_get(args, 't'), NULL);
 | 
			
		||||
		if (wl == NULL)
 | 
			
		||||
			return (-1);
 | 
			
		||||
		cmd_list_panes_window(wl, ctx);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_panes_server(struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct session	*s;
 | 
			
		||||
 | 
			
		||||
	RB_FOREACH(s, sessions, &sessions)
 | 
			
		||||
		cmd_list_panes_session(s, ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_panes_session(struct session *s, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct winlink	*wl;
 | 
			
		||||
 | 
			
		||||
	RB_FOREACH(wl, winlinks, &s->windows)
 | 
			
		||||
		cmd_list_panes_window(wl, ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_panes_window(struct winlink *wl, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	struct grid		*gd;
 | 
			
		||||
	struct grid_line	*gl;
 | 
			
		||||
	u_int			 i, n;
 | 
			
		||||
	unsigned long long	 size;
 | 
			
		||||
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	n = 0;
 | 
			
		||||
	TAILQ_FOREACH(wp, &wl->window->panes, entry) {
 | 
			
		||||
		gd = wp->base.grid;
 | 
			
		||||
@@ -64,12 +105,11 @@ cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		}
 | 
			
		||||
		size += gd->hsize * sizeof *gd->linedata;
 | 
			
		||||
 | 
			
		||||
		ctx->print(ctx, "%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s",
 | 
			
		||||
		ctx->print(ctx,
 | 
			
		||||
		    "%u: [%ux%u] [history %u/%u, %llu bytes] %%%u%s%s",
 | 
			
		||||
		    n, wp->sx, wp->sy, gd->hsize, gd->hlimit, size, wp->id,
 | 
			
		||||
		    wp == wp->window->active ? " (active)" : "",
 | 
			
		||||
		    wp->fd == -1 ? " (dead)" : "");
 | 
			
		||||
		n++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,10 +28,13 @@
 | 
			
		||||
 | 
			
		||||
int	cmd_list_windows_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
void	cmd_list_windows_server(struct cmd_ctx *);
 | 
			
		||||
void	cmd_list_windows_session(struct session *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_list_windows_entry = {
 | 
			
		||||
	"list-windows", "lsw",
 | 
			
		||||
	"t:", 0, 0,
 | 
			
		||||
	CMD_TARGET_SESSION_USAGE,
 | 
			
		||||
	"at:", 0, 0,
 | 
			
		||||
	"[-a] " CMD_TARGET_SESSION_USAGE,
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -43,12 +46,34 @@ cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct args	*args = self->args;
 | 
			
		||||
	struct session	*s;
 | 
			
		||||
 | 
			
		||||
	if (args_has(args, 'a'))
 | 
			
		||||
		cmd_list_windows_server(ctx);
 | 
			
		||||
	else {
 | 
			
		||||
		s = cmd_find_session(ctx, args_get(args, 't'));
 | 
			
		||||
		if (s == NULL)
 | 
			
		||||
			return (-1);
 | 
			
		||||
		cmd_list_windows_session(s, ctx);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_windows_server(struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct session	*s;
 | 
			
		||||
 | 
			
		||||
	RB_FOREACH(s, sessions, &sessions)
 | 
			
		||||
		cmd_list_windows_session(s, ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_windows_session(struct session *s, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct winlink	*wl;
 | 
			
		||||
	char		*layout;
 | 
			
		||||
 | 
			
		||||
	if ((s = cmd_find_session(ctx, args_get(args, 't'))) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	RB_FOREACH(wl, winlinks, &s->windows) {
 | 
			
		||||
		layout = layout_dump(wl->window);
 | 
			
		||||
		ctx->print(ctx, "%d: %s [%ux%u] [layout %s]%s",
 | 
			
		||||
@@ -56,6 +81,4 @@ cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		    layout, wl == s->curw ? " (active)" : "");
 | 
			
		||||
		xfree(layout);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1115,13 +1115,33 @@ exists, it is killed, otherwise an error is generated.
 | 
			
		||||
If
 | 
			
		||||
.Fl d
 | 
			
		||||
is given, the newly linked window is not selected.
 | 
			
		||||
.It Ic list-panes Op Fl t Ar target-window
 | 
			
		||||
.It Xo Ic list-panes
 | 
			
		||||
.Op Fl as
 | 
			
		||||
.Op Fl t Ar target
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic lsp )
 | 
			
		||||
List the panes in the current window or in
 | 
			
		||||
.Ar target-window .
 | 
			
		||||
.It Ic list-windows Op Fl t Ar target-session
 | 
			
		||||
If
 | 
			
		||||
.Fl a
 | 
			
		||||
is given,
 | 
			
		||||
.Ar target
 | 
			
		||||
is ignored and all panes on the server are listed.
 | 
			
		||||
If
 | 
			
		||||
.Fl s
 | 
			
		||||
is given,
 | 
			
		||||
.Ar target
 | 
			
		||||
is a session (or the current session).
 | 
			
		||||
If neither is given,
 | 
			
		||||
.Ar target
 | 
			
		||||
is a window (or the current window).
 | 
			
		||||
.It Xo Ic list-windows
 | 
			
		||||
.Op Fl a
 | 
			
		||||
.Op Fl t Ar target-session
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic lsw )
 | 
			
		||||
List windows in the current session or in
 | 
			
		||||
If
 | 
			
		||||
.Fl a
 | 
			
		||||
is given, list all windows on the server.
 | 
			
		||||
Otherwise, list windows in the current session or in
 | 
			
		||||
.Ar target-session .
 | 
			
		||||
.It Xo Ic move-window
 | 
			
		||||
.Op Fl dk
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user