コマンドプロンプトでただ入力を受けて出力を出すだけのコマンドとは異なった動きをするインタラクティブなアプリチックなコマンドがいると思います。ncursesというTUI作成のためのAPIを用意しているライブラリがあるので基本的にはこれを使って作成されていますので、python以外の場合はこちらで検索されればほしいものが見つかると思います。
今回はPythonのCursesを使って多くのLinuxのエミュレータ(terminal)上で動く上記のようなコマンドを書いてみました。サンプル見ながらちょっとだけ試してみた備忘録を残しておきます。
ちなみにドキュメントはここにあって、それをベースにしています。日本語の翻訳が中途半端ですので頑張って補完してみてください。
もう早速コード
短めにしたけど、なんだかんだ長いか。
パートは全部で3つ。
Part1: 初期化
最初の初期化の部分で普段のターミナルの設定を変更して、TUIが動くように書き換えています。特に説明することはありませんが、大体上記のメンバーで足りると思います。curs_setは設定変更しないことも多いかもしれませんね。
Part2: キー入力待ち
whileループでgetchにやってくるキーを待ちます。ここではpを入力にされたらPrintDocument関数を実行して、qが押された場合はwhileループを抜けてPart3に移行します。PrintDocumentで記述しているようにaddstrで画面の好きな位置に文字を出力できますが、refreshしないと画面に描画されません。これはたくさんのaddstr毎に毎回表示すると重くなってしまったり無駄が多くなるので、refreshしたタイミングで全てを反映するためです。
part3: 終了
最後の部分ですが、Part1で書き換えてしまった設定を元に戻しているだけです。ここらへんもいつも同じなるかと思います。
おわりに
大分簡単。ちょっとそういうの容易したいなってときに使えてよいと思う。キー入力の部分さえがんばれば何とかなる。