Есть ли какой-нибудь способ, чтобы urxvt поддерживал шестигранник?

Что делает env COLUMNS =% s?

Он передает переменную COLUMNS со значением % s команде ps и ] забывает , т.е. переменная не влияет на последующие команды.

export сделает переменную доступной и для последующих команд, что может быть, а может и не быть целью.

Говорят:

FOO=bar command

и

env FOO=bar command

идентичны. Однако env допускает параметр -i , который заставляет его игнорировать среду, которую он наследует.

2
31.12.2018, 08:14
1 ответ

Помимо использования форка rxvt -unicode -sixel , можно было бы реализовать sixel, написав расширение на Perl. Документация для этого находится на справочной странице urxvtperl (3 ). Я мало что знаю о шестёрке, но думаю, что дело в:

  • перехватывая шесть управляющих последовательностей, интерпретируя их и не пропуская к основному интерпретатору управляющих последовательностей. Вы можете заменить последовательность символами новой строки, чтобы сместить правильное количество строк, чтобы соответствовать высоте изображения, возможно, масштабировать, чтобы соответствовать ширине.

  • рисование изображения. Вы можете получить правильный идентификатор окна через API, который urxvt предоставляет расширениям, и использовать обычные функции xlib или xcb для рисования изображения, если это необходимо.

  • Следите за такими событиями, как прокрутка, чтобы перерисовать изображение по мере необходимости.

Я вижу здесь много возможностей, которые можно было бы настроить, хотя я не знаю, существуют ли стандарты для реализации sixel. Например, что происходит с изображениями при изменении размера терминала? Он обрезан? Это масштабируется? только при создании или при каждом изменении размера? что происходит, когда курсор затем перемещается по изображению и пишется достаточно, чтобы текст переносился? что происходит с изображением и обернутым текстом при изменении размера? и т. д.

Я думаю, что в идеале было бы сначала нарисовать его в масштабе, который меньше между шириной терминала и размером изображения, и установить это как максимальный размер изображения. Измените масштаб изображения при изменении размера терминала, соблюдая установленный максимальный размер. Что касается текста, нарисованного поверх него,может быть немного сложно сохранить этот текст поверх изображения при перерисовке изображения...

Извините, кажется, я немного погорячился и не смог ответить на ваш вопрос. Как бы хотелось, чтобы у меня было время поработать над этим.

РЕДАКТИРОВАТЬ :Чтобы ответить на скептицизм в комментариях по поводу возможности работы с пикселями из Perl-расширения urxvt, вот доказательство концепции. Он устанавливает белый цвет пикселя по координате (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и убедитесь, что у вас установлен модуль perl X11::Protocol.

8
27.01.2020, 22:02

Теги

Похожие вопросы