--- rxvt-unicode/src/urxvt.pm 2012/06/06 15:06:41 1.212 +++ rxvt-unicode/src/urxvt.pm 2012/06/10 13:32:55 1.216 @@ -22,7 +22,7 @@ Every time a terminal object gets created, extension scripts specified via the C resource are loaded and associated with it. -Scripts are compiled in a 'use strict' and 'use utf8' environment, and +Scripts are compiled in a 'use strict "vars"' and 'use utf8' environment, and thus must be encoded as UTF-8. Each script will only ever be loaded once, even in @@RXVT_NAME@@d, where @@ -757,7 +757,7 @@ package urxvt; use utf8; -use strict; +use strict 'vars'; use Carp (); use Scalar::Util (); use List::Util (); @@ -948,12 +948,13 @@ sub parse_resource { my ($term, $name, $isarg, $longopt, $flag, $value) = @_; + $name =~ y/-/./ if $isarg; + $term->scan_meta; my $r = $term->{meta}{resource}; + keys %$r; # reste iterator while (my ($pattern, $v) = each %$r) { - $name =~ y/-/./ if $isarg; - if ( $pattern =~ /\.$/ ? $pattern eq substr $name, 0, length $pattern @@ -961,7 +962,7 @@ ) { $name = "$urxvt::RESCLASS.$name"; - push @TERM_EXT, $v->[0]; + push @{ $term->{perl_ext_3} }, $v->[0]; if ($v->[1] eq "boolean") { $term->put_option_db ($name, $flag ? "true" : "false"); @@ -998,6 +999,7 @@ urxvt::log sprintf " -%-30s %s\n", "$pattern $type", $desc; } } else { + $pattern =~ s/\.$/.*/g; urxvt::log sprintf " %-31s %s\n", "$pattern:", $type; } } @@ -1028,7 +1030,7 @@ or die "$path: $!"; my $source = - "package $pkg; use strict; use utf8; no warnings 'utf8';\n" + "package $pkg; use strict 'vars'; use utf8; no warnings 'utf8';\n" . "#line 1 \"$path\"\n{\n" . (do { local $/; <$fh> }) . "\n};\n1"; @@ -1061,7 +1063,10 @@ $TERM->register_package ($_) for @pkg; } - for (grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2) { + for ( + @{ delete $TERM->{perl_ext_3} }, + grep $_, map { split /,/, $TERM->resource ("perl_ext_$_") } 1, 2 + ) { if ($_ eq "default") { $ext_arg{$_} ||= [] for qw(selection option-popup selection-popup searchable-scrollback readline); } elsif (/^-(.*)$/) { @@ -1361,8 +1366,8 @@ while (<$fh>) { if (/^#:META:X_RESOURCE:(.*)/) { my ($pattern, $type, $desc) = split /:/, $1; - $pattern =~ s/^%(?:\.|$)/$ext./g; # % in pattern == extension name - if ($pattern =~ /[^a-zA-Z\.]/) { + $pattern =~ s/^%(\.|$)/$ext$1/g; # % in pattern == extension name + if ($pattern =~ /[^a-zA-Z0-9\-\.]/) { warn "$dir/$ext: meta resource '$pattern' contains illegal characters (not alphanumeric nor . nor *)\n"; } else { $meta{resource}{$pattern} = [$ext, $type, $desc];