mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	There is no longer a need for a paste_stack struct or for global_buffers
to be global. Move to paste.c.
This commit is contained in:
		@@ -194,7 +194,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	} else {
 | 
			
		||||
		limit = options_get_number(&global_options, "buffer-limit");
 | 
			
		||||
		if (!args_has(args, 'b')) {
 | 
			
		||||
			paste_add(&global_buffers, buf, len, limit);
 | 
			
		||||
			paste_add(buf, len, limit);
 | 
			
		||||
			return (CMD_RETURN_NORMAL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -206,7 +206,7 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (paste_replace(&global_buffers, buffer, buf, len) != 0) {
 | 
			
		||||
		if (paste_replace(buffer, buf, len) != 0) {
 | 
			
		||||
			cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
			free(buf);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	utf8flag = options_get_number(&wl->window->options, "utf8");
 | 
			
		||||
 | 
			
		||||
	if (paste_get_top(&global_buffers) == NULL)
 | 
			
		||||
	if (paste_get_top() == NULL)
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
 | 
			
		||||
	if (window_pane_set_mode(wl->window->active, &window_choose_mode) != 0)
 | 
			
		||||
@@ -75,7 +75,7 @@ cmd_choose_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		action = xstrdup("paste-buffer -b '%%'");
 | 
			
		||||
 | 
			
		||||
	idx = 0;
 | 
			
		||||
	while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) {
 | 
			
		||||
	while ((pb = paste_walk_stack(&idx)) != NULL) {
 | 
			
		||||
		cdata = window_choose_data_create(TREE_OTHER, c, c->session);
 | 
			
		||||
		cdata->idx = idx - 1;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ cmd_delete_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	int		 buffer;
 | 
			
		||||
 | 
			
		||||
	if (!args_has(args, 'b')) {
 | 
			
		||||
		paste_free_top(&global_buffers);
 | 
			
		||||
		paste_free_top();
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ cmd_delete_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (paste_free_index(&global_buffers, buffer) != 0) {
 | 
			
		||||
	if (paste_free_index(buffer) != 0) {
 | 
			
		||||
		cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ cmd_list_buffers_exec(unused struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
		template = LIST_BUFFERS_TEMPLATE;
 | 
			
		||||
 | 
			
		||||
	idx = 0;
 | 
			
		||||
	while ((pb = paste_walk_stack(&global_buffers, &idx)) != NULL) {
 | 
			
		||||
	while ((pb = paste_walk_stack(&idx)) != NULL) {
 | 
			
		||||
		ft = format_create();
 | 
			
		||||
		format_add(ft, "line", "%u", idx - 1);
 | 
			
		||||
		format_paste_buffer(ft, pb, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -119,10 +119,10 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
 | 
			
		||||
	limit = options_get_number(&global_options, "buffer-limit");
 | 
			
		||||
	if (buffer == -1) {
 | 
			
		||||
		paste_add(&global_buffers, pdata, psize, limit);
 | 
			
		||||
		paste_add(pdata, psize, limit);
 | 
			
		||||
		return (CMD_RETURN_NORMAL);
 | 
			
		||||
	}
 | 
			
		||||
	if (paste_replace(&global_buffers, buffer, pdata, psize) != 0) {
 | 
			
		||||
	if (paste_replace(buffer, pdata, psize) != 0) {
 | 
			
		||||
		cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
		free(pdata);
 | 
			
		||||
		return (CMD_RETURN_ERROR);
 | 
			
		||||
@@ -164,8 +164,8 @@ cmd_load_buffer_callback(struct client *c, int closed, void *data)
 | 
			
		||||
 | 
			
		||||
	limit = options_get_number(&global_options, "buffer-limit");
 | 
			
		||||
	if (*buffer == -1)
 | 
			
		||||
		paste_add(&global_buffers, pdata, psize, limit);
 | 
			
		||||
	else if (paste_replace(&global_buffers, *buffer, pdata, psize) != 0) {
 | 
			
		||||
		paste_add(pdata, psize, limit);
 | 
			
		||||
	else if (paste_replace(*buffer, pdata, psize) != 0) {
 | 
			
		||||
		/* No context so can't use server_client_msg_error. */
 | 
			
		||||
		evbuffer_add_printf(c->stderr_data, "no buffer %d\n", *buffer);
 | 
			
		||||
		server_push_stderr(c);
 | 
			
		||||
 
 | 
			
		||||
@@ -69,9 +69,9 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (buffer == -1)
 | 
			
		||||
		pb = paste_get_top(&global_buffers);
 | 
			
		||||
		pb = paste_get_top();
 | 
			
		||||
	else {
 | 
			
		||||
		pb = paste_get_index(&global_buffers, buffer);
 | 
			
		||||
		pb = paste_get_index(buffer);
 | 
			
		||||
		if (pb == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
@@ -93,9 +93,9 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	/* Delete the buffer if -d. */
 | 
			
		||||
	if (args_has(args, 'd')) {
 | 
			
		||||
		if (buffer == -1)
 | 
			
		||||
			paste_free_top(&global_buffers);
 | 
			
		||||
			paste_free_top();
 | 
			
		||||
		else
 | 
			
		||||
			paste_free_index(&global_buffers, buffer);
 | 
			
		||||
			paste_free_index(buffer);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (CMD_RETURN_NORMAL);
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	FILE			*f;
 | 
			
		||||
 | 
			
		||||
	if (!args_has(args, 'b')) {
 | 
			
		||||
		if ((pb = paste_get_top(&global_buffers)) == NULL) {
 | 
			
		||||
		if ((pb = paste_get_top()) == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "no buffers");
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
@@ -78,7 +78,7 @@ cmd_save_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		pb = paste_get_index(&global_buffers, buffer);
 | 
			
		||||
		pb = paste_get_index(buffer);
 | 
			
		||||
		if (pb == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
 
 | 
			
		||||
@@ -66,13 +66,13 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
			free(cause);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
		pb = paste_get_index(&global_buffers, buffer);
 | 
			
		||||
		pb = paste_get_index(buffer);
 | 
			
		||||
		if (pb == NULL) {
 | 
			
		||||
			cmdq_error(cmdq, "no buffer %d", buffer);
 | 
			
		||||
			return (CMD_RETURN_ERROR);
 | 
			
		||||
		}
 | 
			
		||||
	} else if (args_has(args, 'a')) {
 | 
			
		||||
		pb = paste_get_top(&global_buffers);
 | 
			
		||||
		pb = paste_get_top();
 | 
			
		||||
		if (pb != NULL)
 | 
			
		||||
			buffer = 0;
 | 
			
		||||
	}
 | 
			
		||||
@@ -88,9 +88,9 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq)
 | 
			
		||||
	psize += newsize;
 | 
			
		||||
 | 
			
		||||
	if (buffer == -1)
 | 
			
		||||
		paste_add(&global_buffers, pdata, psize, limit);
 | 
			
		||||
		paste_add(pdata, psize, limit);
 | 
			
		||||
	else
 | 
			
		||||
		paste_replace(&global_buffers, buffer, pdata, psize);
 | 
			
		||||
		paste_replace(buffer, pdata, psize);
 | 
			
		||||
 | 
			
		||||
	return (CMD_RETURN_NORMAL);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -240,7 +240,7 @@ input_mouse(struct window_pane *wp, struct session *s, struct mouse_event *m)
 | 
			
		||||
 | 
			
		||||
	if (m->button == 1 && (m->event & MOUSE_EVENT_CLICK) &&
 | 
			
		||||
	    options_get_number(&wp->window->options, "mode-mouse") == 1) {
 | 
			
		||||
		pb = paste_get_top(&global_buffers);
 | 
			
		||||
		pb = paste_get_top();
 | 
			
		||||
		if (pb != NULL) {
 | 
			
		||||
			paste_send_pane(pb, wp, "\r",
 | 
			
		||||
			    wp->screen->mode & MODE_BRACKETPASTE);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								paste.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								paste.c
									
									
									
									
									
								
							@@ -30,46 +30,48 @@
 | 
			
		||||
 * string!
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ARRAY_DECL(, struct paste_buffer *) paste_buffers =  ARRAY_INITIALIZER;
 | 
			
		||||
 | 
			
		||||
/* Return each item of the stack in turn. */
 | 
			
		||||
struct paste_buffer *
 | 
			
		||||
paste_walk_stack(struct paste_stack *ps, u_int *idx)
 | 
			
		||||
paste_walk_stack(u_int *idx)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
	pb = paste_get_index(ps, *idx);
 | 
			
		||||
	pb = paste_get_index(*idx);
 | 
			
		||||
	(*idx)++;
 | 
			
		||||
	return (pb);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Get the top item on the stack. */
 | 
			
		||||
struct paste_buffer *
 | 
			
		||||
paste_get_top(struct paste_stack *ps)
 | 
			
		||||
paste_get_top(void)
 | 
			
		||||
{
 | 
			
		||||
	if (ARRAY_LENGTH(ps) == 0)
 | 
			
		||||
	if (ARRAY_LENGTH(&paste_buffers) == 0)
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	return (ARRAY_FIRST(ps));
 | 
			
		||||
	return (ARRAY_FIRST(&paste_buffers));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Get an item by its index. */
 | 
			
		||||
struct paste_buffer *
 | 
			
		||||
paste_get_index(struct paste_stack *ps, u_int idx)
 | 
			
		||||
paste_get_index(u_int idx)
 | 
			
		||||
{
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(ps))
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(&paste_buffers))
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	return (ARRAY_ITEM(ps, idx));
 | 
			
		||||
	return (ARRAY_ITEM(&paste_buffers, idx));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Free the top item on the stack. */
 | 
			
		||||
int
 | 
			
		||||
paste_free_top(struct paste_stack *ps)
 | 
			
		||||
paste_free_top(void)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
	if (ARRAY_LENGTH(ps) == 0)
 | 
			
		||||
	if (ARRAY_LENGTH(&paste_buffers) == 0)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	pb = ARRAY_FIRST(ps);
 | 
			
		||||
	ARRAY_REMOVE(ps, 0);
 | 
			
		||||
	pb = ARRAY_FIRST(&paste_buffers);
 | 
			
		||||
	ARRAY_REMOVE(&paste_buffers, 0);
 | 
			
		||||
 | 
			
		||||
	free(pb->data);
 | 
			
		||||
	free(pb);
 | 
			
		||||
@@ -79,15 +81,15 @@ paste_free_top(struct paste_stack *ps)
 | 
			
		||||
 | 
			
		||||
/* Free an item by index. */
 | 
			
		||||
int
 | 
			
		||||
paste_free_index(struct paste_stack *ps, u_int idx)
 | 
			
		||||
paste_free_index(u_int idx)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(ps))
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(&paste_buffers))
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	pb = ARRAY_ITEM(ps, idx);
 | 
			
		||||
	ARRAY_REMOVE(ps, idx);
 | 
			
		||||
	pb = ARRAY_ITEM(&paste_buffers, idx);
 | 
			
		||||
	ARRAY_REMOVE(&paste_buffers, idx);
 | 
			
		||||
 | 
			
		||||
	free(pb->data);
 | 
			
		||||
	free(pb);
 | 
			
		||||
@@ -100,22 +102,22 @@ paste_free_index(struct paste_stack *ps, u_int idx)
 | 
			
		||||
 * that the caller is responsible for allocating data.
 | 
			
		||||
 */
 | 
			
		||||
void
 | 
			
		||||
paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit)
 | 
			
		||||
paste_add(char *data, size_t size, u_int limit)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
	if (size == 0)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	while (ARRAY_LENGTH(ps) >= limit) {
 | 
			
		||||
		pb = ARRAY_LAST(ps);
 | 
			
		||||
	while (ARRAY_LENGTH(&paste_buffers) >= limit) {
 | 
			
		||||
		pb = ARRAY_LAST(&paste_buffers);
 | 
			
		||||
		free(pb->data);
 | 
			
		||||
		free(pb);
 | 
			
		||||
		ARRAY_TRUNC(ps, 1);
 | 
			
		||||
		ARRAY_TRUNC(&paste_buffers, 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pb = xmalloc(sizeof *pb);
 | 
			
		||||
	ARRAY_INSERT(ps, 0, pb);
 | 
			
		||||
	ARRAY_INSERT(&paste_buffers, 0, pb);
 | 
			
		||||
 | 
			
		||||
	pb->data = data;
 | 
			
		||||
	pb->size = size;
 | 
			
		||||
@@ -127,7 +129,7 @@ paste_add(struct paste_stack *ps, char *data, size_t size, u_int limit)
 | 
			
		||||
 * allocating data.
 | 
			
		||||
 */
 | 
			
		||||
int
 | 
			
		||||
paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size)
 | 
			
		||||
paste_replace(u_int idx, char *data, size_t size)
 | 
			
		||||
{
 | 
			
		||||
	struct paste_buffer	*pb;
 | 
			
		||||
 | 
			
		||||
@@ -136,10 +138,10 @@ paste_replace(struct paste_stack *ps, u_int idx, char *data, size_t size)
 | 
			
		||||
		return (0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(ps))
 | 
			
		||||
	if (idx >= ARRAY_LENGTH(&paste_buffers))
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	pb = ARRAY_ITEM(ps, idx);
 | 
			
		||||
	pb = ARRAY_ITEM(&paste_buffers, idx);
 | 
			
		||||
	free(pb->data);
 | 
			
		||||
 | 
			
		||||
	pb->data = data;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								server.c
									
									
									
									
									
								
							@@ -51,8 +51,6 @@ int		 server_shutdown;
 | 
			
		||||
struct event	 server_ev_accept;
 | 
			
		||||
struct event	 server_ev_second;
 | 
			
		||||
 | 
			
		||||
struct paste_stack global_buffers;
 | 
			
		||||
 | 
			
		||||
int		 server_create_socket(void);
 | 
			
		||||
void		 server_loop(void);
 | 
			
		||||
int		 server_should_shutdown(void);
 | 
			
		||||
@@ -147,7 +145,6 @@ server_start(int lockfd, char *lockfile)
 | 
			
		||||
	RB_INIT(&sessions);
 | 
			
		||||
	RB_INIT(&dead_sessions);
 | 
			
		||||
	TAILQ_INIT(&session_groups);
 | 
			
		||||
	ARRAY_INIT(&global_buffers);
 | 
			
		||||
	mode_key_init_trees();
 | 
			
		||||
	key_bindings_init();
 | 
			
		||||
	utf8_build();
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								status.c
									
									
									
									
									
								
							@@ -1157,7 +1157,7 @@ status_prompt_key(struct client *c, int key)
 | 
			
		||||
		c->flags |= CLIENT_STATUS;
 | 
			
		||||
		break;
 | 
			
		||||
	case MODEKEYEDIT_PASTE:
 | 
			
		||||
		if ((pb = paste_get_top(&global_buffers)) == NULL)
 | 
			
		||||
		if ((pb = paste_get_top()) == NULL)
 | 
			
		||||
			break;
 | 
			
		||||
		for (n = 0; n < pb->size; n++) {
 | 
			
		||||
			ch = (u_char) pb->data[n];
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1037,7 +1037,6 @@ struct paste_buffer {
 | 
			
		||||
	char		*data;
 | 
			
		||||
	size_t		 size;
 | 
			
		||||
};
 | 
			
		||||
ARRAY_DECL(paste_stack, struct paste_buffer *);
 | 
			
		||||
 | 
			
		||||
/* Environment variable. */
 | 
			
		||||
struct environ_entry {
 | 
			
		||||
@@ -1709,13 +1708,13 @@ void	tty_keys_free(struct tty *);
 | 
			
		||||
int	tty_keys_next(struct tty *);
 | 
			
		||||
 | 
			
		||||
/* paste.c */
 | 
			
		||||
struct paste_buffer *paste_walk_stack(struct paste_stack *, u_int *);
 | 
			
		||||
struct paste_buffer *paste_get_top(struct paste_stack *);
 | 
			
		||||
struct paste_buffer *paste_get_index(struct paste_stack *, u_int);
 | 
			
		||||
int		 paste_free_top(struct paste_stack *);
 | 
			
		||||
int		 paste_free_index(struct paste_stack *, u_int);
 | 
			
		||||
void		 paste_add(struct paste_stack *, char *, size_t, u_int);
 | 
			
		||||
int		 paste_replace(struct paste_stack *, u_int, char *, size_t);
 | 
			
		||||
struct paste_buffer *paste_walk_stack(u_int *);
 | 
			
		||||
struct paste_buffer *paste_get_top(void);
 | 
			
		||||
struct paste_buffer *paste_get_index(u_int);
 | 
			
		||||
int		 paste_free_top(void);
 | 
			
		||||
int		 paste_free_index(u_int);
 | 
			
		||||
void		 paste_add(char *, size_t, u_int);
 | 
			
		||||
int		 paste_replace(u_int, char *, size_t);
 | 
			
		||||
char		*paste_make_sample(struct paste_buffer *, int);
 | 
			
		||||
void		 paste_send_pane(struct paste_buffer *, struct window_pane *,
 | 
			
		||||
		     const char *, int);
 | 
			
		||||
@@ -1886,7 +1885,6 @@ const char *key_string_lookup_key(int);
 | 
			
		||||
/* server.c */
 | 
			
		||||
extern struct clients clients;
 | 
			
		||||
extern struct clients dead_clients;
 | 
			
		||||
extern struct paste_stack global_buffers;
 | 
			
		||||
int	 server_start(int, char *);
 | 
			
		||||
void	 server_update_socket(void);
 | 
			
		||||
void	 server_add_accept(int);
 | 
			
		||||
 
 | 
			
		||||
@@ -776,7 +776,7 @@ window_copy_key_input(struct window_pane *wp, int key)
 | 
			
		||||
		*data->inputstr = '\0';
 | 
			
		||||
		break;
 | 
			
		||||
	case MODEKEYEDIT_PASTE:
 | 
			
		||||
		if ((pb = paste_get_top(&global_buffers)) == NULL)
 | 
			
		||||
		if ((pb = paste_get_top()) == NULL)
 | 
			
		||||
			break;
 | 
			
		||||
		for (n = 0; n < pb->size; n++) {
 | 
			
		||||
			ch = (u_char) pb->data[n];
 | 
			
		||||
@@ -1465,8 +1465,8 @@ window_copy_copy_buffer(struct window_pane *wp, int idx, void *buf, size_t len)
 | 
			
		||||
 | 
			
		||||
	if (idx == -1) {
 | 
			
		||||
		limit = options_get_number(&global_options, "buffer-limit");
 | 
			
		||||
		paste_add(&global_buffers, buf, len, limit);
 | 
			
		||||
	} else if (paste_replace(&global_buffers, idx, buf, len) != 0)
 | 
			
		||||
		paste_add(buf, len, limit);
 | 
			
		||||
	} else if (paste_replace(idx, buf, len) != 0)
 | 
			
		||||
		free(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1524,13 +1524,13 @@ window_copy_append_selection(struct window_pane *wp, int idx)
 | 
			
		||||
	if (idx == -1)
 | 
			
		||||
		idx = 0;
 | 
			
		||||
 | 
			
		||||
	if (idx == 0 && paste_get_top(&global_buffers) == NULL) {
 | 
			
		||||
	if (idx == 0 && paste_get_top() == NULL) {
 | 
			
		||||
		limit = options_get_number(&global_options, "buffer-limit");
 | 
			
		||||
		paste_add(&global_buffers, buf, len, limit);
 | 
			
		||||
		paste_add(buf, len, limit);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pb = paste_get_index(&global_buffers, idx);
 | 
			
		||||
	pb = paste_get_index(idx);
 | 
			
		||||
	if (pb != NULL) {
 | 
			
		||||
		buf = xrealloc(buf, 1, len + pb->size);
 | 
			
		||||
		memmove(buf + pb->size, buf, len);
 | 
			
		||||
@@ -1538,7 +1538,7 @@ window_copy_append_selection(struct window_pane *wp, int idx)
 | 
			
		||||
		len += pb->size;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (paste_replace(&global_buffers, idx, buf, len) != 0)
 | 
			
		||||
	if (paste_replace(idx, buf, len) != 0)
 | 
			
		||||
		free(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user