diff -r 01581e8b50f2 Lib/idlelib/PyShell.py --- a/Lib/idlelib/PyShell.py Mon May 07 23:50:05 2012 +0200 +++ b/Lib/idlelib/PyShell.py Mon May 07 21:35:21 2012 -0500 @@ -411,6 +411,7 @@ self.rpcclt.register("flist", self.tkconsole.flist) self.rpcclt.register("linecache", linecache) self.rpcclt.register("interp", self) + self.rpcclt.register("pager", self.tkconsole.pager) self.transfer_path(with_cwd=True) self.poll_subprocess() return self.rpcclt @@ -857,10 +858,9 @@ sys.stderr = self.stderr sys.stdin = self try: - # page help() text to shell. + # page help() text to a textView widget import pydoc # import must be done here to capture i/o rebinding. - # XXX KBK 27Dec07 use a textView someday, but must work w/o subproc - pydoc.pager = pydoc.plainpager + pydoc.pager = self.pager except: sys.stderr = sys.__stderr__ raise @@ -1245,6 +1245,28 @@ if not use_subprocess: raise KeyboardInterrupt + def pager(self, text): + import pydoc + from idlelib.textView import view_text + plaintext = pydoc.plain(text) + if self.use_help_window: + parent = self.top + rawstr = r"\AHelp on[^\n]*(?=:)" + m = re.search(rawstr, plaintext) + if m: + title = m.group() + else: + title = 'Help Pager' + view_text(parent, title, plaintext, modal=False) + else: + self.stdout.write(plaintext) + + @property + def use_help_window(self): + # TODO: check option for rendering into shell or as window + return True + + class PseudoFile(object): def __init__(self, shell, tags, encoding=None): diff -r 01581e8b50f2 Lib/idlelib/run.py --- a/Lib/idlelib/run.py Mon May 07 23:50:05 2012 +0200 +++ b/Lib/idlelib/run.py Mon May 07 21:35:21 2012 -0500 @@ -270,7 +270,9 @@ sys.displayhook = rpc.displayhook # page help() text to shell. import pydoc # import must be done here to capture i/o binding - pydoc.pager = pydoc.plainpager + idle_pager = self.get_remote_proxy("pager") + pydoc.pager = lambda text: idle_pager.__call__(text) + from idlelib import IOBinding sys.stdin.encoding = sys.stdout.encoding = \ sys.stderr.encoding = IOBinding.encoding