python script をコマンドラインから使う場合、設定ファイルを引数で指定したりするのだが、 色々なケースで使うようになると、 設定ファイルが増えてきて、 ファイル名の確認が面倒になっていた。
そこで、script 内にデフォルトディレクトリを指定しておいて、 globでファイル名リストを作成して、 コンソールで入力補完させてみては、というもの。
自分で考えた訳ではなく、 4 Python libraries for building great command-line user interfaces | Opensource.com を見て、prompt tool kit v2 のドキュメントを見ながらアレンジした次第。
fuzzyfinder は私のレベルでは、不要かもしれないが、 将来使うかもしれないので、一応、入れたままにした。 history は外した。で、こんな感じ。
スクリプトはこんなもん。
#!~/.pyenv/shims/python
"""Test of prompt-toolkit."""
#
from pathlib import Path
from fuzzyfinder import fuzzyfinder
from prompt_toolkit import prompt
from prompt_toolkit import print_formatted_text as pprint
from prompt_toolkit.completion import Completer, Completion
# from prompt_toolkit.history import FileHistory
# from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
class MyfileCompleter(Completer):
"""Set Completer."""
def get_completions(self, document, complete_event):
"""Get Completer."""
globbed_path = Path('~/Documents/tours/_config_master').expanduser()
inifile_list = [f.name for f in globbed_path.glob("*.ini")]
word_before_cursor = document.get_word_before_cursor(WORD=True)
matches = fuzzyfinder(word_before_cursor, inifile_list)
for m in matches:
yield Completion(m, start_position=-len(word_before_cursor))
def main():
"""Main process."""
#
user_input = prompt(
'Select set file >',
# history=FileHistory('history.txt'),
# auto_suggest=AutoSuggestFromHistory(),
completer=MyfileCompleter(),)
pprint('select "%s"' % user_input)
if __name__ == '__main__':
main()
#
こんなインターフェースにしておけば、 設定ファイルの名前を冗長にできるかも、と思ってしまった。

0 件のコメント:
コメントを投稿