X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Xchat%2FXPI.pm;h=6811e63b3bc0355bc355b7841b77eb343aa51f54;hb=dd329bf05f9a50bd10d79e522334761f9785d7ab;hp=7481f5c0ac88c395510243a5a5758e5f39fcea70;hpb=80f827633d7173e4388bfce83f6bb304f37cecab;p=perl%2Fscripts%2Fxchat.git diff --git a/Xchat/XPI.pm b/Xchat/XPI.pm index 7481f5c..6811e63 100644 --- a/Xchat/XPI.pm +++ b/Xchat/XPI.pm @@ -13,7 +13,7 @@ use constant { COLOR_TAG => "\00307" }; my @attributes; BEGIN { - @attributes = qw/tag name version desc author email url banner/; + @attributes = qw; } local *PH; @@ -23,7 +23,8 @@ sub new { $class = ref($class) || $class; my %opts = @_; - my $caller = (caller 0)[0]; + my ($caller, $file) = (caller 0)[0, 1]; + unless (defined $opts{tag}) { $opts{tag} = ($caller =~ /([^:]*):*$/) ? $1 : 'UNKNOWN'; } @@ -39,11 +40,11 @@ sub new { $opts{version} = $version; } unless (defined $opts{banner}) { - my $email = $opts{email}; - $email = "<$email>" if defined $email; - my $who = join ', ', grep defined, $opts{author}, $email, $opts{url}; + my $author = defined $opts{author} ? $opts{author} : 'unknown hacker'; + my $email = defined $opts{email} ? "<$opts{email}>" : undef; + my $who = join ', ', grep defined, $email, $opts{url}; $who = " ($who)" if length $who; - $opts{banner} = $opts{desc} . $who; + $opts{banner} = $opts{desc} . " by $author$who"; } my $ph = bless \do { local *PH }, $class; @@ -52,7 +53,11 @@ sub new { *$ph->{$_} = $opts{$_} for @attributes; *$ph->{buf} = ''; - Xchat::register(@opts{qw/name version banner/}, sub { + my $internal_pkg = Xchat::Embed::file2pkg($file); + no warnings 'redefine'; + local *Xchat::Embed::find_pkg = sub { $internal_pkg, $caller }; + local *HexChat::Embed::find_pkg = sub { $internal_pkg, $caller }; + Xchat::register(@opts{qw}, sub { $ph->flush; if (*$ph->{atexit_id}) { my @callbacks = sort { *$ph->{atexit}{$b} <=> *$ph->{atexit}{$a} }