def run(self, edit, line_range=None): if not line_range['text_range']: # No-op: user issued ":". return a, b = ex_range.new_calculate_range(self.view, line_range)[0] self.view.run_command('vi_goto_line', {'repeat': b}) self.view.show(self.view.sel()[0])
def get_region_by_range(view, line_range=None, split_visual=False): # If GLOBAL_RANGES exists, the ExGlobal command has been run right before # the current command, and we know we must process these lines. # XXX move this further down into the range parsing? global GLOBAL_RANGES if GLOBAL_RANGES: rv = GLOBAL_RANGES[:] GLOBAL_RANGES = [] return rv regions = [] if line_range: regions, visual_regions = ex_range.new_calculate_range(view, line_range) lines = [] for region in regions: a, b = region r = sublime.Region(view.text_point(a - 1, 0), view.line(view.text_point(b - 1, 0)).end()) if not visual_regions or split_visual: lines.extend(view.split_by_newlines(r)) else: if view.substr(r)[-1] == "\n": if r.begin() != r.end(): r = sublime.Region(r.begin(), r.end() - 1) lines.append(r) return lines
def testCalculateCorrectRange(self): values = ( (new_calculate_range(g_test_view, '0'), [(0, 0)]), (new_calculate_range(g_test_view, '1'), [(1, 1)]), (new_calculate_range(g_test_view, '1,1'), [(1, 1)]), (new_calculate_range(g_test_view, '%,1'), [(1, 538)]), (new_calculate_range(g_test_view, '1,%'), [(1, 538)]), (new_calculate_range(g_test_view, '1+99,160-10'), [(100, 150)]), (new_calculate_range(g_test_view, '/THIRTY/+10,100'), [(40, 100)]), ) select_line(g_test_view, 31) values += ( (new_calculate_range(g_test_view, '10,/THIRTY/'), [(10, 31)]), (new_calculate_range(g_test_view, '10;/THIRTY/'), [(10, 30)]), ) for actual, expected in values: self.assertEquals(actual, expected)
def get_region_by_range(view, line_range=None, split_visual=False): # If GLOBAL_RANGES exists, the ExGlobal command has been run right before # the current command, and we know we must process these lines. # XXX move this further down into the range parsing? global GLOBAL_RANGES if GLOBAL_RANGES: rv = GLOBAL_RANGES[:] GLOBAL_RANGES = [] return rv if line_range: regions = ex_range.new_calculate_range(view, line_range) lines = [] for region in regions: a, b = region r = sublime.Region(view.text_point(a - 1, 0), view.full_line(view.text_point(b - 1, 0)).end()) lines.extend(view.split_by_newlines(r)) return lines