Поддерживает ли urxvt управляющую последовательность OSC52?

В Linux стандартные файловые дескрипторы ввода/вывода создаются через системные вызовы ядра, а не через файловую систему /proc.

Символические ссылки, которые вы видите в /proc, не являются фактическими средствами, используемыми для передачи данных, а скорее отражением того, что делает ядро, чтобы предоставить процессам доступ к данным. Вот почему вы не можете использовать ln -sдля их изменения.

Что касается вашего вопроса о перенаправлении вывода на лету, я не знаю команды, которая это делает. Но это, безусловно, возможно. Вот пример того, как можно разработать такую ​​программу:

  1. Во-первых, начните с реализации функциональности cat. Следовательно, возьмите стандартный ввод и выгрузите его на стандартный вывод. Это будет не -интерактивное приложение.
  2. Далее,изменить программу так, чтобы она была интерактивной. Простым примером может быть передача небольшого количества ввода и ожидание нажатия пользователем клавиши ВВОД. Затем перенесите еще немного ввода и повторите. На этом этапе программа может останавливаться и принимать решения, что важно для возможности перенаправить вывод на лету.
  3. Наконец, измените программу, чтобы она могла принимать команды, определяющие, какими должны быть входные и выходные данные. Это может быть процесс-демон с API, пользовательским интерфейсом NCURSES и т. д.

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

3
16.01.2021, 06:31
1 ответ

Я нашел решение своей проблемы. Я опубликую его здесь для дальнейшего использования.

urxvt по умолчанию не поддерживает управляющую последовательность OSC52, а жаль. Тем не менее, urxvt легко расширяется с помощью Perl-скриптов, поэтому существуют Perl-скрипты, добавляющие поддержку OSC52. Примером может служить этот небольшой скрипт пользователя GitHub parantapa. При этом вы можете добавить поддержку OSC52 в два простых шага:

  • Скопируйте скрипт в~/.urxvt/ext/52-osc
  • Загрузите его в urxvt, добавив следующую строку в файл конфигурации ~/.Xdefaults:URxvt.perl-ext-common: 52-osc

Для полноты и -проверки на будущее, вот полный сценарий.

#! perl

=head1 NAME
52-osc - Implement OSC 32 ; Interact with X11 clipboard
=head1 SYNOPSIS
   urxvt -pe 52-osc
=head1 DESCRIPTION
This extension implements OSC 52 for interacting with system clipboard
Copied from GitHub user parantapa, who also reports most code came from:
http://ailin.tucana.uberspace.de/static/nei/*/Code/urxvt/
=cut

use MIME::Base64;
use Encode;

sub on_osc_seq {
    my ($term, $op, $args) = @_;
    return () unless $op eq 52;

    my ($clip, $data) = split ';', $args, 2;
    if ($data eq '?') {
        my $data_free = $term->selection();
        Encode::_utf8_off($data_free); # XXX
        $term->tt_write("\e]52;$clip;".encode_base64($data_free, '')."\a");
    }
    else {
        my $data_decoded = decode_base64($data);
        Encode::_utf8_on($data_decoded); # XXX
        $term->selection($data_decoded, $clip =~ /c/);
        $term->selection_grab(urxvt::CurrentTime, $clip =~ /c/);
    }

    ()
}
3
18.03.2021, 22:36

Теги

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