Skip to content

Commit

Permalink
adjust search start index when replacing on original line
Browse files Browse the repository at this point in the history
  • Loading branch information
SilenZcience authored and asottile committed Sep 28, 2024
1 parent ea70fd2 commit e9b5a19
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
6 changes: 6 additions & 0 deletions babi/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ def __init__(
def __iter__(self) -> _SearchIter:
return self

def replaced(self, y: int, match: Match[str], new: str) -> None:
if not self.wrapped or y != self._start_y:
return
self._start_x += len(new) - match.end() - match.start()

def _stop_if_past_original(self, y: int, match: Match[str]) -> Found:
if (
self.wrapped and (
Expand Down Expand Up @@ -487,6 +492,7 @@ def replace(
count += 1
with self.edit_action_context('replace', final=True):
replaced = match.expand(replace)
search.replaced(line_y, match, replaced)
line = screen.file.buf[line_y]
if '\n' in replaced:
replaced_lines = replaced.split('\n')
Expand Down
13 changes: 13 additions & 0 deletions tests/features/replace_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,19 @@ def test_replace_multiple_occurrences_in_line(run):
h.await_text('bqbq')


def test_replace_multiple_occurences_with_line_length_change(run):
with run() as h, and_exit(h):
h.press('a_a_')
h.press('^\\')
h.await_text('search (to replace):')
h.press_and_enter('a')
h.await_text('replace with:')
h.press_and_enter('XXX')
h.await_text('replace [yes, no, all]?')
h.press('a')
h.await_text('XXX_XXX_')


def test_replace_after_wrapping(run, ten_lines):
with run(str(ten_lines)) as h, and_exit(h):
h.press('Down')
Expand Down

0 comments on commit e9b5a19

Please sign in to comment.