ai-station/.venv/lib/python3.12/site-packages/textual/system_commands.py

65 lines
2.0 KiB
Python
Raw Normal View History

2025-12-25 14:54:33 +00:00
"""
This module contains `SystemCommands`, a command palette command provider for Textual system commands.
This is a simple command provider that makes the most obvious application
actions available via the [command palette][textual.command.CommandPalette].
!!! note
The App base class installs this automatically.
"""
from __future__ import annotations
from textual.command import DiscoveryHit, Hit, Hits, Provider
class SystemCommandsProvider(Provider):
"""A [source][textual.command.Provider] of command palette commands that run app-wide tasks.
Used by default in [`App.COMMANDS`][textual.app.App.COMMANDS].
"""
async def discover(self) -> Hits:
"""Handle a request for the discovery commands for this provider.
Yields:
Commands that can be discovered.
"""
commands = sorted(
self.app.get_system_commands(self.screen), key=lambda command: command[0]
)
for name, help_text, callback, discover in commands:
if discover:
yield DiscoveryHit(
name,
callback,
help=help_text,
)
async def search(self, query: str) -> Hits:
"""Handle a request to search for system commands that match the query.
Args:
query: The user input to be matched.
Yields:
Command hits for use in the command palette.
"""
# We're going to use Textual's builtin fuzzy matcher to find
# matching commands.
matcher = self.matcher(query)
# Loop over all applicable commands, find those that match and offer
# them up to the command palette.
for name, help_text, callback, *_ in self.app.get_system_commands(self.screen):
if (match := matcher.match(name)) > 0:
yield Hit(
match,
matcher.highlight(name),
callback,
help=help_text,
)