Skip to content

Commit

Permalink
Add path-separator option.
Browse files Browse the repository at this point in the history
Example usage: `fd.exe --path-separator /` on windows.
  • Loading branch information
mookid committed Apr 10, 2019
1 parent 35945c4 commit f8fe926
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
9 changes: 9 additions & 0 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,11 @@ 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")
Expand Down Expand Up @@ -249,6 +254,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 \
Expand Down
3 changes: 3 additions & 0 deletions src/internal/opts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>,
}
12 changes: 12 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,17 @@ 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();

Expand Down Expand Up @@ -243,6 +254,7 @@ fn main() {
size_constraints: size_limits,
time_constraints,
show_filesystem_errors: matches.is_present("show-errors"),
path_separator,
};

match RegexBuilder::new(&pattern_regex)
Expand Down
16 changes: 15 additions & 1 deletion src/output.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)?;
Expand Down

0 comments on commit f8fe926

Please sign in to comment.