Updated display_text so that it will hopefully skip blank lines when reading with arrow keys.

This commit is contained in:
Storm Dragon 2025-02-15 02:39:14 -05:00
parent 1cb57391d8
commit da17b71c28

View File

@ -677,9 +677,9 @@ def display_text(text):
"""Display and speak text with navigation controls. """Display and speak text with navigation controls.
Allows users to: Allows users to:
- Navigate text line by line with arrow keys - Navigate text line by line with arrow keys (skipping blank lines)
- Listen to full text with space - Listen to full text with space
- Copy current line or full text - Copy current line or full text (preserving blank lines)
- Exit with enter/escape - Exit with enter/escape
- Volume controls (with Alt modifier): - Volume controls (with Alt modifier):
- Alt+PageUp/PageDown: Master volume up/down - Alt+PageUp/PageDown: Master volume up/down
@ -689,12 +689,23 @@ def display_text(text):
Args: Args:
text (list): List of text lines to display text (list): List of text lines to display
""" """
# Store original text with blank lines for copying
originalText = text.copy()
# Create navigation text by filtering out blank lines
navText = [line for line in text if line.strip()]
# Add instructions at the start
instructions = ("Press space to read the whole text. Use up and down arrows to navigate "
"the text line by line. Press c to copy the current line to the clipboard "
"or t to copy the entire text. Press enter or escape when you are done reading.")
navText.insert(0, instructions)
# Add end marker
navText.append("End of text.")
currentIndex = 0 currentIndex = 0
text.insert(0, "Press space to read the whole text. Use up and down arrows to navigate " speak(navText[currentIndex])
"the text line by line. Press c to copy the current line to the clipboard "
"or t to copy the entire text. Press enter or escape when you are done reading.")
text.append("End of text.")
speak(text[currentIndex])
while True: while True:
event = pygame.event.wait() event = pygame.event.wait()
@ -717,32 +728,33 @@ def display_text(text):
adjust_sfx_volume(0.1) adjust_sfx_volume(0.1)
elif event.key == pygame.K_DELETE: elif event.key == pygame.K_DELETE:
adjust_sfx_volume(-0.1) adjust_sfx_volume(-0.1)
# Regular text navigation (no Alt required)
else: else:
if event.key in (pygame.K_ESCAPE, pygame.K_RETURN): if event.key in (pygame.K_ESCAPE, pygame.K_RETURN):
return return
if event.key in [pygame.K_DOWN, pygame.K_s] and currentIndex < len(text) - 1: if event.key in [pygame.K_DOWN, pygame.K_s] and currentIndex < len(navText) - 1:
currentIndex += 1 currentIndex += 1
speak(text[currentIndex]) speak(navText[currentIndex])
if event.key in [pygame.K_UP, pygame.K_w] and currentIndex > 0: if event.key in [pygame.K_UP, pygame.K_w] and currentIndex > 0:
currentIndex -= 1 currentIndex -= 1
speak(text[currentIndex]) speak(navText[currentIndex])
if event.key == pygame.K_SPACE: if event.key == pygame.K_SPACE:
speak(' '.join(text[1:])) # Join with newlines to preserve spacing in speech
speak('\n'.join(originalText[1:-1]))
if event.key == pygame.K_c: if event.key == pygame.K_c:
try: try:
pyperclip.copy(text[currentIndex]) pyperclip.copy(navText[currentIndex])
speak("Copied " + text[currentIndex] + " to the clipboard.") speak("Copied " + navText[currentIndex] + " to the clipboard.")
except: except:
speak("Failed to copy the text to the clipboard.") speak("Failed to copy the text to the clipboard.")
if event.key == pygame.K_t: if event.key == pygame.K_t:
try: try:
pyperclip.copy(' '.join(text[1:-1])) # Join with newlines to preserve blank lines in full text
pyperclip.copy('\n'.join(originalText[1:-1]))
speak("Copied entire message to the clipboard.") speak("Copied entire message to the clipboard.")
except: except:
speak("Failed to copy the text to the clipboard.") speak("Failed to copy the text to the clipboard.")