標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

peco/choライクな選択コマンド box を作成しました(ただし次期NYAGOS内蔵コマンド)

NYAGOS の内蔵コマンドとして box を作成しました。

現在、機能の調整中(具体的にはドキュメントが出来てない)ですが、 次の NYAGOS のリリース (4.1.9)に盛り込む予定です。 すぐ使いたい人は自力でビルドしましょう。

peco

この手のコマンドで有名なものには peco というものがありました。これは

  • 標準入力から選択肢一覧を受信
  • 画面上でカーソル移動・フィルターリングなどで、選択肢を選ぶ
  • 確定した選択肢を標準出力に出力する

というもので、シェルのパイプラインの中に組み込んで、簡単なユーザインターフェイスを構築するのに便利なツールでした。 ただ、このツール、Windows では動作するものの、コマンドプロンプトではフォントによっては画面が乱れるという問題がありました。 (対応予定はない模様。フォント側を直すべきとされている)

cho

それに対して、画面更新量を必要最小限にすることにより、乱れを回避したものが mattn 先生による cho。 peco では termbox-go で端末画面のほぼ全体を利用していたのに対し、cho では

を使っています。わたくしも愛用していました。

box

NYAGOS では、peco と cho を利用した、ファイル名選択・git のコミット選択機能を Lua スクリプトで実装していました。 が、peco も cho も全てのマシンに標準装備というわけではないので、NYAGOS ではデフォルトで ON ではなく、 オプションのフォルダーに入れていました(nyagos.d/catalog/peco.luanyagos.d/catalog/cho.lua)。

「せっかくの機能なのだから、標準で使えるようにしたいな。バイナリ(cho.exe)をバンドルさせてもらおうかな。でも、cho のメインルーチンの長さを見ると、自分で作れなくもないな。でも、まったく同じものを作っても意味ないな」 というわけで、選択肢を ls みたいに複数列化したコマンド box を作成しました。

box の仕様自体は peco と同じです。下記はファイル名補完の補助ツールとして box を組み込んだものです。

f:id:zetamatta:20170319175514g:plain

box は、とりあえず nyagos の内蔵コマンドとして作りましたが、独立した EXE も作成可能です(box.exe)。 ただし、端末操作のライブラリとして nyagos 内のものも使っているため、現行は Windows 専用となっています とはいえ、ライブラリを各OS対応のものに切り替えれば、Linux 対応も難しくないでしょう(たぶん)