some cleanup and generic buffer piping
--HG-- branch : pmacs2
This commit is contained in:
parent
d2334621ee
commit
2dcac2c1f1
|
@ -626,6 +626,19 @@ class Application(object):
|
|||
else:
|
||||
i += 1
|
||||
|
||||
# running external programs
|
||||
def run_pipe(self, args, b, name='*Output*', switch='yes'):
|
||||
pipe = Popen(args=args, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
|
||||
pipe.stdin.write(b.make_string())
|
||||
pipe.stdin.close()
|
||||
output = pipe.stdout.read()
|
||||
status = pipe.wait()
|
||||
if callable(switch):
|
||||
switch_to = switch(status)
|
||||
else:
|
||||
switch_to = bool(switch)
|
||||
self.data_buffer(name, output, switch_to=switch_to)
|
||||
return status
|
||||
def run_external(self, *args):
|
||||
curses.reset_shell_mode()
|
||||
try:
|
||||
|
|
27
mode/perl.py
27
mode/perl.py
|
@ -1,4 +1,5 @@
|
|||
import os, re, string, sys
|
||||
from subprocess import Popen, PIPE, STDOUT
|
||||
import buffer, color, commands, completer, context, default, method, mode, regex, tab
|
||||
from point import Point
|
||||
from lex import Grammar, PatternRule, ContextPatternRule, RegionRule, \
|
||||
|
@ -196,25 +197,19 @@ class PerlSetLib(Method):
|
|||
class PerlCheckSyntax(Method):
|
||||
'''Check the syntax of a perl file'''
|
||||
def _execute(self, w, **vargs):
|
||||
app = w.application
|
||||
perllib = w.application.config.get('perl.lib')
|
||||
if perllib:
|
||||
cmd = "perl -c -I '%s' '%s'" % (perllib, w.buffer.path)
|
||||
else:
|
||||
cmd = "perl -c '%s'" % (w.buffer.path)
|
||||
(status, output) = commands.getstatusoutput(cmd)
|
||||
if status == 0:
|
||||
app.set_error("Syntax OK")
|
||||
app.data_buffer("*Perl-Check-Syntax*", output, switch_to=False)
|
||||
else:
|
||||
app.data_buffer("*Perl-Check-Syntax*", output)
|
||||
a = w.application
|
||||
args = ('perl', '-I', a.config.get('perl.lib', '.'), '-c', '-')
|
||||
retval = a.run_pipe(args, w.buffer, '*Perl-Syntax*', lambda x: x != 0)
|
||||
if retval == 0: a.set_error("Syntax OK")
|
||||
|
||||
class PerlViewModulePerldoc(Method):
|
||||
'''View documentation about this file using perldoc'''
|
||||
'''View documentation about this buffer using perldoc'''
|
||||
prog = 'use Pod::Text;' \
|
||||
'Pod::Text->new(sentence=>0, width=>78)->parse_from_filehandle();'
|
||||
def _execute(self, w, **vargs):
|
||||
cmd = "perldoc -t -T '%s'" % w.buffer.path
|
||||
(status, output) = commands.getstatusoutput(cmd)
|
||||
w.application.data_buffer("*Perldoc*", output, switch_to=True)
|
||||
app = w.application
|
||||
args = ('perl', '-e', self.prog)
|
||||
app.run_pipe(args, w.buffer, '*Perldoc*', True)
|
||||
|
||||
class PerlViewWordPerldoc(Method):
|
||||
'''View documentation about a package or function using perldoc'''
|
||||
|
|
Loading…
Reference in New Issue