=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/window-copy.c,v retrieving revision 1.215 retrieving revision 1.216 diff -c -r1.215 -r1.216 *** src/usr.bin/tmux/window-copy.c 2019/04/02 09:03:39 1.215 --- src/usr.bin/tmux/window-copy.c 2019/04/23 09:39:07 1.216 *************** *** 1,4 **** ! /* $OpenBSD: window-copy.c,v 1.215 2019/04/02 09:03:39 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-copy.c,v 1.216 2019/04/23 09:39:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 734,740 **** } static enum window_copy_cmd_action ! window_copy_cmd_copy_selection(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; --- 734,740 ---- } static enum window_copy_cmd_action ! 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,756 **** if (s != NULL) window_copy_copy_selection(wme, prefix); - window_copy_clear_selection(wme); free(prefix); return (WINDOW_COPY_CMD_REDRAW); } --- 748,765 ---- if (s != NULL) window_copy_copy_selection(wme, prefix); 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,777 **** 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_clear_selection(wme); - - free(prefix); return (WINDOW_COPY_CMD_CANCEL); } --- 767,775 ---- window_copy_cmd_copy_selection_and_cancel(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_CANCEL); } *************** *** 1256,1262 **** } static enum window_copy_cmd_action ! window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; struct client *c = cs->c; --- 1254,1260 ---- } static enum window_copy_cmd_action ! 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,1309 **** } 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; - 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); ! free(prefix); ! return (WINDOW_COPY_CMD_CANCEL); ! } ! ! free(prefix); ! return (WINDOW_COPY_CMD_NOTHING); } static enum window_copy_cmd_action --- 1278,1300 ---- } static enum window_copy_cmd_action ! window_copy_cmd_copy_pipe(struct window_copy_cmd_state *cs) { struct window_mode_entry *wme = cs->wme; ! window_copy_cmd_copy_pipe_no_clear(cs); ! window_copy_clear_selection(wme); ! return (WINDOW_COPY_CMD_REDRAW); ! } ! 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; ! 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,1551 **** --- 1533,1546 ---- 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,