diff options
author | 2019-04-23 09:39:07 +0000 | |
---|---|---|
committer | 2019-04-23 09:39:07 +0000 | |
commit | 83c3884585721346597f3ebf4db493a10600e1ed (patch) | |
tree | 3404d5193e55fa844f4611d2329bc1e5d0cb68d4 | |
parent | Do not try to resize if the parent cell is NULL, problem reported by (diff) | |
download | wireguard-openbsd-83c3884585721346597f3ebf4db493a10600e1ed.tar.xz wireguard-openbsd-83c3884585721346597f3ebf4db493a10600e1ed.zip |
Add -no-clear variants of copy-selection and copy-pipe which do not
clear the selection after copying. Make copy-pipe clear the selection by
default to be consistent with copy-selection. From Avi Halachmi.
-rw-r--r-- | usr.bin/tmux/tmux.1 | 8 | ||||
-rw-r--r-- | usr.bin/tmux/window-copy.c | 65 |
2 files changed, 36 insertions, 37 deletions
diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1 index 07002e01b09..4dd2506f3a8 100644 --- a/usr.bin/tmux/tmux.1 +++ b/usr.bin/tmux/tmux.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tmux.1,v 1.637 2019/04/18 12:22:07 nicm Exp $ +.\" $OpenBSD: tmux.1,v 1.638 2019/04/23 09:39:07 nicm Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: April 18 2019 $ +.Dd $Mdocdate: April 23 2019 $ .Dt TMUX 1 .Os .Sh NAME @@ -1143,8 +1143,10 @@ The following commands are supported in copy mode: .It Li "copy-end-of-line [<prefix>]" Ta "D" Ta "C-k" .It Li "copy-line [<prefix>]" Ta "" Ta "" .It Li "copy-pipe <command> [<prefix>]" Ta "" Ta "" +.It Li "copy-pipe-no-clear <command> [<prefix>]" Ta "" Ta "" .It Li "copy-pipe-and-cancel <command> [<prefix>]" Ta "" Ta "" .It Li "copy-selection [<prefix>]" Ta "" Ta "" +.It Li "copy-selection-no-clear [<prefix>]" Ta "" Ta "" .It Li "copy-selection-and-cancel [<prefix>]" Ta "Enter" Ta "M-w" .It Li "cursor-down" Ta "j" Ta "Down" .It Li "cursor-left" Ta "h" Ta "Left" @@ -1206,6 +1208,8 @@ The .Ql -and-cancel variants of some commands exit copy mode after they have completed (for copy commands) or when the cursor reaches the bottom (for scrolling commands). +.Ql -no-clear +variants do not clear the selection. .Pp The next and previous word keys use space and the .Ql - , diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c index f31ad83cb60..0ef4f866dbb 100644 --- a/usr.bin/tmux/window-copy.c +++ b/usr.bin/tmux/window-copy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-copy.c,v 1.215 2019/04/02 09:03:39 nicm Exp $ */ +/* $OpenBSD: window-copy.c,v 1.216 2019/04/23 09:39:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -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, |