feat: add chat input history navigation (up/down)
This commit is contained in:
@@ -260,6 +260,9 @@ class TuimbleApp(App):
|
|||||||
username=srv.username,
|
username=srv.username,
|
||||||
password=srv.password,
|
password=srv.password,
|
||||||
)
|
)
|
||||||
|
self._history: list[str] = []
|
||||||
|
self._history_idx: int = -1
|
||||||
|
self._history_draft: str = ""
|
||||||
acfg = self._config.audio
|
acfg = self._config.audio
|
||||||
self._audio = AudioPipeline(
|
self._audio = AudioPipeline(
|
||||||
sample_rate=acfg.sample_rate,
|
sample_rate=acfg.sample_rate,
|
||||||
@@ -362,6 +365,8 @@ class TuimbleApp(App):
|
|||||||
if not text:
|
if not text:
|
||||||
return
|
return
|
||||||
event.input.clear()
|
event.input.clear()
|
||||||
|
self._history.append(text)
|
||||||
|
self._history_idx = -1
|
||||||
|
|
||||||
if not self._client.connected:
|
if not self._client.connected:
|
||||||
self._show_error("not connected")
|
self._show_error("not connected")
|
||||||
@@ -429,7 +434,35 @@ class TuimbleApp(App):
|
|||||||
# -- PTT -----------------------------------------------------------------
|
# -- PTT -----------------------------------------------------------------
|
||||||
|
|
||||||
def on_key(self, event: events.Key) -> None:
|
def on_key(self, event: events.Key) -> None:
|
||||||
"""Handle PTT key events."""
|
"""Handle input history navigation and PTT key events."""
|
||||||
|
focused = self.focused
|
||||||
|
if isinstance(focused, Input) and event.key in ("up", "down"):
|
||||||
|
inp = focused
|
||||||
|
if event.key == "up":
|
||||||
|
if not self._history:
|
||||||
|
event.prevent_default()
|
||||||
|
return
|
||||||
|
if self._history_idx == -1:
|
||||||
|
self._history_draft = inp.value
|
||||||
|
self._history_idx = len(self._history) - 1
|
||||||
|
elif self._history_idx > 0:
|
||||||
|
self._history_idx -= 1
|
||||||
|
inp.value = self._history[self._history_idx]
|
||||||
|
inp.cursor_position = len(inp.value)
|
||||||
|
else: # down
|
||||||
|
if self._history_idx == -1:
|
||||||
|
event.prevent_default()
|
||||||
|
return
|
||||||
|
if self._history_idx < len(self._history) - 1:
|
||||||
|
self._history_idx += 1
|
||||||
|
inp.value = self._history[self._history_idx]
|
||||||
|
else:
|
||||||
|
self._history_idx = -1
|
||||||
|
inp.value = self._history_draft
|
||||||
|
inp.cursor_position = len(inp.value)
|
||||||
|
event.prevent_default()
|
||||||
|
return
|
||||||
|
|
||||||
if event.key != self._config.ptt.key:
|
if event.key != self._config.ptt.key:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user