[view-cursor] support for theming of the cursor line (#1088)

Add a role for the cursor line so that it can be themed.
The role is now optionally applied in textviews, which
fixes issues with other textviews having the wrong
selection highlight (e.g. filters, breadcrumb menus)

Still need to fix some issues with overlays...
pull/1084/head
Tim Stack 2 years ago
parent 9a323ffe84
commit a56cee67e6

@ -284,6 +284,11 @@
"title": "/ui/theme-defs/<theme_name>/styles/hidden",
"$ref": "#/definitions/style"
},
"cursor-line": {
"description": "Styling for the cursor line in the main view",
"title": "/ui/theme-defs/<theme_name>/styles/cursor-line",
"$ref": "#/definitions/style"
},
"adjusted-time": {
"description": "Styling for timestamps that have been adjusted",
"title": "/ui/theme-defs/<theme_name>/styles/adjusted-time",

@ -54,6 +54,7 @@ enum class role_t : int32_t {
VCR_WARNING, /*< A warning message. */
VCR_ALT_ROW, /*< Highlight for alternating rows in a list */
VCR_HIDDEN,
VCR_CURSOR_LINE,
VCR_ADJUSTED_TIME,
VCR_SKEWED_TIME,
VCR_OFFSET_TIME,
@ -145,9 +146,9 @@ struct text_attrs {
bool operator==(const text_attrs& other) const
{
return this->ta_attrs == other.ta_attrs &&
this->ta_fg_color == other.ta_fg_color &&
this->ta_bg_color == other.ta_bg_color;
return this->ta_attrs == other.ta_attrs
&& this->ta_fg_color == other.ta_fg_color
&& this->ta_bg_color == other.ta_bg_color;
}
int32_t ta_attrs{0};

@ -72,7 +72,7 @@ field_overlay_source::build_field_lines(const listview_curses& lv)
display = display || this->fos_contexts.top().c_show;
}
this->build_meta_line(lv, this->fos_lines, lv.get_selection());
this->build_meta_line(lv, this->fos_lines, lv.get_top());
if (!display) {
return;
@ -546,7 +546,7 @@ field_overlay_source::list_value_for_overlay(const listview_curses& lv,
vis_line_t row,
attr_line_t& value_out)
{
if (y <= 0) {
if (y == 0) {
this->build_field_lines(lv);
return false;
}

@ -1337,6 +1337,7 @@ looper()
vis_line_t(-(rlc->get_height() + 3)));
lnav_data.ld_views[lpc].set_scroll_action(sb);
lnav_data.ld_views[lpc].set_search_action(update_hits);
lnav_data.ld_views[lpc].tc_cursor_role = role_t::VCR_CURSOR_LINE;
lnav_data.ld_views[lpc].tc_state_event_handler = event_handler;
}

@ -603,6 +603,10 @@ static const struct json_path_container theme_styles_handlers = {
.with_description("Styling for hidden fields in logs")
.for_child(&lnav_theme::lt_style_hidden)
.with_children(style_config_handlers),
yajlpp::property_handler("cursor-line")
.with_description("Styling for the cursor line in the main view")
.for_child(&lnav_theme::lt_style_cursor_line)
.with_children(style_config_handlers),
yajlpp::property_handler("adjusted-time")
.with_description("Styling for timestamps that have been adjusted")
.for_child(&lnav_theme::lt_style_adjusted_time)

@ -173,6 +173,7 @@ struct lnav_theme {
positioned_property<style_config> lt_style_disabled_focused;
positioned_property<style_config> lt_style_scrollbar;
positioned_property<style_config> lt_style_hidden;
positioned_property<style_config> lt_style_cursor_line;
positioned_property<style_config> lt_style_adjusted_time;
positioned_property<style_config> lt_style_skewed_time;
positioned_property<style_config> lt_style_offset_time;

@ -458,11 +458,11 @@ textview_curses::textview_value_for_row(vis_line_t row, attr_line_t& value_out)
format_name = format_attr_opt.value().get();
}
if (this->is_selectable() && row == this->get_selection()) {
sa.emplace_back(
line_range{orig_line.lr_start, -1},
VC_STYLE.value(text_attrs{
A_BOLD | A_DIM | A_UNDERLINE, COLOR_CYAN, COLOR_RED}));
if (this->is_selectable() && row == this->get_selection()
&& this->tc_cursor_role)
{
sa.emplace_back(line_range{orig_line.lr_start, -1},
VC_ROLE.value(this->tc_cursor_role.value()));
}
for (auto& tc_highlight : this->tc_highlights) {

@ -702,6 +702,7 @@ public:
std::function<void(textview_curses&)> tc_state_event_handler;
nonstd::optional<role_t> tc_cursor_role;
protected:
class grep_highlighter {
public:

@ -35,6 +35,12 @@
"color": "Yellow",
"bold": true
},
"cursor-line": {
"color": "Cyan",
"background-color": "Red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "Maroon"
},

@ -44,6 +44,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -45,6 +45,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -47,6 +47,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -44,6 +44,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -53,6 +53,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -53,6 +53,12 @@
"color": "$yellow",
"bold": true
},
"cursor-line": {
"color": "$cyan",
"background-color": "$red",
"bold": true,
"underline": true
},
"adjusted-time": {
"color": "$magenta"
},

@ -732,6 +732,8 @@ view_colors::init_roles(const lnav_theme& lt,
= this->to_attrs(lt, lt.lt_style_alt_text, reporter);
this->vc_role_attrs[lnav::enums::to_underlying(role_t::VCR_HIDDEN)]
= this->to_attrs(lt, lt.lt_style_hidden, reporter);
this->vc_role_attrs[lnav::enums::to_underlying(role_t::VCR_CURSOR_LINE)]
= this->to_attrs(lt, lt.lt_style_cursor_line, reporter);
this->vc_role_attrs[lnav::enums::to_underlying(role_t::VCR_ADJUSTED_TIME)]
= this->to_attrs(lt, lt.lt_style_adjusted_time, reporter);
this->vc_role_attrs[lnav::enums::to_underlying(role_t::VCR_SKEWED_TIME)]

Loading…
Cancel
Save