X-Git-Url: https://ruderich.org/simon/gitweb/?p=fcscs%2Ffcscs.git;a=blobdiff_plain;f=bin%2Ffcscs;h=da614bc396b3af1d6214d42aec7f425fc9fe118f;hp=c44b8eaeb623c53846ee2b8f8c22931acc56e17f;hb=23d32b9dae77a88ea040983ab82f3ad7b6e57b9e;hpb=3789524cb5c0c5b5ba709308eae071d0d79b3598 diff --git a/bin/fcscs b/bin/fcscs index c44b8ea..da614bc 100755 --- a/bin/fcscs +++ b/bin/fcscs @@ -502,9 +502,11 @@ sub run_in_background { # Necessary for GNU screen or it'll keep the window open until an # external command has run. - close STDIN or die $!; - close STDOUT or die $!; - close STDERR or die $!; + require File::Spec; + my $devnull = File::Spec->devnull(); + open STDIN, '<', $devnull or die $!; + open STDOUT, '>', $devnull or die $!; + open STDERR, '>', $devnull or die $!; # Double-fork to prevent zombies. my $pid = fork; @@ -897,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 { @@ -1040,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 option. + The following additional mappings are available by default: =over @@ -1131,6 +1158,8 @@ Defaults in parentheses. =item B ignore case unless one uppercase character is searched (C<1>) +=item B copy selection also to X11 primary selection when yanking (C<0>) + =item B sleep x us before running paste command (C<100_000>) =item B GNU Screen's msgwait variable, used when yanking (C<5>) @@ -1154,6 +1183,7 @@ my %setting = ( multiplexer => undef, ignorecase => 0, smartcase => 1, + yank_x11 => 0, paste_sleep => 100_000, screen_msgwait => 5, # global mappings