スマートフォン用の表示で見る生涯未熟プログラミングをちょこちょこと。2017の16日目です。皆さんはGo製のツールで好きなツールといったらなんでしょうか?色々あるかと思いますが、僕はpecoがいちばん好きです。いうことである日に「そうだ、pecoっぽいものを作ろう」という欲求がムクムク湧いてきましたので、やってみました。キーで選択対象を移動Enterを押したら対象を実行という感じになります。新しいツールを閃いたこれらの構成要素を使うような新しいツールをウンウン唸って考えて、捻り出したのがこれです。github.comどんなツールかというと、shellの履歴ファイルを参照し、選択したコマンドを元にシェルスクリプトを生成するというツールになっています。こんな感じのイメージです。シェルスクリプトで実行させたいコマンドを選択し、Enterを謳歌することでhoge.shを作成します。することで、minoコマンドからも行うことが出来ます。実装さて、こっから実装の話に入ります。いうそれぞれを叩くようにしています。肝となるのはコマンド履歴ファイルの読み込みコマンド選択のUIになります。コマンド履歴ファイルの読み込みについては、「.zsh_historyや.bash_historyを読み込んでくりゃいいや」くらいに思ってました。.zsh_historyについてはとんでもないハマり方をしたので、興味のある方はこちらを読んでみて下さい。syossan.hateblo.jp次にコマンド選択時のUIです。ここで、pecoのUIを再現する時に「このUIどうやってんだ?」と思ったのですが、どうやらtermbox-goというTUI作成ライブラリを使っていました。デモが詰まってるのでこの辺りを参考にするとハッピーになれます。頑張ったらゲームも作れるすげーやつです。termboxを使った描画系が詰まっているので、ここを見ていきます。Termbox構造体を生成し、それに連なるメソッドを書いている構造になりますね。それを大胆に参考にした結果、こうなりました。描画を開始し、キーイベントによって選択行を変更したり、選択状態にしたりというメソッドに処理を繋げていっています。ここで、検索フォームの表示やらコマンドの履歴を表示したりやらしてます。非常に長くて汚いコードですね。見てて書き直したくなってきました。使っていますが、これを使うとマルチバイト文字の幅をrune◯文字分として取得できます。