ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/selection-pastebin
(Generate patch)

Comparing rxvt-unicode/src/perl/selection-pastebin (file contents):
Revision 1.1 by elmex, Tue Jan 17 16:53:47 2006 UTC vs.
Revision 1.15 by root, Wed Jan 25 15:33:43 2006 UTC

1#! perl 1#! perl
2use Digest::MD5 qw/md5_hex/;
3
4my $timers = {};
5my $pastebin_cmd;
6my $pastebin_url;
7
8sub on_start {
9 my ($self) = @_;
10 $pastebin_cmd =
11 $self->x_resource ("selection-pastebin-cmd")
12 or "scp -p % ruth:/var/www/www.ta-sa.org/files/txt/";
13
14 $pastebin_url =
15 $self->x_resource ("selection-pastebin-url")
16 or "http://www.ta-sa.org/files/txt/";
17 ();
18}
19 2
20sub upload_paste { 3sub upload_paste {
21 my ($self) = @_; 4 my ($self) = @_;
22 5
6 require Digest::MD5;
23 7
24 my $txt = $self->selection; 8 my $txt = $self->selection;
25 my $filename = md5_hex ($txt) . ".txt"; 9 my $filename = Digest::MD5::md5_hex ($txt) . ".txt";
26 10
27 my $tmpfile = "/tmp/$filename"; 11 my $tmpfile = "/tmp/$filename";
28 12
29 my $msg = "uploaded $filename"; 13 my $msg = "uploaded as $filename";
30 14
31 if (open my $o, ">" . $tmpfile) { 15 if (open my $o, ">:utf8", $tmpfile) {
16 chmod 0644, $tmpfile;
32 print $o $txt; 17 print $o $txt;
33 close $o; 18 close $o;
34 } else { 19 } else {
35 $msg = "couldn't write $tmpfile: $!"; 20 $msg = "couldn't write $tmpfile: $!";
36 } 21 }
37 22
38 my $cmd = $pastebin_cmd; 23 my $cmd = $self->{pastebin_cmd};
39 $cmd =~ s/%/$tmpfile/; 24 $cmd =~ s/%/$tmpfile/;
40 25
41 if (system ($cmd) == 0) { 26 my $pid = $self->exec_async ("/bin/sh", "-c", $cmd);
42 my $url = $pastebin_url;
43 $url =~ s/%/$filename/;
44 27
45 $self->selection ($url); 28 $self->{pw} = urxvt::pw->new->start ($pid)->cb (sub {
46 } else { 29 my (undef, $status) = @_;
47 $msg = "couldn't upload, '$cmd' failed";
48 }
49 30
50 my $ov = $timers->{ov} = $self->overlay (-1, 0, length ($msg), 1, urxvt::OVERLAY_RSTYLE, 0); 31 delete $self->{pw};
51 $ov->set (0, 0, $msg);
52 32
53 $timers->{t1} = 33 if ($status) {
34 $status >>= 8;
35 $msg = "ERROR: command returned status $status";
36 } else {
37 my $url = $self->{pastebin_url};
38 $url =~ s/%/$filename/;
39
40 $self->selection ($url);
41 }
42
43 unlink $tmpfile;
44
45 my $ov = $self->overlay (-1, 0, $self->strwidth ($msg), 1, urxvt::OVERLAY_RSTYLE, 0);
46 $ov->set (0, 0, $msg);
47
48 $self->{timer} =
54 urxvt::timer 49 urxvt::timer
55 ->new 50 ->new
56 ->start ((int urxvt::NOW) + 5) # make sure we update "on" the second
57 ->interval (1) 51 ->after (5)
58 ->cb (sub { delete $timers->{ov}; delete $timers->{t1}; }); 52 ->cb (sub { delete $self->{timer}; undef $ov; });
53 });
59} 54}
60 55
61sub on_keyboard_command { 56sub on_start {
62 my ($self, $cmd) = @_; 57 my ($self) = @_;
63 58
64 $cmd eq "selection-pastebin:remote-pastebin" 59 $self->{pastebin_cmd} = $self->x_resource ("selection-pastebin.cmd")
65 and upload_paste ($self); 60 || "rcp -p % ruth:/var/www/www.ta-sa.org/files/txt/";
61
62 $self->{pastebin_url} = $self->x_resource ("selection-pastebin.url")
63 || "http://www.ta-sa.org/files/txt/%";
64
65 push @{ $self->{term}{selection_popup_hook} }, sub {
66 ("pastebin upload" => sub { $self->upload_paste })
67 };
66 68
67 () 69 ()
68} 70}
69 71
72sub on_user_command {
73 my ($self, $cmd) = @_;
74
75 if ($cmd eq "selection-pastebin:remote-pastebin") {
76 $self->upload_paste;
77 }
78
79 ()
80}
81

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines