mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import readline
|
|
import os
|
|
|
|
HISTORY_FILENAME = 'completer.hist'
|
|
|
|
|
|
def get_history_items():
|
|
return [readline.get_history_item(i) for i in range(1, readline.get_current_history_length() + 1)]
|
|
|
|
|
|
class HistoryCompleter:
|
|
|
|
def __init__(self):
|
|
self.matches = []
|
|
return
|
|
|
|
def complete(self, text, state):
|
|
response = None
|
|
if state == 0:
|
|
history_values = 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 inputing():
|
|
if os.path.exists(HISTORY_FILENAME):
|
|
readline.read_history_file(HISTORY_FILENAME)
|
|
print(f'Максимальная длина файла истории: {readline.get_history_length()}')
|
|
print(f'История запуска:{get_history_items()}')
|
|
try:
|
|
while True:
|
|
line = input('!("stop" to quit) Ввод текста: => ')
|
|
if line == 'stop':
|
|
break
|
|
if line:
|
|
print(f'Добавление "{line}" в файл истории.')
|
|
finally:
|
|
print(f'Конец записи истории: {get_history_items()}')
|
|
readline.write_history_file(HISTORY_FILENAME)
|
|
|
|
|
|
# Регистрация класса 'HistoryCompleter'
|
|
readline.set_completer(HistoryCompleter().complete)
|
|
|
|
# Регистрация клавиши `tab` для автодополнения
|
|
readline.parse_and_bind('tab: complete')
|
|
|
|
# Запрос текста
|
|
inputing() |