Custom perl to paste X CLIPBOARD stopped working

Benjamin R. Haskell rxvt-unicode at benizi.com
Mon May 2 01:47:54 CEST 2011




On Sun, 1 May 2011, Chip Camden wrote:

> Quoth rxvt-unicode on Sunday, 01 May 2011:
>> Hello :-)
>>
>> A custom perl script for hotkey pasting X CLIPBOARD into urxvt 
>> stopped working.  I am not aware of any system change that coincided 
>> with the breakage, despite keeping logs and using paste in urxvt very 
>> frequently.
>>
>> ~/.Xresources includes:
>>
>> URxvt.keysym.Mod4-v: perl:clipboard:paste
>> URxvt.perl-ext-common: default,matcher,clipboard

The error might be in the matcher plugin.  If any plugin fails to load 
properly, they're all borked.


>> /usr/lib64/urxvt/perl/clipboard is:

As with most programs, you should put your own customizations into your 
own director(y|ies).  If you add:
URxvt*perl-lib: /home/username/urxvt

You can put this in /home/username/urxvt/clipboard.

This prevents it from being messed-with or accidentally removed when 
upgrading rxvt-unicode via package management.


>> #! perl
>> sub on_sel_grab {
>>     my $query = $_[0]->selection;
>>     open (my $pipe,'| /usr/bin/xclip -in -selection clipboard') or die;
>>     print $pipe $query;
>>     close $pipe;
>> }
>> sub paste {
>>     my ($self) = @_;
>>     my $content = `/usr/bin/xclip -loop 1 -out -selection clipboard` ;
>>     $self->tt_write ($content);
>> }
>> sub on_user_command {
>>     my ($self, $cmd) = @_;
>>     if ($cmd eq "clipboard:paste") {
>>         $self->paste;
>>     }
>> }

This script works fine for me under 9.07 and 9.10, w/ Perl v.5.12.1.


>> The xclip command works at the command prompt.  The script's file 
>> size and permissions are the same as when it was installed.  I added 
>> logging to the script, for example in the paste sub:
>>
>> open(my $logfh, '>>/tmp/urxvt_paste.log') ;
>> print $logfh "paste: running\n";
>>
>> No logs appeared.  I ran urxvt by:
>>
>> URXVT_PERL_VERBOSITY=11 urxvt -pe clipboard &
>>
>> The trace included:
>>
>> urxvt: loading extension '/usr/lib64/urxvt/perl/clipboard' into 
>> package 'urxvt::ext::clipboard'
>> [used Super+V]
>> urxvt: USER_COMMAND (urxvt::term=HASH(0x8bfef8), clipboard:paste )
>> urxvt: USER_COMMAND returning <>
>>
>> It seemed the custom perl script's sub was being called but was not 
>> effective.  urxvt 9.10 was removed and re-installed.  Same.
>>
>> A "hello world" perl script worked.
>>
>> Experimenting, I changed the shebang line in 
>> /usr/lib64/urxvt/perl/clipboard to:
>>
>> #! /usr/bin/perl
>>
>> and tested again.  The logs appeared for subs on_user_command and
>> on_sel_grab but the on_user_command log did not show the "if ($cmd eq
>> "clipboard:paste")" test passed.

The shebang line shouldn't matter at all.  The script doesn't get called 
from any context where that line is interpreted.  To the Perl 
interpreter, it's just a comment.


>> What can I try now?

Try disabling the matcher plugin or not enabling the default extensions.


>> Best
>>
>> Charles
>>
>>
>
> Grasping at straws here.  Maybe try renaming the "paste" function?  Or 
> try adding something to the paste function to let you know it got 
> there?  I often just do a print and then by starting urxvt from a 
> shell prompt you can see the print output in the parent shell.

I second the "start from a shell prompt" suggestion.  It's pretty easy 
to detect the condition I mentioned above (when another plugin fails to 
load properly).

-- 
Best,
Ben




More information about the rxvt-unicode mailing list