mirror of
https://github.com/nushell/nushell.git
synced 2024-11-22 08:23:24 +01:00
Make LS_COLORS functionality faster in explore
, especially on Windows (#12984)
Closes #12980. More context there, but basically `explore` was getting file metadata for every row every time the record view was rendered. The quick fix for now is to do the `LS_COLORS` colouring with a `&str` instead of a path and file metadata.
This commit is contained in:
parent
a84fdb1d37
commit
7746e84199
@ -4,7 +4,6 @@ use nu_ansi_term::{Color, Style};
|
|||||||
use nu_engine::env_to_string;
|
use nu_engine::env_to_string;
|
||||||
use nu_protocol::engine::{EngineState, Stack};
|
use nu_protocol::engine::{EngineState, Stack};
|
||||||
use nu_utils::get_ls_colors;
|
use nu_utils::get_ls_colors;
|
||||||
use std::fs::symlink_metadata;
|
|
||||||
|
|
||||||
pub fn create_lscolors(engine_state: &EngineState, stack: &Stack) -> LsColors {
|
pub fn create_lscolors(engine_state: &EngineState, stack: &Stack) -> LsColors {
|
||||||
let colors = stack
|
let colors = stack
|
||||||
@ -14,6 +13,7 @@ pub fn create_lscolors(engine_state: &EngineState, stack: &Stack) -> LsColors {
|
|||||||
get_ls_colors(colors)
|
get_ls_colors(colors)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Colorizes any columns named "name" in the table using LS_COLORS
|
||||||
pub fn lscolorize(header: &[String], data: &mut [Vec<NuText>], lscolors: &LsColors) {
|
pub fn lscolorize(header: &[String], data: &mut [Vec<NuText>], lscolors: &LsColors) {
|
||||||
for (col, col_name) in header.iter().enumerate() {
|
for (col, col_name) in header.iter().enumerate() {
|
||||||
if col_name != "name" {
|
if col_name != "name" {
|
||||||
@ -33,14 +33,7 @@ pub fn lscolorize(header: &[String], data: &mut [Vec<NuText>], lscolors: &LsColo
|
|||||||
|
|
||||||
fn get_path_style(path: &str, ls_colors: &LsColors) -> Option<Style> {
|
fn get_path_style(path: &str, ls_colors: &LsColors) -> Option<Style> {
|
||||||
let stripped_path = nu_utils::strip_ansi_unlikely(path);
|
let stripped_path = nu_utils::strip_ansi_unlikely(path);
|
||||||
|
let style = ls_colors.style_for_str(stripped_path.as_ref());
|
||||||
let style = match symlink_metadata(stripped_path.as_ref()) {
|
|
||||||
Ok(metadata) => {
|
|
||||||
ls_colors.style_for_path_with_metadata(stripped_path.as_ref(), Some(&metadata))
|
|
||||||
}
|
|
||||||
Err(_) => ls_colors.style_for_path(stripped_path.as_ref()),
|
|
||||||
};
|
|
||||||
|
|
||||||
style.map(lsstyle_to_nu_style)
|
style.map(lsstyle_to_nu_style)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user