golangでTUIのスーパーマリオブラザーズ

golangがどんなものか軽く触ってみようかと思い、何か題材でもないと触るのも難しいだろうという事で、TUIでスーパーマリオブラザーズでも実装してみようという謎の題材をふと思いついた。

早速実装しては見たものの、本来の目的であるgolangを知る事そっちのけで実装してしまい、あまり理解が深まらないまま今に至る。題材が悪かったかも。

github.com

Githubのリリースページから実行ファイルをダウンロード、解凍、ターミナルから実行で起動します。
操作方法は、左右の矢印キーで移動、上矢印キーでジャンプです。

f:id:y_d:20161105022858g:plain

MacLinuxWindowsで動きますが手元のWindows7だとチラツキがハンパないです。
とはいえMacでコードを書いて、MacWindowsのexeをビルドして、Windowsに配布でそのまま動くというのはなかなか素敵な体験でした。

普通すぎるエディタ「micro」

f:id:y_d:20160902012300p:plain

go言語(termbox-goではなくtcell)で実装されたmicroというターミナルベースのテキストエディタの version1.0 がリリースされたようで、試しにちょっとだけつかってみたのですが、なかなか使い心地がよいです。

というわけで(個人的に)使い心地が(いい意味で逆に)普通すぎるエディタ「micro」の紹介になります。

github.com

microの特徴

microはターミナルベースのエディタであるものの、マウス操作がサポートされていたり、GUIアプリケーション風のキーバインドが設定されていたりと、いたって普通なGUIテキストエディタを使っているかのように直感的な使い心地を実現しているのが最大の特徴だと思います。

  • いけてる特徴
  • 残念なところ
    • 日本語表示は問題なさそうだが、日本語入力すると挙動がおかしくなる
    • 使うターミナルによってちょっと動きがおかしいことが多々ある

多少残念なところもあるけど、 Nightly build があったりするようで、今後の改善に期待が持てそうです。

ダウンロード

  1. とりあえず使ってみるだけなら、ここのリリースページからダウンロード(macOSなら micro-1.0.1-osx.tar.gz )。
  2. ダウンロードしたら ~/Downloads/micro-1.0.1/micro にコマンドがあるはずなので、そのようにターミナル上で叩くとmicroエディタが起動する(macOSの場合)。
  3. ~/Downloads/micro-1.0.1/micro /path/to/file.txt のようにコマンドに続けてファイルパスを指定すればそのファイルが開かれる。

使い方

メモレベルだけど具体的な使い方は以下の通り。

基本操作

  1. 矢印キーもしくはマウスクリックでキャレット移動
  2. Shit+矢印キー もしくはマウスドラッグで領域選択
  3. マウスホイールで表示領域の移動(キャレットはそのまま)
  4. Vimの入力モードのようなものはなく、キーボード操作でそのままテキストが入力される
  5. esc で何かしらの入力待ち状態をキャンセル
  6. 終了したいときはCtrl-q 。編集内容を保存しなくて良ければ続けて y を入力で終了。

※マウスを使った操作を行う際は「マウスレポーティングを許可」する(macOSのターミナルの場合)

f:id:y_d:20160902011222g:plain

コピペ

  1. 下記のいずれかで領域を選択
    • Shif+矢印キー
    • Ctrl-a
    • マウスでテキストをドラッグ
  2. Ctrl-c でコピー ( Ctrl-x で切り取り)
  3. Ctrl-v で貼り付け

ヒストリー

  1. Ctrl-z で戻す
  2. Ctrl-y でやり直し

検索

  1. Ctrl-fFinding: と聞かれるので、検索したい文字を入力してEnter(正規表現も使える)
  2. Ctrl-n で次にマッチする箇所に移動
  3. Ctrl-p で前にマッチする箇所に移動
  4. esc で検索を抜ける

置換

  1. Ctrl-e でコマンド入力欄表示
  2. replace {{検索文字列}} {{置換文字列}} とうつ

例: replace "A" "B"

コマンド実行

  1. Ctrl-e でコマンド入力欄表示
  2. run {{コマンド}} とうつ

例: run ls

テーマの変更

  1. Ctrl-e でコマンド入力欄表示
  2. set colorscheme {{テーマ名}}

例: set colorscheme monokai

使えるテーマは今のところ下記がある

default
simple
solarized
solarized-tc
atom-dark-tc
monokai
gruvbox
zenburn
bubblegum

f:id:y_d:20160902011208g:plain

画面分割

  1. Ctrl-e でコマンド入力欄表示
  2. vsplit or hsplit を入力して Enter(既存ファイルを開くときは vsplit file.txtといった感じ)
  3. アクティブのパネルを切り替えるのは Ctrl-w もしくはアクティブにしたい領域をクリック
  4. Ctrl-q でアクティブ状態の分割パネルを閉じる
  5. 編集済みのタブを閉じる際は、yで編集内容破棄、nでキャンセル、sで保存(ファイル名入力)

