mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Swap in new paste buffer code and add a couple more commands.
This commit is contained in:
		
							
								
								
									
										13
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								CHANGES
									
									
									
									
									
								
							@@ -1,5 +1,16 @@
 | 
			
		||||
20 June 2008
 | 
			
		||||
 | 
			
		||||
* Initial buffer improvements. Each session has a stack of buffers and each
 | 
			
		||||
  buffer command takes a -b option to manipulate items on the stack. If -b
 | 
			
		||||
  is omitted, the top entry is used. The following commands are currently 
 | 
			
		||||
  available:
 | 
			
		||||
 | 
			
		||||
	set-buffer [-b index] [-t target-session] string
 | 
			
		||||
	paste-buffer [-d] [-b index] [-t target-window]
 | 
			
		||||
	delete-buffer [-b index] [-t target-session]
 | 
			
		||||
	show-buffers [-t target-session]
 | 
			
		||||
 | 
			
		||||
  -d to paste-buffer deletes the buffer after pasting it.
 | 
			
		||||
* New option, display-time, sets the time status line messages stay on screen
 | 
			
		||||
  (unless a key is pressed). Set in milliseconds, default is 750 (0.75 seconds).
 | 
			
		||||
  The timer is only checked every 100 ms or so.
 | 
			
		||||
@@ -517,4 +528,4 @@
 | 
			
		||||
  (including mutt, emacs). No status bar yet and no key remapping or other
 | 
			
		||||
  customisation.
 | 
			
		||||
 | 
			
		||||
$Id: CHANGES,v 1.130 2008-06-19 23:24:40 nicm Exp $
 | 
			
		||||
$Id: CHANGES,v 1.131 2008-06-20 17:31:48 nicm Exp $
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# $Id: Makefile,v 1.64 2008-06-20 08:36:20 nicm Exp $
 | 
			
		||||
# $Id: Makefile,v 1.65 2008-06-20 17:31:48 nicm Exp $
 | 
			
		||||
 | 
			
		||||
.SUFFIXES: .c .o .y .h
 | 
			
		||||
.PHONY: clean update-index.html upload-index.html
 | 
			
		||||
@@ -31,7 +31,7 @@ SRCS= tmux.c server.c server-msg.c server-fn.c buffer.c buffer-poll.c status.c \
 | 
			
		||||
      cmd-paste-buffer.c cmd-new-session.c cmd-start-server.c \
 | 
			
		||||
      cmd-kill-server.c cmd-set-window-option.c cmd-show-options.c \
 | 
			
		||||
      cmd-show-window-options.c cmd-command-prompt.c cmd-set-buffer.c \
 | 
			
		||||
      cmd-show-buffer.c \
 | 
			
		||||
      cmd-show-buffer.c cmd-list-buffers.c cmd-delete-buffer.c \
 | 
			
		||||
      window-scroll.c window-more.c window-copy.c options.c paste.c \
 | 
			
		||||
      tty.c tty-keys.c tty-write.c screen-write.c screen-redraw.c
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								TODO
									
									
									
									
									
								
							@@ -77,13 +77,15 @@
 | 
			
		||||
- list-keys should be sorted
 | 
			
		||||
---
 | 
			
		||||
buffer stack. buffer numbered 0 is top and ascending
 | 
			
		||||
 | 
			
		||||
where -b number == top if missing:
 | 
			
		||||
paste-buffer -b number 
 | 
			
		||||
delete-buffer -b number
 | 
			
		||||
set-buffer -b number string
 | 
			
		||||
---
 | 
			
		||||
save-buffer -b number filename
 | 
			
		||||
load-buffer -b number filename
 | 
			
		||||
copy-buffer (from other session)
 | 
			
		||||
---
 | 
			
		||||
set-buffer -b number string
 | 
			
		||||
show-buffer -n number
 | 
			
		||||
paste-buffer -b number 
 | 
			
		||||
delete-buffer -b number
 | 
			
		||||
show-buffers
 | 
			
		||||
