правильный термин оболочки / значение TERM для окон в XQuartz? - PullRequest
0 голосов
/ 28 июня 2018

Я ищу правильную настройку $ term / $ TERM для использования в Windows в XQuartz. Ни xterm, ни vt100 не работают хорошо. Они действительно отображают простой текст, но у меня возникают проблемы, когда я пытаюсь использовать какой-то непростой текст.

справочные страницы обычно отображаются нормально, но иногда они имеют проблемы. (К сожалению, сейчас я не могу вспомнить хороший плохой пример.)

Прямо сейчас я вижу это, когда пытаюсь отобразить POD. Вот несколько простых модулей pod и perldoc с разными настройками $ term:

iolaire(100)> cat podtest
#!/usr/bin/env perl

1;

=pod

=head1 NAME

B<podtest> - podtest for pod output on shell

=head1 SYNOPSIS

  podtest

=head1 DESCRIPTION

B<podtest> is pod test.

=cut

iolaire(101)> set term=vt100
iolaire(102)> perldoc podtest
2ESC[1mNAME2ESC[0m
    2ESC[1mpodtest2ESC[0m - podtest for pod output on shell

2ESC[1mSYNOPSIS2ESC[0m
      podtest

2ESC[1mDESCRIPTION2ESC[0m
    2ESC[1mpodtest2ESC[0m is pod test.

iolaire(103)> set term=xterm
iolaire(104)> perldoc podtest
iolaire(105)> perldoc podtest | cat -v
^[[1mNAME^[[0m
    ^[[1mpodtest^[[0m - podtest for pod output on shell

^[[1mSYNOPSIS^[[0m
      podtest

^[[1mDESCRIPTION^[[0m
    ^[[1mpodtest^[[0m is pod test.

iolaire(106)> 

У меня была такая же проблема в tcsh и в bash.

Perldoc отлично работал на xterms в OSX. Несколько лет назад это поведение началось, и я, наконец, сыт им по горло и пытаюсь заставить его работать снова. (Perldoc, некоторые man-страницы, и еще несколько вещей, в которых я видел эту проблему.)

Большое спасибо за помощь!

версии: XQuartz 2.7.11; OSX 10.13.4; Perl v5.26.2; Perldoc v3.28

1 Ответ

0 голосов
/ 08 июля 2018

short: проблема, вероятно, в том, как вызывается ваш пейджер (например, less ).

long: perldoc использует жестко закодированные через Pod :: Text :: Color и, в свою очередь, Term :: ANSIColor , например,

# Make level two headings bold.
sub cmd_head2 {
    my ($self, $attrs, $text) = @_;
    $text =~ s/\s+$//;
    $self->SUPER::cmd_head2 ($attrs, colored ($text, 'bold'));
}

# Fix the various formatting codes.
sub cmd_b { return colored ($_[2], 'bold')   }
sub cmd_f { return colored ($_[2], 'cyan')   }
sub cmd_i { return colored ($_[2], 'yellow') }

# Output any included code in green.
sub output_code {
    my ($self, $code) = @_;
    $code = colored ($code, 'green');
    $self->output ($code);
}

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

С другой стороны, perldoc использует для пейджер . На странице руководства написано

   "perldoc" will use, in order of preference, the pager defined in
   "PERLDOC_PAGER", "MANPAGER", or "PAGER" before trying to find a pager
   on its own. ("MANPAGER" is not used if "perldoc" was told to display
   plain text or unformatted pod.)

Если вы установили PAGER на less, то он будет использовать это значение. Но less будет отображать escape-символы, как показано в вашем примере, если вы не добавите в команду опцию, например, -R. Выполнение этого для PAGER может создавать помехи для других приложений, поэтому perldoc сначала ищет свою собственную переменную PERLDOC_PAGER.

...