1. トップ
  2. 新着ニュース
  3. IT
  4. パソコン

Windows Terminal ベスト設定 第19回 Sixelグラフィックス「応用編」

マイナビニュース / 2025年1月28日 15時51分

水平方向への移動は、ビットパターンがすべてゼロの“?”をピクセル数出力して、Sixelポインタを動かす。

垂直方向は、6ピクセルごとにニューライン(“-”)を出力して移動させる。このとき、水平位置がSixelポインタ初期値に戻るため、エスケープシーケンス内では、先に垂直方向を指定し、その後、水平位置を“?”で合わせる。

(リスト01)は、Sixelでドットを打つためのPowerShellのスクリプト(抜粋)である。完全なコードは、筆者のGitHubに置いてある。

■リスト01

# 文字カーソル位置
$cposx= [math]::Floor( $x / 10);
$cposy= [math]::Floor( $y / 20);

# エスケープシーケンス出力用文字列変数の初期化、CUPで文字カーソル位置を移動
$outstring = "${CSI}$(1+$cposy);$(1+$cposx)H"

# Sixelのエスケープシーケンス開始。描画色は$cで指定
$outstring += "${SIXELS}#${c}";

# 文字カーソル位置からのオフセット
$sx = $x - $cposx * 10
$sy = $y - $cposy * 20

# y方向のSixel行数(Sixel New Lineの数)
$nCr=[Math]::Floor( $sy / 6)

# Sixel New Lineの出力
$outstring += "-" * $nCr

# x方向のオフセットがゼロでなければオールゼロのSixelを必要数描画
if($sx -gt 0) {
$outstring += '$'+('?'*$sx)
}

# Sixel内の1のビットを計算
$wp=[math]::Pow( 2,$sy % 6)

# Sixel文字に変換
$outstring +=[char]([int][char]'?'+[int]$wp)

# ST(String Terminator)を最後に追加
$outstring += $ST

描画は、SDM無効で行っている。というのは、Sixelを描画する座標を指定するのに、カーソル移動を使うのが簡単だからだ。SDM有効の場合、常に画面左上がSixelポインタとなるため、座標移動が煩雑になるからだ。

指定された座標から、最も近い文字カーソル位置を求め、変数$cposx、$cposyに保存する。これを使って、VTエスケープシーケンスCUPで文字カーソルを移動させる。ただし、エスケープシーケンスはすぐに出力するのではなく、変数$outstringに追加していき、最後にまとめて出力する。

この記事に関連するニュース

トピックスRSS

ランキング

複数ページをまたぐ記事です

記事の最終ページでミッション達成してください