From b110e4bf673abe89c11a42159321ac9480016182 Mon Sep 17 00:00:00 2001 From: Philipp Otto Date: Fri, 12 Sep 2014 03:10:04 +0200 Subject: [PATCH] add a respect_cursor_position option --- Main.sublime-menu | 14 +++++++++++++ file_scanner.py | 6 +++++- jump_along_indent.sublime-settings | 8 ++++++++ tests/test_jump_next_indent.py | 32 ++++++++++++++++++++++++++++++ tests/test_jump_prev_indent.py | 31 +++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 jump_along_indent.sublime-settings diff --git a/Main.sublime-menu b/Main.sublime-menu index 9c38938..52d138e 100644 --- a/Main.sublime-menu +++ b/Main.sublime-menu @@ -46,6 +46,20 @@ "platform": "Linux" }, "caption": "Key Bindings – User" + }, + { + "command": "open_file", + "args": { + "file": "${packages}/Jump Along Indent/jump_along_indent.sublime-settings" + }, + "caption": "Settings - Default" + }, + { + "command": "open_file", + "args": { + "file": "${packages}/User/jump_along_indent.sublime-settings" + }, + "caption": "Settings - User" } ] } diff --git a/file_scanner.py b/file_scanner.py index 594e092..b1b56d9 100644 --- a/file_scanner.py +++ b/file_scanner.py @@ -38,7 +38,11 @@ def adapt_indent(self, indent_str): return indent def search_str(self): - if re.match(r"^\s*$", self.str_to_left()) and re.match(r"^\s+\S+", self.str_to_right()): + settings = sublime.load_settings("jump_along_indent.sublime-settings") + respect_cursor_position = settings.get("respect_cursor_position") + between_leading_spaces = re.match(r"^\s*$", self.str_to_left()) and re.match(r"^\s+\S+", self.str_to_right()) + + if respect_cursor_position and between_leading_spaces: indent = self.adapt_indent(self.str_to_left()) search_str = "^ {0," + str(indent) + "}\S+" else: diff --git a/jump_along_indent.sublime-settings b/jump_along_indent.sublime-settings new file mode 100644 index 0000000..50a100b --- /dev/null +++ b/jump_along_indent.sublime-settings @@ -0,0 +1,8 @@ +{ + // By default, "Jump Along Indent" will take the indent before the cursor + // into account. + // If you want that the cursor position within the line doesn't play a role + // and instead always the full indent of the current line is relevant, set + // respect_cursor_position to false. + "respect_cursor_position" : true +} \ No newline at end of file diff --git a/tests/test_jump_next_indent.py b/tests/test_jump_next_indent.py index 47b578e..b834816 100644 --- a/tests/test_jump_next_indent.py +++ b/tests/test_jump_next_indent.py @@ -1,4 +1,5 @@ from helper import TestHelper +import sublime class TestJumpNextIndent(TestHelper): def command(self): @@ -115,3 +116,34 @@ def test_subtract_selection(self): ending_selection = [111, 85] self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + + def test_respect_cursor_position(self): + + lines = [ + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 0] + ending_selection = [29, 29] + + self.check_command(lines, starting_selection, ending_selection) + + def test_disrespect_cursor_position(self): + + settings = sublime.load_settings("jump_along_indent.sublime-settings") + settings.set("respect_cursor_position", False) + + lines = [ + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 0] + ending_selection = [56, 56] + + self.check_command(lines, starting_selection, ending_selection) + + settings.set("respect_cursor_position", True) diff --git a/tests/test_jump_prev_indent.py b/tests/test_jump_prev_indent.py index d417e4f..2ae74f9 100644 --- a/tests/test_jump_prev_indent.py +++ b/tests/test_jump_prev_indent.py @@ -1,4 +1,5 @@ from helper import TestHelper +import sublime class TestJumpPrevIndent(TestHelper): def command(self): @@ -114,3 +115,33 @@ def test_subtract_selection(self): self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + def test_respect_cursor_position(self): + + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [27, 27] + ending_selection = [0, 0] + + self.check_command(lines, starting_selection, ending_selection) + + def test_disrespect_cursor_position(self): + + settings = sublime.load_settings("jump_along_indent.sublime-settings") + settings.set("respect_cursor_position", False) + + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [56, 56] + ending_selection = [27, 27] + + self.check_command(lines, starting_selection, ending_selection) + + settings.set("respect_cursor_position", True)