mirror of
https://github.com/sharkdp/fd.git
synced 2024-11-18 09:50:34 +01:00
Add path-separator option.
Example usage: `fd.exe --path-separator /` on windows.
This commit is contained in:
parent
1d16cd855e
commit
24e108e1ad
4 changed files with 43 additions and 1 deletions
10
src/app.rs
10
src/app.rs
|
@ -207,6 +207,12 @@ pub fn build_app() -> App<'static, 'static> {
|
|||
.hidden_short_help(true),
|
||||
)
|
||||
.arg(arg("pattern"))
|
||||
.arg(
|
||||
arg("path-separator")
|
||||
.takes_value(true)
|
||||
.long("path-separator")
|
||||
.number_of_values(1),
|
||||
)
|
||||
.arg(arg("path").multiple(true))
|
||||
.arg(
|
||||
arg("search-path")
|
||||
|
@ -249,6 +255,10 @@ fn usage() -> HashMap<&'static str, Help> {
|
|||
doc!(h, "absolute-path"
|
||||
, "Show absolute instead of relative paths"
|
||||
, "Shows the full path starting from the root as opposed to relative paths.");
|
||||
doc!(h, "path-separator"
|
||||
, "Set the path separator to use when printing file paths."
|
||||
, "Set the path separator to use when printing file paths. \
|
||||
A path separator is limited to a single byte.");
|
||||
doc!(h, "follow"
|
||||
, "Follow symbolic links"
|
||||
, "By default, fd does not descend into symlinked directories. Using this flag, symbolic \
|
||||
|
|
|
@ -75,4 +75,7 @@ pub struct FdOptions {
|
|||
|
||||
/// Whether or not to display filesystem errors
|
||||
pub show_filesystem_errors: bool,
|
||||
|
||||
/// The separator used to print file paths.
|
||||
pub path_separator: Option<u8>,
|
||||
}
|
||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -114,6 +114,20 @@ fn main() {
|
|||
_ => atty::is(Stream::Stdout),
|
||||
};
|
||||
|
||||
let path_separator: Option<u8> = match matches.value_of("path-separator") {
|
||||
Some(sep_str) => {
|
||||
let sep = sep_str.as_bytes();
|
||||
if sep.len() != 1 {
|
||||
print_error_and_exit!(
|
||||
"'{}' is not a valid path separator. See 'fd --help'.",
|
||||
sep_str
|
||||
);
|
||||
}
|
||||
Some(sep[0])
|
||||
}
|
||||
None => None,
|
||||
};
|
||||
|
||||
#[cfg(windows)]
|
||||
let colored_output = colored_output && ansi_term::enable_ansi_support().is_ok();
|
||||
|
||||
|
@ -244,6 +258,7 @@ fn main() {
|
|||
size_constraints: size_limits,
|
||||
time_constraints,
|
||||
show_filesystem_errors: matches.is_present("show-errors"),
|
||||
path_separator,
|
||||
};
|
||||
|
||||
match RegexBuilder::new(&pattern_regex)
|
||||
|
|
|
@ -67,7 +67,21 @@ fn print_entry_colorized(
|
|||
.map(Style::to_ansi_term_style)
|
||||
.unwrap_or(default_style);
|
||||
|
||||
write!(stdout, "{}", style.paint(component.to_string_lossy()))?;
|
||||
let path_string = component.to_string_lossy();
|
||||
|
||||
match config.path_separator {
|
||||
None => write!(stdout, "{}", style.paint(path_string))?,
|
||||
Some(sep) => {
|
||||
let mut path_bytes = path_string.as_bytes().to_vec();
|
||||
for b in &mut path_bytes {
|
||||
if *b == b'/' || (cfg!(windows) && *b == b'\\') {
|
||||
*b = sep;
|
||||
}
|
||||
}
|
||||
let path_string = String::from_utf8_lossy(&path_bytes);
|
||||
write!(stdout, "{}", style.paint(path_string))?
|
||||
}
|
||||
}
|
||||
|
||||
if wants_to_quit.load(Ordering::Relaxed) {
|
||||
writeln!(stdout)?;
|
||||
|
|
Loading…
Reference in a new issue