def init_highlighting(self, f): highlighter = self.highlighters.get(f.language(), None) if isinstance(highlighter, Highlighter): ed = GPS.EditorBuffer.get(f, open=False) if ed: gtk_ed = get_gtk_buffer(ed) if not gtk_ed.highlighting_initialized: highlighter.init_highlighting(ed) highlighter.gtk_highlight(gtk_ed)
def init_highlighting(self, ed): gtk_ed = get_gtk_buffer(ed) gtk_ed.highlighting_initialized = True gtk_ed.stacks = HighlighterStacks() if not hasattr(gtk_ed, "idle_highlight_id"): gtk_ed.idle_highlight_id = None def action_handler(loc): """:type loc: Gtk.TextIter""" if gtk_ed.idle_highlight_id: GLib.source_remove(gtk_ed.idle_highlight_id) # Highlight all the rest of the buffer # TODO: Highlight N lines synchronously, and if there are any # TODO: remaining, the rest in async self.gtk_highlight_region(gtk_ed, loc.get_line()) # noinspection PyUnusedLocal def highlighting_insert_text_before(buf, loc, text, length): buf.insert_loc = loc.to_tuple() # noinspection PyUnusedLocal def highlighting_insert_text(buf, loc, text, length): nb_new_lines = len(text.split("\n")) - 1 itr = buf.iter_from_tuple(buf.insert_loc) buf.stacks.insert_newlines(nb_new_lines, itr.get_line()) action_handler(itr) def highlighting_delete_range_before(buf, loc, end): buf.nb_deleted_lines = len( buf.get_text(loc, end, True).split("\n") ) - 1 # noinspection PyUnusedLocal def highlighting_delete_range(buf, loc, end): buf.stacks.delete_lines(buf.nb_deleted_lines, loc.get_line()) action_handler(loc) gtk_ed.connect_after("insert-text", highlighting_insert_text) gtk_ed.connect_after("delete-range", highlighting_delete_range) gtk_ed.connect("delete-range", highlighting_delete_range_before) gtk_ed.connect("insert-text", highlighting_insert_text_before)
def test_driver(): # Simple open/close case buf = GPS.EditorBuffer.get(GPS.File("foo.py")) gps_assert(count_object("EditorBuffer"), 1, "Initital state") buf.close(force=True) del buf gc.collect() gps_assert(count_object("EditorBuffer"), 0, "The buffer should have been cleaned") # Manual call to get_gtk_buffer buf = GPS.EditorBuffer.get(GPS.File("foo.py")) gtk_buf = get_gtk_buffer(buf) buf.close(force=True) del buf gc.collect() gps_assert(count_object("EditorBuffer"), 1, "gtk_buf should still have a reference on buf") del gtk_buf gc.collect() gps_assert(count_object("EditorBuffer"), 0, "The last reference should have been gtk_buf")
def __gps_to_gtk_fun(start, end, *args, **kwargs): gtk_ed = get_gtk_buffer(start.buffer()) gtk_start = gtk_ed.get_iter_at_offset(start.offset()) gtk_end = gtk_ed.get_iter_at_offset(end.offset()) fun(gtk_ed, gtk_start, gtk_end, *args, **kwargs)