XQuartz中Windows的正确shell术语/ TERM值?

时间:2018-06-28 19:10:10

标签: term xquartz perldoc

我正在寻找在XQuartz的Windows中使用的$ term / $ TERM的正确设置。 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以前可以在OSX的xterms上正常工作。几年前,这种行为开始了,我终于对它感到厌烦,并试图使其再次正常工作。 (Perldoc,一些手册页和um,还有其他一些我已经看到此问题的东西。)

非常感谢您的帮助!

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

1 个答案:

答案 0 :(得分:0)

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

long:perldoc通过Pod::Text::ColorTerm::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