mirror of
https://github.com/tstack/lnav.git
synced 2024-08-16 16:30:25 +03:00
[tests] try to make scripty output readable
This commit is contained in:
parent
4d936f7bba
commit
8235f9af5d
@ -149,6 +149,8 @@ grep_output_for() {
|
||||
on_error_fail_with() {
|
||||
if test $? -ne 0; then
|
||||
echo $1 > /dev/stderr
|
||||
cat ${test_file_base}_${test_num}.tmp
|
||||
cat ${test_file_base}_${test_num}.err
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ public:
|
||||
auto_mem(const auto_mem &am) = delete;
|
||||
|
||||
template<typename F>
|
||||
explicit auto_mem(F free_func)
|
||||
explicit auto_mem(F free_func) noexcept
|
||||
: am_ptr(nullptr), am_free_func((free_func_t)free_func) { };
|
||||
|
||||
auto_mem(auto_mem &&other) noexcept
|
||||
|
@ -39,6 +39,7 @@
|
||||
|
||||
#include "optional.hpp"
|
||||
#include "strnatcmp.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
struct string_fragment {
|
||||
using iterator = const char *;
|
||||
@ -212,6 +213,18 @@ struct string_fragment {
|
||||
int sf_end;
|
||||
};
|
||||
|
||||
namespace fmt {
|
||||
template<>
|
||||
struct formatter<string_fragment> : formatter<string_view> {
|
||||
template<typename FormatContext>
|
||||
auto format(const string_fragment& sf, FormatContext &ctx)
|
||||
{
|
||||
return formatter<string_view>::format(
|
||||
string_view{sf.data(), (size_t) sf.length()}, ctx);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
inline bool operator<(const char *left, const string_fragment &right) {
|
||||
int rc = strncmp(left, right.data(), right.length());
|
||||
return rc < 0;
|
||||
|
@ -841,6 +841,14 @@ struct Result {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
template<typename Func>
|
||||
auto unwrapOrElse(Func func) const {
|
||||
if (isOk()) {
|
||||
return storage().template get<T>();
|
||||
}
|
||||
return func(this->storage().template get<E>());
|
||||
}
|
||||
|
||||
template<typename U = T>
|
||||
typename std::enable_if<
|
||||
!std::is_same<U, void>::value,
|
||||
|
@ -168,3 +168,10 @@ void split_ws(const std::string &str, std::vector<std::string> &toks_out)
|
||||
toks_out.push_back(buf);
|
||||
}
|
||||
}
|
||||
|
||||
std::string repeat(const std::string& input, size_t num)
|
||||
{
|
||||
std::ostringstream os;
|
||||
std::fill_n(std::ostream_iterator<std::string>(os), num, input);
|
||||
return os.str();
|
||||
}
|
||||
|
@ -143,4 +143,6 @@ size_t abbreviate_str(char *str, size_t len, size_t max_len);
|
||||
|
||||
void split_ws(const std::string &str, std::vector<std::string> &toks_out);
|
||||
|
||||
std::string repeat(const std::string& input, size_t num);
|
||||
|
||||
#endif
|
||||
|
@ -163,6 +163,8 @@ void bottom_status_source::update_loading(off_t off, size_t total)
|
||||
{
|
||||
status_field &sf = this->bss_fields[BSF_LOADING];
|
||||
|
||||
require(off >= 0);
|
||||
|
||||
if (total == 0 || (size_t)off == total) {
|
||||
sf.set_cylon(false);
|
||||
sf.set_role(view_colors::VCR_STATUS);
|
||||
|
@ -65,6 +65,10 @@ int sql_progress(const struct log_cursor &lc)
|
||||
size_t total = lnav_data.ld_log_source.text_line_count();
|
||||
off_t off = lc.lc_curr_line;
|
||||
|
||||
if (off < 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lnav_data.ld_window == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -135,8 +135,23 @@ void highlighter::annotate(attr_line_t &al, int start) const
|
||||
attrs = this->h_attrs;
|
||||
}
|
||||
if (this->h_semantic) {
|
||||
attrs |= vc.attrs_for_ident(&str[lr.lr_start],
|
||||
lr.length());
|
||||
bool found_color = false;
|
||||
|
||||
if (str[lr.lr_start] == '#' &&
|
||||
(lr.length() == 4 || lr.length() == 7)) {
|
||||
auto fg_res = rgb_color::from_str(
|
||||
string_fragment(str.data(), lr.lr_start, lr.lr_end));
|
||||
if (fg_res.isOk()) {
|
||||
sa.emplace_back(lr,
|
||||
&view_curses::VC_FOREGROUND,
|
||||
vc.match_color(fg_res.unwrap()));
|
||||
found_color = true;
|
||||
}
|
||||
}
|
||||
if (!found_color) {
|
||||
attrs |= vc.attrs_for_ident(&str[lr.lr_start],
|
||||
lr.length());
|
||||
}
|
||||
}
|
||||
if (!this->h_fg.empty()) {
|
||||
sa.emplace_back(lr,
|
||||
|
@ -1497,6 +1497,8 @@ static void looper()
|
||||
int session_stage = 0;
|
||||
|
||||
while (lnav_data.ld_looping) {
|
||||
static bool initial_build = false;
|
||||
|
||||
vector<struct pollfd> pollfds;
|
||||
auto poll_to = initial_rescan_completed ?
|
||||
timeval{ 0, 333000 } :
|
||||
@ -1596,6 +1598,9 @@ static void looper()
|
||||
POLLIN,
|
||||
0
|
||||
});
|
||||
if (initial_build) {
|
||||
view_curses::awaiting_user_input();
|
||||
}
|
||||
}
|
||||
rlc.update_poll_set(pollfds);
|
||||
lnav_data.ld_filter_source.fss_editor.update_poll_set(pollfds);
|
||||
@ -1669,7 +1674,6 @@ static void looper()
|
||||
};
|
||||
}
|
||||
|
||||
static bool initial_build = false;
|
||||
if (initial_rescan_completed &&
|
||||
(!initial_build || timer.fade_diff(index_counter) == 0)) {
|
||||
if (lnav_data.ld_mode == LNM_PAGING) {
|
||||
|
@ -1923,31 +1923,34 @@ void external_log_format::build(std::vector<std::string> &errors) {
|
||||
for (auto &hd_pair : this->elf_highlighter_patterns) {
|
||||
external_log_format::highlighter_def &hd = hd_pair.second;
|
||||
const std::string &pattern = hd.hd_pattern;
|
||||
std::string errmsg;
|
||||
const char *errptr;
|
||||
rgb_color fg, bg;
|
||||
int eoff, attrs = 0;
|
||||
|
||||
if (!hd.hd_color.empty()) {
|
||||
if (!rgb_color::from_str(hd.hd_color, fg, errmsg)) {
|
||||
errors.push_back("error:"
|
||||
+ this->elf_name.to_string()
|
||||
+ ":highlighters/"
|
||||
+ hd_pair.first.to_string()
|
||||
+ "/color:"
|
||||
+ errmsg);
|
||||
}
|
||||
fg = rgb_color::from_str(hd.hd_color)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
errors.push_back("error:"
|
||||
+ this->elf_name.to_string()
|
||||
+ ":highlighters/"
|
||||
+ hd_pair.first.to_string()
|
||||
+ "/color:"
|
||||
+ msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
}
|
||||
|
||||
if (!hd.hd_background_color.empty()) {
|
||||
if (!rgb_color::from_str(hd.hd_background_color, bg, errmsg)) {
|
||||
errors.push_back("error:"
|
||||
+ this->elf_name.to_string()
|
||||
+ ":highlighters/"
|
||||
+ hd_pair.first.to_string()
|
||||
+ "/color:"
|
||||
+ errmsg);
|
||||
}
|
||||
bg = rgb_color::from_str(hd.hd_background_color)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
errors.push_back("error:"
|
||||
+ this->elf_name.to_string()
|
||||
+ ":highlighters/"
|
||||
+ hd_pair.first.to_string()
|
||||
+ "/color:"
|
||||
+ msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
}
|
||||
|
||||
if (hd.hd_underline) {
|
||||
|
@ -1,7 +1,8 @@
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-Wall \
|
||||
-I$(top_srcdir)/src
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/fmtlib
|
||||
|
||||
noinst_LIBRARIES = libpcrepp.a
|
||||
|
||||
|
@ -238,6 +238,7 @@ public:
|
||||
{
|
||||
this->rc_value = value;
|
||||
this->rc_value_expiration = time(nullptr) + VALUE_EXPIRATION;
|
||||
this->set_needs_update();
|
||||
};
|
||||
std::string get_value() const { return this->rc_value; };
|
||||
|
||||
|
@ -363,7 +363,7 @@ void readline_command_highlighter(attr_line_t &al, int x)
|
||||
static const pcrepp SQL_PREFIXES("^:(filter-expr)");
|
||||
static const pcrepp IDENT_PREFIXES("^:(tag|untag|delete-tags)");
|
||||
static const pcrepp COLOR_PREFIXES("^:(config)");
|
||||
static const pcrepp COLOR_RE("(#(?:[a-fA-F0-9]{3}|[a-fA-F0-9]{6}))");
|
||||
static const pcrepp COLOR_RE("(#(?:[a-fA-F0-9]{6}|[a-fA-F0-9]{3}))");
|
||||
|
||||
view_colors &vc = view_colors::singleton();
|
||||
int keyword_attrs = (
|
||||
@ -401,19 +401,18 @@ void readline_command_highlighter(attr_line_t &al, int x)
|
||||
pcre_context::capture_t *cap = pc[0];
|
||||
string hash_color = pi.get_substr(cap);
|
||||
string errmsg;
|
||||
rgb_color rgb_fg, rgb_bg;
|
||||
attr_t color_hint_attrs = vc.attrs_for_role(view_colors::VCR_COLOR_HINT);
|
||||
int pnum = PAIR_NUMBER(color_hint_attrs);
|
||||
|
||||
if (rgb_color::from_str(hash_color, rgb_bg, errmsg)) {
|
||||
rgb_color::from_str(hash_color).then([&](const auto& rgb_fg) {
|
||||
pnum -= 1;
|
||||
vc.ensure_color_pair(pnum, rgb_fg, rgb_bg);
|
||||
vc.ensure_color_pair(pnum, rgb_fg, rgb_color{});
|
||||
|
||||
al.get_attrs().emplace_back(
|
||||
line_range{cap->c_begin, cap->c_begin + 1},
|
||||
&view_curses::VC_ROLE,
|
||||
view_colors::VCR_COLOR_HINT);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
pi.reset(line);
|
||||
|
@ -31,6 +31,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "fmt/format.h"
|
||||
#include "yajlpp/yajlpp.hh"
|
||||
#include "yajlpp/yajlpp_def.hh"
|
||||
#include "styling.hh"
|
||||
@ -53,6 +54,8 @@ static struct json_path_container term_color_handler = {
|
||||
.FOR_FIELD(term_color, xc_id),
|
||||
yajlpp::property_handler("name")
|
||||
.FOR_FIELD(term_color, xc_name),
|
||||
yajlpp::property_handler("hexString")
|
||||
.FOR_FIELD(term_color, xc_hex),
|
||||
yajlpp::property_handler("rgb")
|
||||
.with_obj_provider<rgb_color, term_color>(
|
||||
[](const auto &pc, term_color *xc) { return &xc->xc_color; })
|
||||
@ -83,46 +86,46 @@ term_color_palette *ansi_colors()
|
||||
return &retval;
|
||||
}
|
||||
|
||||
bool rgb_color::from_str(const string_fragment &color,
|
||||
rgb_color &rgb_out,
|
||||
std::string &errmsg)
|
||||
Result<rgb_color, std::string> rgb_color::from_str(const string_fragment &sf)
|
||||
{
|
||||
if (color.empty()) {
|
||||
return true;
|
||||
if (sf.empty()) {
|
||||
return Ok(rgb_color());
|
||||
}
|
||||
|
||||
if (color[0] == '#') {
|
||||
switch (color.length()) {
|
||||
rgb_color rgb_out;
|
||||
|
||||
if (sf[0] == '#') {
|
||||
switch (sf.length()) {
|
||||
case 4:
|
||||
if (sscanf(color.data(), "#%1hx%1hx%1hx",
|
||||
if (sscanf(sf.data(), "#%1hx%1hx%1hx",
|
||||
&rgb_out.rc_r, &rgb_out.rc_g, &rgb_out.rc_b) == 3) {
|
||||
rgb_out.rc_r |= rgb_out.rc_r << 4;
|
||||
rgb_out.rc_g |= rgb_out.rc_g << 4;
|
||||
rgb_out.rc_b |= rgb_out.rc_b << 4;
|
||||
return true;
|
||||
return Ok(rgb_out);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sscanf(color.data(), "#%2hx%2hx%2hx",
|
||||
if (sscanf(sf.data(), "#%2hx%2hx%2hx",
|
||||
&rgb_out.rc_r, &rgb_out.rc_g, &rgb_out.rc_b) == 3) {
|
||||
return true;
|
||||
return Ok(rgb_out);
|
||||
}
|
||||
break;
|
||||
}
|
||||
errmsg = "Could not parse color: " + color.to_string();
|
||||
return false;
|
||||
|
||||
return Err(fmt::format("Could not parse color: {}", sf));
|
||||
}
|
||||
|
||||
for (const auto &xc : xterm_colors()->tc_palette) {
|
||||
if (color.iequal(xc.xc_name)) {
|
||||
rgb_out = xc.xc_color;
|
||||
return true;
|
||||
if (sf.iequal(xc.xc_name)) {
|
||||
return Ok(xc.xc_color);
|
||||
}
|
||||
}
|
||||
|
||||
errmsg = "Unknown color: '" + color.to_string() +
|
||||
"'. See https://jonasjacek.github.io/colors/ for a list of supported color names";
|
||||
return false;
|
||||
return Err(fmt::format(
|
||||
"Unknown color: '{}'. "
|
||||
"See https://jonasjacek.github.io/colors/ for a list of supported "
|
||||
"color names", sf));
|
||||
}
|
||||
|
||||
bool rgb_color::operator<(const rgb_color &rhs) const
|
||||
|
@ -35,12 +35,11 @@
|
||||
#include <vector>
|
||||
|
||||
#include "log_level.hh"
|
||||
#include "base/result.h"
|
||||
#include "base/intern_string.hh"
|
||||
|
||||
struct rgb_color {
|
||||
static bool from_str(const string_fragment &color,
|
||||
rgb_color &rgb_out,
|
||||
std::string &errmsg);
|
||||
static Result<rgb_color, std::string> from_str(const string_fragment &sf);
|
||||
|
||||
explicit rgb_color(short r = -1, short g = -1, short b = -1)
|
||||
: rc_r(r), rc_g(g), rc_b(b) {
|
||||
@ -103,6 +102,7 @@ struct lab_color {
|
||||
struct term_color {
|
||||
short xc_id;
|
||||
std::string xc_name;
|
||||
std::string xc_hex;
|
||||
rgb_color xc_color;
|
||||
lab_color xc_lab_color;
|
||||
};
|
||||
|
@ -168,7 +168,7 @@ void textview_curses::reload_config(error_reporter &reporter)
|
||||
|
||||
const auto &sc = hl_pair.second.hc_style;
|
||||
string fg1, bg1, fg_color, bg_color, errmsg;
|
||||
rgb_color fg, bg;
|
||||
bool invalid = false;
|
||||
int attrs = 0;
|
||||
|
||||
fg1 = sc.sc_color;
|
||||
@ -176,12 +176,19 @@ void textview_curses::reload_config(error_reporter &reporter)
|
||||
shlex(fg1).eval(fg_color, theme_iter->second.lt_vars);
|
||||
shlex(bg1).eval(bg_color, theme_iter->second.lt_vars);
|
||||
|
||||
if (!rgb_color::from_str(fg_color, fg, errmsg)) {
|
||||
reporter(&sc.sc_color, errmsg);
|
||||
continue;
|
||||
}
|
||||
if (!rgb_color::from_str(bg_color, bg, errmsg)) {
|
||||
reporter(&sc.sc_background_color, errmsg);
|
||||
auto fg = rgb_color::from_str(fg_color)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&sc.sc_color, errmsg);
|
||||
invalid = true;
|
||||
return rgb_color{};
|
||||
});
|
||||
auto bg = rgb_color::from_str(bg_color)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&sc.sc_background_color, errmsg);
|
||||
invalid = true;
|
||||
return rgb_color{};
|
||||
});
|
||||
if (invalid) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
"styles": {
|
||||
"text": {
|
||||
"color": "Silver",
|
||||
"background-color": ""
|
||||
"background-color": "Black"
|
||||
},
|
||||
"identifier": {
|
||||
"background-color": ""
|
||||
@ -149,6 +149,12 @@
|
||||
}
|
||||
},
|
||||
"highlights": {
|
||||
"colors": {
|
||||
"pattern": "(?:#[a-fA-F0-9]{6}|#[a-fA-F0-9]{3})",
|
||||
"style": {
|
||||
"semantic": true
|
||||
}
|
||||
},
|
||||
"ipv4": {
|
||||
"pattern": "\\b(?<!\\d\\.)\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b(?!\\.\\d)",
|
||||
"style": {
|
||||
|
@ -98,6 +98,13 @@ struct utf_to_display_adjustment {
|
||||
};
|
||||
};
|
||||
|
||||
void view_curses::awaiting_user_input()
|
||||
{
|
||||
static const char OSC_INPUT[] = "\x1b]999;send-input\a";
|
||||
|
||||
write(STDOUT_FILENO, OSC_INPUT, sizeof(OSC_INPUT) - 1);
|
||||
}
|
||||
|
||||
void view_curses::mvwattrline(WINDOW *window,
|
||||
int y,
|
||||
int x,
|
||||
@ -423,7 +430,7 @@ void view_colors::init()
|
||||
{
|
||||
vc_active_palette = ansi_colors();
|
||||
if (has_colors()) {
|
||||
static int ansi_colors_to_curses[] = {
|
||||
static const int ansi_colors_to_curses[] = {
|
||||
COLOR_BLACK,
|
||||
COLOR_RED,
|
||||
COLOR_GREEN,
|
||||
@ -443,9 +450,22 @@ void view_colors::init()
|
||||
for (int bg = 0; bg < 8; bg++) {
|
||||
if (fg == 0 && bg == 0)
|
||||
continue;
|
||||
init_pair(ansi_color_pair_index(fg, bg),
|
||||
ansi_colors_to_curses[fg],
|
||||
ansi_colors_to_curses[bg]);
|
||||
|
||||
if (lnav_config.lc_ui_default_colors &&
|
||||
ansi_colors_to_curses[fg] == COLOR_WHITE &&
|
||||
ansi_colors_to_curses[bg] == COLOR_BLACK) {
|
||||
init_pair(ansi_color_pair_index(fg, bg), -1, -1);
|
||||
} else {
|
||||
auto curs_bg = ansi_colors_to_curses[bg];
|
||||
|
||||
if (lnav_config.lc_ui_default_colors &&
|
||||
curs_bg == COLOR_BLACK) {
|
||||
curs_bg = -1;
|
||||
}
|
||||
init_pair(ansi_color_pair_index(fg, bg),
|
||||
ansi_colors_to_curses[fg],
|
||||
curs_bg);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (COLORS >= 256) {
|
||||
@ -466,6 +486,12 @@ void view_colors::init()
|
||||
|
||||
inline attr_t attr_for_colors(int &pair_base, short fg, short bg)
|
||||
{
|
||||
if (fg == -1) {
|
||||
fg = COLOR_WHITE;
|
||||
}
|
||||
if (bg == -1) {
|
||||
bg = COLOR_BLACK;
|
||||
}
|
||||
if (COLOR_PAIRS <= 64) {
|
||||
return view_colors::ansi_color_pair(fg, bg);
|
||||
} else {
|
||||
@ -476,13 +502,6 @@ inline attr_t attr_for_colors(int &pair_base, short fg, short bg)
|
||||
if (bg == COLOR_BLACK) {
|
||||
bg = -1;
|
||||
}
|
||||
} else {
|
||||
if (fg == -1) {
|
||||
fg = COLOR_WHITE;
|
||||
}
|
||||
if (bg == -1) {
|
||||
bg = COLOR_BLACK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,8 +521,7 @@ pair<attr_t, attr_t> view_colors::to_attrs(
|
||||
const lnav_theme <, const style_config &sc, const style_config &fallback_sc,
|
||||
lnav_config_listener::error_reporter &reporter)
|
||||
{
|
||||
rgb_color fg, bg;
|
||||
string fg1, bg1, fg_color, bg_color, errmsg;
|
||||
string fg1, bg1, fg_color, bg_color;
|
||||
|
||||
fg1 = sc.sc_color;
|
||||
if (fg1.empty()) {
|
||||
@ -516,12 +534,14 @@ pair<attr_t, attr_t> view_colors::to_attrs(
|
||||
shlex(fg1).eval(fg_color, lt.lt_vars);
|
||||
shlex(bg1).eval(bg_color, lt.lt_vars);
|
||||
|
||||
if (!rgb_color::from_str(fg_color, fg, errmsg)) {
|
||||
reporter(&sc.sc_color, errmsg);
|
||||
}
|
||||
if (!rgb_color::from_str(bg_color, bg, errmsg)) {
|
||||
reporter(&sc.sc_background_color, errmsg);
|
||||
}
|
||||
auto fg = rgb_color::from_str(fg_color).unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&sc.sc_color, msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
auto bg = rgb_color::from_str(bg_color).unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&sc.sc_background_color, msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
|
||||
attr_t retval1 = attr_for_colors(pair_base,
|
||||
this->match_color(fg),
|
||||
@ -552,13 +572,14 @@ void view_colors::init_roles(const lnav_theme <,
|
||||
int ident_bg = (lnav_config.lc_ui_default_colors ? -1 : COLOR_BLACK);
|
||||
|
||||
if (!ident_sc.sc_background_color.empty()) {
|
||||
string bg_color, errmsg;
|
||||
rgb_color rgb_bg;
|
||||
string bg_color;
|
||||
|
||||
shlex(ident_sc.sc_background_color).eval(bg_color, lt.lt_vars);
|
||||
if (!rgb_color::from_str(bg_color, rgb_bg, errmsg)) {
|
||||
reporter(&ident_sc.sc_background_color, errmsg);
|
||||
}
|
||||
auto rgb_bg = rgb_color::from_str(bg_color)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&ident_sc.sc_background_color, msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
ident_bg = vc_active_palette->match_color(lab_color(rgb_bg));
|
||||
}
|
||||
for (int z = 0; z < 6; z++) {
|
||||
@ -592,19 +613,17 @@ void view_colors::init_roles(const lnav_theme <,
|
||||
|
||||
auto fg_str = lt.lt_vars.find(COLOR_NAMES[ansi_fg]);
|
||||
auto bg_str = lt.lt_vars.find(COLOR_NAMES[ansi_bg]);
|
||||
rgb_color rgb_fg, rgb_bg;
|
||||
string errmsg;
|
||||
|
||||
if (fg_str != lt.lt_vars.end() &&
|
||||
!rgb_color::from_str(fg_str->second, rgb_fg, errmsg)) {
|
||||
reporter(&fg_str->second, errmsg);
|
||||
return;
|
||||
}
|
||||
if (bg_str != lt.lt_vars.end() &&
|
||||
!rgb_color::from_str(bg_str->second, rgb_bg, errmsg)) {
|
||||
reporter(&bg_str->second, errmsg);
|
||||
return;
|
||||
}
|
||||
auto rgb_fg = rgb_color::from_str(fg_str->second)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&fg_str->second, msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
auto rgb_bg = rgb_color::from_str(bg_str->second)
|
||||
.unwrapOrElse([&](const auto& msg) {
|
||||
reporter(&fg_str->second, msg);
|
||||
return rgb_color{};
|
||||
});
|
||||
|
||||
short fg = vc_active_palette->match_color(lab_color(rgb_fg));
|
||||
short bg = vc_active_palette->match_color(lab_color(rgb_bg));
|
||||
@ -617,6 +636,12 @@ void view_colors::init_roles(const lnav_theme <,
|
||||
}
|
||||
|
||||
this->vc_ansi_to_theme[ansi_fg] = fg;
|
||||
if (lnav_config.lc_ui_default_colors && bg == COLOR_BLACK) {
|
||||
bg = -1;
|
||||
if (fg == COLOR_WHITE) {
|
||||
fg = -1;
|
||||
}
|
||||
}
|
||||
init_pair(ansi_color_pair_index(ansi_fg, ansi_bg), fg, bg);
|
||||
}
|
||||
}
|
||||
@ -882,7 +907,7 @@ attr_t view_colors::attrs_for_ident(const char *str, size_t len) const
|
||||
pair_content(pnum, &fg, &bg);
|
||||
}
|
||||
else {
|
||||
retval = BASIC_HL_PAIRS[index % BASIC_COLOR_COUNT];
|
||||
retval = A_BOLD;
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@ -442,6 +442,8 @@ public:
|
||||
static string_attr_type VC_FOREGROUND;
|
||||
static string_attr_type VC_BACKGROUND;
|
||||
|
||||
static void awaiting_user_input();
|
||||
|
||||
static void mvwattrline(WINDOW *window,
|
||||
int y,
|
||||
int x,
|
||||
|
@ -62,6 +62,9 @@ add_executable(test_top_status test_top_status.cc)
|
||||
target_link_libraries(test_top_status diag PkgConfig::libpcre)
|
||||
add_test(NAME test_top_status COMMAND test_top_status)
|
||||
|
||||
add_executable(drive_vt52_curses drive_vt52_curses.cc)
|
||||
target_link_libraries(drive_vt52_curses diag PkgConfig::ncursesw)
|
||||
|
||||
add_executable(drive_sql_anno drive_sql_anno.cc)
|
||||
target_link_libraries(drive_sql_anno diag PkgConfig::libpcre)
|
||||
|
||||
|
@ -322,6 +322,7 @@ TESTS = \
|
||||
test_line_buffer.sh \
|
||||
test_listview.sh \
|
||||
test_meta.sh \
|
||||
test_mvwattrline.sh \
|
||||
test_grep_proc.sh \
|
||||
test_grep_proc2 \
|
||||
test_json_format.sh \
|
||||
@ -342,11 +343,11 @@ TESTS = \
|
||||
test_sql_xml_func.sh \
|
||||
test_data_parser.sh \
|
||||
test_pretty_print.sh \
|
||||
test_view_colors.sh \
|
||||
test_vt52_curses.sh
|
||||
|
||||
DISABLED_TESTS = \
|
||||
test_top_status \
|
||||
test_view_colors.sh
|
||||
test_top_status
|
||||
|
||||
if HAVE_LIBCURL
|
||||
TESTS += \
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
#include "pcrepp/pcrepp.hh"
|
||||
#include "textview_curses.hh"
|
||||
#include "data_scanner.hh"
|
||||
#include "data_parser.hh"
|
||||
|
@ -98,15 +98,10 @@ int main(int argc, char *argv[])
|
||||
tgetstr((char *)"ce", nullptr),
|
||||
"de",
|
||||
"\n",
|
||||
"1\n",
|
||||
"2\n",
|
||||
"3\n",
|
||||
"4\n",
|
||||
"5\n",
|
||||
"6\n",
|
||||
"7\n",
|
||||
"8\n",
|
||||
"9\n",
|
||||
"1",
|
||||
"2",
|
||||
"3",
|
||||
"\n",
|
||||
"abc",
|
||||
"\x02",
|
||||
"\a",
|
||||
@ -124,6 +119,7 @@ int main(int argc, char *argv[])
|
||||
vt.map_output(CANNED_INPUT[lpc], strlen(CANNED_INPUT[lpc]));
|
||||
vt.do_update();
|
||||
refresh();
|
||||
view_curses::awaiting_user_input();
|
||||
getch();
|
||||
}
|
||||
|
||||
|
@ -1 +1,69 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a48656c6c6f1b5b3734430e780f1b5b323b31480e0f576f726c64211b5b3733430e780f1b5b333b3830480e780f1b5b343b3830480e780f1b5b353b3830480e780f1b5b363b3830480e780f1b5b373b3830480e780f1b5b383b3830480e780f1b5b393b3830480e780f1b5b31303b3830480e780f1b5b31313b3830480e780f1b5b31323b3830480e780f1b5b31333b3830480e780f1b5b31343b3830480e780f1b5b31353b3830480e780f1b5b31363b3830480e780f1b5b31373b3830480e780f1b5b31383b3830480e780f1b5b31393b3830480e780f1b5b32303b3830480e780f1b5b32313b3830480e780f1b5b32323b3830480e780f1b5b32333b3830480e780f1b5b32343b3830480e0f080e780f080e1b5b34680f201b5b346c0d1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 1 ┋Hello x┋
|
||||
A └┛ alt
|
||||
S 2 ┋World! x┋
|
||||
A └┛ alt
|
||||
S 3 ┋ x┋
|
||||
A └┛ alt
|
||||
S 4 ┋ x┋
|
||||
A └┛ alt
|
||||
S 5 ┋ x┋
|
||||
A └┛ alt
|
||||
S 6 ┋ x┋
|
||||
A └┛ alt
|
||||
S 7 ┋ x┋
|
||||
A └┛ alt
|
||||
S 8 ┋ x┋
|
||||
A └┛ alt
|
||||
S 9 ┋ x┋
|
||||
A └┛ alt
|
||||
S 10 ┋ x┋
|
||||
A └┛ alt
|
||||
S 11 ┋ x┋
|
||||
A └┛ alt
|
||||
S 12 ┋ x┋
|
||||
A └┛ alt
|
||||
S 13 ┋ x┋
|
||||
A └┛ alt
|
||||
S 14 ┋ x┋
|
||||
A └┛ alt
|
||||
S 15 ┋ x┋
|
||||
A └┛ alt
|
||||
S 16 ┋ x┋
|
||||
A └┛ alt
|
||||
S 17 ┋ x┋
|
||||
A └┛ alt
|
||||
S 18 ┋ x┋
|
||||
A └┛ alt
|
||||
S 19 ┋ x┋
|
||||
A └┛ alt
|
||||
S 20 ┋ x┋
|
||||
A └┛ alt
|
||||
S 21 ┋ x┋
|
||||
A └┛ alt
|
||||
S 22 ┋ x┋
|
||||
A └┛ alt
|
||||
S 23 ┋ x┋
|
||||
A └┛ alt
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ backspace
|
||||
A └┛ alt
|
||||
A ···············································································└ backspace
|
||||
A ··············································································└ [4h
|
||||
CSI Replace mode
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ carriage-return
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,69 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a576f726c64211b5b3733430e780f1b5b323b3830480e780f1b5b333b3830480e780f1b5b343b3830480e780f1b5b353b3830480e780f1b5b363b3830480e780f1b5b373b3830480e780f1b5b383b3830480e780f1b5b393b3830480e780f1b5b31303b3830480e780f1b5b31313b3830480e780f1b5b31323b3830480e780f1b5b31333b3830480e780f1b5b31343b3830480e780f1b5b31353b3830480e780f1b5b31363b3830480e780f1b5b31373b3830480e780f1b5b31383b3830480e780f1b5b31393b3830480e780f1b5b32303b3830480e780f1b5b32313b3830480e780f1b5b32323b3830480e780f1b5b32333b3830480e780f1b5b32343b3830480e0f080e780f080e1b5b34680f201b5b346c0d1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 1 ┋World! x┋
|
||||
A └┛ alt
|
||||
S 2 ┋ x┋
|
||||
A └┛ alt
|
||||
S 3 ┋ x┋
|
||||
A └┛ alt
|
||||
S 4 ┋ x┋
|
||||
A └┛ alt
|
||||
S 5 ┋ x┋
|
||||
A └┛ alt
|
||||
S 6 ┋ x┋
|
||||
A └┛ alt
|
||||
S 7 ┋ x┋
|
||||
A └┛ alt
|
||||
S 8 ┋ x┋
|
||||
A └┛ alt
|
||||
S 9 ┋ x┋
|
||||
A └┛ alt
|
||||
S 10 ┋ x┋
|
||||
A └┛ alt
|
||||
S 11 ┋ x┋
|
||||
A └┛ alt
|
||||
S 12 ┋ x┋
|
||||
A └┛ alt
|
||||
S 13 ┋ x┋
|
||||
A └┛ alt
|
||||
S 14 ┋ x┋
|
||||
A └┛ alt
|
||||
S 15 ┋ x┋
|
||||
A └┛ alt
|
||||
S 16 ┋ x┋
|
||||
A └┛ alt
|
||||
S 17 ┋ x┋
|
||||
A └┛ alt
|
||||
S 18 ┋ x┋
|
||||
A └┛ alt
|
||||
S 19 ┋ x┋
|
||||
A └┛ alt
|
||||
S 20 ┋ x┋
|
||||
A └┛ alt
|
||||
S 21 ┋ x┋
|
||||
A └┛ alt
|
||||
S 22 ┋ x┋
|
||||
A └┛ alt
|
||||
S 23 ┋ x┋
|
||||
A └┛ alt
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ backspace
|
||||
A └┛ alt
|
||||
A ···············································································└ backspace
|
||||
A ··············································································└ [4h
|
||||
CSI Replace mode
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ carriage-return
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,69 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a656c6c6f1b5b3735430e780f1b5b323b31480e0f6f726c64211b5b3734430e780f1b5b333b3830480e780f1b5b343b3830480e780f1b5b353b3830480e780f1b5b363b3830480e780f1b5b373b3830480e780f1b5b383b3830480e780f1b5b393b3830480e780f1b5b31303b3830480e780f1b5b31313b3830480e780f1b5b31323b3830480e780f1b5b31333b3830480e780f1b5b31343b3830480e780f1b5b31353b3830480e780f1b5b31363b3830480e780f1b5b31373b3830480e780f1b5b31383b3830480e780f1b5b31393b3830480e780f1b5b32303b3830480e780f1b5b32313b3830480e780f1b5b32323b3830480e780f1b5b32333b3830480e780f1b5b32343b3830480e0f080e780f080e1b5b34680f201b5b346c0d1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 1 ┋ello x┋
|
||||
A └┛ alt
|
||||
S 2 ┋orld! x┋
|
||||
A └┛ alt
|
||||
S 3 ┋ x┋
|
||||
A └┛ alt
|
||||
S 4 ┋ x┋
|
||||
A └┛ alt
|
||||
S 5 ┋ x┋
|
||||
A └┛ alt
|
||||
S 6 ┋ x┋
|
||||
A └┛ alt
|
||||
S 7 ┋ x┋
|
||||
A └┛ alt
|
||||
S 8 ┋ x┋
|
||||
A └┛ alt
|
||||
S 9 ┋ x┋
|
||||
A └┛ alt
|
||||
S 10 ┋ x┋
|
||||
A └┛ alt
|
||||
S 11 ┋ x┋
|
||||
A └┛ alt
|
||||
S 12 ┋ x┋
|
||||
A └┛ alt
|
||||
S 13 ┋ x┋
|
||||
A └┛ alt
|
||||
S 14 ┋ x┋
|
||||
A └┛ alt
|
||||
S 15 ┋ x┋
|
||||
A └┛ alt
|
||||
S 16 ┋ x┋
|
||||
A └┛ alt
|
||||
S 17 ┋ x┋
|
||||
A └┛ alt
|
||||
S 18 ┋ x┋
|
||||
A └┛ alt
|
||||
S 19 ┋ x┋
|
||||
A └┛ alt
|
||||
S 20 ┋ x┋
|
||||
A └┛ alt
|
||||
S 21 ┋ x┋
|
||||
A └┛ alt
|
||||
S 22 ┋ x┋
|
||||
A └┛ alt
|
||||
S 23 ┋ x┋
|
||||
A └┛ alt
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ backspace
|
||||
A └┛ alt
|
||||
A ···············································································└ backspace
|
||||
A ··············································································└ [4h
|
||||
CSI Replace mode
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ carriage-return
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,69 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a6f726c64211b5b3734430e780f1b5b323b3830480e780f1b5b333b3830480e780f1b5b343b3830480e780f1b5b353b3830480e780f1b5b363b3830480e780f1b5b373b3830480e780f1b5b383b3830480e780f1b5b393b3830480e780f1b5b31303b3830480e780f1b5b31313b3830480e780f1b5b31323b3830480e780f1b5b31333b3830480e780f1b5b31343b3830480e780f1b5b31353b3830480e780f1b5b31363b3830480e780f1b5b31373b3830480e780f1b5b31383b3830480e780f1b5b31393b3830480e780f1b5b32303b3830480e780f1b5b32313b3830480e780f1b5b32323b3830480e780f1b5b32333b3830480e780f1b5b32343b3830480e0f080e780f080e1b5b34680f201b5b346c0d1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 1 ┋orld! x┋
|
||||
A └┛ alt
|
||||
S 2 ┋ x┋
|
||||
A └┛ alt
|
||||
S 3 ┋ x┋
|
||||
A └┛ alt
|
||||
S 4 ┋ x┋
|
||||
A └┛ alt
|
||||
S 5 ┋ x┋
|
||||
A └┛ alt
|
||||
S 6 ┋ x┋
|
||||
A └┛ alt
|
||||
S 7 ┋ x┋
|
||||
A └┛ alt
|
||||
S 8 ┋ x┋
|
||||
A └┛ alt
|
||||
S 9 ┋ x┋
|
||||
A └┛ alt
|
||||
S 10 ┋ x┋
|
||||
A └┛ alt
|
||||
S 11 ┋ x┋
|
||||
A └┛ alt
|
||||
S 12 ┋ x┋
|
||||
A └┛ alt
|
||||
S 13 ┋ x┋
|
||||
A └┛ alt
|
||||
S 14 ┋ x┋
|
||||
A └┛ alt
|
||||
S 15 ┋ x┋
|
||||
A └┛ alt
|
||||
S 16 ┋ x┋
|
||||
A └┛ alt
|
||||
S 17 ┋ x┋
|
||||
A └┛ alt
|
||||
S 18 ┋ x┋
|
||||
A └┛ alt
|
||||
S 19 ┋ x┋
|
||||
A └┛ alt
|
||||
S 20 ┋ x┋
|
||||
A └┛ alt
|
||||
S 21 ┋ x┋
|
||||
A └┛ alt
|
||||
S 22 ┋ x┋
|
||||
A └┛ alt
|
||||
S 23 ┋ x┋
|
||||
A └┛ alt
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ backspace
|
||||
A └┛ alt
|
||||
A ···············································································└ backspace
|
||||
A ··············································································└ [4h
|
||||
CSI Replace mode
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ carriage-return
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,67 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a0a48656c6c6f1b5b3734430e780f1b5b333b31480e0f576f726c64211b5b3733430e780f1b5b343b31480e0f321b5b3738430e780f1b5b353b31480e0f331b5b3738430e780f1b5b363b31480e0f341b5b3738430e780f1b5b373b31480e0f351b5b3738430e780f1b5b383b31480e0f361b5b3738430e780f1b5b393b31480e0f371b5b3738430e780f1b5b31303b31480e0f381b5b3738430e780f1b5b31313b31480e0f391b5b3738430e780f1b5b31323b31480e0f31301b5b3737430e780f1b5b31333b31480e0f31311b5b3737430e780f1b5b31343b31480e0f31321b5b3737430e780f1b5b31353b31480e0f31331b5b3737430e780f1b5b31363b31480e0f31341b5b3737430e780f1b5b31373b31480e0f31351b5b3737430e780f1b5b31383b31480e0f31361b5b3737430e780f1b5b31393b31480e0f31371b5b3737430e780f1b5b32303b31480e0f31381b5b3737430e780f1b5b32313b31480e0f31391b5b3737430e780f1b5b32323b31480e0f32301b5b3737430e780f1b5b32333b31480e0f32311b5b3737430e780f1b5b32343b31480e0f32321b5b373743080e780f080e1b5b34680f201b5b346c0d1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 2 ┋Hello x┋
|
||||
A └┛ alt
|
||||
S 3 ┋World! x┋
|
||||
A └┛ alt
|
||||
S 4 ┋2 x┋
|
||||
A └┛ alt
|
||||
S 5 ┋3 x┋
|
||||
A └┛ alt
|
||||
S 6 ┋4 x┋
|
||||
A └┛ alt
|
||||
S 7 ┋5 x┋
|
||||
A └┛ alt
|
||||
S 8 ┋6 x┋
|
||||
A └┛ alt
|
||||
S 9 ┋7 x┋
|
||||
A └┛ alt
|
||||
S 10 ┋8 x┋
|
||||
A └┛ alt
|
||||
S 11 ┋9 x┋
|
||||
A └┛ alt
|
||||
S 12 ┋10 x┋
|
||||
A └┛ alt
|
||||
S 13 ┋11 x┋
|
||||
A └┛ alt
|
||||
S 14 ┋12 x┋
|
||||
A └┛ alt
|
||||
S 15 ┋13 x┋
|
||||
A └┛ alt
|
||||
S 16 ┋14 x┋
|
||||
A └┛ alt
|
||||
S 17 ┋15 x┋
|
||||
A └┛ alt
|
||||
S 18 ┋16 x┋
|
||||
A └┛ alt
|
||||
S 19 ┋17 x┋
|
||||
A └┛ alt
|
||||
S 20 ┋18 x┋
|
||||
A └┛ alt
|
||||
S 21 ┋19 x┋
|
||||
A └┛ alt
|
||||
S 22 ┋20 x┋
|
||||
A └┛ alt
|
||||
S 23 ┋21 x┋
|
||||
A └┛ alt
|
||||
S 24 ┋22 ┋
|
||||
A ···············································································└ backspace
|
||||
A └┛ alt
|
||||
A ···············································································└ backspace
|
||||
A ··············································································└ [4h
|
||||
CSI Replace mode
|
||||
S 24 ┋ ┋
|
||||
A ···············································································└ carriage-return
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,59 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a0a48656c6c6f1b5b3734430e780f1b5b333b31480e0f576f726c64211b5b3733430e780f1b5b343b31480e0f321b5b3738430e780f1b5b353b31480e0f331b5b3738430e780f1b5b363b31480e0f341b5b3738430e780f1b5b373b31480e0f351b5b3738430e780f1b5b383b31480e0f361b5b3738430e780f1b5b393b31480e0f371b5b3738430e780f1b5b31303b31480e0f381b5b3738430e780f1b5b31313b31480e0f391b5b3738430e780f1b5b31323b31480e0f31301b5b3737430e780f1b5b31333b31480e0f31311b5b3737430e780f1b5b31343b31480e0f31321b5b3737430e780f1b5b31353b31480e0f31331b5b3737430e780f1b5b31363b31480e0f31341b5b3737430e780f1b5b31373b31480e0f31351b5b3737430e780f1b5b31383b31480e0f31361b5b3737430e780f1b5b31393b31480e0f31371b5b3737430e780f1b5b32303b31480e0f31381b5b3737430e780f1b5b32313b31480e0f31391b5b3737430e780f1b5b32323b31480e0f32301b5b3737430e780f1b5b32333b31480e0f32311b5b3737430e780f1b5b32333b31480e0f1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 2 ┋Hello x┋
|
||||
A └┛ alt
|
||||
S 3 ┋World! x┋
|
||||
A └┛ alt
|
||||
S 4 ┋2 x┋
|
||||
A └┛ alt
|
||||
S 5 ┋3 x┋
|
||||
A └┛ alt
|
||||
S 6 ┋4 x┋
|
||||
A └┛ alt
|
||||
S 7 ┋5 x┋
|
||||
A └┛ alt
|
||||
S 8 ┋6 x┋
|
||||
A └┛ alt
|
||||
S 9 ┋7 x┋
|
||||
A └┛ alt
|
||||
S 10 ┋8 x┋
|
||||
A └┛ alt
|
||||
S 11 ┋9 x┋
|
||||
A └┛ alt
|
||||
S 12 ┋10 x┋
|
||||
A └┛ alt
|
||||
S 13 ┋11 x┋
|
||||
A └┛ alt
|
||||
S 14 ┋12 x┋
|
||||
A └┛ alt
|
||||
S 15 ┋13 x┋
|
||||
A └┛ alt
|
||||
S 16 ┋14 x┋
|
||||
A └┛ alt
|
||||
S 17 ┋15 x┋
|
||||
A └┛ alt
|
||||
S 18 ┋16 x┋
|
||||
A └┛ alt
|
||||
S 19 ┋17 x┋
|
||||
A └┛ alt
|
||||
S 20 ┋18 x┋
|
||||
A └┛ alt
|
||||
S 21 ┋19 x┋
|
||||
A └┛ alt
|
||||
S 22 ┋20 x┋
|
||||
A └┛ alt
|
||||
S 23 ┋21 x┋
|
||||
A └┛ alt
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -1 +1,59 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b481b5b324a0a576f726c64211b5b3733430e780f1b5b333b31480e0f321b5b3738430e780f1b5b343b31480e0f331b5b3738430e780f1b5b353b31480e0f341b5b3738430e780f1b5b363b31480e0f351b5b3738430e780f1b5b373b31480e0f361b5b3738430e780f1b5b383b31480e0f371b5b3738430e780f1b5b393b31480e0f381b5b3738430e780f1b5b31303b31480e0f391b5b3738430e780f1b5b31313b31480e0f31301b5b3737430e780f1b5b31323b31480e0f31311b5b3737430e780f1b5b31333b31480e0f31321b5b3737430e780f1b5b31343b31480e0f31331b5b3737430e780f1b5b31353b31480e0f31341b5b3737430e780f1b5b31363b31480e0f31351b5b3737430e780f1b5b31373b31480e0f31361b5b3737430e780f1b5b31383b31480e0f31371b5b3737430e780f1b5b31393b31480e0f31381b5b3737430e780f1b5b32303b31480e0f31391b5b3737430e780f1b5b32313b31480e0f32301b5b3737430e780f1b5b32323b31480e0f32311b5b3737430e780f1b5b32333b31480e0f32321b5b3737430e780f1b5b32333b31480e0f1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 2 ┋World! x┋
|
||||
A └┛ alt
|
||||
S 3 ┋2 x┋
|
||||
A └┛ alt
|
||||
S 4 ┋3 x┋
|
||||
A └┛ alt
|
||||
S 5 ┋4 x┋
|
||||
A └┛ alt
|
||||
S 6 ┋5 x┋
|
||||
A └┛ alt
|
||||
S 7 ┋6 x┋
|
||||
A └┛ alt
|
||||
S 8 ┋7 x┋
|
||||
A └┛ alt
|
||||
S 9 ┋8 x┋
|
||||
A └┛ alt
|
||||
S 10 ┋9 x┋
|
||||
A └┛ alt
|
||||
S 11 ┋10 x┋
|
||||
A └┛ alt
|
||||
S 12 ┋11 x┋
|
||||
A └┛ alt
|
||||
S 13 ┋12 x┋
|
||||
A └┛ alt
|
||||
S 14 ┋13 x┋
|
||||
A └┛ alt
|
||||
S 15 ┋14 x┋
|
||||
A └┛ alt
|
||||
S 16 ┋15 x┋
|
||||
A └┛ alt
|
||||
S 17 ┋16 x┋
|
||||
A └┛ alt
|
||||
S 18 ┋17 x┋
|
||||
A └┛ alt
|
||||
S 19 ┋18 x┋
|
||||
A └┛ alt
|
||||
S 20 ┋19 x┋
|
||||
A └┛ alt
|
||||
S 21 ┋20 x┋
|
||||
A └┛ alt
|
||||
S 22 ┋21 x┋
|
||||
A └┛ alt
|
||||
S 23 ┋22 x┋
|
||||
A └┛ alt
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
@ -115,12 +115,7 @@ TEST_CASE("ptime_fmt") {
|
||||
|
||||
TEST_CASE("rgb_color from string") {
|
||||
string name = "SkyBlue1";
|
||||
rgb_color color;
|
||||
string errmsg;
|
||||
bool rc;
|
||||
|
||||
rc = rgb_color::from_str(name, color, errmsg);
|
||||
CHECK(rc);
|
||||
auto color = rgb_color::from_str(name).unwrap();
|
||||
CHECK(color.rc_r == 135);
|
||||
CHECK(color.rc_g == 215);
|
||||
CHECK(color.rc_b == 255);
|
||||
|
@ -1 +1,49 @@
|
||||
read 1b29301b371b5b3f3437681b5b313b3234721b5b6d1b5b346c1b5b6d1b5b6d1b5b33376d1b5b34306d1b5b313b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b323b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b333b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b343b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b353b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b363b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b373b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b383b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b393b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31303b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31313b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31323b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31333b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31343b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31353b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31363b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31373b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31383b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b31393b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b32303b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b32313b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b32323b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b32333b314820202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201b5b32343b3148202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020200820081b5b3468201b5b346c1b5b481b5b33376d1b5b34306d506c61696e20746578740d0a1b5b376d20202020202020201b5b6d1b5b33376d1b5b34306d4c656164696e67207461620d0a541b5b376d616220202020201b5b6d1b5b33376d1b5b34306d7769746820746578740d0a5461621b5b376d20202020201b5b6d1b5b33376d1b5b34306d7769746820746578742023320d0a54657874201b5b33316d1b5b34306d77691b5b376d74681b5b33376d1b5b34306d206d691b5b6d1b5b33376d1b5b34306d78656420617474726962757465732e0d0a54657874207769746820756e69636f646520ffffffe2ffffff96ffffffb6201b5b376d636861721b5b6d1b5b33376d1b5b34306d6163746572730d0a1b5b6d1b5b6d1b5b33376d1b5b34306d1b5b6d1b5b3137421b5b4b1b5b32343b31481b5b324a1b5b3f34376c1b380d1b5b3f316c1b3e
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
S -1 ┋ ┋
|
||||
A └ normal, normal, normal
|
||||
CSI Erase all
|
||||
S 1 ┋Plain text ┋
|
||||
A ··········└ carriage-return
|
||||
S 2 ┋ Leading tab ┋
|
||||
A └ inverse │
|
||||
A ········└ normal │
|
||||
A ···················└ carriage-return
|
||||
S 3 ┋Tab with text ┋
|
||||
A ·└ inverse │
|
||||
A ········└ normal │
|
||||
A ·················└ carriage-return
|
||||
S 4 ┋Tab with text #2 ┋
|
||||
A ···└ inverse │
|
||||
A ········└ normal │
|
||||
A ····················└ carriage-return
|
||||
S 5 ┋Two tabs with text ┋
|
||||
A ········└ inverse │ │
|
||||
A ··········└ normal │ │
|
||||
A ················└ inverse│
|
||||
A ····················└ normal
|
||||
A ·························└ carriage-return
|
||||
S 6 ┋Text with mixed attributes. ┋
|
||||
A ·····└ fg(#800000) │
|
||||
A ·······└ inverse │
|
||||
A ·········└ normal │
|
||||
A ············└ normal │
|
||||
A ···························└ carriage-return
|
||||
S 7 ┋Text with unicode ▶ characters ┋
|
||||
A ····················└ inverse │
|
||||
A ························└ normal
|
||||
A ······························└ carriage-return
|
||||
S 8 ┋ ┋
|
||||
A └ normal
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
950
test/scripty.cc
950
test/scripty.cc
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
#! /bin/bash
|
||||
|
||||
run_test ./scripty -n -r ${srcdir}/vt52_curses_input.0 \
|
||||
-e ${srcdir}/vt52_curses_output.0 -- ./drive_vt52_curses < /dev/null
|
||||
run_test ./scripty -n -e ${srcdir}/vt52_curses_input.0 \
|
||||
-- ./drive_vt52_curses < /dev/null
|
||||
|
||||
on_error_fail_with "single line vt52 did not work?"
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,38 +1,48 @@
|
||||
sleep 0.867286
|
||||
write 0d
|
||||
sleep 0.141596
|
||||
write 0d
|
||||
sleep 0.188837
|
||||
write 0d
|
||||
sleep 0.177586
|
||||
write 0d
|
||||
sleep 0.159950
|
||||
write 0d
|
||||
sleep 0.158958
|
||||
write 0d
|
||||
sleep 0.164105
|
||||
write 0d
|
||||
sleep 0.176968
|
||||
write 0d
|
||||
sleep 0.165942
|
||||
write 0d
|
||||
sleep 0.187011
|
||||
write 0d
|
||||
sleep 0.167987
|
||||
write 0d
|
||||
sleep 0.173959
|
||||
write 0d
|
||||
sleep 0.176091
|
||||
write 0d
|
||||
sleep 0.180728
|
||||
write 0d
|
||||
sleep 0.172983
|
||||
write 0d
|
||||
sleep 0.167819
|
||||
write 0d
|
||||
sleep 0.165876
|
||||
write 0d
|
||||
sleep 0.175857
|
||||
write 0d
|
||||
sleep 0.183068
|
||||
write 0d
|
||||
CTRL Use alt charset
|
||||
CTRL save cursor
|
||||
CSI Use alternate screen buffer
|
||||
CSI set scrolling region 1-24
|
||||
S -1 ┋ ┋
|
||||
A └ normal
|
||||
CSI Replace mode
|
||||
CSI Erase all
|
||||
S 1 ┋Gruß ┋
|
||||
K 0d
|
||||
S 1 ┋ ┋
|
||||
A ····└ carriage-return
|
||||
K 0d
|
||||
CSI Erase Below
|
||||
K 0d
|
||||
S 1 ┋de ┋
|
||||
K 0d
|
||||
S 1 ┋ ┋
|
||||
A ··└ carriage-return
|
||||
CSI Erase Below
|
||||
K 0d
|
||||
S 1 ┋1 ┋
|
||||
K 0d
|
||||
S 1 ┋ 2 ┋
|
||||
K 0d
|
||||
S 1 ┋ 3 ┋
|
||||
K 0d
|
||||
S 1 ┋ ┋
|
||||
A ···└ carriage-return
|
||||
CSI Erase Below
|
||||
K 0d
|
||||
S 1 ┋abc ┋
|
||||
K 0d
|
||||
S 1 ┋ ┋
|
||||
A ···└ carriage-return
|
||||
CSI Erase Below
|
||||
K 0d
|
||||
CTRL bell
|
||||
K 0d
|
||||
S 1 ┋acdef ┋
|
||||
K 0d0d
|
||||
CSI Erase all
|
||||
CSI Use normal screen buffer
|
||||
CTRL restore cursor
|
||||
S 24 ┋ ┋
|
||||
A └ carriage-return
|
||||
CSI Normal cursor keys
|
||||
CTRL Normal keypad
|
||||
|
Loading…
Reference in New Issue
Block a user