初歩のシェルスクリプトで遊ぶ[端末の256色カラーセレクタ(9)]

マウス操作に対応した256色版4.0


googleドライブのほうにファイルで置きました。16色版も更新してます。
16色版は、大きな変更はありません。テンキー無しでも不便が少ないよう、キー割り当てを少し変えた、くらいです。256色版と揃える意味のほうが強いかな。
256色版は、マウス操作に対応させてみました。主要な操作をマウスでできます。

Ubuntu Manpage: console_codes - Linux コンソールのエスケープシーケンスとコントロール シーケンス

stty_BAK=`stty -g`
trap 'printf "\033[?9l" 1>&2 ; stty "${stty_BAK}"' 1 2 3 15
stty -echo raw # min 0 time ${timeOutLimit}
if test -n "${mouseTable}" ; then
printf '\033[?9h' 1>&2
fi

よく分からんところが多くて、特にtrapは意味があるのかないのか分からんかったりしてますが。

シェル変数「${mouseTable}」は、端末の何行目の何文字目か、の座標から、実行したいシェル関数を指定する文字列です。
このテーブルが作られているならば、マウス操作を有効とするフラグと見なします。
端末に向かってprintfで「CSI?9h」を送り付けると、マウスクリックに端末が反応するようになります。端末をクリックすると、その場所の座標が返されます。座標で「${mouseTable}」から文字列を取り出し、メインプロセスに返す、という仕組みです。
printfをエラー出力から出してるのは、標準出力はシェル関数の結果を出力するのに(コマンド置換用に)使ってるからです。

マウスの動作を試すだけなら、前段のsttyコマンドなどは無しで「printf '\033[?9h'」だけでもテストできます。