Python завершен, файл против объекта

1

Недавно я обнаружил auto-completetion в pinteron interperter: https://docs.python.org/2.7/tutorial/interactive.html. Это потрясающе для ускорения тестов, которые я делаю в интерактивном интерпретаторе. Есть две вещи, которые завершают, и это полезно.

Если я просто поставлю C+f: complete в моем.inputrc (или используйте readline без rlcompleter), когда я нажимаю Ctl + f, я получаю завершение файлов в каталоге, из которого я начал интерпретатор. Когда я загружаю модули readline и rlcompleter и добавляю readline.parse_and_bind('Cn: complete') в файл.pystartup, он преобразует Ctl + n и Ctl + f в автоматическое заполнение объектов python.

Я хотел бы сделать то и другое, но я не уверен, как сохранить rlcompleter от переопределения стандартной версии. Есть ли способ запустить два экземпляра readline: один, который делает, и тот, который не использует rlcompleter?

Вот мой файл.pystartup

import atexit
import os
import readline
import rlcompleter #removing this does file completion.

readline.parse_and_bind('C-n: complete')

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    import readline
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
Теги:
readline

1 ответ

0

Как это устроено:

Когда вы импортируете rlcompleter, он устанавливает rlcompleter.Completer().complete readline.set_completer(Completer().complete) как readline completeter: readline.set_completer(Completer().complete).

Без rlcompleter, completer равно None, поэтому по умолчанию GNU readline lib использует rl_filename_completion_function.

Логика привязки и завершение логики реализована GNU readline lib, поэтому в Python нечего делать о start up two instances of readline...


Я не нашел способ вызвать по умолчанию rl_filename_completion_function в Python (это возможно в расширении C), поэтому, я думаю, вам нужно продублировать логику rl_filename_completion_function в Python.

Что означает, что вы должны наследовать Completer и создать свой пользовательский complete. Но вы все еще не можете разделить эти две логики на Cn и Cf :(

  • 0
    Я боялся этого. Интересно, есть ли способ написать функцию для выгрузки rcompleter при нажатии правильных клавиш, а затем перезагрузить его ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню