diff --git a/method/shell.py b/method/shell.py index f542fc7..eb2cabc 100644 --- a/method/shell.py +++ b/method/shell.py @@ -1,7 +1,7 @@ import os, commands, re, sets, tempfile from subprocess import Popen, PIPE, STDOUT -import buffer, default, dirutil, regex, util, window +import buffer, default, dirutil, regex, term, util, window from point import Point from method import DATATYPES, Method, Argument @@ -57,6 +57,32 @@ class Exec(Method): else: self._doit(w, None, vargs['cmd']) +class Man(Exec): + '''Execute a command in a shell and put the output in a new buffer''' + args = [Argument('name', prompt="Program: ")] + def _execute(self, w, **vargs): + name = vargs['name'] + cmd = 'man %r' % name + p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT) + output = p.stdout.read() + result = p.wait() + status = os.WEXITSTATUS(result) + if not os.WIFEXITED(result): + err = True + errmsg = "man: killed by signal %r" % os.WTERMSIG(result) + elif status != 0: + err = True + errmsg = "man: failed with status %r" % status + else: + err = False + errmsg = "man: ok" + if output: + xterm = term.XTerm() + output = xterm.filter(output) + switch_to = err or self.show_success + w.application.data_buffer('*Manpage*', output, switch_to=switch_to) + w.set_error(errmsg) + class Pipe(Method): '''Pipe the buffer's contents through the command, and display the output in a new buffer''' args = [Argument('cmd', datatype="str", prompt="Command: ")]