Я использую библиотеку cmd
для создания простого интерфейса командной строки с дополнением кода.Проблема возникает, когда аргумент команды содержит специальные символы.Завершение кода выполняется только в последней части, разделенной этими специальными символами.
Вот простой код для его проверки:
class Test(Cmd):
def complete_test(self, text, line, b, e):
print(text)
print(line)
print(b)
print(e)
Тип test
и аргумент, содержащий, например, косую черту.Только последняя часть после /
включается в text
, и если вы что-то возвращаете, заменяется только эта последняя часть.
Я использовал комментарии под этим ответом, чтобы исправить проблемы с другимиспециальные символы.Но я не могу просто сделать readline.set_completer_delims("")
, потому что завершение кода не работает.Мне нужно, по крайней мере, установить пробел в качестве разделителя (readline.set_completer_delims(" ")
), чтобы его завершение кода нашло начало аргументаНо теперь я не могу пропустить пути, содержащие пробелы (см. Мой код завершения ниже):
def complete_export(self, text:str, line:str, begidx, endidx):
return [x for x in glob(text + "*") if x.startswith(text)]
Моя export
команда требует только один аргумент - путь, поэтому идеальным поведением было бы считать первый пробел началомаргумента и другие пробелы будут считаться частью пути.
Примечание: я понял, что можно использовать аргумент line
и извлекать путь вручную, но завершение кода все равно заменит только последнюю часть, поэтому путьдолжно быть отредактировано.Я представил это как ответ, но это не очень элегантное решение.