* Implement initial structs from spec * kdl configuration unmarshalling * typo text styling * remove is_selected toggle * incorporate new status bar ui into theming * improve test coverage of config behavior * tab bar correction * correct also compact bar * remove spacing between table columns * refactor table styling * use text_unselected.emphasis_1 for keygroup sep * fix tab bar more text * repair field flattening for theme * remove extra styling KDL node * update tests * updated selected text conversion * padding for header bar * minor corrections for existing themes * background handling * compact bar corrections * properly handle opaque method to activate background * update newer plugins to use styling struct * correct omission of selected state * fix: bold typeface for text elements * fix: fg -> white for list_unselected conversion * fix: emphasis and opacity handling for nested_list * correct stylings in the session-manager * fix emphases translation for table component * correct emphasis for run instructions * correct frame_highlight translation for old themes * provide missing implementation of frame_highlight * fencepost emphasis color names * Set a pseudo-None for frame_unselected in old theme conversion * correct alternating bg for simplified-ui * update snapshots * fix inner text padding and errorneous snapshots * suppress warning about deprecated usage of palette * remove unused import * feat(plugins): API to change floating pane coordinates (#3958) * basic functionality through the cli * added to plugin api * add display area and viewport size to TabInfo * fix tests and add new one * some cleanups * refactor: extract pane_id parsing logic * style(fmt): rustfmt * docs(changelog): floating pane coordinate chagne API * fix(tiled-panes): opening panes from the cli (#3963) * feat(plugins): add `PastedText` Event (#3962) * working with text paste * handle utf8 conversion error * feat(plugins): add PastedText Event * docs(changelog): plugins pasted text event * black for table opaque background * properly apply opacity to table * correct padding for explicit width ribbons * feat(plugins): Allow opening panes near plugin (#3966) * added command + terminal variants * added editor variant * style(fmt): rustfmt * docs(changelog): plugin apis to open panes near plugin * feat(plugins): send info about $EDITOR and $SHELL (#3971) * feat(plugins): send info about $EDITOR and $SHELL * fix(e2e): snapshot update * docs(changelog): plugin editor and shell info * fix(floating-panes): when changing coordinates, if a pane is not floating - make it floating (#3972) * fix(panes): when changing floating pane coordinates, if the pane is not floating, float it * style(fmt): rustfmt * docs(changelog): floating pane coordinate fix * fix(break-pane): strip logical position when inserting pane to new tab (#3973) * docs(changelog): logical position fix * Optional frame_unselected theme * fixture with correct width to account for arrow padding * update snapshot and rustfmt --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
61 lines
1.7 KiB
Rust
61 lines
1.7 KiB
Rust
use super::{text::stringify_text, Coordinates, Text};
|
|
use crate::panes::terminal_character::{AnsiCode, CharacterStyles, RESET_STYLES};
|
|
use zellij_utils::data::{PaletteColor, Style};
|
|
|
|
static ARROW_SEPARATOR: &str = "";
|
|
|
|
pub fn ribbon(
|
|
content: Text,
|
|
style: &Style,
|
|
arrow_fonts: bool,
|
|
component_coordinates: Option<Coordinates>,
|
|
) -> Vec<u8> {
|
|
let colors = style.colors;
|
|
let background = colors.text_unselected.background;
|
|
let declaration = if content.selected {
|
|
colors.ribbon_selected
|
|
} else {
|
|
colors.ribbon_unselected
|
|
};
|
|
let (first_arrow_styles, text_style, last_arrow_styles) = (
|
|
character_style(background, declaration.background),
|
|
character_style(declaration.base, declaration.background),
|
|
character_style(declaration.background, background),
|
|
);
|
|
|
|
let (arrow, padding) = if arrow_fonts {
|
|
(ARROW_SEPARATOR, Some(4))
|
|
} else {
|
|
("", None)
|
|
};
|
|
|
|
let (text, _text_width) = stringify_text(
|
|
&content,
|
|
padding,
|
|
&component_coordinates,
|
|
&declaration,
|
|
text_style,
|
|
);
|
|
let mut stringified = component_coordinates
|
|
.map(|c| c.to_string())
|
|
.unwrap_or_else(|| String::new());
|
|
stringified.push_str(&format!(
|
|
"{}{}{}{} {} {}{}{}",
|
|
RESET_STYLES,
|
|
first_arrow_styles,
|
|
arrow,
|
|
text_style,
|
|
text,
|
|
last_arrow_styles,
|
|
arrow,
|
|
RESET_STYLES
|
|
));
|
|
stringified.as_bytes().to_vec()
|
|
}
|
|
|
|
fn character_style(foreground: PaletteColor, background: PaletteColor) -> CharacterStyles {
|
|
RESET_STYLES
|
|
.foreground(Some(foreground.into()))
|
|
.background(Some(background.into()))
|
|
.bold(Some(AnsiCode::On))
|
|
}
|