---
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								cmd-delete-buffer.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								cmd-delete-buffer.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
/* $Id: cmd-delete-buffer.c,v 1.1 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 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 <getopt.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Delete a paste buffer.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void	cmd_delete_buffer_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_delete_buffer_entry = {
 | 
			
		||||
	"delete-buffer", "deleteb",
 | 
			
		||||
	CMD_BUFFER_SESSION_USAGE,
 | 
			
		||||
	0,
 | 
			
		||||
	cmd_buffer_init,
 | 
			
		||||
	cmd_buffer_parse,
 | 
			
		||||
	cmd_delete_buffer_exec,
 | 
			
		||||
	cmd_buffer_send,
 | 
			
		||||
	cmd_buffer_recv,
 | 
			
		||||
	cmd_buffer_free,
 | 
			
		||||
	cmd_buffer_print
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_delete_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_buffer_data	*data = self->data;
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
 | 
			
		||||
	if ((s = cmd_find_session(ctx, data->target)) == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (data->buffer == -1)
 | 
			
		||||
		paste_free_top(&s->buffers);
 | 
			
		||||
	else {
 | 
			
		||||
		if (paste_free_index(&s->buffers, data->buffer) != 0)
 | 
			
		||||
			ctx->error(ctx, "no buffer %d", data->buffer);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								cmd-list-buffers.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								cmd-list-buffers.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
/* $Id: cmd-list-buffers.c,v 1.1 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 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 <string.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * List paste buffers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void	cmd_list_buffers_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_list_buffers_entry = {
 | 
			
		||||
	"list-buffers", "lsb",
 | 
			
		||||
	CMD_TARGET_SESSION_USAGE,
 | 
			
		||||
	0,
 | 
			
		||||
	cmd_target_init,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	cmd_list_buffers_exec,
 | 
			
		||||
	cmd_target_send,
 | 
			
		||||
	cmd_target_recv,
 | 
			
		||||
	cmd_target_free,
 | 
			
		||||
	cmd_target_print
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_target_data	*data = self->data;
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
	u_int			 idx;
 | 
			
		||||
	char			 tmp[16], *tim;
 | 
			
		||||
	size_t			 in, out;
 | 
			
		||||
 | 
			
		||||
	if ((s = cmd_find_session(ctx, data->target)) == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	idx = 0;
 | 
			
		||||
	while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
 | 
			
		||||
		in = out = 0;
 | 
			
		||||
		while (out < (sizeof tmp) - 1 && pb->data[in] != '\0') {
 | 
			
		||||
			if (pb->data[in] > 31 && pb->data[in] != 127)
 | 
			
		||||
				tmp[out++] = pb->data[in];
 | 
			
		||||
			in++;
 | 
			
		||||
		}
 | 
			
		||||
		tmp[out] = '\0';
 | 
			
		||||
		if (out == (sizeof tmp) - 1) {
 | 
			
		||||
			tmp[out - 1] = '.';
 | 
			
		||||
			tmp[out - 2] = '.';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		tim = ctime(&pb->ts.tv_sec);
 | 
			
		||||
		*strchr(tim, '\n') = '\0';
 | 
			
		||||
 | 
			
		||||
		ctx->print(ctx, "%d: %zu bytes "
 | 
			
		||||
		    "(created %s): \"%s\"", idx, strlen(pb->data), tim, tmp);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-paste-buffer.c,v 1.8 2008-06-05 21:25:00 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd-paste-buffer.c,v 1.9 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -29,30 +29,45 @@
 | 
			
		||||
void	cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_paste_buffer_entry = {
 | 
			
		||||
	"paste-buffer", "paste",
 | 
			
		||||
	CMD_TARGET_WINDOW_USAGE,
 | 
			
		||||
	0,
 | 
			
		||||
	cmd_target_init,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	"paste-buffer", "pasteb",
 | 
			
		||||
	CMD_BUFFER_WINDOW_USAGE,
 | 
			
		||||
	CMD_DFLAG,
 | 
			
		||||
	cmd_buffer_init,
 | 
			
		||||
	cmd_buffer_parse,
 | 
			
		||||
	cmd_paste_buffer_exec,
 | 
			
		||||
	cmd_target_send,
 | 
			
		||||
	cmd_target_recv,
 | 
			
		||||
	cmd_target_free,
 | 
			
		||||
	cmd_target_print
 | 
			
		||||
	cmd_buffer_send,
 | 
			
		||||
	cmd_buffer_recv,
 | 
			
		||||
	cmd_buffer_free,
 | 
			
		||||
	cmd_buffer_print
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_target_data	*data = self->data;
 | 
			
		||||
	struct cmd_buffer_data	*data = self->data;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
	
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (paste_buffer != NULL && *paste_buffer != '\0') {
 | 
			
		||||
		buffer_write(
 | 
			
		||||
		    wl->window->out, paste_buffer, strlen(paste_buffer));
 | 
			
		||||
	if (data->buffer == -1)
 | 
			
		||||
		pb = paste_get_top(&s->buffers);
 | 
			
		||||
	else {
 | 
			
		||||
		if ((pb = paste_get_top(&s->buffers)) == NULL)
 | 
			
		||||
			ctx->error(ctx, "no buffer %d", data->buffer);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (pb != NULL)
 | 
			
		||||
		buffer_write(wl->window->out, pb->data, strlen(pb->data));
 | 
			
		||||
 | 
			
		||||
	/* Delete the buffer if -d. */
 | 
			
		||||
	if (ctx->flags & CMD_DFLAG) {
 | 
			
		||||
		if (data->buffer == -1)
 | 
			
		||||
			paste_free_top(&s->buffers);
 | 
			
		||||
		else
 | 
			
		||||
			paste_free_index(&s->buffers, data->buffer);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-send-keys.c,v 1.12 2008-06-10 20:28:42 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd-send-keys.c,v 1.13 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -121,7 +121,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < data->nkeys; i++)
 | 
			
		||||
		window_key(wl->window, data->keys[i]);
 | 
			
		||||
		window_key(wl->window, ctx->curclient, data->keys[i]);
 | 
			
		||||
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-send-prefix.c,v 1.16 2008-06-19 22:04:02 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd-send-prefix.c,v 1.17 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -49,7 +49,8 @@ cmd_send_prefix_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	window_key(wl->window, options_get_key(&s->options, "prefix"));
 | 
			
		||||
	window_key(
 | 
			
		||||
	    wl->window, ctx->curclient, options_get_key(&s->options, "prefix"));
 | 
			
		||||
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd.c,v 1.51 2008-06-20 08:36:20 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd.c,v 1.52 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -31,6 +31,7 @@ const struct cmd_entry *cmd_table[] = {
 | 
			
		||||
	&cmd_bind_key_entry,
 | 
			
		||||
	&cmd_command_prompt_entry,
 | 
			
		||||
	&cmd_copy_mode_entry,
 | 
			
		||||
	&cmd_delete_buffer_entry,
 | 
			
		||||
	&cmd_detach_client_entry,
 | 
			
		||||
	&cmd_has_session_entry,
 | 
			
		||||
	&cmd_kill_server_entry,
 | 
			
		||||
@@ -38,6 +39,7 @@ const struct cmd_entry *cmd_table[] = {
 | 
			
		||||
	&cmd_kill_window_entry,
 | 
			
		||||
	&cmd_last_window_entry,
 | 
			
		||||
	&cmd_link_window_entry,
 | 
			
		||||
	&cmd_list_buffers_entry,
 | 
			
		||||
	&cmd_list_clients_entry,
 | 
			
		||||
	&cmd_list_keys_entry,
 | 
			
		||||
	&cmd_list_sessions_entry,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: key-bindings.c,v 1.33 2008-06-19 21:28:41 nicm Exp $ */
 | 
			
		||||
/* $Id: key-bindings.c,v 1.34 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -108,8 +108,9 @@ key_bindings_init(void)
 | 
			
		||||
		{ '=', &cmd_scroll_mode_entry },
 | 
			
		||||
		{ '[', &cmd_copy_mode_entry },
 | 
			
		||||
		{ ']', &cmd_paste_buffer_entry },
 | 
			
		||||
		{ '#', &cmd_list_buffers_entry },
 | 
			
		||||
		{ '-', &cmd_delete_buffer_entry },
 | 
			
		||||
		{ ':', &cmd_command_prompt_entry },
 | 
			
		||||
		{ ';', &cmd_command_prompt_entry },
 | 
			
		||||
		{ META, &cmd_send_prefix_entry },
 | 
			
		||||
	};
 | 
			
		||||
	u_int		 i;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								paste.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								paste.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: paste.c,v 1.1 2008-06-20 08:36:20 nicm Exp $ */
 | 
			
		||||
/* $Id: paste.c,v 1.2 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -105,7 +105,7 @@ paste_add(struct paste_stack *ps, const char *data)
 | 
			
		||||
	ARRAY_INSERT(ps, 0, pb);
 | 
			
		||||
 | 
			
		||||
	pb->data = xstrdup(data);
 | 
			
		||||
	if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
 | 
			
		||||
	if (clock_gettime(CLOCK_REALTIME, &pb->ts) != 0)
 | 
			
		||||
		fatal("clock_gettime");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -121,7 +121,7 @@ paste_replace(struct paste_stack *ps, u_int idx, const char *data)
 | 
			
		||||
	xfree(pb->data);
 | 
			
		||||
 | 
			
		||||
	pb->data = xstrdup(data);
 | 
			
		||||
	if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
 | 
			
		||||
	if (clock_gettime(CLOCK_REALTIME, &pb->ts) != 0)
 | 
			
		||||
		fatal("clock_gettime");
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								server.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: server.c,v 1.73 2008-06-20 06:36:01 nicm Exp $ */
 | 
			
		||||
/* $Id: server.c,v 1.74 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -542,7 +542,7 @@ server_handle_client(struct client *c)
 | 
			
		||||
		} else if (key == prefix)
 | 
			
		||||
			c->flags |= CLIENT_PREFIX;
 | 
			
		||||
		else
 | 
			
		||||
			window_key(w, key);
 | 
			
		||||
			window_key(w, c, key);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								tmux.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.c,v 1.64 2008-06-19 23:20:45 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.c,v 1.65 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -48,7 +48,6 @@ volatile sig_atomic_t sigterm;
 | 
			
		||||
 | 
			
		||||
char		*cfg_file;
 | 
			
		||||
struct options	 global_options;
 | 
			
		||||
char		*paste_buffer;
 | 
			
		||||
 | 
			
		||||
int		 debug_level;
 | 
			
		||||
int		 be_quiet;
 | 
			
		||||
@@ -222,8 +221,6 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_number(&global_options, "status-interval", 15);
 | 
			
		||||
	options_set_number(&global_options, "set-titles", 1);
 | 
			
		||||
 | 
			
		||||
	paste_buffer = NULL;
 | 
			
		||||
 | 
			
		||||
	if (cfg_file == NULL) {
 | 
			
		||||
		home = getenv("HOME");
 | 
			
		||||
		if (home == NULL || *home == '\0') {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.157 2008-06-20 08:36:20 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.158 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -519,11 +519,12 @@ struct input_ctx {
 | 
			
		||||
 * Window mode. Windows can be in several modes and this is used to call the
 | 
			
		||||
 * right function to handle input and output.
 | 
			
		||||
 */
 | 
			
		||||
struct client;
 | 
			
		||||
struct window_mode {
 | 
			
		||||
	struct screen *(*init)(struct window *);
 | 
			
		||||
	void	(*free)(struct window *);
 | 
			
		||||
	void	(*resize)(struct window *, u_int, u_int);
 | 
			
		||||
	void	(*key)(struct window *, int);
 | 
			
		||||
	void	(*key)(struct window *, struct client *, int);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Window structure. */
 | 
			
		||||
@@ -593,7 +594,7 @@ struct options {
 | 
			
		||||
/* Paste buffer. */
 | 
			
		||||
struct paste_buffer {
 | 
			
		||||
     	char		*data;
 | 
			
		||||
	struct timespec	 created;
 | 
			
		||||
	struct timespec	 ts;
 | 
			
		||||
};
 | 
			
		||||
ARRAY_DECL(paste_stack, struct paste_buffer *);
 | 
			
		||||
 | 
			
		||||
@@ -819,7 +820,6 @@ extern volatile sig_atomic_t sigwinch;
 | 
			
		||||
extern volatile sig_atomic_t sigterm;
 | 
			
		||||
extern struct options global_options;
 | 
			
		||||
extern char	*cfg_file;
 | 
			
		||||
extern char	*paste_buffer;
 | 
			
		||||
extern int	 debug_level;
 | 
			
		||||
extern int	 be_quiet;
 | 
			
		||||
void		 logfile(const char *);
 | 
			
		||||
@@ -900,6 +900,7 @@ extern const struct cmd_entry cmd_attach_session_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_bind_key_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_command_prompt_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_copy_mode_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_delete_buffer_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_detach_client_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_has_session_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_kill_server_entry;
 | 
			
		||||
@@ -907,6 +908,7 @@ extern const struct cmd_entry cmd_kill_session_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_kill_window_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_last_window_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_link_window_entry;
 | 
			
		||||
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_keys_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_list_sessions_entry;
 | 
			
		||||
@@ -1158,7 +1160,7 @@ int		 window_resize(struct window *, u_int, u_int);
 | 
			
		||||
int		 window_set_mode(struct window *, const struct window_mode *);
 | 
			
		||||
void		 window_reset_mode(struct window *);
 | 
			
		||||
void		 window_parse(struct window *);
 | 
			
		||||
void		 window_key(struct window *, int);
 | 
			
		||||
void		 window_key(struct window *, struct client *, int);
 | 
			
		||||
 | 
			
		||||
/* window-copy.c */
 | 
			
		||||
extern const struct window_mode window_copy_mode;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-copy.c,v 1.19 2008-06-19 19:40:35 nicm Exp $ */
 | 
			
		||||
/* $Id: window-copy.c,v 1.20 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
struct screen *window_copy_init(struct window *);
 | 
			
		||||
void	window_copy_free(struct window *);
 | 
			
		||||
void	window_copy_resize(struct window *, u_int, u_int);
 | 
			
		||||
void	window_copy_key(struct window *, int);
 | 
			
		||||
void	window_copy_key(struct window *, struct client *, int);
 | 
			
		||||
 | 
			
		||||
void	window_copy_redraw_lines(struct window *, u_int, u_int);
 | 
			
		||||
void	window_copy_redraw_screen(struct window *);
 | 
			
		||||
@@ -41,7 +41,7 @@ void	window_copy_write_columns(
 | 
			
		||||
void	window_copy_update_cursor(struct window *);
 | 
			
		||||
void	window_copy_start_selection(struct window *);
 | 
			
		||||
int	window_copy_update_selection(struct window *);
 | 
			
		||||
void	window_copy_copy_selection(struct window *);
 | 
			
		||||
void	window_copy_copy_selection(struct window *, struct client *);
 | 
			
		||||
void	window_copy_copy_line(
 | 
			
		||||
	    struct window *, char **, size_t *, size_t *, u_int, u_int, u_int);
 | 
			
		||||
u_int	window_copy_find_length(struct window *, u_int);
 | 
			
		||||
@@ -126,7 +126,7 @@ window_copy_resize(struct window *w, u_int sx, u_int sy)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_copy_key(struct window *w, int key)
 | 
			
		||||
window_copy_key(struct window *w, struct client *c, int key)
 | 
			
		||||
{
 | 
			
		||||
	struct window_copy_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
@@ -181,8 +181,10 @@ window_copy_key(struct window *w, int key)
 | 
			
		||||
		break;
 | 
			
		||||
	case '\027':	/* C-w */
 | 
			
		||||
 	case '\r':	/* enter */
 | 
			
		||||
		window_copy_copy_selection(w);
 | 
			
		||||
		window_reset_mode(w);
 | 
			
		||||
		if (c != NULL && c->session != NULL) {
 | 
			
		||||
			window_copy_copy_selection(w, c);
 | 
			
		||||
			window_reset_mode(w);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case '0':
 | 
			
		||||
	case '\001':	/* C-a */
 | 
			
		||||
@@ -354,7 +356,7 @@ window_copy_update_selection(struct window *w)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_copy_copy_selection(struct window *w)
 | 
			
		||||
window_copy_copy_selection(struct window *w, struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	struct window_copy_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
@@ -412,9 +414,9 @@ window_copy_copy_selection(struct window *w)
 | 
			
		||||
	if (off != 0)
 | 
			
		||||
		buf[off - 1] = '\0';
 | 
			
		||||
 | 
			
		||||
	if (paste_buffer != NULL)
 | 
			
		||||
		xfree(paste_buffer);
 | 
			
		||||
	paste_buffer = buf;
 | 
			
		||||
	/* Add the buffer to the stack. */
 | 
			
		||||
	paste_add(&c->session->buffers, buf);
 | 
			
		||||
	xfree(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-more.c,v 1.12 2008-06-18 22:21:51 nicm Exp $ */
 | 
			
		||||
/* $Id: window-more.c,v 1.13 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
struct screen *window_more_init(struct window *);
 | 
			
		||||
void	window_more_free(struct window *);
 | 
			
		||||
void	window_more_resize(struct window *, u_int, u_int);
 | 
			
		||||
void	window_more_key(struct window *, int);
 | 
			
		||||
void	window_more_key(struct window *, struct client *, int);
 | 
			
		||||
 | 
			
		||||
void	window_more_redraw_screen(struct window *);
 | 
			
		||||
void	window_more_write_line(
 | 
			
		||||
@@ -123,7 +123,7 @@ window_more_resize(struct window *w, u_int sx, u_int sy)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_more_key(struct window *w, int key)
 | 
			
		||||
window_more_key(struct window *w, unused struct client *c, int key)
 | 
			
		||||
{
 | 
			
		||||
	struct window_more_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-scroll.c,v 1.18 2008-06-03 21:42:37 nicm Exp $ */
 | 
			
		||||
/* $Id: window-scroll.c,v 1.19 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -25,7 +25,7 @@
 | 
			
		||||
struct screen *window_scroll_init(struct window *);
 | 
			
		||||
void	window_scroll_free(struct window *);
 | 
			
		||||
void	window_scroll_resize(struct window *, u_int, u_int);
 | 
			
		||||
void	window_scroll_key(struct window *, int);
 | 
			
		||||
void	window_scroll_key(struct window *, struct client *, int);
 | 
			
		||||
 | 
			
		||||
void	window_scroll_redraw_screen(struct window *);
 | 
			
		||||
void	window_scroll_write_line(
 | 
			
		||||
@@ -97,7 +97,7 @@ window_scroll_resize(struct window *w, u_int sx, u_int sy)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_scroll_key(struct window *w, int key)
 | 
			
		||||
window_scroll_key(struct window *w, unused struct client *c, int key)
 | 
			
		||||
{
 | 
			
		||||
	struct window_scroll_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								window.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window.c,v 1.44 2008-06-18 22:21:51 nicm Exp $ */
 | 
			
		||||
/* $Id: window.c,v 1.45 2008-06-20 17:31:48 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -323,10 +323,10 @@ window_parse(struct window *w)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_key(struct window *w, int key)
 | 
			
		||||
window_key(struct window *w, struct client *c, int key)
 | 
			
		||||
{
 | 
			
		||||
	if (w->mode != NULL)
 | 
			
		||||
		w->mode->key(w, key);
 | 
			
		||||
		w->mode->key(w, c, key);
 | 
			
		||||
	else
 | 
			
		||||
		input_key(w, key);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user