Make set-clipboard a three-state option so tmux itself can ignore the
authornicm <nicm@openbsd.org>
Sat, 3 Jun 2017 17:43:01 +0000 (17:43 +0000)
committernicm <nicm@openbsd.org>
Sat, 3 Jun 2017 17:43:01 +0000 (17:43 +0000)
sequencess.

usr.bin/tmux/input.c
usr.bin/tmux/options-table.c
usr.bin/tmux/tmux.1
usr.bin/tmux/window-copy.c

index 54eb860..7eb4b20 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: input.c,v 1.122 2017/05/28 23:23:40 nicm Exp $ */
+/* $OpenBSD: input.c,v 1.123 2017/06/03 17:43:01 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -2103,9 +2103,13 @@ input_osc_52(struct window_pane *wp, const char *p)
        char                    *end;
        size_t                   len;
        u_char                  *out;
-       int                      outlen;
+       int                      outlen, state;
        struct screen_write_ctx  ctx;
 
+       state = options_get_number(global_options, "set-clipboard");
+       if (state != 2)
+               return;
+
        if ((end = strchr(p, ';')) == NULL)
                return;
        end++;
@@ -2122,11 +2126,10 @@ input_osc_52(struct window_pane *wp, const char *p)
                return;
        }
 
-       if (options_get_number(global_options, "set-clipboard")) {
-               screen_write_start(&ctx, wp, NULL);
-               screen_write_setselection(&ctx, out, outlen);
-               screen_write_stop(&ctx);
-       }
+       screen_write_start(&ctx, wp, NULL);
+       screen_write_setselection(&ctx, out, outlen);
+       screen_write_stop(&ctx);
+
        paste_add(out, outlen);
 }
 
index 798d337..341fcc0 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: options-table.c,v 1.88 2017/05/30 21:44:59 nicm Exp $ */
+/* $OpenBSD: options-table.c,v 1.89 2017/06/03 17:43:01 nicm Exp $ */
 
 /*
  * Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -54,6 +54,9 @@ static const char *options_table_bell_action_list[] = {
 static const char *options_table_pane_status_list[] = {
        "off", "top", "bottom", NULL
 };
+static const char *options_table_set_clipboard_list[] = {
+       "off", "external", "on", NULL
+};
 
 /* Top-level options. */
 const struct options_table_entry options_table[] = {
@@ -118,8 +121,9 @@ const struct options_table_entry options_table[] = {
        },
 
        { .name = "set-clipboard",
-         .type = OPTIONS_TABLE_FLAG,
+         .type = OPTIONS_TABLE_CHOICE,
          .scope = OPTIONS_TABLE_SERVER,
+         .choices = options_table_set_clipboard_list,
          .default_num = 1
        },
 
index ebfcf6b..c2cdd3f 100644 (file)
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tmux.1,v 1.555 2017/05/30 21:44:59 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.556 2017/06/03 17:43:01 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: May 30 2017 $
+.Dd $Mdocdate: June 3 2017 $
 .Dt TMUX 1
 .Os
 .Sh NAME
@@ -2398,17 +2398,34 @@ Set the number of error or information messages to save in the message log for
 each client.
 The default is 100.
 .It Xo Ic set-clipboard
-.Op Ic on | off
+.Op Ic on | external | off
 .Xc
 Attempt to set the terminal clipboard content using the
 \ee]52;...\e007
 .Xr xterm 1
-escape sequences.
-This option is on by default if there is an
+escape sequences, if there is an
 .Em \&Ms
 entry in the
 .Xr terminfo 5
-description for the client terminal.
+description.
+If set to
+.Ic on ,
+.Nm
+will both accept the escape sequence to create a buffer and attempt to set
+the terminal clipboard.
+If set to
+.Ic external ,
+.Nm
+will attempt to set the terminal clipboard but ignore attempts
+by applications to set
+.Nm
+buffers.
+If
+.Ic off ,
+.Nm
+will neither accept the clipboard escape sequence nor attempt to set the
+clipboard.
+.Pp
 Note that this feature needs to be enabled in
 .Xr xterm 1
 by setting the resource:
index 4a2aeed..25288d8 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.177 2017/05/30 21:44:59 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.178 2017/06/03 17:43:01 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1629,7 +1629,7 @@ window_copy_copy_buffer(struct window_pane *wp, const char *bufname, void *buf,
 {
        struct screen_write_ctx ctx;
 
-       if (options_get_number(global_options, "set-clipboard")) {
+       if (options_get_number(global_options, "set-clipboard") != 0) {
                screen_write_start(&ctx, wp, NULL);
                screen_write_setselection(&ctx, buf, len);
                screen_write_stop(&ctx);
@@ -1686,7 +1686,7 @@ window_copy_append_selection(struct window_pane *wp, const char *bufname)
        if (buf == NULL)
                return;
 
-       if (options_get_number(global_options, "set-clipboard")) {
+       if (options_get_number(global_options, "set-clipboard") != 0) {
                screen_write_start(&ctx, wp, NULL);
                screen_write_setselection(&ctx, buf, len);
                screen_write_stop(&ctx);