diff options
author | Thomas Adam <thomas@xteddy.org> | 2019-04-23 13:02:37 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2019-04-23 13:02:37 +0100 |
commit | b0d7623b7eb4409eedde0583be6ed831b287d278 (patch) | |
tree | 8b1602014d3c29564e8a5d3634c383ac6db41759 /window-copy.c | |
parent | 4a96f599f6d52d34283f2c5a537fb330673e065e (diff) | |
parent | 564e44adc6816282cd40d59d1bc642937e53dc54 (diff) | |
download | rtmux-b0d7623b7eb4409eedde0583be6ed831b287d278.tar.gz rtmux-b0d7623b7eb4409eedde0583be6ed831b287d278.tar.bz2 rtmux-b0d7623b7eb4409eedde0583be6ed831b287d278.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/window-copy.c b/window-copy.c index aacea5c5..53dd97d3 100644 --- a/window-copy.c +++ b/window-copy.c @@ -734,7 +734,7 @@ window_copy_cmd_copy_line(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_selection_no_clear(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; @@ -748,9 +748,18 @@ window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) if (s != NULL) window_copy_copy_selection(wme, prefix); - window_copy_clear_selection(wme); free(prefix); + return (WINDOW_COPY_CMD_NOTHING); +} + +static enum window_copy_cmd_action +window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; + + window_copy_cmd_copy_selection_no_clear(cs); + window_copy_clear_selection(wme); return (WINDOW_COPY_CMD_REDRAW); } @@ -758,20 +767,9 @@ static enum window_copy_cmd_action window_copy_cmd_copy_selection_and_cancel(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; - struct client *c = cs->c; - struct session *s = cs->s; - struct winlink *wl = cs->wl; - struct window_pane *wp = wme->wp; - char *prefix = NULL; - if (cs->args->argc == 2) - prefix = format_single(NULL, cs->args->argv[1], c, s, wl, wp); - - if (s != NULL) - window_copy_copy_selection(wme, prefix); + window_copy_cmd_copy_selection_no_clear(cs); window_copy_clear_selection(wme); - - free(prefix); return (WINDOW_COPY_CMD_CANCEL); } @@ -1256,7 +1254,7 @@ window_copy_cmd_top_line(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_pipe_no_clear(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; @@ -1280,30 +1278,23 @@ window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) } static enum window_copy_cmd_action -window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) +window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; - struct client *c = cs->c; - struct session *s = cs->s; - struct winlink *wl = cs->wl; - struct window_pane *wp = wme->wp; - char *command = NULL; - char *prefix = NULL; - if (cs->args->argc == 3) - prefix = format_single(NULL, cs->args->argv[2], c, s, wl, wp); - - if (s != NULL && *cs->args->argv[1] != '\0') { - command = format_single(NULL, cs->args->argv[1], c, s, wl, wp); - window_copy_copy_pipe(wme, s, prefix, command); - free(command); + window_copy_cmd_copy_pipe_no_clear(cs); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_REDRAW); +} - free(prefix); - return (WINDOW_COPY_CMD_CANCEL); - } +static enum window_copy_cmd_action +window_copy_cmd_copy_pipe_and_cancel(struct window_copy_cmd_state *cs) +{ + struct window_mode_entry *wme = cs->wme; - free(prefix); - return (WINDOW_COPY_CMD_NOTHING); + window_copy_cmd_copy_pipe_no_clear(cs); + window_copy_clear_selection(wme); + return (WINDOW_COPY_CMD_CANCEL); } static enum window_copy_cmd_action @@ -1542,10 +1533,14 @@ static const struct { window_copy_cmd_copy_end_of_line }, { "copy-line", 0, 1, window_copy_cmd_copy_line }, + { "copy-pipe-no-clear", 1, 2, + window_copy_cmd_copy_pipe_no_clear }, { "copy-pipe", 1, 2, window_copy_cmd_copy_pipe }, { "copy-pipe-and-cancel", 1, 2, window_copy_cmd_copy_pipe_and_cancel }, + { "copy-selection-no-clear", 0, 1, + window_copy_cmd_copy_selection_no_clear }, { "copy-selection", 0, 1, window_copy_cmd_copy_selection }, { "copy-selection-and-cancel", 0, 1, |