mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Support "bracketed paste" mode. This adds a -p flag to paste-buffer - if
this is used and the application has requested bracketed pastes, then tmux surrounds the pasted text by \033[200~ and \033[201~. Applications like vim can (apparently) use this to avoid, for example, indenting the text. From Ailin Nemui.
This commit is contained in:
		@@ -30,13 +30,13 @@
 | 
			
		||||
 | 
			
		||||
int	cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
void	cmd_paste_buffer_filter(
 | 
			
		||||
	    struct window_pane *, const char *, size_t, const char *);
 | 
			
		||||
void	cmd_paste_buffer_filter(struct window_pane *,
 | 
			
		||||
	    const char *, size_t, const char *, int bracket);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_paste_buffer_entry = {
 | 
			
		||||
	"paste-buffer", "pasteb",
 | 
			
		||||
	"db:rs:t:", 0, 0,
 | 
			
		||||
	"[-dr] [-s separator] [-b buffer-index] [-t target-pane]",
 | 
			
		||||
	"db:prs:t:", 0, 0,
 | 
			
		||||
	"[-dpr] [-s separator] [-b buffer-index] [-t target-pane]",
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -53,6 +53,7 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	const char		*sepstr;
 | 
			
		||||
	char			*cause;
 | 
			
		||||
	int			 buffer;
 | 
			
		||||
	int			 pflag;
 | 
			
		||||
 | 
			
		||||
	if (cmd_find_pane(ctx, args_get(args, 't'), &s, &wp) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
@@ -86,7 +87,9 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
			else
 | 
			
		||||
				sepstr = "\r";
 | 
			
		||||
		}
 | 
			
		||||
		cmd_paste_buffer_filter(wp, pb->data, pb->size, sepstr);
 | 
			
		||||
		pflag = args_has(args, 'p') &&
 | 
			
		||||
		    (wp->screen->mode & MODE_BRACKETPASTE);
 | 
			
		||||
		cmd_paste_buffer_filter(wp, pb->data, pb->size, sepstr, pflag);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Delete the buffer if -d. */
 | 
			
		||||
@@ -102,13 +105,16 @@ cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
 | 
			
		||||
/* Add bytes to a buffer and filter '\n' according to separator. */
 | 
			
		||||
void
 | 
			
		||||
cmd_paste_buffer_filter(
 | 
			
		||||
    struct window_pane *wp, const char *data, size_t size, const char *sep)
 | 
			
		||||
cmd_paste_buffer_filter(struct window_pane *wp,
 | 
			
		||||
    const char *data, size_t size, const char *sep, int bracket)
 | 
			
		||||
{
 | 
			
		||||
	const char	*end = data + size;
 | 
			
		||||
	const char	*lf;
 | 
			
		||||
	size_t		 seplen;
 | 
			
		||||
 | 
			
		||||
	if (bracket)
 | 
			
		||||
		bufferevent_write(wp->event, "\033[200~", 6);
 | 
			
		||||
 | 
			
		||||
	seplen = strlen(sep);
 | 
			
		||||
	while ((lf = memchr(data, '\n', end - data)) != NULL) {
 | 
			
		||||
		if (lf != data)
 | 
			
		||||
@@ -119,4 +125,7 @@ cmd_paste_buffer_filter(
 | 
			
		||||
 | 
			
		||||
	if (end != data)
 | 
			
		||||
		bufferevent_write(wp->event, data, end - data);
 | 
			
		||||
 | 
			
		||||
	if (bracket)
 | 
			
		||||
		bufferevent_write(wp->event, "\033[201~", 6);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user