|
50 | 50 | _COLORS = dict(b='blue', c='cyan', g='green', m='magenta', r='red',
|
51 | 51 | w='white', y='yellow', k='black', d='black')
|
52 | 52 |
|
| 53 | +def add_tags_to_buffer(color_scheme, text_buffer): |
| 54 | + tags = dict() |
| 55 | + for (name, value) in color_scheme.iteritems(): |
| 56 | + tag = tags[name] = text_buffer.create_tag(name) |
| 57 | + for (char, prop) in zip(value, ['foreground', 'background']): |
| 58 | + if char.lower() == 'd': |
| 59 | + continue |
| 60 | + tag.set_property(prop, _COLORS[char.lower()]) |
| 61 | + if char.isupper(): |
| 62 | + tag.set_property('weight', pango.WEIGHT_BOLD) |
| 63 | + return tags |
| 64 | + |
53 | 65 | class ArgspecFormatter(object):
|
54 | 66 | """
|
55 | 67 | Format an argspec using Pango markup language.
|
@@ -335,15 +347,7 @@ def __init__(self, interpreter, config):
|
335 | 347 |
|
336 | 348 | self.text_buffer = self.get_buffer()
|
337 | 349 | self.interact = GTKInteraction(self.config, Statusbar())
|
338 |
| - tags = dict() |
339 |
| - for (name, value) in self.config.color_gtk_scheme.iteritems(): |
340 |
| - tag = tags[name] = self.text_buffer.create_tag(name) |
341 |
| - for (char, prop) in zip(value, ['foreground', 'background']): |
342 |
| - if char.lower() == 'd': |
343 |
| - continue |
344 |
| - tag.set_property(prop, _COLORS[char.lower()]) |
345 |
| - if char.isupper(): |
346 |
| - tag.set_property('weight', pango.WEIGHT_BOLD) |
| 350 | + tags = add_tags_to_buffer(self.config.color_gtk_scheme, self.text_buffer) |
347 | 351 | tags['prompt'].set_property('editable', False)
|
348 | 352 |
|
349 | 353 | self.text_buffer.connect('delete-range', self.on_buf_delete_range)
|
@@ -467,7 +471,29 @@ def do_key_press_event(self, event):
|
467 | 471 | gtk.gdk.MOD4_MASK |
|
468 | 472 | gtk.gdk.SHIFT_MASK)
|
469 | 473 | if not state:
|
470 |
| - if event.keyval == gtk.keysyms.Return: |
| 474 | + if event.keyval == gtk.keysyms.F2: |
| 475 | + source = self.get_source_of_current_name() |
| 476 | + if source is not None: |
| 477 | + win = gtk.Window() |
| 478 | + sw = gtk.ScrolledWindow() |
| 479 | + view = gtk.TextView() |
| 480 | + buffer = view.get_buffer() |
| 481 | + add_tags_to_buffer(self.config.color_gtk_scheme, buffer) |
| 482 | + from pygments.lexers import PythonLexer |
| 483 | + tokens = PythonLexer().get_tokens(source) |
| 484 | + for (token, value) in tokens: |
| 485 | + while token not in theme_map: |
| 486 | + token = token.parent |
| 487 | + iter_ = buffer.get_end_iter() |
| 488 | + buffer.insert_with_tags_by_name(iter_, value, |
| 489 | + theme_map[token]) |
| 490 | + sw.add(view) |
| 491 | + win.add(sw) |
| 492 | + win.show_all() |
| 493 | + else: |
| 494 | + # XXX Error message |
| 495 | + pass |
| 496 | + elif event.keyval == gtk.keysyms.Return: |
471 | 497 | if self.list_win_visible:
|
472 | 498 | self.list_win_visible = False
|
473 | 499 | self.list_win.hide()
|
|
0 commit comments