1. 概要
このスクリプトは、ターミナル上で動かしたマウスに合わせて文字を出力します(お絵描きができます)
- 左ボタンでドラッグ中は「*」を、右ボタンでドラッグすると「@」を出力します
-
c
キーで画面をクリア、Ctrl+C
で終了 - 画面の最下部にマウスの座標(行と列の位置)を表示します
2. 動作環境
- Bash(Windowsであればgit bash等。Linuxへのssh接続でも動作します)
- xterm互換(マウスサポート有)ターミナル(GNOME Terminal、iTerm2 、Windows Terminalなど)
3. 予備知識
3-1. ターミナルのrawモードについて
通常(カノニカルモード
)、ターミナルは「1行入力が完了するまで、アプリケーションに渡さない」動作をしています。bashにコマンドを入力する際、Enterキーを押すまでbashには何も通知されません。
そのため、カノニカルモード
ではターミナル自身が押されたキーを表示(echo)します。
ターミナルをrawモード
に切り替えると、キー入力毎にアプリケーションに通知が行われるようになります。例えばvimのようにキーを押したタイミングでモード切り替えが行えるようになります。
ターミナルは押されたキーを表示せずに、アプリケーションへ通知を行います。キー入力を受け取ったアプリケーションが画面描画を行います。
お絵描きシェルスクリプトではrawモード
に切り替えて、キーボード入力を処理しています
(キーボード入力をread
で随時チェックしているため、必ずしもrawモード
に切り替えなくても動作はします・・・・)
3-2. ターミナルのマウスサポートについて
マウスをサポートしているターミナルでは、キーボード入力と同様にマウス入力を受け取ることができます。
(マウス入力を表す、特別なエスケープシーケンスを受け取ります)
- マウス移動時、ターミナルが入力を受け取れるようにするため、エスケープシーケンスを送ります
# Any-event tracking を有効化 ( 33[?1003h)
echo -ne "