Ticket #66: par_plugin_support.diff

File par_plugin_support.diff, 4.1 KB (added by tsee, 6 years ago)
  • lib/Padre.pm

     
    206206        config_dir  => undef, 
    207207        config_yaml => undef, 
    208208        config_db   => undef, 
     209        plugin_dir  => undef, 
    209210        recent      => { 
    210211            files => [], 
    211212            pod   => [], 
     
    216217    $self->{config_dir}  = Padre::Config->default_dir; 
    217218    $self->{config_yaml} = Padre::Config->default_yaml; 
    218219    $self->{config_db}   = Padre::Config->default_db; 
     220    $self->{plugin_dir}  = Padre::Config->default_plugin_dir; 
    219221 
    220222    $self->load_config; 
    221223    $self->_process_command_line; 
     
    285287 
    286288sub _locate_plugins { 
    287289    my ($self) = @_; 
    288     my %plugins; 
     290 
     291    # Try the plugin directory first: 
     292    my $plugin_dir = $self->{plugin_dir}; 
     293    unshift @INC, $plugin_dir unless grep {$_ eq $plugin_dir} @INC; 
     294 
    289295    foreach my $path (@INC) { 
    290296        my $dir = File::Spec->catdir($path, 'Padre', 'Plugin'); 
    291297        opendir my $dh, $dir or next; 
    292298        while (my $file = readdir $dh) { 
    293299            if ($file =~ /^\w+\.pm$/) { 
    294300                $file =~ s/\.pm$//; 
    295                 $plugins{$file} = 0; 
    296                 my $module = "Padre::Plugin::$file"; 
    297         eval "use $module"; ## no critic 
    298                 if ($@) { 
    299                     warn "ERROR while trying to load plugin '$file': $@"; 
    300                     next; 
    301                 } 
    302                  
    303                 $plugins{$file} = $module; 
     301                $self->_load_plugin($file); 
    304302            } 
    305303        } 
    306304    } 
    307     $self->{plugins} = \%plugins; 
     305 
     306    $self->_locate_plugins_in_par(); 
    308307    return; 
    309308} 
    310309 
     310sub _load_plugin { 
     311    my ($self, $file) = @_; 
     312    my $plugins = $self->{plugins} || {}; 
     313    $plugins->{$file} = 0; 
     314                   
     315    my $module = "Padre::Plugin::$file"; 
     316    eval "use $module"; ## no critic 
     317    if ($@) { 
     318        warn "ERROR while trying to load plugin '$file': $@"; 
     319        return(); 
     320    } 
     321    $plugins->{$file} = $module; 
     322    $self->{plugins} = $plugins; 
     323    return 1; 
     324} 
     325 
     326sub _locate_plugins_in_par { 
     327    my ($self) = @_; 
     328 
     329    # setup the PAR environment: 
     330    my $plugin_dir = $self->{plugin_dir}; 
     331    my $cache_dir = File::Spec->catdir($plugin_dir, 'cache'); 
     332    $ENV{PAR_GLOBAL_TEMP} = $cache_dir; 
     333    File::Path::mkpath($cache_dir) if not -e $cache_dir; 
     334    $ENV{PAR_TEMP} = $cache_dir; 
     335 
     336    require PAR; 
     337 
     338    opendir my $dh, $plugin_dir or return; 
     339    while (my $file = readdir $dh) { 
     340        if ($file =~ /^\w+\.par$/i) { 
     341            my $parfile = File::Spec->catfile($plugin_dir, $file); 
     342            $file =~ s/\.par$//i; 
     343            PAR->import($parfile); 
     344            $self->_load_plugin($file); 
     345        } 
     346    } 
     347    closedir($dh); 
     348    return; 
     349} 
     350 
    311351sub usage { 
    312352    die <<"END_USAGE"; 
    313353Usage: $0 [FILENAMEs] 
  • lib/Padre/Config.pm

     
    33use 5.008; 
    44use strict; 
    55use warnings; 
     6use File::Path    (); 
    67use File::Spec    (); 
    78use File::HomeDir (); 
    89use YAML::Tiny    (); 
     
    4344    ); 
    4445} 
    4546 
     47sub default_plugin_dir { 
     48    my $pluginsdir = File::Spec->catdir( 
     49        $_[0]->default_dir, 
     50        'plugins', 
     51    ); 
     52    my $plugins_full_path = File::Spec->catdir( 
     53        $pluginsdir, 'Padre', 'Plugin' 
     54    ); 
     55    unless ( -e $plugins_full_path) { 
     56        File::Path::mkpath($plugins_full_path) or 
     57        die "Cannot create plugins dir '$plugins_full_path' $!"; 
     58    } 
    4659 
     60    return $pluginsdir; 
     61} 
    4762 
    4863 
    4964 
     65 
     66 
    5067##################################################################### 
    5168# Constructor and Serialization 
    5269 
  • Build.PL

     
    2626        'File::Slurp'             => 0, 
    2727    'Module::Inspector'       => '0.04', 
    2828        'ORLite'                  => '0.10', 
     29        'PAR'                     => '0.970', 
    2930        'Pod::POM'                => 0, 
    3031        'Pod::Simple'             => 0, 
    3132    'Probe::Perl'             => '0.01',