10 __slots__
= ['window']
11 def __init__(self
, window
):
13 def write(self
, text
):
15 self
.window
.write(text
, line_ending
='')
17 self
.window
.write(traceback
.format_exc())
19 class ConsoleWindow(windows
.SimpleWindow
):
20 def __init__(self
, network
, id):
21 windows
.SimpleWindow
.__init
__(self
, network
, id)
23 writer
= ConsoleWriter(self
)
25 if urk
.platform
!= 'stdio':
29 self
.globals = {'window': self
}
32 #this prevents problems (and updates an open console window) on reload
34 for window
in windows
.manager
:
35 if type(window
).__name
__ == "ConsoleWindow":
36 window
.mutate(ConsoleWindow
, window
.network
, window
.id)
40 if isinstance(e
.window
, ConsoleWindow
):
41 sys
.stdout
= sys
.__stdout
__
42 sys
.stderr
= sys
.__stderr
__
44 def onCommandConsole(e
):
45 windows
.new(ConsoleWindow
, None, "console").activate()
48 if isinstance(e
.window
, ConsoleWindow
):
49 import pydoc
#fix nonresponsive help() command
50 old_pager
, pydoc
.pager
= pydoc
.pager
, pydoc
.plainpager
51 e
.window
.globals.update(sys
.modules
)
52 text
= ' '.join(e
.args
)
54 e
.window
.write(">>> %s" % text
)
55 result
= eval(text
, e
.window
.globals, e
.window
.locals)
56 if result
is not None:
57 e
.window
.write(repr(result
))
58 e
.window
.globals['_'] = result
61 exec text
in e
.window
.globals, e
.window
.locals
66 pydoc
.pager
= old_pager
68 raise events
.CommandError("There's no one here to speak to.")
71 if conf
.get('start-console'):
72 windows
.new(ConsoleWindow
, None, "console")