mirror of
https://github.com/sayanarijit/xplr.git
synced 2024-09-11 19:07:47 +03:00
Upgrade dependencies (#700)
This commit is contained in:
parent
68500f3a8e
commit
9db8b2cc19
468
Cargo.lock
generated
468
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
32
Cargo.toml
32
Cargo.toml
@ -22,29 +22,29 @@ categories = ['command-line-interface', 'command-line-utilities']
|
||||
include = ['src/**/*', 'docs/en/src/**/*', 'LICENSE', 'README.md']
|
||||
|
||||
[dependencies]
|
||||
libc = "0.2.151"
|
||||
libc = "0.2.153"
|
||||
humansize = "2.1.3"
|
||||
natord = "1.0.9"
|
||||
anyhow = "1.0.79"
|
||||
serde_yaml = "0.9.30"
|
||||
anyhow = "1.0.81"
|
||||
serde_yaml = "0.9.33"
|
||||
crossterm = { version = "0.27.0", features = [], default-features = false }
|
||||
ansi-to-tui = "3.1.0"
|
||||
regex = "1.10.2"
|
||||
ansi-to-tui = "4.0.1"
|
||||
regex = "1.10.3"
|
||||
gethostname = "0.4.3"
|
||||
serde_json = "1.0.110"
|
||||
serde_json = "1.0.114"
|
||||
path-absolutize = "3.1.1"
|
||||
which = "5.0.0"
|
||||
nu-ansi-term = "0.49.0"
|
||||
which = "6.0.0"
|
||||
nu-ansi-term = "0.50.0"
|
||||
textwrap = "0.16"
|
||||
snailquote = "0.3.1"
|
||||
skim = { version = "0.10.4", default-features = false }
|
||||
time = { version = "0.3.31", features = ["serde", "local-offset", "formatting", "macros"] }
|
||||
time = { version = "0.3.34", features = ["serde", "local-offset", "formatting", "macros"] }
|
||||
jf = "0.6.2"
|
||||
xdg = "2.5.2"
|
||||
home = "0.5.9"
|
||||
|
||||
[dependencies.lscolors]
|
||||
version = "0.16.0"
|
||||
version = "0.17.0"
|
||||
default-features = false
|
||||
features = ["nu-ansi-term"]
|
||||
|
||||
@ -57,22 +57,22 @@ version = "2.0.4"
|
||||
default-features = false
|
||||
|
||||
[dependencies.tui]
|
||||
version = "0.25.0"
|
||||
version = "0.26.1"
|
||||
default-features = false
|
||||
features = ['crossterm', 'serde', 'underline-color']
|
||||
features = ['crossterm', 'serde']
|
||||
package = 'ratatui'
|
||||
|
||||
[dependencies.serde]
|
||||
version = "1.0.194"
|
||||
version = "1.0.197"
|
||||
features = []
|
||||
default-features = false
|
||||
|
||||
[dependencies.indexmap]
|
||||
version = "2.1.0"
|
||||
version = "2.2.5"
|
||||
features = ['serde']
|
||||
|
||||
[dependencies.mlua]
|
||||
version = "0.9.2"
|
||||
version = "0.9.6"
|
||||
features = ['luajit', 'vendored', 'serialize', 'send']
|
||||
|
||||
[dependencies.tui-input]
|
||||
@ -81,7 +81,7 @@ features = ['serde']
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.5.1"
|
||||
assert_cmd = "2.0.12"
|
||||
assert_cmd = "2.0.14"
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
|
@ -13,6 +13,7 @@ use crate::ui::Layout;
|
||||
use crate::ui::Style;
|
||||
use crate::ui::WrapOptions;
|
||||
use anyhow::Result;
|
||||
use lazy_static::lazy_static;
|
||||
use lscolors::LsColors;
|
||||
use mlua::Error as LuaError;
|
||||
use mlua::Lua;
|
||||
@ -28,6 +29,10 @@ use std::borrow::Cow;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Command;
|
||||
|
||||
lazy_static! {
|
||||
static ref LS_COLORS: LsColors = LsColors::from_env().unwrap_or_default();
|
||||
}
|
||||
|
||||
/// Get the xplr version details.
|
||||
///
|
||||
/// Type: function() -> { major: number, minor: number, patch: number }
|
||||
@ -658,9 +663,8 @@ pub fn to_yaml<'a>(util: Table<'a>, lua: &Lua) -> Result<Table<'a>> {
|
||||
/// -- { fg = "Red", bg = nil, add_modifiers = {}, sub_modifiers = {} }
|
||||
/// ```
|
||||
pub fn lscolor<'a>(util: Table<'a>, lua: &Lua) -> Result<Table<'a>> {
|
||||
let lscolors = LsColors::from_env().unwrap_or_default();
|
||||
let func = lua.create_function(move |lua, path: String| {
|
||||
let style = lscolors.style_for_path(path).map(Style::from);
|
||||
let style = LS_COLORS.style_for_path(path).map(Style::from);
|
||||
lua::serialize(lua, &style).map_err(LuaError::custom)
|
||||
})?;
|
||||
util.set("lscolor", func)?;
|
||||
|
137
src/ui.rs
137
src/ui.rs
@ -18,7 +18,7 @@ use std::ops::BitXor;
|
||||
use time::macros::format_description;
|
||||
use tui::layout::Rect as TuiRect;
|
||||
use tui::layout::{Constraint as TuiConstraint, Direction, Layout as TuiLayout};
|
||||
use tui::style::{Color, Modifier as TuiModifier, Style as TuiStyle};
|
||||
use tui::style::{Color as TuiColor, Modifier as TuiModifier, Style as TuiStyle};
|
||||
use tui::text::{Line, Span, Text};
|
||||
use tui::widgets::{
|
||||
Block, BorderType as TuiBorderType, Borders as TuiBorders, Cell, List, ListItem,
|
||||
@ -26,9 +26,10 @@ use tui::widgets::{
|
||||
};
|
||||
use tui::Frame;
|
||||
|
||||
const DEFAULT_STYLE: TuiStyle = TuiStyle::new();
|
||||
|
||||
lazy_static! {
|
||||
pub static ref NO_COLOR: bool = env::var("NO_COLOR").is_ok();
|
||||
pub static ref DEFAULT_STYLE: TuiStyle = TuiStyle::default();
|
||||
}
|
||||
|
||||
fn read_only_indicator(app: &app::App) -> &str {
|
||||
@ -297,6 +298,59 @@ fn extend_optional_modifiers(
|
||||
}
|
||||
}
|
||||
|
||||
// raratui doesn't support directly serializing `Color::Rgb` and
|
||||
// `Color::Indexed` anymore.
|
||||
// See https://github.com/ratatui-org/ratatui/pull/934
|
||||
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize)]
|
||||
pub enum Color {
|
||||
#[default]
|
||||
Reset,
|
||||
Black,
|
||||
Red,
|
||||
Green,
|
||||
Yellow,
|
||||
Blue,
|
||||
Magenta,
|
||||
Cyan,
|
||||
Gray,
|
||||
DarkGray,
|
||||
LightRed,
|
||||
LightGreen,
|
||||
LightYellow,
|
||||
LightBlue,
|
||||
LightMagenta,
|
||||
LightCyan,
|
||||
White,
|
||||
Rgb(u8, u8, u8),
|
||||
Indexed(u8),
|
||||
}
|
||||
|
||||
impl From<Color> for TuiColor {
|
||||
fn from(value: Color) -> Self {
|
||||
match value {
|
||||
Color::Reset => TuiColor::Reset,
|
||||
Color::Black => TuiColor::Black,
|
||||
Color::Red => TuiColor::Red,
|
||||
Color::Green => TuiColor::Green,
|
||||
Color::Yellow => TuiColor::Yellow,
|
||||
Color::Blue => TuiColor::Blue,
|
||||
Color::Magenta => TuiColor::Magenta,
|
||||
Color::Cyan => TuiColor::Cyan,
|
||||
Color::Gray => TuiColor::Gray,
|
||||
Color::DarkGray => TuiColor::DarkGray,
|
||||
Color::LightRed => TuiColor::LightRed,
|
||||
Color::LightGreen => TuiColor::LightGreen,
|
||||
Color::LightYellow => TuiColor::LightYellow,
|
||||
Color::LightBlue => TuiColor::LightBlue,
|
||||
Color::LightMagenta => TuiColor::LightMagenta,
|
||||
Color::LightCyan => TuiColor::LightCyan,
|
||||
Color::White => TuiColor::White,
|
||||
Color::Rgb(r, g, b) => TuiColor::Rgb(r, g, b),
|
||||
Color::Indexed(index) => TuiColor::Indexed(index),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Style {
|
||||
@ -322,8 +376,8 @@ impl Style {
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<TuiStyle> for Style {
|
||||
fn into(self) -> TuiStyle {
|
||||
impl From<Style> for TuiStyle {
|
||||
fn from(val: Style) -> Self {
|
||||
fn xor(modifiers: Option<IndexSet<Modifier>>) -> u16 {
|
||||
modifiers
|
||||
.unwrap_or_default()
|
||||
@ -332,14 +386,13 @@ impl Into<TuiStyle> for Style {
|
||||
.fold(0, BitXor::bitxor)
|
||||
}
|
||||
if *NO_COLOR {
|
||||
*DEFAULT_STYLE
|
||||
DEFAULT_STYLE
|
||||
} else {
|
||||
TuiStyle {
|
||||
fg: self.fg,
|
||||
bg: self.bg,
|
||||
underline_color: None,
|
||||
add_modifier: TuiModifier::from_bits_truncate(xor(self.add_modifiers)),
|
||||
sub_modifier: TuiModifier::from_bits_truncate(xor(self.sub_modifiers)),
|
||||
fg: val.fg.map(Into::into),
|
||||
bg: val.bg.map(Into::into),
|
||||
add_modifier: TuiModifier::from_bits_truncate(xor(val.add_modifiers)),
|
||||
sub_modifier: TuiModifier::from_bits_truncate(xor(val.sub_modifiers)),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -378,8 +431,8 @@ impl From<&LsColorsStyle> for Style {
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<nu_ansi_term::Style> for Style {
|
||||
fn into(self) -> nu_ansi_term::Style {
|
||||
impl From<Style> for nu_ansi_term::Style {
|
||||
fn from(val: Style) -> Self {
|
||||
fn convert_color(color: Color) -> Option<nu_ansi_term::Color> {
|
||||
match color {
|
||||
Color::Black => Some(nu_ansi_term::Color::Black),
|
||||
@ -411,20 +464,20 @@ impl Into<nu_ansi_term::Style> for Style {
|
||||
}
|
||||
|
||||
let mut style = nu_ansi_term::Style::new();
|
||||
style.foreground = self.fg.and_then(convert_color);
|
||||
style.background = self.bg.and_then(convert_color);
|
||||
style.is_bold = match_modifiers(&self, |m| m.contains(&Modifier::Bold));
|
||||
style.is_dimmed = match_modifiers(&self, |m| m.contains(&Modifier::Dim));
|
||||
style.is_italic = match_modifiers(&self, |m| m.contains(&Modifier::Italic));
|
||||
style.foreground = val.fg.and_then(convert_color);
|
||||
style.background = val.bg.and_then(convert_color);
|
||||
style.is_bold = match_modifiers(&val, |m| m.contains(&Modifier::Bold));
|
||||
style.is_dimmed = match_modifiers(&val, |m| m.contains(&Modifier::Dim));
|
||||
style.is_italic = match_modifiers(&val, |m| m.contains(&Modifier::Italic));
|
||||
style.is_underline =
|
||||
match_modifiers(&self, |m| m.contains(&Modifier::Underlined));
|
||||
style.is_blink = match_modifiers(&self, |m| {
|
||||
match_modifiers(&val, |m| m.contains(&Modifier::Underlined));
|
||||
style.is_blink = match_modifiers(&val, |m| {
|
||||
m.contains(&Modifier::SlowBlink) || m.contains(&Modifier::RapidBlink)
|
||||
});
|
||||
style.is_reverse = match_modifiers(&self, |m| m.contains(&Modifier::Reversed));
|
||||
style.is_hidden = match_modifiers(&self, |m| m.contains(&Modifier::Hidden));
|
||||
style.is_reverse = match_modifiers(&val, |m| m.contains(&Modifier::Reversed));
|
||||
style.is_hidden = match_modifiers(&val, |m| m.contains(&Modifier::Hidden));
|
||||
style.is_strikethrough =
|
||||
match_modifiers(&self, |m| m.contains(&Modifier::CrossedOut));
|
||||
match_modifiers(&val, |m| m.contains(&Modifier::CrossedOut));
|
||||
style
|
||||
}
|
||||
}
|
||||
@ -658,11 +711,11 @@ pub fn block<'a>(config: PanelUiConfig, default_title: String) -> Block<'a> {
|
||||
))
|
||||
.title(Span::styled(
|
||||
config.title.format.unwrap_or(default_title),
|
||||
config.title.style.into(),
|
||||
config.title.style,
|
||||
))
|
||||
.style(config.style.into())
|
||||
.style(config.style)
|
||||
.border_type(config.border_type.unwrap_or_default().into())
|
||||
.border_style(config.border_style.into())
|
||||
.border_style(config.border_style)
|
||||
}
|
||||
|
||||
fn draw_table(
|
||||
@ -784,10 +837,10 @@ fn draw_table(
|
||||
})
|
||||
.unwrap_or_default()
|
||||
.into_iter()
|
||||
.map(|(text, style)| Cell::from(text).style(style.into()))
|
||||
.map(|(text, style)| Cell::from(text).style(style))
|
||||
.collect::<Vec<Cell>>();
|
||||
|
||||
Row::new(cols).style(row_style.to_owned().into())
|
||||
Row::new(cols).style(row_style.to_owned())
|
||||
})
|
||||
.collect::<Vec<Row>>()
|
||||
})
|
||||
@ -822,8 +875,8 @@ fn draw_table(
|
||||
};
|
||||
|
||||
let table = Table::new(rows, table_constraints)
|
||||
.style(app_config.general.table.style.to_owned().into())
|
||||
.highlight_style(app_config.general.focus_ui.style.to_owned().into())
|
||||
.style(app_config.general.table.style.to_owned())
|
||||
.highlight_style(app_config.general.focus_ui.style.to_owned())
|
||||
.column_spacing(app_config.general.table.col_spacing.unwrap_or_default())
|
||||
.block(block(
|
||||
config,
|
||||
@ -842,12 +895,12 @@ fn draw_table(
|
||||
.iter()
|
||||
.map(|c| {
|
||||
Cell::from(c.format.to_owned().unwrap_or_default())
|
||||
.style(c.style.to_owned().into())
|
||||
.style(c.style.to_owned())
|
||||
})
|
||||
.collect::<Vec<Cell>>(),
|
||||
)
|
||||
.height(header_height)
|
||||
.style(app_config.general.table.header.style.to_owned().into()),
|
||||
.style(app_config.general.table.header.style.to_owned()),
|
||||
);
|
||||
|
||||
f.render_widget(table, layout_size);
|
||||
@ -891,8 +944,7 @@ fn draw_selection(
|
||||
string_to_text(out)
|
||||
})
|
||||
.map(|i| {
|
||||
ListItem::new(i)
|
||||
.style(app.config.general.selection.item.style.to_owned().into())
|
||||
ListItem::new(i).style(app.config.general.selection.item.style.to_owned())
|
||||
})
|
||||
.collect();
|
||||
|
||||
@ -990,7 +1042,7 @@ fn draw_input_buffer(
|
||||
let input_buf = Paragraph::new(Line::from(vec![
|
||||
Span::styled(
|
||||
app.input.prompt.to_owned(),
|
||||
app.config.general.prompt.style.to_owned().into(),
|
||||
app.config.general.prompt.style.to_owned(),
|
||||
),
|
||||
Span::raw(input.value()),
|
||||
]))
|
||||
@ -1061,9 +1113,9 @@ fn draw_sort_n_filter(
|
||||
(
|
||||
Span::styled(
|
||||
ui.format.to_owned().unwrap_or_default(),
|
||||
ui.style.to_owned().into(),
|
||||
ui.style.to_owned(),
|
||||
),
|
||||
Span::styled(f.input.to_owned(), ui.style.into()),
|
||||
Span::styled(f.input.to_owned(), ui.style),
|
||||
)
|
||||
})
|
||||
.unwrap_or((Span::raw("f"), Span::raw("")))
|
||||
@ -1084,10 +1136,10 @@ fn draw_sort_n_filter(
|
||||
.map(|f| format!("{f}{p}", p = &s.pattern))
|
||||
.unwrap_or_else(|| s.pattern.clone());
|
||||
(
|
||||
Span::styled(f, ui.style.into()),
|
||||
Span::styled(f, ui.style),
|
||||
Span::styled(
|
||||
direction.format.to_owned().unwrap_or_default(),
|
||||
direction.style.to_owned().into(),
|
||||
direction.style.to_owned(),
|
||||
),
|
||||
)
|
||||
})
|
||||
@ -1105,11 +1157,11 @@ fn draw_sort_n_filter(
|
||||
(
|
||||
Span::styled(
|
||||
ui.format.to_owned().unwrap_or_default(),
|
||||
ui.style.into(),
|
||||
ui.style,
|
||||
),
|
||||
Span::styled(
|
||||
direction.format.to_owned().unwrap_or_default(),
|
||||
direction.style.to_owned().into(),
|
||||
direction.style.to_owned(),
|
||||
),
|
||||
)
|
||||
})
|
||||
@ -1119,7 +1171,7 @@ fn draw_sort_n_filter(
|
||||
)
|
||||
.zip(std::iter::repeat(Span::styled(
|
||||
ui.separator.format.to_owned().unwrap_or_default(),
|
||||
ui.separator.style.to_owned().into(),
|
||||
ui.separator.style.to_owned(),
|
||||
)))
|
||||
.flat_map(|((a, b), c)| vec![a, b, c])
|
||||
.collect::<Vec<Span>>();
|
||||
@ -1189,7 +1241,7 @@ fn draw_logs(
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n");
|
||||
|
||||
ListItem::new(txt).style(cfg.style.to_owned().into())
|
||||
ListItem::new(txt).style(cfg.style.to_owned())
|
||||
})
|
||||
.collect::<Vec<ListItem>>()
|
||||
};
|
||||
@ -1451,7 +1503,6 @@ pub fn draw(f: &mut Frame, app: &app::App, lua: &Lua) {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use tui::style::Color;
|
||||
|
||||
fn modifier(m: Modifier) -> Option<IndexSet<Modifier>> {
|
||||
let mut x = IndexSet::new();
|
||||
|
Loading…
Reference in New Issue
Block a user