답변1
사용하는 것 외에도rxvt-유니코드-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