Expirmental improvements to highlight tracking.
This commit is contained in:
@ -382,6 +382,151 @@ class TableManager:
|
||||
# Check if cursor is within the column bounds
|
||||
return column_start <= cursor_x < column_end
|
||||
|
||||
def move_to_first_cell(self):
|
||||
"""Move to first cell in current row"""
|
||||
if not self.env["runtime"]["CursorManager"].is_review_mode():
|
||||
return None
|
||||
|
||||
cursor_pos = self.env["runtime"]["CursorManager"].get_review_or_text_cursor()
|
||||
if not cursor_pos:
|
||||
return None
|
||||
|
||||
line_text = self.env["runtime"]["ScreenManager"].get_line_text(cursor_pos["y"])
|
||||
if not line_text:
|
||||
return None
|
||||
|
||||
columns = self.parse_line_into_columns(line_text)
|
||||
if not columns:
|
||||
return None
|
||||
|
||||
# Set current column to first column
|
||||
self.currentColumn = 0
|
||||
|
||||
# Return info for the first column
|
||||
return self.get_table_cell_info_by_indices(cursor_pos["y"], 0)
|
||||
|
||||
def move_to_last_cell(self):
|
||||
"""Move to last cell in current row"""
|
||||
if not self.env["runtime"]["CursorManager"].is_review_mode():
|
||||
return None
|
||||
|
||||
cursor_pos = self.env["runtime"]["CursorManager"].get_review_or_text_cursor()
|
||||
if not cursor_pos:
|
||||
return None
|
||||
|
||||
line_text = self.env["runtime"]["ScreenManager"].get_line_text(cursor_pos["y"])
|
||||
if not line_text:
|
||||
return None
|
||||
|
||||
columns = self.parse_line_into_columns(line_text)
|
||||
if not columns:
|
||||
return None
|
||||
|
||||
# Set current column to last column
|
||||
self.currentColumn = len(columns) - 1
|
||||
|
||||
# Return info for the last column
|
||||
return self.get_table_cell_info_by_indices(cursor_pos["y"], self.currentColumn)
|
||||
|
||||
def move_to_first_char_in_cell(self):
|
||||
"""Move to first character in current cell"""
|
||||
if not self.env["runtime"]["CursorManager"].is_review_mode():
|
||||
return None
|
||||
|
||||
cursor_pos = self.env["runtime"]["CursorManager"].get_review_or_text_cursor()
|
||||
if not cursor_pos:
|
||||
return None
|
||||
|
||||
line_text = self.env["runtime"]["ScreenManager"].get_line_text(cursor_pos["y"])
|
||||
if not line_text:
|
||||
return None
|
||||
|
||||
columns = self.parse_line_into_columns(line_text)
|
||||
if not columns or self.currentColumn < 0 or self.currentColumn >= len(columns):
|
||||
return None
|
||||
|
||||
# Get column start position
|
||||
column_start = self.get_column_start_position(line_text, self.currentColumn)
|
||||
|
||||
# Find first non-space character in the column
|
||||
column_text = columns[self.currentColumn]
|
||||
first_char_offset = len(column_text) - len(column_text.lstrip())
|
||||
|
||||
# Set cursor position to first character in cell
|
||||
new_x = column_start + first_char_offset
|
||||
self.env["runtime"]["CursorManager"].set_review_cursor_position(new_x, cursor_pos["y"])
|
||||
|
||||
# Get the character at the new position
|
||||
from fenrirscreenreader.utils import char_utils
|
||||
(
|
||||
self.env["screen"]["newCursorReview"]["x"],
|
||||
self.env["screen"]["newCursorReview"]["y"],
|
||||
curr_char,
|
||||
) = char_utils.get_current_char(
|
||||
new_x,
|
||||
cursor_pos["y"],
|
||||
self.env["screen"]["new_content_text"],
|
||||
)
|
||||
|
||||
return {
|
||||
'cell_content': column_text.strip(),
|
||||
'column_header': self.get_column_header(self.currentColumn),
|
||||
'character': curr_char,
|
||||
'position': 'first'
|
||||
}
|
||||
|
||||
def move_to_last_char_in_cell(self):
|
||||
"""Move to last character in current cell"""
|
||||
if not self.env["runtime"]["CursorManager"].is_review_mode():
|
||||
return None
|
||||
|
||||
cursor_pos = self.env["runtime"]["CursorManager"].get_review_or_text_cursor()
|
||||
if not cursor_pos:
|
||||
return None
|
||||
|
||||
line_text = self.env["runtime"]["ScreenManager"].get_line_text(cursor_pos["y"])
|
||||
if not line_text:
|
||||
return None
|
||||
|
||||
columns = self.parse_line_into_columns(line_text)
|
||||
if not columns or self.currentColumn < 0 or self.currentColumn >= len(columns):
|
||||
return None
|
||||
|
||||
# Get column start position
|
||||
column_start = self.get_column_start_position(line_text, self.currentColumn)
|
||||
column_text = columns[self.currentColumn]
|
||||
|
||||
# Find last non-space character in the column
|
||||
trimmed_text = column_text.rstrip()
|
||||
if not trimmed_text:
|
||||
# If empty cell, go to column start
|
||||
new_x = column_start
|
||||
else:
|
||||
# Find the position of the last character
|
||||
new_x = column_start + len(trimmed_text) - 1
|
||||
|
||||
# Set cursor position to last character in cell
|
||||
self.env["runtime"]["CursorManager"].set_review_cursor_position(new_x, cursor_pos["y"])
|
||||
|
||||
# Get the character at the new position
|
||||
from fenrirscreenreader.utils import char_utils
|
||||
(
|
||||
self.env["screen"]["newCursorReview"]["x"],
|
||||
self.env["screen"]["newCursorReview"]["y"],
|
||||
curr_char,
|
||||
) = char_utils.get_current_char(
|
||||
new_x,
|
||||
cursor_pos["y"],
|
||||
self.env["screen"]["new_content_text"],
|
||||
)
|
||||
|
||||
return {
|
||||
'cell_content': column_text.strip(),
|
||||
'column_header': self.get_column_header(self.currentColumn),
|
||||
'character': curr_char,
|
||||
'position': 'last'
|
||||
}
|
||||
|
||||
def reset_table_mode(self):
|
||||
self.set_head_line()
|
||||
|
||||
|
Reference in New Issue
Block a user