Vimライクといってもただ hjkl で動かせるよってだけなので、Vimmerの方々に怒られると思いますが…
勢いで作った。
https://github.com/penguing27/lifevim
モチベーション
- コンソール画面で、画面をクリアして何かが動く、みたいなソフトの仕組みを知りたかった (それこそVimみたいな)
- ライフゲームの動画を眺めていて、作ってみたくなった。
コンソール画面制御
※ 大事なのはこの2つ (Cの場合)
- termios
tcgetattr()
で現在のターミナル情報を保存しておいて、tcsetattr()
で使いたいターミナルへ変更する。- エンターキーを押さなくてもキーを押した瞬間に出力される「非カノニカルモード」にするとか。アプリを終了させる前にちゃんと設定を戻さなければ、その後も変なことになるので注意が必要。
- エスケープシーケンス (printf)
- 画面を制御する制御文字を標準出力へ出力することで、画面をクリアする、カーソルを移動させる、みたいな処理が可能。
printf("\033[2J");// 画面をクリアするprintf("\033[%d;%dH",y,x);// カーソル位置を移動する
結果物
Macのターミナルでは動くことを確認した。
https://github.com/penguing27/lifevim
- 操作方法
h
,j
,k
,l
: カーソル移動0
,$
,gg
,G
,M
: 一番上へ移動したりとかv
: ライフを作ったり消したり- Space: 1ステップ進める
- Enter: 膠着状態になるまで自動で進める
:q
: 終了
もうちょっとやりたいこと
Shift+v
やCtrl+v
で行単位や矩形単位でライフを作ったり消したりできるようにしたい- マクロとか使えるようにするとおもしろそう
- コマンドラインモードが弱すぎるのでちゃんと構文解析とかやりたい