urxvtにsixelをサポートさせる方法はありますか?

urxvtにsixelをサポートさせる方法はありますか?

最近、非常に人気のあるgithubリポジトリがあります。6号、そして使用中ですセックス端末内で画像を表示するために使用されるグラフィック。現在私が使用しているrxvt - Unicode私の端末エミュレータとして使用していますが、Sixelでは正しく動作しないようです。

Sixelをサポートする方法を知っている人はいますか?

(参考用にUbuntu 18.04 LTSを使用しています)

ベストアンサー1

使用する以外にrxvt-Unicode-6セル分岐後、Perl 拡張を作成して Sixel を実装できます。関連文書は次の場所にあります。urxvtperl(3)マンページ。私はSixelについてよくわかりませんが、次のような質問があるようです。

  • Sixelエスケープシーケンスを傍受して解釈し、デフォルトのエスケープシーケンスソルバーに渡されないようにします。シーケンスを改行に置き換えて、画像の高さに合わせて正しい行数を変更したり、幅に合わせてサイズを変更したりできます。

  • 画像を描きます。拡張のために urxvt が提供する API を使用して正しいウィンドウ ID を取得し、必要に応じて通常の xlib または xcb 関数を使用してイメージを描画できます。

  • 必要に応じて画像を再描画するスクロールなどのイベントを観察してください。

Sixelの実装に関する標準があるかどうかはわかりませんが、ここで多くの設定可能な可能性を見ることができます。たとえば、端末のサイズを変更すると、画像はどうなりますか?切れましたか?サイズ変更しましたか?作成時にのみ、またはサイズ変更されるたびに?カーソルを画像の上に移動して折り返すのに十分なテキストが記録されるとどうなりますか?サイズを変更すると、画像と改行されたテキストはどうなりますか?など。

まず、端末の幅と画像サイズの比率を小さくして、画像の最大サイズに設定するのが理想的な状況だと思います。設定した最大サイズを尊重しながら、端末のサイズを変更して画像のサイズを調整します。その上にテキストが描かれている場合は、画像を再描画するときに画像の上にそのテキストを保持するのが少し複雑になることがあります。

申し訳ありません。ちょっと興奮して答えの範囲を外れるようです。こんなことをする時間があってほしいです。

編集:urxvt perl拡張のピクセルを使用する機能についての意見の疑いに答えるために、ここに概念証明があります。座標(10、10)の左上に白いピクセルを設定します。

use strict;
use warnings;
use X11::Protocol;

my $X = X11::Protocol->new;

sub on_refresh_end {
  my $term = shift(@_);
  my $gc = $X->new_rsrc;
  $X->CreateGC($gc, $term->vt,
    foreground => $X->white_pixel);
  $X->PolyPoint($term->vt, $gc, 0, (10,10));
  $X->flush;
}

~/.urxvt/ext/sixel-proof-of-conceptこの拡張機能をインストールするには、~/.Xresources(または使用している場合は~/.Xdefaults)に行を追加して挿入し、URxvt.perl-ext-common: sixel-proof-of-concept次のコマンドを実行してxrdb ~/.Xresourcesロードします。X11::Protocol

おすすめ記事