Pythonで補完できる使い勝手の良いCUIアプリを

自分で作ったCUIアプリで補完が欲しいと思ってたら それっぽいもの があった.

ここ のSimpleCompleterを使えば良いのだけど, 単純なので良ければbisectを使うともうちょっとうまく書けると思う.

:::python
import readline
import bisect

def complete(c):
    c.sort()
    def f(text, state):
        i = bisect.bisect_left(c, text) + state
        if c[i].startswith(text):
            return c[i]
    return f

readline.parse_and_bind("tab: complete")
readline.set_completer(complete(["test", "emacs", "cat", "vim", "tee", "touch", "env", "cp", "ctags", "evince", "eval", "vlc"]))
print raw_input("intput: ")

raw_inputがTabで補完できるようになります. とりあえずで作ったツールが意外と長々と使うこともあるのでコレぐらいで便利になるのであれば積極的に使いたいですね.

初期化字のソートさえなんとかなれば補完対象が多くても二分探索してるから大丈夫なはず. 補完候補リストを破壊的にソートしちゃうけどまぁいいか.