kannadaLettersClassification
/
env
/lib
/python3.12
/site-packages
/prompt_toolkit
/contrib
/completers
/system.py
| from __future__ import annotations | |
| from prompt_toolkit.completion.filesystem import ExecutableCompleter, PathCompleter | |
| from prompt_toolkit.contrib.regular_languages.compiler import compile | |
| from prompt_toolkit.contrib.regular_languages.completion import GrammarCompleter | |
| __all__ = [ | |
| "SystemCompleter", | |
| ] | |
| class SystemCompleter(GrammarCompleter): | |
| """ | |
| Completer for system commands. | |
| """ | |
| def __init__(self) -> None: | |
| # Compile grammar. | |
| g = compile( | |
| r""" | |
| # First we have an executable. | |
| (?P<executable>[^\s]+) | |
| # Ignore literals in between. | |
| ( | |
| \s+ | |
| ("[^"]*" | '[^']*' | [^'"]+ ) | |
| )* | |
| \s+ | |
| # Filename as parameters. | |
| ( | |
| (?P<filename>[^\s]+) | | |
| "(?P<double_quoted_filename>[^\s]+)" | | |
| '(?P<single_quoted_filename>[^\s]+)' | |
| ) | |
| """, | |
| escape_funcs={ | |
| "double_quoted_filename": (lambda string: string.replace('"', '\\"')), | |
| "single_quoted_filename": (lambda string: string.replace("'", "\\'")), | |
| }, | |
| unescape_funcs={ | |
| "double_quoted_filename": ( | |
| lambda string: string.replace('\\"', '"') | |
| ), # XXX: not entirely correct. | |
| "single_quoted_filename": (lambda string: string.replace("\\'", "'")), | |
| }, | |
| ) | |
| # Create GrammarCompleter | |
| super().__init__( | |
| g, | |
| { | |
| "executable": ExecutableCompleter(), | |
| "filename": PathCompleter(only_directories=False, expanduser=True), | |
| "double_quoted_filename": PathCompleter( | |
| only_directories=False, expanduser=True | |
| ), | |
| "single_quoted_filename": PathCompleter( | |
| only_directories=False, expanduser=True | |
| ), | |
| }, | |
| ) | |