From 6222588ca3c784536b117a0cd04289b251046e6f Mon Sep 17 00:00:00 2001 From: Mark Nudelman Date: Sun, 9 Oct 2022 15:30:49 -0700 Subject: [PATCH 07/48] lesstest: accommodate stupid termcap design where there is no exit-bold or exit-blink capabilities. --- lesstest/display.c | 17 ++++++++++++----- lesstest/env.c | 2 +- lesstest/lt_screen.c | 2 ++ lesstest/maketest | 8 +++++--- lesstest/runtest | 9 ++++++--- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/lesstest/display.c b/lesstest/display.c index dc1fa50..5c9355e 100644 --- a/lesstest/display.c +++ b/lesstest/display.c @@ -58,11 +58,18 @@ void display_screen(const byte* img, int imglen, int screen_width, int screen_he } } literal = 0; - if (ch != 0) { - byte cbuf[UNICODE_MAX_BYTES]; - byte* cp = cbuf; - store_wchar(&cp, ch); - fwrite(cbuf, 1, cp-cbuf, stdout); + if (move_cursor) { + if (ch != 0) { + byte cbuf[UNICODE_MAX_BYTES]; + byte* cp = cbuf; + store_wchar(&cp, ch); + fwrite(cbuf, 1, cp-cbuf, stdout); + } + } else { + if (is_ascii(ch)) + fwrite(&ch, 1, 1, stdout); + else + printf("<%lx>", (unsigned long) ch); } if (++x >= screen_width) { printf("\n"); diff --git a/lesstest/env.c b/lesstest/env.c index 77bfda6..76d26d0 100644 --- a/lesstest/env.c +++ b/lesstest/env.c @@ -74,7 +74,7 @@ static void env_setup(EnvBuf* env, char* const* prog_env, int interactive) { { "LESS_TERMCAP_ll", "\33l" }, { "LESS_TERMCAP_mb", "\33b" }, { "LESS_TERMCAP_md", "\33d" }, - { "LESS_TERMCAP_md", "\33e" }, + { "LESS_TERMCAP_me", "\33E" }, { "LESS_TERMCAP_se", "\33t" }, { "LESS_TERMCAP_so", "\33s" }, { "LESS_TERMCAP_sr", "\33r" }, diff --git a/lesstest/lt_screen.c b/lesstest/lt_screen.c index 1552557..3574320 100644 --- a/lesstest/lt_screen.c +++ b/lesstest/lt_screen.c @@ -254,6 +254,8 @@ static int exec_esc(wchar ch) { return screen_set_attr(ATTR_BLINK); case 'c': // exit blink return screen_clear_attr(ATTR_BLINK); + case 'E': // exit bold/blink + return screen_clear_attr(ATTR_BOLD|ATTR_BLINK); case '?': // print version string write(ttyout, version, strlen(version)); return 1; diff --git a/lesstest/maketest b/lesstest/maketest index 42ce5ac..ee4ead7 100755 --- a/lesstest/maketest +++ b/lesstest/maketest @@ -2,14 +2,14 @@ use strict; # Create a test file. -my $usage = "usage: maketest [-o lt-file] [-l less.exe] [-s lt_screen] [-t lesstest] [-w width] [-h height] textfile\n"; +my $usage = "usage: maketest [-o lt-file] [-l less.exe] [-s lt_screen] [-t lesstest] [-w width] [-h height] [-O lesstest-opts] textfile\n"; use Getopt::Std; exit main(); sub main { my %opt; - die $usage if not getopts('h:l:o:s:t:w:', \%opt); + die $usage if not getopts('h:l:o:O:s:t:w:', \%opt); my $textfile = shift @ARGV; die $usage if not defined $textfile; my $lesstest = ($opt{t} or "./lesstest"); @@ -18,7 +18,9 @@ sub main { my $ltfile = ($opt{o} or "lt/$textfile.lt"); my $lines = ($opt{h} or $ENV{LINES}-1); my $columns = ($opt{w} or $ENV{COLUMNS}-1); + my $lt_opts = ($opt{O} or ""); + $lt_opts = "-$lt_opts" if $lt_opts =~ /^[^-]/; - my $cmd = "LINES=$lines COLUMNS=$columns $lesstest -o '$ltfile' -- $less '$textfile'"; + my $cmd = "LINES=$lines COLUMNS=$columns $lesstest $lt_opts -o '$ltfile' -- $less '$textfile'"; exit system $cmd; } diff --git a/lesstest/runtest b/lesstest/runtest index 93ae80f..fe7fcab 100755 --- a/lesstest/runtest +++ b/lesstest/runtest @@ -2,7 +2,7 @@ use strict; # Run one or more test files. -my $usage = "usage: run [-d lesstest-dir] [-l less.exe] [-r temp-dir] [-s lt_screen] [-t lesstest] [file.lt | dir]...\n"; +my $usage = "usage: run [-d lesstest-dir] [-l less.exe] [-r temp-dir] [-s lt_screen] [-t lesstest] [-O lesstest-opts] [file.lt | dir]...\n"; use Getopt::Std; use Cwd; @@ -11,11 +11,12 @@ my $rundir; my $lesstest; my $lt_screen; my $less; +my $lt_opts; exit main(); sub main { my %opt; - die $usage if not getopts('d:l:r:s:t:', \%opt); + die $usage if not getopts('d:l:O:r:s:t:', \%opt); die $usage if not @ARGV; my $cwd = getcwd(); @@ -24,6 +25,8 @@ sub main { $lesstest = (rfile($opt{t}, $cwd) or "$srcdir/lesstest"); $lt_screen = (rfile($opt{s}, $cwd) or "$srcdir/lt_screen"); $less = (rfile($opt{l}, $cwd) or "$srcdir/../obj/less"); + $lt_opts = ($opt{O} or ""); + $lt_opts = "-$lt_opts" if $lt_opts =~ /^[^-]/; die "cannot execute $lesstest" if not -x $lesstest; die "cannot execute $lt_screen" if not -x $lt_screen; die "cannot execute $less" if not -x $less; @@ -57,7 +60,7 @@ sub run { return 1; } print "TEST $file\n"; - my $cmd = "$lesstest -s '$lt_screen' -t '$file' '$less'"; + my $cmd = "$lesstest $lt_opts -s '$lt_screen' -t '$file' '$less'"; my $err = system $cmd; if ($err) { print "ERR status $err from $cmd\n"; -- 2.27.0