Hi You can already join the lines on paste with the -s flag to paste-buffer.
I wouldn't do this at all but if there is a good case for it, I would just prefer a copy-with-separator command which prompted for the separator (like the prompt we just added for buffer name). On Tue, May 13, 2014 at 09:27:58PM -0700, Keith Amling wrote: > This patch is less clear than the preceding two. > > First, should this be bound to anything by default? 'J' is already > taken in vi-copy. > > Second, the current way of surfacing the current join mode is the best > thing I could think of but it's sort of ugly and space-wasting. Screen > just shows a temporary message naming the new join mode when you switch > to one but I didn't see any obvious facility for a temporary message > like that here. > > Finally, ignore or remove the "0+"s in there. My company's e-mail > server barfs on this patch without them for completely insane reasons > that I'm about to fix with both hands. > > Keith > > --- > mode-key.c | 1 + > tmux.h | 1 + > window-copy.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- > 3 files changed, 54 insertions(+), 5 deletions(-) > > diff --git a/mode-key.c b/mode-key.c > index eb97d3f8a385..0c9c86be265c 100644 > --- a/mode-key.c > +++ b/mode-key.c > @@ -148,6 +148,7 @@ const struct mode_key_cmdstr mode_key_cmdstr_copy[] = { > { MODEKEYCOPY_UP, "cursor-up" }, > { MODEKEYCOPY_LEFTPRUNE, "left-prune" }, > { MODEKEYCOPY_RIGHTPRUNE, "right-prune" }, > + { MODEKEYCOPY_CHANGEJOINMODE, "change-joinmode" }, > > { 0, NULL } > }; > diff --git a/tmux.h b/tmux.h > index aa01b17ee0e3..0c491a413d23 100644 > --- a/tmux.h > +++ b/tmux.h > @@ -586,6 +586,7 @@ enum mode_key_cmd { > MODEKEYCOPY_UP, > MODEKEYCOPY_LEFTPRUNE, > MODEKEYCOPY_RIGHTPRUNE, > + MODEKEYCOPY_CHANGEJOINMODE, > }; > > /* Entry in the default mode key tables. */ > diff --git a/window-copy.c b/window-copy.c > index 6d2edda8c567..1803762dc899 100644 > --- a/window-copy.c > +++ b/window-copy.c > @@ -84,6 +84,7 @@ void window_copy_scroll_down(struct window_pane *, > u_int); > void window_copy_rectangle_toggle(struct window_pane *); > void window_copy_left_prune(struct window_pane *); > void window_copy_right_prune(struct window_pane *); > +void window_copy_change_joinmode(struct window_pane *); > > const struct window_mode window_copy_mode = { > window_copy_init, > @@ -106,6 +107,36 @@ enum window_copy_input_type { > WINDOW_COPY_GOTOLINE, > }; > > +enum window_copy_join_mode { > + WINDOW_COPY_JOIN_NEWLINE, > + WINDOW_COPY_JOIN_NONE, > + WINDOW_COPY_JOIN_SPACE, > + WINDOW_COPY_JOIN_COMMA, > + WINDOW_COPY_JOIN_MAX > +}; > + > +struct window_copy_join_mode_data { > + const char *header; > + const char *delimiter; > +} join_modes[WINDOW_COPY_JOIN_MAX] = { > + { > + "", > + "\n", > + }, > + { > + " [joined]", > + "", > + }, > + { > + " [joined with spaces]", > + " ", > + }, > + { > + " [joined with commas]", > + ",", > + }, > +}; > + > /* > * Copy-mode's visible screen (the "screen" field) is filled from one of > * two sources: the original contents of the pane (used when we > @@ -148,6 +179,8 @@ struct window_copy_mode_data { > int rightprunex_set; > u_int rightprunex; > > + enum window_copy_join_mode joinmode; > + > enum window_copy_input_type inputtype; > const char *inputprompt; > char *inputstr; > @@ -179,6 +212,8 @@ window_copy_init(struct window_pane *wp) > data->leftprunex_set = 0; > data->rightprunex_set = 0; > > + data->joinmode = WINDOW_COPY_JOIN_NEWLINE; > + > data->backing_written = 0; > > data->rectflag = 0; > @@ -739,6 +774,8 @@ window_copy_key(struct window_pane *wp, struct session > *sess, int key) > case MODEKEYCOPY_RIGHTPRUNE: > window_copy_right_prune(wp); > break; > + case MODEKEYCOPY_CHANGEJOINMODE: > + window_copy_change_joinmode(wp); > default: > break; > } > @@ -1203,7 +1240,8 @@ window_copy_write_line( > last = screen_size_y(s) - 1; > if (py == 0) { > size = xsnprintf(hdr, sizeof hdr, > - "[%u/%u]", data->oy, screen_hsize(data->backing)); > + "[%u/%u]%s", data->oy, screen_hsize(data->backing), > + join_modes[0+data->joinmode].header); > if (size > screen_size_x(s)) > size = screen_size_x(s); > screen_write_cursormove(ctx, screen_size_x(s) - size, 0); > @@ -1475,7 +1513,7 @@ window_copy_get_selection(struct window_pane *wp, > size_t *len) > free(buf); > return (NULL); > } > - *len = off - 1; /* remove final \n */ > + *len = off - strlen(join_modes[0+data->joinmode].delimiter); /* remove > final delimiter */ > return (buf); > } > > @@ -1615,10 +1653,11 @@ window_copy_copy_line(struct window_pane *wp, > } > } > > - /* Only add a newline if the line wasn't wrapped. */ > + /* Only add a delimiter if the line wasn't wrapped. */ > if (!wrapped || ex != xx) { > - *buf = xrealloc(*buf, 1, (*off) + 1); > - (*buf)[(*off)++] = '\n'; > + *buf = xrealloc(*buf, 1, (*off) + > strlen(join_modes[0+data->joinmode].delimiter)); > + memcpy(*buf + *off, join_modes[0+data->joinmode].delimiter, > strlen(join_modes[0+data->joinmode].delimiter)); > + *off += strlen(join_modes[0+data->joinmode].delimiter); > } > } > > @@ -2250,3 +2289,11 @@ window_copy_right_prune(struct window_pane *wp) > window_copy_redraw_screen(wp); > } > } > + > +void > +window_copy_change_joinmode(struct window_pane *wp) > +{ > + struct window_copy_mode_data *data = wp->modedata; > + data->joinmode = (data->joinmode + 1) % WINDOW_COPY_JOIN_MAX; > + window_copy_redraw_screen(wp); > +} > -- > 1.9.1 > > > ------------------------------------------------------------------------------ > "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE > Instantly run your Selenium tests across 300+ browser/OS combos. > Get unparalleled scalability from the best Selenium testing platform available > Simple to use. Nothing to install. Get started now for free." > http://p.sf.net/sfu/SauceLabs > _______________________________________________ > tmux-users mailing list > tmux-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tmux-users ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users