allow yanking to X11 selection with new yank_x11 option
authorSimon Ruderich <simon@ruderich.org>
Mon, 1 Feb 2016 07:51:17 +0000 (08:51 +0100)
committerSimon Ruderich <simon@ruderich.org>
Mon, 1 Feb 2016 07:51:17 +0000 (08:51 +0100)
bin/fcscs

index 35e50e3a4fe7891e9018df4edb30ab20ca7527cb..da614bc396b3af1d6214d42aec7f425fc9fe118f 100755 (executable)
--- a/bin/fcscs
+++ b/bin/fcscs
@@ -899,6 +899,28 @@ sub handler_yank {
     }
 
     unlink $tmp or die $!;
+
+    if ($config->{setting}{yank_x11}) {
+        $screen->debug('handler_yank', 'setting X11 selection');
+
+        my @xsel_cmd  = qw( xsel --input --primary );
+        my @xclip_cmd = qw( xclip -in -selection primary );
+
+        my $fh;
+        {
+            # We don't care if a program doesn't exist.
+            no warnings;
+
+            if (not open $fh, '|-', @xsel_cmd) {
+                if (not open $fh, '|-', @xclip_cmd) {
+                    die "install xsel or xlip to yank to X11 selection\n";
+                }
+            }
+        }
+        print $fh $match->{value} or die $!;
+        close $fh or die $!;
+    }
+
     return;
 }
 sub handler_paste {
@@ -1042,6 +1064,9 @@ The following simple mappings are available by default:
 
 =back
 
+Note that yanking only uses the GNU screen or Tmux paste buffer by default. To
+also copy to X11 selection, enable the B<yank_x11> option.
+
 The following additional mappings are available by default:
 
 =over
@@ -1133,6 +1158,8 @@ Defaults in parentheses.
 
 =item B<smartcase>          ignore case unless one uppercase character is searched (C<1>)
 
+=item B<yank_x11>           copy selection also to X11 primary selection when yanking (C<0>)
+
 =item B<paste_sleep>        sleep x us before running paste command (C<100_000>)
 
 =item B<screen_msgwait>     GNU Screen's msgwait variable, used when yanking (C<5>)
@@ -1156,6 +1183,7 @@ my %setting = (
     multiplexer        => undef,
     ignorecase         => 0,
     smartcase          => 1,
+    yank_x11           => 0,
     paste_sleep        => 100_000,
     screen_msgwait     => 5,
     # global mappings