XQuartz 中 windows 的正确 shell term/TERM 值?

proper shell term/TERM value for windows in XQuartz?

我正在为 XQuartz 中的 windows 寻找 $term/$TERM 的正确设置。 xterm 和 vt100 都不能正常工作。它们确实可以显示纯文本,但是当我尝试使用一些非纯文本时它们会遇到问题。

手册页通常显示正常,但有时会出现问题。 (很遗憾,我暂时想不出好的坏的例子。)

现在,我在尝试显示 POD 时看到了这个。这是一些简单的 pod 和一些使用不同 $term 设置运行的 perldoc:

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 过去在 OSX 上的 xterms 上运行良好。几年前开始出现这种行为,我终于厌倦了它,并试图让它重新工作。 (Perldoc、一些手册页,以及嗯,我在其他一些地方看到了这个问题。)

非常感谢您的帮助!

版本:XQuartz 2.7.11; OSX 10.13.4; Perl v5.26.2; Perldoc v3.28

简短:问题可能在于您的寻呼机(例如,less)的调用方式。

long:perldoc 通过 Pod::Text::Color and in turn 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 用于 pager。它的手册页说

   "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 将显示转义字符,如您的示例所示,除非您向命令添加选项,例如 -R。对 PAGER 这样做可能会干扰其他应用程序,因此 perldoc 首先查找它自己的变量 PERLDOC_PAGER.