urxvt가 sixel을 지원하도록 하는 방법이 있나요?

urxvt가 sixel을 지원하도록 하는 방법이 있나요?

최근에 매우 인기 있는 github 저장소가 있습니다.6호, 그리고 그것은 사용 중입니다섹스터미널 내에서 이미지를 표시하는 데 사용되는 그래픽입니다. 현재 내가 사용하고 있는rxvt-유니코드내 터미널 에뮬레이터로 사용 중인데 Sixel에서는 제대로 작동하지 않는 것 같습니다.

Sixel을 지원하는 방법을 아는 사람이 있나요?

(참고용으로 Ubuntu 18.04 LTS를 사용하고 있습니다)

답변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

관련 정보