golangでTUIのスーパーマリオブラザーズ
golangがどんなものか軽く触ってみようかと思い、何か題材でもないと触るのも難しいだろうという事で、TUIでスーパーマリオブラザーズでも実装してみようという謎の題材をふと思いついた。
早速実装しては見たものの、本来の目的であるgolangを知る事そっちのけで実装してしまい、あまり理解が深まらないまま今に至る。題材が悪かったかも。
Githubのリリースページから実行ファイルをダウンロード、解凍、ターミナルから実行で起動します。
操作方法は、左右の矢印キーで移動、上矢印キーでジャンプです。
Mac、Linux、Windowsで動きますが手元のWindows7だとチラツキがハンパないです。
とはいえMacでコードを書いて、MacでWindowsのexeをビルドして、Windowsに配布でそのまま動くというのはなかなか素敵な体験でした。
普通すぎるエディタ「micro」
go言語(termbox-goではなくtcell)で実装されたmicroというターミナルベースのテキストエディタの version1.0 がリリースされたようで、試しにちょっとだけつかってみたのですが、なかなか使い心地がよいです。
というわけで(個人的に)使い心地が(いい意味で逆に)普通すぎるエディタ「micro」の紹介になります。
microの特徴
microはターミナルベースのエディタであるものの、マウス操作がサポートされていたり、GUIアプリケーション風のキーバインドが設定されていたりと、いたって普通なGUIのテキストエディタを使っているかのように直感的な使い心地を実現しているのが最大の特徴だと思います。
- いけてる特徴
- 残念なところ
- 日本語表示は問題なさそうだが、日本語入力すると挙動がおかしくなる
- 使うターミナルによってちょっと動きがおかしいことが多々ある
多少残念なところもあるけど、 Nightly build があったりするようで、今後の改善に期待が持てそうです。
ダウンロード
- とりあえず使ってみるだけなら、ここのリリースページからダウンロード(macOSなら micro-1.0.1-osx.tar.gz )。
- ダウンロードしたら
~/Downloads/micro-1.0.1/micro
にコマンドがあるはずなので、そのようにターミナル上で叩くとmicroエディタが起動する(macOSの場合)。 ~/Downloads/micro-1.0.1/micro /path/to/file.txt
のようにコマンドに続けてファイルパスを指定すればそのファイルが開かれる。
使い方
メモレベルだけど具体的な使い方は以下の通り。
基本操作
- 矢印キーもしくはマウスクリックでキャレット移動
- Shit+矢印キー もしくはマウスドラッグで領域選択
- マウスホイールで表示領域の移動(キャレットはそのまま)
- Vimの入力モードのようなものはなく、キーボード操作でそのままテキストが入力される
esc
で何かしらの入力待ち状態をキャンセル- 終了したいときは
Ctrl-q
。編集内容を保存しなくて良ければ続けてy
を入力で終了。
※マウスを使った操作を行う際は「マウスレポーティングを許可」する(macOSのターミナルの場合)
コピペ
- 下記のいずれかで領域を選択
- Shif+矢印キー
Ctrl-a
- マウスでテキストをドラッグ
Ctrl-c
でコピー (Ctrl-x
で切り取り)Ctrl-v
で貼り付け
ヒストリー
Ctrl-z
で戻すCtrl-y
でやり直し
検索
Ctrl-f
でFinding:
と聞かれるので、検索したい文字を入力してEnter(正規表現も使える)Ctrl-n
で次にマッチする箇所に移動Ctrl-p
で前にマッチする箇所に移動esc
で検索を抜ける
置換
Ctrl-e
でコマンド入力欄表示replace {{検索文字列}} {{置換文字列}}
とうつ
例: replace "A" "B"
コマンド実行
Ctrl-e
でコマンド入力欄表示run {{コマンド}}
とうつ
例: run ls
テーマの変更
Ctrl-e
でコマンド入力欄表示set colorscheme {{テーマ名}}
例: set colorscheme monokai
使えるテーマは今のところ下記がある
default simple solarized solarized-tc atom-dark-tc monokai gruvbox zenburn bubblegum
画面分割
Ctrl-e
でコマンド入力欄表示vsplit
orhsplit
を入力してEnter
(既存ファイルを開くときはvsplit file.txt
といった感じ)- アクティブのパネルを切り替えるのは
Ctrl-w
もしくはアクティブにしたい領域をクリック Ctrl-q
でアクティブ状態の分割パネルを閉じる- 編集済みのタブを閉じる際は、
y
で編集内容破棄、n
でキャンセル、s
で保存(ファイル名入力)
※タブと組み合わせると、挙動がおかしくなる?
タブ
Ctrl-t
で新規タブ作成&新しいタブを表示 (画面上部にタブができる)Ctrl-¥
で次のタブに移動Ctrl-]
で前のタブに移動- 上部タブをクリックでもタブ移動可能
Ctrl-q
でタブを閉じる- 編集済みのタブを閉じる際は、
y
で編集内容破棄、n
でキャンセル、s
で保存(ファイル名入力)
※画面分割と組み合わせると、挙動がおかしくなる?
ファイルオープン
Ctrl-o
押下- 編集中データがあれば
y
で編集内容破棄、n
でキャンセル、s
で保存(ファイル名入力) File to open:
と聞かれるのでファイル名を入力(絶対パスや相対パスを入力。入力中にTab押下で入力補完が効く)
ファイル保存
行番号
Ctrl-r
で行番号表示、非表示切り替え
行番号に移動
Ctrl-l
の後に行番号入力で、その行に移動
タブサイズ変更
Ctrl-e
でコマンド入力欄表示set tabsize 4
※4は例
※ファイルの拡張子ごとに設定することも可能らしい
ソフトタブ
※tabキー押下で、半角スペースを入力する設定
Ctrl-e
でコマンド入力欄表示set tabstospaces on
で有効化set tabstospaces off
で無効化
タブの可視化
Ctrl-e
でコマンド入力欄表示- 例:
set indentchar >
※設定を解除する方法がわからないが、 ~/.config/micro/setting.json
を編集して indentchar
に " "
を設定すると良さそう。
その他オプション変更
Ctrl-e
でコマンド入力欄表示set {{オプション名}} {{設定値}}
~/.config/micro/setting.json
に設定が書き出される- ファイルの拡張子ごとに設定することも可能らしい
詳しくは下記 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の右上のロゴが走る象になっている人が隣の席にいるという話をされ、気になったので調べてみました。
通常これが表示されているけど、これが走る象になっていたらしいです。
調査
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
実際に表示してみる
仕組みは分かったものの、どうしても実際に走る象が表示されているところを見てみたい気持ちが抑えられないので、無理やり表示してみようと思います。
手順:
※URLは http://www.php.net/images/logo.php?refresh になる
※php.netさん、リロード何度もしてごめんなさい
これで走る象の画像になりました!
いつかインチキなしで見てみたいです。