149 lines
4.8 KiB
Diff
149 lines
4.8 KiB
Diff
|
|
From 6222588ca3c784536b117a0cd04289b251046e6f Mon Sep 17 00:00:00 2001
|
||
|
|
From: Mark Nudelman <markn@greenwoodsoftware.com>
|
||
|
|
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
|
||
|
|
|