※タブと組み合わせると、挙動がおかしくなる?

f:id:y_d:20160902011211g:plain

タブ

  1. Ctrl-t で新規タブ作成&新しいタブを表示 (画面上部にタブができる)
  2. Ctrl-¥ で次のタブに移動
  3. Ctrl-] で前のタブに移動
  4. 上部タブをクリックでもタブ移動可能
  5. Ctrl-q でタブを閉じる
  6. 編集済みのタブを閉じる際は、yで編集内容破棄、nでキャンセル、sで保存(ファイル名入力)

※画面分割と組み合わせると、挙動がおかしくなる?

f:id:y_d:20160902011204g:plain

ファイルオープン

  1. Ctrl-o 押下
  2. 編集中データがあればyで編集内容破棄、nでキャンセル、sで保存(ファイル名入力)
  3. File to open: と聞かれるのでファイル名を入力(絶対パス相対パスを入力。入力中にTab押下で入力補完が効く)

ファイル保存

  1. Ctrl-s 押下
  2. Filename: と聞かれるのでファイル名を入力(絶対パス相対パスを入力。入力中にTab押下で入力補完が効く)

行番号

  1. Ctrl-r で行番号表示、非表示切り替え

行番号に移動

  1. Ctrl-l の後に行番号入力で、その行に移動

タブサイズ変更

  1. Ctrl-e でコマンド入力欄表示
  2. set tabsize 4 ※4は例

※ファイルの拡張子ごとに設定することも可能らしい

ソフトタブ

※tabキー押下で、半角スペースを入力する設定

  1. Ctrl-e でコマンド入力欄表示
  2. set tabstospaces on で有効化
  3. set tabstospaces off で無効化

タブの可視化

  1. Ctrl-e でコマンド入力欄表示
  2. 例: set indentchar >

※設定を解除する方法がわからないが、 ~/.config/micro/setting.json を編集して indentchar" " を設定すると良さそう。

その他オプション変更

  1. Ctrl-e でコマンド入力欄表示
  2. set {{オプション名}} {{設定値}}
  3. ~/.config/micro/setting.json に設定が書き出される
  4. ファイルの拡張子ごとに設定することも可能らしい

詳しくは下記 https://github.com/zyedidia/micro/blob/master/runtime/help/options.md

その他キーバインディング

下記に詳しく書いていある https://github.com/zyedidia/micro/blob/master/runtime/help/keybindings.md

さいごに

以上のように、普通のGUIテキストエディタのように使えるので、学習コストが低いエディタだと思います。 機会があれば使ってみてはいかがでしょうか。

君はもう見たか!php.netの走る象を

なんとやくタイトルに倒置法を使ってみましたが、深い意味はありません。
というのはおいといて、

コアラのマーチには眉毛コアラがたまに入っていて、見つけるとちょっと嬉しいですが、php.netにもそんな遊びが仕掛けられているようです。
先日先輩から、php.netの右上のロゴが走る象になっている人が隣の席にいるという話をされ、気になったので調べてみました。

通常これが表示されているけど、これが走る象になっていたらしいです。
f:id:y_d:20140611231629p:plain

調査

htmlを読んでみると、この画像のURLは下記となっていて、phpのプログラムから画像を返す作りになっていました。
http://www.php.net/images/logo.php

ググってみたところ、どうやらソースは下記のようです。
https://github.com/php/web-php/blob/master/images/logo.php

このソースを読むとどうやら、およそ64回に1回の確率(実際にはもっと確率は低い)、さらに1日キャッシュが効くので64日に1回以下の確率といったところでしょうか。
私は走る象が表示されているところを見たことがありませんが、ちょくちょくphp.netは覗いているので、確率的に今までに走る象を見ていてもおかしくなさそうに思えます。といっても左上のロゴをまじまじと見ることはないので、もしかしたら見逃していただけでしょうか。

※とりあえず象の画像だけ見たい方はこちらでみれます
http://php.net/images/logos/elephpant-running-78x48.gif
f:id:y_d:20140611231910g:plain

実際に表示してみる

仕組みは分かったものの、どうしても実際に走る象が表示されているところを見てみたい気持ちが抑えられないので、無理やり表示してみようと思います。

手順:
f:id:y_d:20140611231303g:plain

  1. phpのロゴ画像URLに「?refresh」を付けたURLを何度か叩いて、走る象の画像を表示する。
  2. php.netを表示して、右上の画像URLもまた同じく「?refresh」をつける。

※URLは http://www.php.net/images/logo.php?refresh になる
php.netさん、リロード何度もしてごめんなさい

これで走る象の画像になりました!
f:id:y_d:20140611231347g:plain

いつかインチキなしで見てみたいです。