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に追加していき、最後にまとめて出力する。
この記事に関連するニュース
-
窓辺の小石 第200回 へびつかい座ドローライン
マイナビニュース / 2025年1月24日 15時21分
-
Windows Terminal ベスト設定 第18回 Sixcelグラフィックス「基礎編」
マイナビニュース / 2025年1月17日 16時17分
-
仕事に役立つ独自AIアプリを用意! ASUS 「ExpertBook P5」はビジネスノートPCの新形態となるか? 実際に試して分かったこと
ITmedia PC USER / 2025年1月15日 11時5分
-
初めてのゲーミングノートにマッチ、 最新ゲームの快適プレイが可な15.3型G TUNE20周年記念モデル
ASCII.jp / 2025年1月12日 12時0分
-
Windows Terminal Preview版でSixelグラフィックスを実際に表示させてみる
ASCII.jp / 2025年1月5日 10時0分
ランキング
-
1メルカリに約340万円で出品されていたファミコンカセット1052本セット、無事購入される
おたくま経済新聞 / 2025年1月30日 9時25分
-
2成人向けゲームについてクレカに続いて銀行も表現規制か?日本の銀行が外国からの送金や口座開設を拒否
Game*Spark / 2025年1月30日 0時2分
-
3データ探しにAI活用、クラウドの使い勝手も取り込んだ新世代のNAS「UGREEN NASync」
ITmedia NEWS / 2025年1月30日 8時20分
-
4「108円でいいんですか?!」 シャトレーゼの「コスパ最強パンケーキ」が人気過ぎて品薄に 「おいしすぎる」
ねとらぼ / 2025年1月30日 7時30分
-
5DeepSeek、チャット履歴含む100万件超のログが外部から閲覧できた可能性 米セキュリティ企業が指摘
ITmedia NEWS / 2025年1月30日 14時34分
複数ページをまたぐ記事です
記事の最終ページでミッション達成してください