From 24b815d9cfe4f87a2180b4e0e45ee70d4e936b3d Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sun, 5 Apr 2026 11:58:54 +0700 Subject: [PATCH] defensive get_selection --- src/textual/selection.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/textual/selection.py b/src/textual/selection.py index 0466fbec5a..25da6cfb0f 100644 --- a/src/textual/selection.py +++ b/src/textual/selection.py @@ -40,10 +40,10 @@ def extract(self, text: str) -> str: if not lines: return "" if self.start is None: - start_line = 0 + start_line_index = 0 start_offset = 0 else: - start_line, start_offset = self.start.transpose + start_line_index, start_offset = self.start.transpose if self.end is None: end_line = len(lines) @@ -52,18 +52,21 @@ def extract(self, text: str) -> str: end_line, end_offset = self.end.transpose end_line = min(len(lines), end_line) - if start_line == end_line: - return lines[start_line][start_offset:end_offset] + if start_line_index == end_line: + return lines[start_line_index][start_offset:end_offset] selection: list[str] = [] - selected_lines = lines[start_line : end_line + 1] + selected_lines = lines[start_line_index : end_line + 1] if len(selected_lines) >= 2: first_line, *mid_lines, last_line = selected_lines selection.append(first_line[start_offset:]) selection.extend(mid_lines) selection.append(last_line[:end_offset]) else: - return lines[start_line][start_offset:end_offset] + try: + selection.append(lines[start_line_index][start_offset:end_offset]) + except IndexError: + pass return "\n".join(selection) def get_span(self, y: int) -> tuple[int, int] | None: