mirror of
https://github.com/onyx-and-iris/q3rcon-tui.git
synced 2026-04-08 21:23:30 +00:00
add command history
minor bump
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2026-present onyx-and-iris <code@onyxandiris.online>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
__version__ = '0.7.2'
|
||||
__version__ = '0.8.0'
|
||||
|
||||
23
src/q3rcon_tui/history.py
Normal file
23
src/q3rcon_tui/history.py
Normal file
@@ -0,0 +1,23 @@
|
||||
from collections import UserList
|
||||
|
||||
|
||||
class CommandHistory(UserList):
|
||||
"""A simple list to store command history."""
|
||||
|
||||
def add(self, command: str):
|
||||
"""Add a command to the history if it's not empty and not a duplicate of the last."""
|
||||
command = command.strip()
|
||||
if command and (not self.data or command != self.data[-1]):
|
||||
self.data.append(command)
|
||||
|
||||
def get_previous(self, index: int) -> str:
|
||||
"""Get the previous command based on the current index."""
|
||||
if 0 <= index < len(self.data):
|
||||
return self.data[index]
|
||||
return ''
|
||||
|
||||
def get_next(self, index: int) -> str:
|
||||
"""Get the next command based on the current index."""
|
||||
if 0 <= index < len(self.data):
|
||||
return self.data[index]
|
||||
return ''
|
||||
@@ -4,6 +4,7 @@ from textual.containers import Grid
|
||||
from textual.widgets import Button, Input, RichLog
|
||||
|
||||
from .configscreen import ConfigScreen
|
||||
from .history import CommandHistory
|
||||
from .settings import Settings
|
||||
from .writable import Writable
|
||||
|
||||
@@ -24,6 +25,8 @@ class Q3RconTUI(App):
|
||||
super().__init__()
|
||||
self._settings = Settings()
|
||||
self.writable = Writable(self)
|
||||
self._command_history = CommandHistory()
|
||||
self._history_index = None
|
||||
|
||||
def compose(self) -> ComposeResult:
|
||||
yield Grid(
|
||||
@@ -40,9 +43,33 @@ class Q3RconTUI(App):
|
||||
if self.screen and isinstance(self.screen, ConfigScreen):
|
||||
return
|
||||
|
||||
command_input = self.query_one('#command', Input)
|
||||
match event.key:
|
||||
case 'enter' if self.query_one('#command', Input).has_focus:
|
||||
case 'enter' if command_input.has_focus:
|
||||
value = command_input.value.strip()
|
||||
if value:
|
||||
self._command_history.add(value)
|
||||
self._history_index = None
|
||||
self.query_one('#send', Button).press()
|
||||
case 'up' if command_input.has_focus:
|
||||
if self._command_history:
|
||||
if self._history_index is None:
|
||||
self._history_index = len(self._command_history) - 1
|
||||
elif self._history_index > 0:
|
||||
self._history_index -= 1
|
||||
command_input.value = self._command_history.get_previous(
|
||||
self._history_index
|
||||
)
|
||||
case 'down' if command_input.has_focus:
|
||||
if self._command_history and self._history_index is not None:
|
||||
if self._history_index < len(self._command_history) - 1:
|
||||
self._history_index += 1
|
||||
command_input.value = self._command_history.get_next(
|
||||
self._history_index
|
||||
)
|
||||
else:
|
||||
self._history_index = None
|
||||
command_input.value = ''
|
||||
case 'f2':
|
||||
self.query_one('#config', Button).press()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user