about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-04-28 07:52:04 +0000
committerEric Wong <e@80x24.org>2021-04-28 19:30:59 +0000
commit56f7fa78653320ec0fd250e1416f4f25221fc793 (patch)
treeadda56299aa3d18b4ceb8dd5b35e931b1694b922 /lib
parentcbe901a5175849c30980e100f2e212e24072684b (diff)
downloadpublic-inbox-56f7fa78653320ec0fd250e1416f4f25221fc793.tar.gz
This seems to work with or without attributes.  We'll deal with
256-color terminal colors when/if somebody cares for it, but the
usual 16 ought to be more than enough.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/LeiViewText.pm19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/PublicInbox/LeiViewText.pm b/lib/PublicInbox/LeiViewText.pm
index 5d649840..e0d62c0d 100644
--- a/lib/PublicInbox/LeiViewText.pm
+++ b/lib/PublicInbox/LeiViewText.pm
@@ -36,8 +36,11 @@ my %DEFAULT_COLOR = (
         context => undef,
 );
 
+my $COLOR = qr/(?:bright)?
+                (?:normal|black|red|green|yellow|blue|magenta|cyan|white)/x;
+
 sub my_colored {
-        my ($self, $slot) = @_; # $_[2] = buffer
+        my ($self, $slot, $buf) = @_;
         my $val = $self->{"color.$slot"} //=
                         $self->{-leicfg}->{"color.$slot"} //
                         $self->{-gitcfg}->{"color.diff.$slot"} //
@@ -45,11 +48,19 @@ sub my_colored {
                         $DEFAULT_COLOR{$slot};
         $val = $val->[-1] if ref($val) eq 'ARRAY';
         if (defined $val) {
+                $val = lc $val;
                 # git doesn't use "_", Term::ANSIColor does
-                $val =~ s/\Abright([^_])/bright_$1/i;
-                ${$self->{obuf}} .= Term::ANSIColor::colored($_[2], lc $val);
+                $val =~ s/\Abright([^_])/bright_$1/ig;
+
+                # git: "green black" => T::A: "green on_black"
+                $val =~ s/($COLOR)(.+?)($COLOR)/$1$2on_$3/;
+
+                # FIXME: convert git #XXXXXX to T::A-compatible colors
+                # for 256-color terminals
+
+                ${$self->{obuf}} .= colored($buf, $val);
         } else {
-                ${$self->{obuf}} .= $_[2];
+                ${$self->{obuf}} .= $buf;
         }
 }