mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 18:15:28 +03:00
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
import readline
|
|
import os
|
|
|
|
|
|
|
|
class Autocompleter:
|
|
def __init__(self, history_filename: str = './completer.hist', autocomplete_button: str = 'tab'):
|
|
self.history_filename = history_filename
|
|
self.autocomplete_button = autocomplete_button
|
|
self.matches = []
|
|
|
|
def complete(self, text, state):
|
|
if state == 0:
|
|
history_values = self.get_history_items()
|
|
if text:
|
|
self.matches = sorted(h for h in history_values if h and h.startswith(text))
|
|
else:
|
|
self.matches = []
|
|
try:
|
|
response = self.matches[state]
|
|
except IndexError:
|
|
response = None
|
|
return response
|
|
|
|
def initial_setup(self):
|
|
if os.path.exists(self.history_filename):
|
|
readline.read_history_file(self.history_filename)
|
|
readline.set_completer(self.complete)
|
|
readline.parse_and_bind(f'{self.autocomplete_button}: complete')
|
|
|
|
def write_command_to_history(self):
|
|
readline.write_history_file(self.history_filename)
|
|
|
|
@staticmethod
|
|
def get_history_items():
|
|
return [readline.get_history_item(i) for i in range(1, readline.get_current_history_length() + 1)]
|
|
|
|
|
|
|
|
def inputting():
|
|
autocompleter = Autocompleter()
|
|
autocompleter.initial_setup()
|
|
print(f'Максимальная длина файла истории: {readline.get_history_length()}')
|
|
print(f'История запуска:{autocompleter.get_history_items()}')
|
|
while True:
|
|
line = input('\n!("stop" to quit) Ввод текста: => ')
|
|
if line == 'stop':
|
|
print(f'Конец записи истории: {autocompleter.get_history_items()}')
|
|
autocompleter.write_command_to_history()
|
|
break
|
|
|
|
|
|
inputting()
|
|
|
|
|
|
|
|
|
|
|