使用Perl Ansi颜色为整个屏幕着色

时间:2016-09-08 14:13:33

标签: perl terminal ansi

我在Windows中使用Term :: ANSIColor和Win32 :: Console :: ANSI。 我经常在脚本中使用彩色打印来突出显示一些关键信息或其他任何内容。

这是第一次,我尝试了一些有效的方法,但并不是我想要的方式。

在灰色/白色背景上打印时的样子:

What it looks like

我想要的是(编辑看起来像我希望它打印的方式):

What it should look like

因此,我想知道是否有人知道如何进行ANSI转义序列。何我用彩色填充我正在打印的整件,而不仅仅是换行。

此外,这是我的脚本(我尝试过两种方式):

print color('bold blue on_white'), "\tnr\tisiNdebele\n";
print colored ['bold blue on_white'], "\tnso\tSepedi\n";

这不是一个主要问题。我只是想知道是否有人知道如何实现这一目标。

1 个答案:

答案 0 :(得分:4)

我的解决方案使用Term::Size::Any来确定终端的大小,并Text::Tabs\t转换为空格。我们需要这样做,因为制表符只有一个字符宽,但在打印时会被转换为4或8或任意数量的空格。

use strict;
use warnings;
use Term::Size::Any 'chars';
use Term::ANSIColor;
use Text::Tabs 'expand';

my ($columns, $rows) = chars;

sub full_background {
    my ($text) = @_;

    chomp $text;
    return sprintf(qq{%-${columns}s}, expand($text)) . "\n";
}

print color('bold blue on_white'), full_background( "\tnr\tisiNdebele\n" );
print colored ['bold blue on_red'], full_background( "\tnso\tSepedi\n" );

这就是它的样子。

enter image description here