home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / shell.al < prev    next >
Text File  |  2005-04-27  |  1KB  |  39 lines

  1. # NOTE: Derived from lib/Term/ReadLine/Zoid/ViCommand.pm.
  2. # Changes made here will be lost when autosplit is run again.
  3. # See AutoSplit.pm.
  4. package Term::ReadLine::Zoid::ViCommand;
  5.  
  6. #line 1058 "lib/Term/ReadLine/Zoid/ViCommand.pm (autosplit into blib/lib/auto/Term/ReadLine/Zoid/ViCommand/shell.al)"
  7. sub shell {
  8.     my ($self, $string) = @_;
  9.  
  10.     my ($fh, $file);
  11.     if ($string =~ /(?<!\\)%/) {
  12.         eval 'require File::Temp' || return $self->bell;
  13.         ($fh, $file) = File::Temp::tempfile('PERL_RL_Zoid_XXXXX', DIR => File::Spec->tmpdir);
  14.         print $fh join "\n", @{$$self{lines}};
  15.         close $fh;
  16.         $string =~ s/(\\)\%|\%/$1 ? '%' : $file/ge;
  17.     }
  18.  
  19.     #print STDERR "system: $string\n";
  20.     print { $$self{OUT} } "\n";
  21.     my $error = (exists $$self{config}{shell})
  22.         ? $$self{config}{shell}->($string) : system( $string ) ;
  23.  
  24.     if ($error) { printf { $$self{OUT} } "\nshell returned %s\n\n", $error >> 8  }
  25.     elsif ($file) {
  26.         open TMP, $file or return $self->bell;
  27.         @{$$self{lines}} = map {chomp; $_} (<TMP>);
  28.         close TMP;
  29.         $$self{pos} = [ length($$self{lines}[-1]), $#{$$self{lines}} ];
  30.     }
  31.     $$self{_buffer} = 0;
  32.     unlink $file if $file;
  33.  
  34.     return 1;
  35. }
  36.  
  37. # end of Term::ReadLine::Zoid::ViCommand::shell
  38. 1;
  39.