128 def __init__(self, argv=[], shelltype='python', banner=[],
129 filename=None, size=100, user_local_ns=None, user_global_ns=None):
131 """ Console interface building + initialization"""
135 GObject.GObject.__init__(self)
136 self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
137 self.set_shadow_type (Gtk.ShadowType.NONE)
138 self.set_border_width(0)
139 self.
view = Gtk.TextView()
140 self.
view.modify_font (Pango.FontDescription(
"Mono 10"))
141 self.
view.set_editable (
True)
142 self.
view.set_wrap_mode(
True)
143 self.
view.set_left_margin(0)
144 self.
view.set_right_margin(0)
146 self.
buffer.create_tag (
'title',
148 weight=Pango.Weight.BOLD,
151 self.
buffer.create_tag (
'subtitle',
155 self.
buffer.create_tag (
'output',
158 self.
buffer.create_tag (
'error',
160 style=Pango.Style.OBLIQUE,
162 self.
buffer.create_tag (
'prompt',
164 weight=Pango.Weight.BOLD,
166 self.
buffer.create_tag(
'0')
167 self.
color_pat = re.compile(
r'\x01?\x1b\[(.*?)m\x02?')
168 for code
in ansi_colors:
169 self.
buffer.create_tag(code,
170 foreground=ansi_colors[code],
172 for text, style
in banner:
173 self.
write (text, style)
174 iter = self.
buffer.get_iter_at_mark(self.
buffer.get_insert())
175 self.
buffer.create_mark (
'linestart', iter,
True)
176 self.
view.add_events(Gdk.EventMask.KEY_PRESS_MASK)
185 self.
cout = io.StringIO()
186 self.
cout.truncate(0)
188 if not user_local_ns:
189 user_local_ns = locals()
190 if not user_global_ns:
191 user_global_ns = globals()
193 if shelltype==
'ipython':
202 self.
stdout = ConsoleOut (self, sys.stdout.fileno(),
'output')
203 self.
stderr = ConsoleOut (self, sys.stderr.fileno(),
'error')
204 self.
stdin = ConsoleIn (self, sys.stdin.fileno())
208 if not os.path.exists (self.
fifoname):
212 self.
shell.eval(self)
213 self.
cout.truncate(0)
261 """ Write text using given style (if any) """
263 segment = segments.pop(0)
264 start,end = self.
buffer.get_bounds()
266 self.
buffer.insert(end, segment)
268 self.
buffer.insert_with_tags_by_name(end, segment, style)
271 for tag
in ansi_tags:
272 i = segments.index(tag)
273 self.
buffer.insert_with_tags_by_name(self.
buffer.get_end_iter(),
276 self.
view.scroll_mark_onscreen(self.
buffer.get_insert())
309 def key_press_event (self, widget, event):
310 """ Handle key press event """
312 keyname = Gdk.keyval_name (event.keyval)
315 if keyname
in [
'Return',
'KP_Enter']:
327 elif keyname
in [
'Left',
'BackSpace']:
328 mark = self.
buffer.get_mark(
'linestart')
329 linestart = self.
buffer.get_iter_at_mark(mark)
330 iter = self.
buffer.get_iter_at_mark(self.
buffer.get_insert())
331 if iter.compare(linestart) <= 0:
334 elif keyname ==
'Right':
338 elif keyname ==
'Down':
343 elif keyname ==
'Up':
348 elif keyname ==
'Home':
349 mark = self.
buffer.get_mark(
'linestart')
350 linestart = self.
buffer.get_iter_at_mark(mark)
351 self.
buffer.place_cursor (linestart)
355 elif keyname ==
'Tab':
359 completed, possibilities = self.
shell.complete(line)
360 if len(possibilities) > 1:
363 for symbol
in possibilities:
364 self.
write(symbol+
'\n')
370 elif event.get_state() & Gdk.ModifierType.CONTROL_MASK:
371 if keyname
in [
'a',
'A']:
372 mark = self.
buffer.get_mark(
'linestart')
373 linestart = self.
buffer.get_iter_at_mark(mark)
374 self.
buffer.place_cursor (linestart)
376 elif keyname
in [
'e',
'E']:
377 end = self.
buffer.get_end_iter()
378 self.
buffer.place_cursor (end)
380 elif keyname
in [
'k',
'K']:
381 start = self.
buffer.get_iter_at_mark (self.
buffer.get_insert())
382 end = self.
buffer.get_end_iter()
384 self.
buffer.delete(start,end)
386 elif keyname
in [
'y',
'Y']:
388 iter = self.
buffer.get_iter_at_mark (self.
buffer.get_insert())
391 elif keyname
in [
'l',
'L']:
392 start = self.
buffer.get_start_iter()
393 end = self.
buffer.get_end_iter()
394 end.backward_sentence_start()
395 self.
buffer.delete (start,end)
396 elif keyname
in [
'd',
'D']:
402 mark = self.
buffer.get_mark(
'linestart')
403 linestart = self.
buffer.get_iter_at_mark(mark)
404 iter = self.
buffer.get_iter_at_mark(self.
buffer.get_insert())
405 if iter.compare(linestart) < 0:
406 iter = self.
buffer.get_end_iter()
407 self.
buffer.place_cursor (iter)