Table indexes (#6620)
* Table indexes * Renamed to `show_table_indexes` * Renamed to `table_index_mode`
This commit is contained in:
parent
d2e4f03d19
commit
5c99921e15
|
@ -5,7 +5,8 @@ use nu_protocol::{
|
||||||
ast::{Call, PathMember},
|
ast::{Call, PathMember},
|
||||||
engine::{Command, EngineState, Stack, StateWorkingSet},
|
engine::{Command, EngineState, Stack, StateWorkingSet},
|
||||||
format_error, Category, Config, DataSource, Example, IntoPipelineData, ListStream,
|
format_error, Category, Config, DataSource, Example, IntoPipelineData, ListStream,
|
||||||
PipelineData, PipelineMetadata, RawStream, ShellError, Signature, Span, SyntaxShape, Value,
|
PipelineData, PipelineMetadata, RawStream, ShellError, Signature, Span, SyntaxShape,
|
||||||
|
TableIndexMode, Value,
|
||||||
};
|
};
|
||||||
use nu_table::{Alignments, StyledString, TableTheme, TextStyle};
|
use nu_table::{Alignments, StyledString, TableTheme, TextStyle};
|
||||||
use nu_utils::get_ls_colors;
|
use nu_utils::get_ls_colors;
|
||||||
|
@ -348,10 +349,14 @@ fn convert_to_table(
|
||||||
let mut input = input.iter().peekable();
|
let mut input = input.iter().peekable();
|
||||||
let color_hm = get_color_config(config);
|
let color_hm = get_color_config(config);
|
||||||
let float_precision = config.float_precision as usize;
|
let float_precision = config.float_precision as usize;
|
||||||
let disable_index = config.disable_table_indexes;
|
let with_index = match config.table_index_mode {
|
||||||
|
TableIndexMode::Always => true,
|
||||||
|
TableIndexMode::Never => false,
|
||||||
|
TableIndexMode::Auto => headers.iter().any(|header| header == INDEX_COLUMN_NAME),
|
||||||
|
};
|
||||||
|
|
||||||
if input.peek().is_some() {
|
if input.peek().is_some() {
|
||||||
if !headers.is_empty() && !disable_index {
|
if !headers.is_empty() && with_index {
|
||||||
headers.insert(0, "#".into());
|
headers.insert(0, "#".into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,7 +378,7 @@ fn convert_to_table(
|
||||||
}
|
}
|
||||||
// String1 = datatype, String2 = value as string
|
// String1 = datatype, String2 = value as string
|
||||||
let mut row: Vec<(String, String)> = vec![];
|
let mut row: Vec<(String, String)> = vec![];
|
||||||
if !disable_index {
|
if with_index {
|
||||||
let row_val = match &item {
|
let row_val = match &item {
|
||||||
Value::Record { .. } => item
|
Value::Record { .. } => item
|
||||||
.get_data_by_key(INDEX_COLUMN_NAME)
|
.get_data_by_key(INDEX_COLUMN_NAME)
|
||||||
|
@ -390,7 +395,7 @@ fn convert_to_table(
|
||||||
item.into_abbreviated_string(config),
|
item.into_abbreviated_string(config),
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
let skip_num = if !disable_index { 1 } else { 0 };
|
let skip_num = if with_index { 1 } else { 0 };
|
||||||
for header in headers.iter().skip(skip_num) {
|
for header in headers.iter().skip(skip_num) {
|
||||||
let result = match item {
|
let result = match item {
|
||||||
Value::Record { .. } => item.clone().follow_cell_path(
|
Value::Record { .. } => item.clone().follow_cell_path(
|
||||||
|
@ -432,7 +437,7 @@ fn convert_to_table(
|
||||||
x.into_iter()
|
x.into_iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(col, y)| {
|
.map(|(col, y)| {
|
||||||
if col == 0 && !disable_index {
|
if col == 0 && with_index {
|
||||||
StyledString {
|
StyledString {
|
||||||
contents: y.1,
|
contents: y.1,
|
||||||
style: TextStyle {
|
style: TextStyle {
|
||||||
|
|
|
@ -77,7 +77,7 @@ pub struct Config {
|
||||||
pub rm_always_trash: bool,
|
pub rm_always_trash: bool,
|
||||||
pub shell_integration: bool,
|
pub shell_integration: bool,
|
||||||
pub buffer_editor: String,
|
pub buffer_editor: String,
|
||||||
pub disable_table_indexes: bool,
|
pub table_index_mode: TableIndexMode,
|
||||||
pub cd_with_abbreviations: bool,
|
pub cd_with_abbreviations: bool,
|
||||||
pub case_sensitive_completions: bool,
|
pub case_sensitive_completions: bool,
|
||||||
pub enable_external_completion: bool,
|
pub enable_external_completion: bool,
|
||||||
|
@ -114,7 +114,7 @@ impl Default for Config {
|
||||||
rm_always_trash: false,
|
rm_always_trash: false,
|
||||||
shell_integration: false,
|
shell_integration: false,
|
||||||
buffer_editor: String::new(),
|
buffer_editor: String::new(),
|
||||||
disable_table_indexes: false,
|
table_index_mode: TableIndexMode::Always,
|
||||||
cd_with_abbreviations: false,
|
cd_with_abbreviations: false,
|
||||||
case_sensitive_completions: false,
|
case_sensitive_completions: false,
|
||||||
enable_external_completion: true,
|
enable_external_completion: true,
|
||||||
|
@ -145,6 +145,16 @@ pub enum HistoryFileFormat {
|
||||||
PlainText,
|
PlainText,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
pub enum TableIndexMode {
|
||||||
|
/// Always show indexes
|
||||||
|
Always,
|
||||||
|
/// Never show indexes
|
||||||
|
Never,
|
||||||
|
/// Show indexes when a table has "index" column
|
||||||
|
Auto,
|
||||||
|
}
|
||||||
|
|
||||||
/// A Table view configuration, for a situation where
|
/// A Table view configuration, for a situation where
|
||||||
/// we need to limit cell width in order to adjust for a terminal size.
|
/// we need to limit cell width in order to adjust for a terminal size.
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
#[derive(Serialize, Deserialize, Clone, Debug)]
|
||||||
|
@ -370,11 +380,19 @@ impl Value {
|
||||||
eprintln!("$config.buffer_editor is not a string")
|
eprintln!("$config.buffer_editor is not a string")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"disable_table_indexes" => {
|
"table_index_mode" => {
|
||||||
if let Ok(b) = value.as_bool() {
|
if let Ok(b) = value.as_string() {
|
||||||
config.disable_table_indexes = b;
|
let val_str = b.to_lowercase();
|
||||||
|
match val_str.as_ref() {
|
||||||
|
"always" => config.table_index_mode = TableIndexMode::Always,
|
||||||
|
"never" => config.table_index_mode = TableIndexMode::Never,
|
||||||
|
"auto" => config.table_index_mode = TableIndexMode::Auto,
|
||||||
|
_ => eprintln!(
|
||||||
|
"$config.table_index_mode must be a never, always or auto"
|
||||||
|
),
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
eprintln!("$config.disable_table_indexes is not a bool")
|
eprintln!("$config.table_index_mode is not a string")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"cd_with_abbreviations" => {
|
"cd_with_abbreviations" => {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use nu_ansi_term::Style;
|
use nu_ansi_term::Style;
|
||||||
use nu_protocol::{Config, FooterMode, TrimStrategy};
|
use nu_protocol::{Config, FooterMode, TableIndexMode, TrimStrategy};
|
||||||
use tabled::{
|
use tabled::{
|
||||||
builder::Builder,
|
builder::Builder,
|
||||||
formatting_settings::AlignmentStrategy,
|
formatting_settings::AlignmentStrategy,
|
||||||
|
@ -95,7 +95,15 @@ fn draw_table(
|
||||||
let theme = &table.theme;
|
let theme = &table.theme;
|
||||||
let with_header = headers.is_some();
|
let with_header = headers.is_some();
|
||||||
let with_footer = with_header && need_footer(config, data.len() as u64);
|
let with_footer = with_header && need_footer(config, data.len() as u64);
|
||||||
let with_index = !config.disable_table_indexes;
|
let with_index = match config.table_index_mode {
|
||||||
|
TableIndexMode::Always => true,
|
||||||
|
TableIndexMode::Never => false,
|
||||||
|
TableIndexMode::Auto => table
|
||||||
|
.headers
|
||||||
|
.iter()
|
||||||
|
.flatten()
|
||||||
|
.any(|header| header.contents == "index"),
|
||||||
|
};
|
||||||
|
|
||||||
let table = build_table(data, headers, with_footer);
|
let table = build_table(data, headers, with_footer);
|
||||||
let table = load_theme(table, color_hm, theme, with_footer, with_header);
|
let table = load_theme(table, color_hm, theme, with_footer, with_header);
|
||||||
|
|
|
@ -259,7 +259,7 @@ let-env config = {
|
||||||
sync_history_on_enter: true # Enable to share the history between multiple sessions, else you have to close the session to persist history to file
|
sync_history_on_enter: true # Enable to share the history between multiple sessions, else you have to close the session to persist history to file
|
||||||
history_file_format: "plaintext" # "sqlite" or "plaintext"
|
history_file_format: "plaintext" # "sqlite" or "plaintext"
|
||||||
shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue
|
shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue
|
||||||
disable_table_indexes: false # set to true to remove the index column from tables
|
table_index_mode: always # always, never, auto
|
||||||
cd_with_abbreviations: false # set to true to allow you to do things like cd s/o/f and nushell expand it to cd some/other/folder
|
cd_with_abbreviations: false # set to true to allow you to do things like cd s/o/f and nushell expand it to cd some/other/folder
|
||||||
case_sensitive_completions: false # set to true to enable case-sensitive completions
|
case_sensitive_completions: false # set to true to enable case-sensitive completions
|
||||||
enable_external_completion: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow
|
enable_external_completion: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up my be very slow
|
||||||
|
|
Loading…
Reference in New Issue
Block a user