mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Split list-panes off from list-windows.
This commit is contained in:
		
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							@@ -11,7 +11,8 @@ SRCS=	attributes.c buffer-poll.c buffer.c cfg.c client-fn.c \
 | 
			
		||||
	cmd-kill-server.c cmd-kill-session.c cmd-kill-window.c \
 | 
			
		||||
	cmd-last-window.c cmd-link-window.c cmd-list-buffers.c \
 | 
			
		||||
	cmd-list-clients.c cmd-list-commands.c cmd-list-keys.c \
 | 
			
		||||
	cmd-list-sessions.c cmd-list-windows.c cmd-list.c cmd-load-buffer.c \
 | 
			
		||||
	cmd-list-sessions.c cmd-list-windows.c cmd-list-panes.c \
 | 
			
		||||
	cmd-list.c cmd-load-buffer.c \
 | 
			
		||||
	cmd-lock-server.c cmd-lock-client.c cmd-lock-session.c \
 | 
			
		||||
	cmd-move-window.c cmd-new-session.c cmd-new-window.c \
 | 
			
		||||
	cmd-next-layout.c cmd-next-window.c cmd-paste-buffer.c \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										78
									
								
								cmd-list-panes.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								cmd-list-panes.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
/* $OpenBSD$ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
 | 
			
		||||
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * List panes on given window..
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int	cmd_list_panes_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_list_panes_entry = {
 | 
			
		||||
	"list-panes", "lsp",
 | 
			
		||||
	CMD_TARGET_WINDOW_USAGE,
 | 
			
		||||
	0, 0,
 | 
			
		||||
	cmd_target_init,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	cmd_list_panes_exec,
 | 
			
		||||
	cmd_target_free,
 | 
			
		||||
	cmd_target_print
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
cmd_list_panes_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_target_data	*data = self->data;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	struct grid		*gd;
 | 
			
		||||
	struct grid_line	*gl;
 | 
			
		||||
	u_int			 i;
 | 
			
		||||
	unsigned long long	 size;
 | 
			
		||||
	const char		*name;
 | 
			
		||||
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(wp, &wl->window->panes, entry) {
 | 
			
		||||
		gd = wp->base.grid;
 | 
			
		||||
		
 | 
			
		||||
		size = 0;
 | 
			
		||||
		for (i = 0; i < gd->hsize; i++) {
 | 
			
		||||
			gl = &gd->linedata[i];
 | 
			
		||||
			size += gl->cellsize * sizeof *gl->celldata;
 | 
			
		||||
			size += gl->utf8size * sizeof *gl->utf8data;
 | 
			
		||||
		}
 | 
			
		||||
		size += gd->hsize * sizeof *gd->linedata;
 | 
			
		||||
		
 | 
			
		||||
		name = NULL;
 | 
			
		||||
		if (wp->fd != -1)
 | 
			
		||||
			name = ttyname(wp->fd);
 | 
			
		||||
		if (name == NULL)
 | 
			
		||||
			name = "unknown";
 | 
			
		||||
		ctx->print(ctx, "%s [%ux%u] [history %u/%u, %llu bytes]",
 | 
			
		||||
		    name, wp->sx, wp->sy, gd->hsize, gd->hlimit, size);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
@@ -45,42 +45,13 @@ cmd_list_windows_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	struct cmd_target_data	*data = self->data;
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
	struct window		*w;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	struct grid		*gd;
 | 
			
		||||
	struct grid_line	*gl;
 | 
			
		||||
	u_int			 i;
 | 
			
		||||
	unsigned long long	 size;
 | 
			
		||||
	const char		*name;
 | 
			
		||||
 | 
			
		||||
	if ((s = cmd_find_session(ctx, data->target)) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	RB_FOREACH(wl, winlinks, &s->windows) {
 | 
			
		||||
		w = wl->window;
 | 
			
		||||
		ctx->print(ctx,
 | 
			
		||||
		    "%3d: %s [%ux%u]", wl->idx, w->name, w->sx, w->sy);
 | 
			
		||||
 | 
			
		||||
		TAILQ_FOREACH(wp, &w->panes, entry) {
 | 
			
		||||
			gd = wp->base.grid;
 | 
			
		||||
 | 
			
		||||
			size = 0;
 | 
			
		||||
			for (i = 0; i < gd->hsize; i++) {
 | 
			
		||||
				gl = &gd->linedata[i];
 | 
			
		||||
				size += gl->cellsize * sizeof *gl->celldata;
 | 
			
		||||
				size += gl->utf8size * sizeof *gl->utf8data;
 | 
			
		||||
			}
 | 
			
		||||
			size += gd->hsize * sizeof *gd->linedata;
 | 
			
		||||
 | 
			
		||||
			name = NULL;
 | 
			
		||||
			if (wp->fd != -1)
 | 
			
		||||
				name = ttyname(wp->fd);
 | 
			
		||||
			if (name == NULL)
 | 
			
		||||
				name = "unknown";
 | 
			
		||||
			ctx->print(ctx,
 | 
			
		||||
			    "     %s [%ux%u] [history %u/%u, %llu bytes]",
 | 
			
		||||
			    name, wp->sx, wp->sy, gd->hsize, gd->hlimit, size);
 | 
			
		||||
		}
 | 
			
		||||
		ctx->print(ctx, "%d: %s [%ux%u]",
 | 
			
		||||
		    wl->idx, wl->window->name, wl->window->sx, wl->window->sy);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								cmd.c
									
									
									
									
									
								
							@@ -58,6 +58,7 @@ const struct cmd_entry *cmd_table[] = {
 | 
			
		||||
	&cmd_list_clients_entry,
 | 
			
		||||
	&cmd_list_commands_entry,
 | 
			
		||||
	&cmd_list_keys_entry,
 | 
			
		||||
	&cmd_list_panes_entry,
 | 
			
		||||
	&cmd_list_sessions_entry,
 | 
			
		||||
	&cmd_list_windows_entry,
 | 
			
		||||
	&cmd_load_buffer_entry,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tmux.1
									
									
									
									
									
								
							@@ -775,6 +775,10 @@ 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
 | 
			
		||||
.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
 | 
			
		||||
.D1 (alias: Ic lsw )
 | 
			
		||||
List windows in the current session or in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1367,6 +1367,7 @@ extern const struct cmd_entry cmd_list_buffers_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_clients_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_commands_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_keys_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_panes_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_sessions_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_windows_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_load_buffer_entry;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user