You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

function pwd_info -a separator -d "Print easy-to-parse information the current working directory"
set -l home ~
set -l git_root (command git rev-parse --show-toplevel 2> /dev/null)
command pwd -P | awk -v home="$home" -v git_root="$git_root" -v separator="$separator" -v dir_length="$fish_prompt_pwd_dir_length" '
function base(string) {
sub(/^\/?.*\//, "", string)
return string
}
function dirs(string, printLastName, prefix, path) {
len = split(string, parts, "/")
for (i = 1; i < len; i++) {
name = dir_length == 0 ? parts[i] : substr(parts[i], 1, dir_length ? dir_length : 1)
if (parts[i] == "" || name == ".") {
continue
}
path = path prefix name
prefix = separator
}
return (printLastName == 1) ? path prefix parts[len] : path
}
function remove(thisString, fromString) {
sub(thisString, "", fromString)
return fromString
}
{
if (git_root == home) {
git_root = ""
}
if (git_root == "") {
printf("%s\n%s\n%s\n",
$0 == home || $0 == "/" ? "" : base($0),
dirs(remove(home, $0)),
"")
} else {
printf("%s\n%s\n%s\n",
base(git_root),
dirs(remove(home, git_root)),
$0 == git_root ? "" : dirs(remove(git_root, $0), 1))
}
}
'
end