Q. マクロ内で各種エスケープシーケンスを利用することは可能か
A. 可能
ただし、送受信できることと、受信した情報を解析できることは、別。
Q. エスケープシーケンスでカーソル位置を取得することは可能か
A. Tera Term に、応答コードを解析する方法がない。
(wait を試してみたが、取得できない)
ということで、エスケープシーケンスを利用する方法について、簡単なサンプルマクロを作ってみました。
; Sample.ttl (Tera Term language)
; vi でインサートモードからサンプル行を3行送り、カーソルを1行上に移動するマクロ。
; vi でインサートモードからサンプル行を3行送る。
; 改行は ASCII コード表より(10進数 = 10, 16進数 = $0A)を利用。
; 利用方法を示すサンプルなのでごちゃ混ぜにしているが、どちらか片方に統一した方が分かりやすい。
sendln 'vi test.txt'
send 'i'
send 'test input - line 1'#10'test input - line 2'$0A'test input - line 3'
; vi で esc を送ってコマンドモードにする
; (ASCII コード表より esc は 10進数 = 27, 16進数 = $1B)
;send #27
send $1B
; コマンドモードにしたあと、すぐに CSI シーケンスを送っても反応しないので、少し待つ
; 詳細は Tera Term ヘルプ(vim からの制御シーケンスの使用例)を参照のこと。
pause 1
;【C0 制御文字】
; 0x9b, ESC [ CSI, CSIシーケンスを開始
;【CSIシーケンス】
; CSI Ps A, CUU, カーソルを Ps 行上に移動する。Ps の省略時の値は 1。
; CSIシーケンスの ESC は制御文字でなければならないが、指定内容は文字列にする。
send $1B'[1A'
端末の状態を報告する DSR は CSI Ps n なので
send $1B'[6n'
で送れますが、その応答コード (CPR) を解析する方法はちょっと分かりません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/26 12:29