# Term::ANSIColor -- Color screen output using ANSI escape sequences.
-# $Id: ANSIColor.pm,v 1.4 2001/07/10 08:52:05 eagle Exp $
+# $Id: ANSIColor.pm,v 1.5 2002/06/28 22:49:01 eagle Exp $
#
-# Copyright 1996, 1997, 1998, 2000, 2001
+# Copyright 1996, 1997, 1998, 2000, 2001, 2002
# by Russ Allbery <rra@stanford.edu> and Zenin <zenin@bawdycaste.com>
#
# This program is free software; you may redistribute it and/or modify it
# Ah, September, when the sysadmins turn colors and fall off the trees....
# -- Dave Van Domelen
-############################################################################
+##############################################################################
# Modules and declarations
-############################################################################
+##############################################################################
package Term::ANSIColor;
require 5.001;
ON_CYAN ON_WHITE)]);
Exporter::export_ok_tags ('constants');
-# Don't use the CVS revision as the version, since this module is also in
-# Perl core and too many things could munge CVS magic revision strings.
-$VERSION = 1.04;
+# Don't use the CVS revision as the version, since this module is also in Perl
+# core and too many things could munge CVS magic revision strings.
+$VERSION = 1.05;
-
-############################################################################
+##############################################################################
# Internal data structures
-############################################################################
+##############################################################################
%attributes = ('clear' => 0,
'reset' => 0,
$attributes_r{$attributes{$_}} = $_;
}
-
-############################################################################
+##############################################################################
# Implementation (constant form)
-############################################################################
+##############################################################################
-# Time to have fun! We now want to define the constant subs, which are
-# named the same as the attributes above but in all caps. Each constant sub
-# needs to act differently depending on whether $AUTORESET is set. Without
+# Time to have fun! We now want to define the constant subs, which are named
+# the same as the attributes above but in all caps. Each constant sub needs
+# to act differently depending on whether $AUTORESET is set. Without
# autoreset:
#
-# BLUE "text\n" ==> "\e[34mtext\n"
+# BLUE "text\n" ==> "\e[34mtext\n"
#
# If $AUTORESET is set, we should instead get:
#
-# BLUE "text\n" ==> "\e[34mtext\n\e[0m"
+# BLUE "text\n" ==> "\e[34mtext\n\e[0m"
#
# The sub also needs to handle the case where it has no arguments correctly.
-# Maintaining all of this as separate subs would be a major nightmare, as
-# well as duplicate the %attributes hash, so instead we define an AUTOLOAD
-# sub to define the constant subs on demand. To do that, we check the name
-# of the called sub against the list of attributes, and if it's an all-caps
-# version of one of them, we define the sub on the fly and then run it.
+# Maintaining all of this as separate subs would be a major nightmare, as well
+# as duplicate the %attributes hash, so instead we define an AUTOLOAD sub to
+# define the constant subs on demand. To do that, we check the name of the
+# called sub against the list of attributes, and if it's an all-caps version
+# of one of them, we define the sub on the fly and then run it.
#
# If the environment variable ANSI_COLORS_DISABLED is set, turn all of the
# generated subs into pass-through functions that don't add any escape
}
}
-
-############################################################################
+##############################################################################
# Implementation (attribute string form)
-############################################################################
+##############################################################################
# Return the escape code for a given set of color attributes.
sub color {
}
# Return a list of named color attributes for a given set of escape codes.
-# Escape sequences can be given with or without enclosing "\e[" and "m".
-# The empty escape sequence '' or "\e[m" gives an empty list of attrs.
+# Escape sequences can be given with or without enclosing "\e[" and "m". The
+# empty escape sequence '' or "\e[m" gives an empty list of attrs.
sub uncolor {
my (@nums, @result);
for (@_) {
# Given a string and a set of attributes, returns the string surrounded by
# escape codes to set those attributes and then clear them at the end of the
# string. The attributes can be given either as an array ref as the first
-# argument or as a list as the second and subsequent arguments. If
-# $EACHLINE is set, insert a reset before each occurrence of the string
-# $EACHLINE and the starting attribute code after the string $EACHLINE, so
-# that no attribute crosses line delimiters (this is often desirable if the
-# output is to be piped to a pager or some other program).
+# argument or as a list as the second and subsequent arguments. If $EACHLINE
+# is set, insert a reset before each occurrence of the string $EACHLINE and
+# the starting attribute code after the string $EACHLINE, so that no attribute
+# crosses line delimiters (this is often desirable if the output is to be
+# piped to a pager or some other program).
sub colored {
my ($string, @codes);
if (ref $_[0]) {
}
}
-
-############################################################################
+##############################################################################
# Module return value and documentation
-############################################################################
+##############################################################################
# Ensure we evaluate to true.
1;
Note that not all displays are ISO 6429-compliant, or even X3.64-compliant
(or are even attempting to be so). This module will not work as expected on
-displays that do not honor these escape sequences, such as (reportedly) the
-"console" in at least some versions of Windows. They may just be ignored,
-or they may display as an ESC character followed by some apparent garbage.
+displays that do not honor these escape sequences, such as cmd.exe, 4nt.exe,
+and command.com under either Windows NT or Windows 2000. They may just be
+ignored, or they may display as an ESC character followed by some apparent
+garbage.
Jean Delvare provided the following table of different common terminal
emulators and their support for the various attributes:
=head1 SEE ALSO
ECMA-048 is available on-line (at least at the time of this writing) at
-E<lt>http://www.ecma.ch/ecma1/STAND/ECMA-048.HTME<gt>.
+L<http://www.ecma.ch/ecma1/STAND/ECMA-048.HTM>.
ISO 6429 is available from ISO for a charge; the author of this module does
not own a copy of it. Since the source material for ISO 6429 was ECMA-048
and the latter is available for free, there seems little reason to obtain
the ISO standard.
+The current version of this module is always available from its web site at
+L<http://www.eyrie.org/~eagle/software/ansicolor/>. It is also part of the
+Perl core distribution as of 5.6.0.
+
=head1 AUTHORS
Original idea (using constants) by Zenin, reimplemented using subs by Russ
-Allbery E<lt>rra@stanford.eduE<gt>, and then combined with the original idea
-by Russ with input from Zenin. Russ Allbery now maintains this module.
+Allbery <rra@stanford.edu>, and then combined with the original idea by Russ
+with input from Zenin. Russ Allbery now maintains this module.
-=head1 LICENSE
+=head1 COPYRIGHT AND LICENSE
-Copyright 1996, 1997, 1998, 2000, 2001 Russ Allbery <rra@stanford.edu> and
-Zenin <zenin@bawdycaste.org>. This program is free software; you may
+Copyright 1996, 1997, 1998, 2000, 2001, 2002 Russ Allbery <rra@stanford.edu>
+and Zenin <zenin@bawdycaste.org>. This program is free software; you may
redistribute it and/or modify it under the same terms as Perl itself.
=cut