【问题标题】:Using Perl Ansi color to color entire screen使用 Perl Ansi color 为整个屏幕着色
【发布时间】:2016-09-08 14:13:32
【问题描述】:

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

虽然是第一次,我尝试了一些可行的方法,但不是我想要的那样。

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

而我想要的是(编辑成我想要的打印方式):

因此,我想知道是否有人知道如何处理 ANSI 转义序列。我是否用一种颜色填充我正在打印的整个部分,而不仅仅是换行符。

另外,这是我的脚本(我尝试了两种方法):

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

这不是主要问题。我只是想知道是否有人知道我如何做到这一点。

【问题讨论】:

  • 用空格填充行? :D

标签: perl terminal ansi


【解决方案1】:

我的解决方案使用Term::Size::Any 来计算终端的大小,并使用Text::Tabs\ts 转换为空格。我们需要这样做,因为制表符只有一个字符宽,但在打印出来时会转换为 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" );

这就是它的样子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多