diff options
Diffstat (limited to 'scripts/clipboard.pl')
-rw-r--r-- | scripts/clipboard.pl | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/scripts/clipboard.pl b/scripts/clipboard.pl new file mode 100644 index 0000000..36a6489 --- /dev/null +++ b/scripts/clipboard.pl @@ -0,0 +1,90 @@ +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi; +use Irssi::Irc; +use Tk; + +$VERSION = '1.2'; +%IRSSI = ( +authors => 'Dominic Battre', +contact => 'dominic@battre.de', +name => 'Quoting from X clipboard', +description => 'Better quoting of content from clipboard (without leading spaces) -- requires Perl/Tk', +license => 'Public Domain', +url => 'http://www.battre.de', +changed => 'Fri Dec 6 23:23:31 CET 2002', +); + +# if you quote long lines by selecting the text and inserting via middle +# mousebutton you get something like this: +# 23:12 <@DominicB> 23:11 <@DominicB> This is a very long line. This is a very +# long line. This is a +# 23:12 <@DominicB> very long line. This is a very long line. +# This is a very long +# 23:12 <@DominicB> line. +# +# this script queries the clipboard of X11, strips leading blanks and +# joins lines if needed so the result would be +# 23:16 <@DominicB> 23:11 <@DominicB> This is a very long line. This is a very +# long line. This is a very long line. This is a very long +# line. This is a very long line. +# +# just execute by /qc ("quote clipboard") +# for print only use /qc -p + + +# Known problem +# if you +# 1) connect via `ssh -X user@localhost` +# 2) start `screen irssi` +# 3) use /qc, +# 4) disconnect ssh +# 5) reconnect via `ssh -X user@localhost` +# 6) `screen -R -D` +# 7) use /qc again +# => screen and along with it irssi terminate +# the problem persists if you try +# perl -e 'use Tk;print MainWindow->new->SelectionGet("-selection","CLIPBOARD")' +# in a ssh -X/screen environment. Thus it seems to be a problem of +# X forwarding - not of Perl/Tk + +# credits to +# +# Hugo Haas for s/CLIPBOARD/PRIMARY/ (using PRIMARY instead of +# CLIPBOARD in order to use highlighted text instead of the +# X clipboard (identical to middle clicking) +# +# Clemens Heidinger using Irssi::print() now if /qc is executed outside a channel/query +# -p for printing only + +Irssi::command_bind('qc','cmd_quoteclipboard'); + +sub cmd_quoteclipboard { + my ($arguments, $server, $witem) = @_; + + my $main = MainWindow->new; + my $text = $main->SelectionGet('-selection','PRIMARY'); + $main->destroy(); + + my $sendMsg = ( $arguments !~ /-p/ && # no parameter -p + defined($witem) && $witem && + ($witem->{'type'} eq 'CHANNEL' || $witem->{'type'} eq 'QUERY') ) + ? sub { $server->command("msg $witem->{'name'} @_[0]"); } + : sub { Irssi::print(@_[0], MSGLEVEL_CRAP); }; + + my $prev = ""; + + while ( $text =~ /^( *)(.*)$/gm ) { + if ( $1 eq "" and $prev ne "") { + $sendMsg->($prev); + $prev = "$2 "; + } else { + $prev .= "$2 "; + } + } + + if ( $prev ne "" ) { + $sendMsg->($prev); + } +} |