入力したコマンドを直接実行するか(コマンド ".x some/path/to/file"を入力した場合)、プロジェクト用のREPLツールを作成していますファイルから読み込み、実行します。私の質問は、(prompt_toolkitを使って)ユーザー入力を自動補完することに関連しています。 (コマンド用)prompt_toolkitのPathCompleterから完成品を再利用する方法
import prompt_toolkit
from prompt_toolkit.completion import Completer, Completion
from prompt_toolkit.document import Document
from prompt_toolkit.contrib.completers import PathCompleter
class CommandCompleter(Completer):
def __init__(self):
self.path_completer = PathCompleter()
self.commands = [".x", "command1", "command2"]
def get_completions(self, document, complete_event):
if document.text.startswith(".x "):
sub_doc = Document(document.text[3:])
yield from (Completion(cmd.text, -document.cursor_position)
# ???????? ?????????????????????????
for cmd
in self.path_completer.get_completions(sub_doc, complete_event))
# ???????
else:
yield from (Completion(cmd, -document.cursor_position)
for cmd in self.commands
if cmd.startswith(document.text))
if __name__ == "__main__":
while True:
other_args = {}
input = prompt_toolkit.prompt(">>> ", completer=CommandCompleter(), **other_args)
# Do something with input (omitted)
秒かの分岐が正常に動作しますが、私はきちんとPathCompleter.get_completions()
メソッドを呼び出す方法を知っているとCompletion
オブジェクトを再構築しないでください:
私は(実行可能な最小の例)のようなものを持っています最初のブランチでの結果(???がどこにあるか)からそのトリックは、私が入力の一部分だけを補完するものであり、様々な部分ストリング、位置計算などは、満足のいく振る舞い(すなわち、経路の提供と正しい入力行の構築)には至っていない。
私は間違いなく検索に行きますが、誰かがこれを書き換える方法を知っていれば、非常に便利です。
注:入力全体がパスだけの場合(これは正しく動作します)、yield from self.path_completer.get_completions(document, complete_event)
が使用されます。
どうもありがとう、これは私の問題を解決しています - ) –