エスケープシーケンスで、既存の行、文字を書き換える
こんにちはー
Vim は、ターミナル上で動くアプリですが、カーソルの位置を変えて、
既存の行、文字の内容を上書きしたりできます。
こういうのって、どうやるのかなあと調べていたら、
どうやら、エスケープシーケンスというのを使うらしいです。
というわけで、使ってみました。
目的
- ターミナル上の既存の行、文字を書き換える
方法
- エスケープシーケンスを使用して、カーソルを動かす
カーソルを動かしてみる
絶対座標でカーソルを変更します。
次のような形です。
1 | \e[行;列H |
今回は Ruby でやってみたいと思います。1
2# 左上から 2行、3列目にカーソルを移動
printf "\e[2;3H"
カーソルが移動されます。
書き換えてみる
この後、文字列を出力すれば、文字が上書きされるわけです。
実際のコードは次のようになります。1
2
3
4
5
6
7
8
9
10
11
12
13
# 画面をクリアしておく
printf "\e[2J"
# 1行目1列に apple と出力
printf "\e[1;1H"
printf "apple"
sleep 1
# 1秒後、再び1行目1列に出力して上書きする
printf "\e[1;0H"
printf "banana"
1行目1列は、ターミナルの左上なので、
文字がすでにある可能性があります。
そのため、上のコードでは、最初に \e[2J
というエスケープシーケンスで、
ターミナルをクリアしておきます。
これを使って何かできそう
|
がある場所で、a
キーを押すと、>
がはね返るようにしました。
ゲームとかで応用できそうです。
参考
エスケープシーケンスの一覧が載っていて便利です。
今回は絶対座標で変更しましたが、「上にn行」みたいなずらし方の方法もあり、こちらに載っています。