Merge branch 'anstyle' of https://github.com/sharifhsn/hexyl into anstyle

This commit is contained in:
Sharif Haason committed 2022-11-18 16:15:12 -05:00
commit df1afdc73f
3 files changed
+45 -41

No files matched your search

Generated
+2 -3
View File
@@ -87,7 +87,6 @@ dependencies = [
"atty",
"bitflags",
"clap_lex",
"indexmap",
"once_cell",
"strsim",
"termcolor",
@@ -97,9 +96,9 @@ dependencies = [
[[package]]
name = "clap_lex"
version = "0.2.4"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
dependencies = [
"os_str_bytes",
]
+2 -2
View File
@@ -21,9 +21,9 @@ terminal_size = "0.2"
once_cell = "1.16.0"
[dependencies.clap]
version = "3"
version = "4"
default-features = false
features = ["std", "suggestions", "color", "wrap_help", "cargo"]
features = ["std", "suggestions", "color", "wrap_help", "cargo", "help", "usage", "error-context"]
[dev-dependencies]
assert_cmd = "2.0"
+41 -36
View File
@@ -6,7 +6,8 @@ use std::fs::File;
use std::io::{self, prelude::*, BufWriter, SeekFrom};
use std::num::{NonZeroI64, NonZeroU64};
use clap::{crate_name, crate_version, AppSettings, Arg, ColorChoice, Command};
use clap::builder::ArgPredicate;
use clap::{crate_name, crate_version, Arg, ArgAction, ColorChoice, Command};
use atty::Stream;
@@ -24,7 +25,6 @@ const DEFAULT_BLOCK_SIZE: i64 = 512;
fn run() -> Result<(), AnyhowError> {
let command = Command::new(crate_name!())
.setting(AppSettings::DeriveDisplayOrder)
.color(ColorChoice::Auto)
.max_term_width(90)
.version(crate_version!())
@@ -37,7 +37,7 @@ fn run() -> Result<(), AnyhowError> {
Arg::new("length")
.short('n')
.long("length")
.takes_value(true)
.num_args(1)
.value_name("N")
.help(
"Only read N bytes from the input. The N argument can also include a \
@@ -51,7 +51,7 @@ fn run() -> Result<(), AnyhowError> {
Arg::new("bytes")
.short('c')
.long("bytes")
.takes_value(true)
.num_args(1)
.value_name("N")
.conflicts_with("length")
.help("An alias for -n/--length"),
@@ -59,9 +59,9 @@ fn run() -> Result<(), AnyhowError> {
.arg(
Arg::new("count")
.short('l')
.takes_value(true)
.num_args(1)
.value_name("N")
.conflicts_with_all(&["length", "bytes"])
.conflicts_with_all(["length", "bytes"])
.hide(true)
.help("Yet another alias for -n/--length"),
)
@@ -69,7 +69,7 @@ fn run() -> Result<(), AnyhowError> {
Arg::new("skip")
.short('s')
.long("skip")
.takes_value(true)
.num_args(1)
.value_name("N")
.help(
"Skip the first N bytes of the input. The N argument can also include \
@@ -80,7 +80,7 @@ fn run() -> Result<(), AnyhowError> {
.arg(
Arg::new("block_size")
.long("block-size")
.takes_value(true)
.num_args(1)
.value_name("SIZE")
.help(formatcp!(
"Sets the size of the `block` unit to SIZE (default is {}).\n\
@@ -92,6 +92,7 @@ fn run() -> Result<(), AnyhowError> {
Arg::new("nosqueezing")
.short('v')
.long("no-squeezing")
.action(ArgAction::SetFalse)
.help(
"Displays all input data. Otherwise any number of groups of output \
lines which would be identical to the preceding group of lines, are \
@@ -101,49 +102,51 @@ fn run() -> Result<(), AnyhowError> {
.arg(
Arg::new("color")
.long("color")
.takes_value(true)
.num_args(1)
.value_name("WHEN")
.possible_values(["always", "auto", "never"])
.default_value_if("plain", None, Some("never"))
.value_parser(["always", "auto", "never"])
.default_value_if("plain", ArgPredicate::IsPresent, Some("never"))
.default_value("always")
.help(
"When to use colors. The auto-mode only displays colors if the output \
goes to an interactive terminal",
),
)
.arg(Arg::new("plain").short('p').long("plain").help(
"Display output with --no-characters, --no-position, --border=none, and --color=never.",
))
.arg(
Arg::new("border")
.long("border")
.takes_value(true)
.num_args(1)
.value_name("STYLE")
.possible_values(["unicode", "ascii", "none"])
.default_value_if("plain", None, Some("none"))
.value_parser(["unicode", "ascii", "none"])
.default_value_if("plain", ArgPredicate::IsPresent, Some("none"))
.default_value("unicode")
.help(
"Whether to draw a border with Unicode characters, ASCII characters, \
or none at all",
),
)
.arg(Arg::new("plain").short('p').long("plain").action(ArgAction::SetTrue).help(
"Display output with --no-characters, --no-position, --border=none, and --color=never.",
))
.arg(
Arg::new("no_chars")
.short('C')
.long("no-characters")
.action(ArgAction::SetFalse)
.help("Whether to display the character panel on the right."),
)
.arg(
Arg::new("no_position")
.short('P')
.long("no-position")
.action(ArgAction::SetFalse)
.help("Whether to display the position panel on the left."),
)
.arg(
Arg::new("display_offset")
.short('o')
.long("display-offset")
.takes_value(true)
.num_args(1)
.value_name("N")
.help(
"Add N bytes to the displayed file position. The N argument can also \
@@ -155,7 +158,7 @@ fn run() -> Result<(), AnyhowError> {
.arg(
Arg::new("panels")
.long("panels")
.takes_value(true)
.num_args(1)
.value_name("N")
.help(
"Sets the number of hex data panels to be displayed. \
@@ -166,7 +169,7 @@ fn run() -> Result<(), AnyhowError> {
.arg(
Arg::new("terminal_width")
.long("terminal-width")
.takes_value(true)
.num_args(1)
.value_name("N")
.conflicts_with("panels")
.help(
@@ -182,13 +185,13 @@ fn run() -> Result<(), AnyhowError> {
let stdin = io::stdin();
let mut reader = match matches.value_of("FILE") {
let mut reader = match matches.get_one::<String>("FILE") {
Some(filename) => Input::File(File::open(filename)?),
None => Input::Stdin(stdin.lock()),
};
let block_size = matches
.value_of("block_size")
.get_one::<String>("block_size")
.map(|bs| {
if let Some(hex_number) = try_parse_as_hex_number(bs) {
return hex_number.map_err(|e| anyhow!(e)).and_then(|x| {
@@ -213,7 +216,7 @@ fn run() -> Result<(), AnyhowError> {
.unwrap_or_else(|| PositiveI64::new(DEFAULT_BLOCK_SIZE).unwrap());
let skip_arg = matches
.value_of("skip")
.get_one::<String>("skip")
.map(|s| {
parse_byte_offset(s, block_size).context(anyhow!(
"failed to parse `--skip` arg {:?} as byte count",
@@ -249,9 +252,9 @@ fn run() -> Result<(), AnyhowError> {
};
let mut reader = if let Some(length) = matches
.value_of("length")
.or_else(|| matches.value_of("bytes"))
.or_else(|| matches.value_of("count"))
.get_one::<String>("length")
.or_else(|| matches.get_one::<String>("bytes"))
.or_else(|| matches.get_one::<String>("count"))
.map(|s| {
parse_byte_count(s).context(anyhow!(
"failed to parse `--length` arg {:?} as byte count",
@@ -265,26 +268,28 @@ fn run() -> Result<(), AnyhowError> {
reader.into_inner()
};
let show_color = match matches.value_of("color") {
let show_color = match matches.get_one::<String>("color").map(String::as_ref) {
Some("never") => false,
Some("auto") => atty::is(Stream::Stdout),
_ => true,
};
let border_style = match matches.value_of("border") {
let border_style = match matches.get_one::<String>("border").map(String::as_ref) {
Some("unicode") => BorderStyle::Unicode,
Some("ascii") => BorderStyle::Ascii,
_ => BorderStyle::None,
};
let squeeze = !matches.is_present("nosqueezing");
let &squeeze = matches.get_one::<bool>("nosqueezing").unwrap_or(&true);
let show_char_panel = !matches.is_present("no_chars") && !matches.is_present("plain");
let show_char_panel = *matches.get_one::<bool>("no_chars").unwrap_or(&true)
&& !matches.get_one::<bool>("plain").unwrap_or(&false);
let show_position_panel = !matches.is_present("no_position") && !matches.is_present("plain");
let show_position_panel = *matches.get_one::<bool>("no_position").unwrap_or(&true)
&& !matches.get_one::<bool>("plain").unwrap_or(&false);
let display_offset: u64 = matches
.value_of("display_offset")
.get_one::<String>("display_offset")
.map(|s| {
parse_byte_count(s).context(anyhow!(
"failed to parse `--display-offset` arg {:?} as byte count",
@@ -300,14 +305,14 @@ fn run() -> Result<(), AnyhowError> {
if (terminal_width - offset) / col_width < 1 {
1
} else {
((terminal_width - offset) / col_width) as u64
(terminal_width - offset) / col_width
}
};
let panels = if matches.value_of("panels") == Some("auto") {
let panels = if matches.get_one::<String>("panels").map(String::as_ref) == Some("auto") {
max_panels_fn(terminal_size().ok_or_else(|| anyhow!("not a TTY"))?.0 .0 as u64)
} else if let Some(panels) = matches
.value_of("panels")
.get_one::<String>("panels")
.map(|s| {
s.parse::<NonZeroU64>().map(u64::from).context(anyhow!(
"failed to parse `--panels` arg {:?} as unsigned nonzero integer",
@@ -318,7 +323,7 @@ fn run() -> Result<(), AnyhowError> {
{
panels
} else if let Some(terminal_width) = matches
.value_of("terminal_width")
.get_one::<String>("terminal_width")
.map(|s| {
s.parse::<NonZeroU64>().map(u64::from).context(anyhow!(
"failed to parse `--terminal-width` arg {:?} as unsigned nonzero integer",