標準愚痴出力

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

2ペインテキストビューア、いろいろ作ってます。

20年くらい前にOS/2eff , ell という「テキストビューア」群を作ってましたが、それと同じような感じのものできないかなーと思って、Go言語で簡単なフレームワーク go-twopane を作ってみました。

  • コンソール画面を2分割して、上に件名一覧、下に詳細を表示する
  • go-twopane には配列を渡す。配列の要素は「件名」を得る Title() メソッドと、「詳細」を得る Contents() というメソッドを定義してあれば OK
  • カーソル上移動(,k)、下移動(,j)、詳細次ページ(SPACE)、終了(ESC,C-q)程度は標準で実装。他のキーに対するアクションを定義したい場合はコールバック関数を渡せば良い

という感じです。ね、簡単でしょ?

そして、Windows でも Linux でも動きます(ここ重要)

実装例1:git のログビューア (gitview

件名一覧は git log の結果。詳細は git show の結果です。git show の方は、git の出すカラーを維持し、かつ UTF8 と解釈できない行は ANSI → UTF8 変換を試みるので、文字化けがかなり少ないはずです。(ファイルの中身は ShiftJIS だが、git.exe がファイル名を Unicode で出すので、出力全部の文字コードが一貫しないことが Windows ではよくあるのですわ…)

実装例2: Subversion のビューア

こちらはソースだけ。 なぜなら、スクリーンショットが業務情報のカタマリのやつしかないから…。

git と違って git show みたいなやつはないんですが、svn log --xml でそこそこ情報が取れるので、詳細情報はログ全部+変更ファイル一覧みたいなものをかわりに載せてます。

実装例3:twitter client(tmt view

いわゆる「人間性はありません」(tmt.exe)という名前の謎ツイッタークライアントが正体がコレです。もともと tmt post で投稿、tmt timeline でタイムラインを標準出力に出すといった twtyパクったようなインスパイアした ツールなんですが(だから自分の趣味のサブコマンドしかない)、これに tmt view というビューアを起動するサブコマンドを追加しています。

twitter は文字種が多いので、go-twopane のすごい耐久テストができました。ANSI エスケープシーケンスだけでやっているので、うっかりすると行の桁数が想定よりオーバーフローして、画面がくずれてしまいます。なので、以下のような対策を go-twopane 側でとっています。

  • Windows の端末はサロゲートペアな Unicode が表示できないので、それらは &#xNNNN; といった形にエンコードする(豆腐にしてもよかったんですけどね)
  • 文字幅があいまい(全角か半角かというやつです)とされている文字については、あふれないように端末のマスを常に2セル消費することを前提にしてしまう

(注意)

tmt はソースそのままではビルドできません。twitter の ConsumerKey , ConsumerSecretKey がカラだからです。これらは twitter に開発申請を出してゲットしてから、secret/secret.go.sample にある変数名を埋めないといけません(埋めたあとファイル名から .sample を除くのも忘れないように)

なお、バイナリについては、リリースタブのところからダウンロードできます

利用技術

うむ、また mattn 先生のライブラリにおんぶにだっこだな! でも、この組み合わせだと、Windows/Linux 両方サポートが簡単なんだよ

痛い話など

  • 最初レポジトリを作った時、twopain と命名していました。これは痛い…

  • マインクラフトばっかりやってて GitHub の砂漠化が進んでいましたが、こいつを作るようになって、ちょっと緑が回復しました。

  • ブラウザで見るより twitter 目立たないかなーと思ってたんですが、黒いコンソールの中に日本語がみっちり入ってると意外と目立ちますね(おまえは何を懸念しているんだ

以上です