Padre
view release on metacpan or search on metacpan
lib/Padre/Project.pm view on Meta::CPAN
sub launch_system {
my $self = shift;
my $cmd = shift;
# Make sure we execute from the correct directory
if (Padre::Constant::WIN32) {
require Padre::Util::Win32;
Padre::Util::Win32::ExecuteProcessAndWait(
directory => $self->{project},
file => 'cmd.exe',
parameters => "/C $cmd",
);
} else {
require File::pushd;
my $pushd = File::pushd::pushd( $self->root );
system $cmd;
}
return 1;
}
######################################################################
# Directory Tree Integration
# A file/directory pattern to support the directory browser.
# The function takes three parameters of the full file path,
# the directory path, and the file name.
# Returns true if the file is visible.
# Returns false if the file is ignored.
# This method is used to support the functionality of the directory browser.
sub ignore_rule {
return sub {
if ( $_->{name} =~ /^\./ ) {
return 0;
}
if (Padre::Constant::WIN32) {
# On Windows only ignore files or directories that
# begin or end with a dollar sign as "hidden". This is
# mainly relevant if we are opening some project across
# a UNC path on more recent versions of Windows.
if ( $_->{name} =~ /^\$/ ) {
return 0;
}
if ( $_->{name} =~ /\$$/ ) {
return 0;
}
# Windows thumbnailing, instead of having sensibly
# centralised storage of thumbnails, likes to put a
# file in every single directory.
if ( $_->{name} eq 'Thumbs.db' ) {
return 0;
}
# Likewise, desktop.ini files are stupid files used
# by windows to make a folder behave weirdly.
# Ignore them too.
if ( $_->{name} eq 'desktop.ini' ) {
return 0;
}
}
return 1;
};
}
# Alternate form
sub ignore_skip {
my $rule = [
'(?:^|\\/)\\.',
];
if (Padre::Constant::WIN32) {
# On Windows only ignore files or directories that begin or end
# with a dollar sign as "hidden". This is mainly relevant if
# we are opening some project across a UNC path on more recent
# versions of Windows.
push @$rule, "(?:^|\\/)\\\$";
push @$rule, "\\\$\$";
# Windows thumbnailing, instead of having sensibly centralised
# storage of thumbnails, likes to put a file in every single directory.
push @$rule, "(?:^|\\/)Thumbs.db\$";
# Likewise, desktop.ini files are stupid files used by windows
# to make a folder behave weirdly. Ignore them too.
push @$rule, "(?:^|\\/)desktop.ini\$";
}
return $rule;
}
sub name {
my $self = shift;
my $name = ( reverse( File::Spec->splitdir( $self->root ) ) )[0];
if ( !defined $name or $name eq '' ) { # Fallback
$name = $self->root;
$name =~ s/^.*[\/\\]//;
}
return $name;
}
######################################################################
# Padre::Cache Integration
# The detection of VERSION allows us to make this call without having
# to load modules at project destruction time if it isn't needed.
sub DESTROY {
if ( defined $_[0]->{root} and $Padre::Cache::VERSION ) {
Padre::Cache->release( $_[0]->{root} );
}
}
1;
# Copyright 2008-2016 The Padre development team as listed in Padre.pm.
# LICENSE
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl 5 itself.
( run in 1.087 second using v1.01-cache-2.11-cpan-97f6503c9c8 )