]> ruderich.org/simon Gitweb - fcscs/fcscs.git/blobdiff - bin/fcscs
add missing "or die $!;"
[fcscs/fcscs.git] / bin / fcscs
index 35e50e3a4fe7891e9018df4edb30ab20ca7527cb..27c133a35a71388f2c66f0c13fbfb976d3190e98 100755 (executable)
--- a/bin/fcscs
+++ b/bin/fcscs
@@ -370,7 +370,7 @@ package Screen {
         foreach (@args) {
             $_ = $self->encode($_);
         }
-        say $fh "$module: @args";
+        say $fh "$module: @args" or CORE::die $!;
         return;
     }
 
@@ -878,7 +878,7 @@ sub handler_yank {
     # Use a temporary file to prevent leaking the yanked data to other users
     # with the command line, e.g. ps aux or top.
     my ($fh, $tmp) = File::Temp::tempfile(); # dies on its own
-    print $fh $screen->encode($match->{value});
+    print $fh $screen->encode($match->{value}) or die $!;
     close $fh or die $!;
 
     if ($config->{setting}{multiplexer} eq 'screen') {
@@ -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