forked from extern/nushell
Bat config (#2010)
* WIP - changes to support bat config * added bat configuration * removed debug info * clippy fix * changed [bat] to [textview] Co-authored-by: Darren Schroeder <fdncred@hotmail.com>
This commit is contained in:
parent
bc9cc75c8a
commit
6bfd8532e4
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -2767,6 +2767,7 @@ dependencies = [
|
|||||||
"bat",
|
"bat",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"nu-build",
|
"nu-build",
|
||||||
|
"nu-cli",
|
||||||
"nu-errors",
|
"nu-errors",
|
||||||
"nu-plugin",
|
"nu-plugin",
|
||||||
"nu-protocol",
|
"nu-protocol",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
pub(crate) mod base;
|
pub(crate) mod base;
|
||||||
pub(crate) mod command;
|
pub(crate) mod command;
|
||||||
pub(crate) mod config;
|
pub mod config;
|
||||||
pub(crate) mod dict;
|
pub(crate) mod dict;
|
||||||
pub(crate) mod files;
|
pub(crate) mod files;
|
||||||
pub mod primitive;
|
pub mod primitive;
|
||||||
|
@ -103,7 +103,7 @@ pub fn read(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn config(tag: impl Into<Tag>) -> Result<IndexMap<String, Value>, ShellError> {
|
pub fn config(tag: impl Into<Tag>) -> Result<IndexMap<String, Value>, ShellError> {
|
||||||
read(tag, &None)
|
read(tag, &None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ extern crate quickcheck_macros;
|
|||||||
mod cli;
|
mod cli;
|
||||||
mod commands;
|
mod commands;
|
||||||
mod context;
|
mod context;
|
||||||
mod data;
|
pub mod data;
|
||||||
mod deserializer;
|
mod deserializer;
|
||||||
mod env;
|
mod env;
|
||||||
mod evaluate;
|
mod evaluate;
|
||||||
@ -39,6 +39,7 @@ pub use crate::commands::command::{
|
|||||||
};
|
};
|
||||||
pub use crate::commands::help::get_help;
|
pub use crate::commands::help::get_help;
|
||||||
pub use crate::context::CommandRegistry;
|
pub use crate::context::CommandRegistry;
|
||||||
|
pub use crate::data::config;
|
||||||
pub use crate::data::dict::TaggedListBuilder;
|
pub use crate::data::dict::TaggedListBuilder;
|
||||||
pub use crate::data::primitive;
|
pub use crate::data::primitive;
|
||||||
pub use crate::data::value;
|
pub use crate::data::value;
|
||||||
|
@ -14,7 +14,7 @@ nu-plugin = { path = "../nu-plugin", version = "0.15.1" }
|
|||||||
nu-protocol = { path = "../nu-protocol", version = "0.15.1" }
|
nu-protocol = { path = "../nu-protocol", version = "0.15.1" }
|
||||||
nu-source = { path = "../nu-source", version = "0.15.1" }
|
nu-source = { path = "../nu-source", version = "0.15.1" }
|
||||||
nu-errors = { path = "../nu-errors", version = "0.15.1" }
|
nu-errors = { path = "../nu-errors", version = "0.15.1" }
|
||||||
#nu-cli = { path = "../nu-cli", version = "0.15.1" }
|
nu-cli = { path = "../nu-cli", version = "0.15.1" }
|
||||||
|
|
||||||
crossterm = "0.17.5"
|
crossterm = "0.17.5"
|
||||||
syntect = { version = "4.2", default-features = false, features = ["default-fancy"]}
|
syntect = { version = "4.2", default-features = false, features = ["default-fancy"]}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use nu_protocol::{Primitive, UntaggedValue, Value};
|
use nu_protocol::{Primitive, UntaggedValue, Value};
|
||||||
use nu_source::AnchorLocation;
|
use nu_source::{AnchorLocation, Tag};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@ -11,7 +11,136 @@ impl TextView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::cognitive_complexity)]
|
||||||
pub fn view_text_value(value: &Value) {
|
pub fn view_text_value(value: &Value) {
|
||||||
|
let mut term_width: u64 = textwrap::termwidth() as u64;
|
||||||
|
let mut tab_width: u64 = 4;
|
||||||
|
let mut colored_output = true;
|
||||||
|
let mut true_color = true;
|
||||||
|
let mut header = true;
|
||||||
|
let mut line_numbers = true;
|
||||||
|
let mut grid = true;
|
||||||
|
let mut vcs_modification_markers = true;
|
||||||
|
let mut snip = true;
|
||||||
|
let mut wrapping_mode = bat::WrappingMode::NoWrapping;
|
||||||
|
let mut use_italics = true;
|
||||||
|
let mut paging_mode = bat::PagingMode::QuitIfOneScreen;
|
||||||
|
let mut pager = "less".to_string();
|
||||||
|
let mut line_ranges = bat::line_range::LineRanges::all();
|
||||||
|
let mut _highlight_range = "0,0";
|
||||||
|
let highlight_range_from: u64 = 0;
|
||||||
|
let highlight_range_to: u64 = 0;
|
||||||
|
let mut theme = "OneHalfDark".to_string();
|
||||||
|
|
||||||
|
if let Ok(config) = nu_cli::data::config::config(Tag::unknown()) {
|
||||||
|
if let Some(batvars) = config.get("textview") {
|
||||||
|
for (idx, value) in batvars.row_entries() {
|
||||||
|
match idx {
|
||||||
|
x if x == "term_width" => {
|
||||||
|
term_width = match value.as_u64() {
|
||||||
|
Ok(n) => n,
|
||||||
|
_ => textwrap::termwidth() as u64,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "tab_width" => {
|
||||||
|
tab_width = match value.as_u64() {
|
||||||
|
Ok(n) => n,
|
||||||
|
_ => 4u64,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "colored_output" => {
|
||||||
|
colored_output = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "true_color" => {
|
||||||
|
true_color = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "header" => {
|
||||||
|
header = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "line_numbers" => {
|
||||||
|
line_numbers = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "grid" => {
|
||||||
|
grid = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "vcs_modification_markers" => {
|
||||||
|
vcs_modification_markers = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "snip" => {
|
||||||
|
snip = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "wrapping_mode" => {
|
||||||
|
wrapping_mode = match value.as_string() {
|
||||||
|
Ok(s) if s.to_lowercase() == "nowrapping" => {
|
||||||
|
bat::WrappingMode::NoWrapping
|
||||||
|
}
|
||||||
|
Ok(s) if s.to_lowercase() == "character" => {
|
||||||
|
bat::WrappingMode::Character
|
||||||
|
}
|
||||||
|
_ => bat::WrappingMode::NoWrapping,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "use_italics" => {
|
||||||
|
use_italics = match value.as_bool() {
|
||||||
|
Ok(b) => b,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "paging_mode" => {
|
||||||
|
paging_mode = match value.as_string() {
|
||||||
|
Ok(s) if s.to_lowercase() == "always" => bat::PagingMode::Always,
|
||||||
|
Ok(s) if s.to_lowercase() == "never" => bat::PagingMode::Never,
|
||||||
|
Ok(s) if s.to_lowercase() == "quitifonescreen" => {
|
||||||
|
bat::PagingMode::QuitIfOneScreen
|
||||||
|
}
|
||||||
|
_ => bat::PagingMode::QuitIfOneScreen,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "pager" => {
|
||||||
|
pager = match value.as_string() {
|
||||||
|
Ok(s) => s,
|
||||||
|
_ => "less".to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x if x == "line_ranges" => line_ranges = bat::line_range::LineRanges::all(), // not real sure what to do with this
|
||||||
|
x if x == "highlight_range" => _highlight_range = "0,0", //ignore config value for now
|
||||||
|
x if x == "theme" => {
|
||||||
|
theme = match value.as_string() {
|
||||||
|
Ok(s) => s,
|
||||||
|
_ => "OneDarkHalf".to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
println!("Couldn't find bat section in config");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
println!("Error reading config!");
|
||||||
|
}
|
||||||
|
|
||||||
let value_anchor = value.anchor();
|
let value_anchor = value.anchor();
|
||||||
if let UntaggedValue::Primitive(Primitive::String(ref s)) = &value.value {
|
if let UntaggedValue::Primitive(Primitive::String(ref s)) = &value.value {
|
||||||
if let Some(source) = value_anchor {
|
if let Some(source) = value_anchor {
|
||||||
@ -46,44 +175,44 @@ pub fn view_text_value(value: &Value) {
|
|||||||
// Let bat do it's thing
|
// Let bat do it's thing
|
||||||
bat::PrettyPrinter::new()
|
bat::PrettyPrinter::new()
|
||||||
.input_from_bytes_with_name(s.as_bytes(), file_path)
|
.input_from_bytes_with_name(s.as_bytes(), file_path)
|
||||||
.term_width(textwrap::termwidth())
|
.term_width(term_width as usize)
|
||||||
.tab_width(Some(4))
|
.tab_width(Some(tab_width as usize))
|
||||||
.colored_output(true)
|
.colored_output(colored_output)
|
||||||
.true_color(true)
|
.true_color(true_color)
|
||||||
.header(true)
|
.header(header)
|
||||||
.line_numbers(true)
|
.line_numbers(line_numbers)
|
||||||
.grid(true)
|
.grid(grid)
|
||||||
.vcs_modification_markers(true)
|
.vcs_modification_markers(vcs_modification_markers)
|
||||||
.snip(true)
|
.snip(snip)
|
||||||
.wrapping_mode(bat::WrappingMode::NoWrapping)
|
.wrapping_mode(wrapping_mode)
|
||||||
.use_italics(true)
|
.use_italics(use_italics)
|
||||||
.paging_mode(bat::PagingMode::QuitIfOneScreen)
|
.paging_mode(paging_mode)
|
||||||
.pager("less")
|
.pager(&pager)
|
||||||
.line_ranges(bat::line_range::LineRanges::all())
|
.line_ranges(line_ranges)
|
||||||
.highlight_range(0, 0)
|
.highlight_range(highlight_range_from as usize, highlight_range_to as usize)
|
||||||
.theme("OneHalfDark")
|
.theme(&theme)
|
||||||
.print()
|
.print()
|
||||||
.expect("Error with bat PrettyPrint");
|
.expect("Error with bat PrettyPrint");
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
bat::PrettyPrinter::new()
|
bat::PrettyPrinter::new()
|
||||||
.input_from_bytes(s.as_bytes())
|
.input_from_bytes(s.as_bytes())
|
||||||
.term_width(textwrap::termwidth())
|
.term_width(term_width as usize)
|
||||||
.tab_width(Some(4))
|
.tab_width(Some(tab_width as usize))
|
||||||
.colored_output(true)
|
.colored_output(colored_output)
|
||||||
.true_color(true)
|
.true_color(true_color)
|
||||||
.header(true)
|
.header(header)
|
||||||
.line_numbers(true)
|
.line_numbers(line_numbers)
|
||||||
.grid(true)
|
.grid(grid)
|
||||||
.vcs_modification_markers(true)
|
.vcs_modification_markers(vcs_modification_markers)
|
||||||
.snip(true)
|
.snip(snip)
|
||||||
.wrapping_mode(bat::WrappingMode::NoWrapping)
|
.wrapping_mode(wrapping_mode)
|
||||||
.use_italics(true)
|
.use_italics(use_italics)
|
||||||
.paging_mode(bat::PagingMode::QuitIfOneScreen)
|
.paging_mode(paging_mode)
|
||||||
.pager("less")
|
.pager(&pager)
|
||||||
.line_ranges(bat::line_range::LineRanges::all())
|
.line_ranges(line_ranges)
|
||||||
.highlight_range(0, 0)
|
.highlight_range(highlight_range_from as usize, highlight_range_to as usize)
|
||||||
.theme("OneHalfDark")
|
.theme(&theme)
|
||||||
.print()
|
.print()
|
||||||
.expect("Error with bat PrettyPrint");
|
.expect("Error with bat PrettyPrint");
|
||||||
}
|
}
|
||||||
@ -91,22 +220,22 @@ pub fn view_text_value(value: &Value) {
|
|||||||
} else {
|
} else {
|
||||||
bat::PrettyPrinter::new()
|
bat::PrettyPrinter::new()
|
||||||
.input_from_bytes(s.as_bytes())
|
.input_from_bytes(s.as_bytes())
|
||||||
.term_width(textwrap::termwidth())
|
.term_width(term_width as usize)
|
||||||
.tab_width(Some(4))
|
.tab_width(Some(tab_width as usize))
|
||||||
.colored_output(true)
|
.colored_output(colored_output)
|
||||||
.true_color(true)
|
.true_color(true_color)
|
||||||
.header(true)
|
.header(header)
|
||||||
.line_numbers(true)
|
.line_numbers(line_numbers)
|
||||||
.grid(true)
|
.grid(grid)
|
||||||
.vcs_modification_markers(true)
|
.vcs_modification_markers(vcs_modification_markers)
|
||||||
.snip(true)
|
.snip(snip)
|
||||||
.wrapping_mode(bat::WrappingMode::NoWrapping)
|
.wrapping_mode(wrapping_mode)
|
||||||
.use_italics(true)
|
.use_italics(use_italics)
|
||||||
.paging_mode(bat::PagingMode::QuitIfOneScreen)
|
.paging_mode(paging_mode)
|
||||||
.pager("less")
|
.pager(&pager)
|
||||||
.line_ranges(bat::line_range::LineRanges::all())
|
.line_ranges(line_ranges)
|
||||||
.highlight_range(0, 0)
|
.highlight_range(highlight_range_from as usize, highlight_range_to as usize)
|
||||||
.theme("OneHalfDark")
|
.theme(&theme)
|
||||||
.print()
|
.print()
|
||||||
.expect("Error with bat PrettyPrint");
|
.expect("Error with bat PrettyPrint");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user