def calculate_active_guide(self, view): tab_size = indentation.get_tab_size(view) cursor = view.sel()[-1].b region = view.line(cursor) cursorCol = view.rowcol(cursor)[1] pos = 0 for pt in xrange(region.begin(), region.end()): ch = view.substr(pt) if ch == "\t": pos += tab_size - (pos % tab_size) elif ch.isspace(): pos += 1 else: break tab = int(pos / tab_size) if cursorCol < pos: tab = int(cursorCol / tab_size) else: before = self.check_indent(view, region, False, tab_size) after = self.check_indent(view, region, True, tab_size) if after <= 0: tab -= 1 return max(tab - 1, 0)
def refresh(self, view, clear_cache): if clear_cache: self.cache = {} tab = self.calculate_active_guide(view) if clear_cache or tab != self.current_tab: self.guides = [] self.region_start = 0 self.region_end = 0 self.current_tab = tab visible = view.visible_region() self.region = visible expanded_region = sublime.Region(max(visible.a - 250, 0), min(visible.b + 5, view.size())) visible_regions = view.split_by_newlines(visible) tab_size = indentation.get_tab_size(view) for region in visible_regions: line = view.rowcol(region.a)[0] tabs = self.get_indent(region, view, tab_size) if self.current_tab < len(tabs): pos = region.a + tabs[tab] self.guides.append(sublime.Region(pos, pos)) view.add_regions("IndentGuidesListener", self.guides, "active_guide", sublime.DRAW_EMPTY)
def calculate_active_guide(self, view): tab_size = indentation.get_tab_size(view) cursor = view.sel()[-1].b region = view.line(cursor) cursorCol = view.rowcol(cursor)[1] pos = 0 for pt in xrange(region.begin(), region.end()): ch = view.substr(pt) if ch == '\t': pos += tab_size - (pos % tab_size) elif ch.isspace(): pos += 1 else: break tab = int(pos / tab_size) if cursorCol < pos: tab = int(cursorCol / tab_size) else: before = self.check_indent(view, region, False, tab_size) after = self.check_indent(view, region, True, tab_size) if after <= 0: tab -= 1 return max(tab - 1, 0)
def refresh(self, view, clear_cache): if clear_cache: self.cache = {} tab = self.calculate_active_guide(view) if clear_cache or tab != self.current_tab: self.guides = [] self.region_start = 0 self.region_end = 0 self.current_tab = tab visible = view.visible_region() self.region = visible expanded_region = sublime.Region(max(visible.a - 250, 0), min(visible.b + 5, view.size())) visible_regions = view.split_by_newlines(visible) tab_size = indentation.get_tab_size(view) for region in visible_regions: line = view.rowcol(region.a)[0] tabs = self.get_indent(region, view, tab_size) if self.current_tab < len(tabs): pos = region.a + tabs[tab] self.guides.append(sublime.Region(pos, pos)) view.add_regions('IndentGuidesListener', self.guides, 'active_guide', sublime.DRAW_EMPTY)
def update_guides(self, view, regions_of_interest, guides): tab_size = indentation.get_tab_size(view) flush_with_text = int(bool(view.settings().get("indent_guides_flush_with_text"))) flush_with_gutter = bool(view.settings().get("indent_guides_flush_with_gutter")) for roi in regions_of_interest: pos = 0 for pt in xrange(roi.begin(), roi.end()): ch = view.substr(pt) if pos % tab_size == 0 and (flush_with_gutter or pos != 0): loc = pt guides.append(sublime.Region(loc,loc)) if ch == '\t': pos += tab_size - (pos % tab_size) elif ch.isspace(): pos += 1 else: pos+=1 if flush_with_text and pos % tab_size == 0: guides.append(sublime.Region(roi.end(),roi.end())) return guides
def update_guides(self, view, regions_of_interest, guides): tab_size = indentation.get_tab_size(view) flush_with_text = int( bool(view.settings().get("indent_guides_flush_with_text"))) flush_with_gutter = bool( view.settings().get("indent_guides_flush_with_gutter")) for roi in regions_of_interest: pos = 0 for pt in xrange(roi.begin(), roi.end()): ch = view.substr(pt) if pos % tab_size == 0 and (flush_with_gutter or pos != 0): loc = pt guides.append(sublime.Region(loc, loc)) if ch == '\t': pos += tab_size - (pos % tab_size) elif ch.isspace(): pos += 1 else: pos += 1 if flush_with_text and pos % tab_size == 0: guides.append(sublime.Region(roi.end(), roi.end())) return guides