mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-16 09:50:06 +00:00
Merge pull request #596 from eumiro/truncate_to_unique
Add TRUNCATE_TO_UNIQUE shortening dir strategy
This commit is contained in:
commit
9f4faf7f21
3 changed files with 43 additions and 0 deletions
|
@ -367,6 +367,7 @@ Customizations available are:
|
||||||
|`truncate_from_right`|Just leaves the beginning of a folder name untouched. E.g. your folders will be truncated like so: "/ro../Pr../office". How many characters will be untouched is controlled by `POWERLEVEL9K_SHORTEN_DIR_LENGTH`.|
|
|`truncate_from_right`|Just leaves the beginning of a folder name untouched. E.g. your folders will be truncated like so: "/ro../Pr../office". How many characters will be untouched is controlled by `POWERLEVEL9K_SHORTEN_DIR_LENGTH`.|
|
||||||
|`truncate_with_package_name`|Search for a `package.json` or `composer.json` and prints the `name` field to abbreviate the directory path. The precedence and/or files could be set by `POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json)`. If you have [jq](https://stedolan.github.io/jq/) installed, it will dramatically improve the speed of this strategy.|
|
|`truncate_with_package_name`|Search for a `package.json` or `composer.json` and prints the `name` field to abbreviate the directory path. The precedence and/or files could be set by `POWERLEVEL9K_DIR_PACKAGE_FILES=(package.json composer.json)`. If you have [jq](https://stedolan.github.io/jq/) installed, it will dramatically improve the speed of this strategy.|
|
||||||
|`truncate_with_folder_marker`|Search for a file that is specified by `POWERLEVEL9K_SHORTEN_FOLDER_MARKER` and truncate everything before that (if found, otherwise stop on $HOME and ROOT).|
|
|`truncate_with_folder_marker`|Search for a file that is specified by `POWERLEVEL9K_SHORTEN_FOLDER_MARKER` and truncate everything before that (if found, otherwise stop on $HOME and ROOT).|
|
||||||
|
|`truncate_to_unique`|Parse all parent path components and truncate them to the shortest unique length. If you copy & paste the result to a shell, after hitting `TAB` it should expand to the original path unambiguously.|
|
||||||
|
|
||||||
For example, if you wanted the truncation behavior of the `fish` shell, which
|
For example, if you wanted the truncation behavior of the `fish` shell, which
|
||||||
truncates `/usr/share/plasma` to `/u/s/plasma`, you would use the following:
|
truncates `/usr/share/plasma` to `/u/s/plasma`, you would use the following:
|
||||||
|
|
|
@ -780,6 +780,27 @@ prompt_dir() {
|
||||||
# the current path.
|
# the current path.
|
||||||
current_path=$current_path${PWD#${last_marked_folder}*}
|
current_path=$current_path${PWD#${last_marked_folder}*}
|
||||||
;;
|
;;
|
||||||
|
truncate_to_unique)
|
||||||
|
# for each parent path component find the shortest unique beginning
|
||||||
|
# characters sequence. Source: https://stackoverflow.com/a/45336078
|
||||||
|
paths=(${(s:/:)PWD})
|
||||||
|
cur_path='/'
|
||||||
|
cur_short_path='/'
|
||||||
|
for directory in ${paths[@]}
|
||||||
|
do
|
||||||
|
cur_dir=''
|
||||||
|
for (( i=0; i<${#directory}; i++ )); do
|
||||||
|
cur_dir+="${directory:$i:1}"
|
||||||
|
matching=("$cur_path"/"$cur_dir"*/)
|
||||||
|
if [[ ${#matching[@]} -eq 1 ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cur_short_path+="$cur_dir/"
|
||||||
|
cur_path+="$directory/"
|
||||||
|
done
|
||||||
|
current_path="${cur_short_path: : -1}"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
current_path="$(print -P "%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c")"
|
current_path="$(print -P "%$((POWERLEVEL9K_SHORTEN_DIR_LENGTH+1))(c:$POWERLEVEL9K_SHORTEN_DELIMITER/:)%${POWERLEVEL9K_SHORTEN_DIR_LENGTH}c")"
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -406,4 +406,25 @@ function testOmittingFirstCharacterWorksWithChangingPathSeparatorAndRightTruncat
|
||||||
unset POWERLEVEL9K_SHORTEN_STRATEGY
|
unset POWERLEVEL9K_SHORTEN_STRATEGY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testTruncateToUniqueWorks() {
|
||||||
|
POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER=true
|
||||||
|
POWERLEVEL9K_DIR_PATH_SEPARATOR='xXx'
|
||||||
|
POWERLEVEL9K_SHORTEN_DIR_LENGTH=2
|
||||||
|
POWERLEVEL9K_SHORTEN_STRATEGY='truncate_to_unique'
|
||||||
|
mkdir -p /tmp/powerlevel9k-test/adam/devl
|
||||||
|
mkdir -p /tmp/powerlevel9k-test/alice/devl
|
||||||
|
mkdir -p /tmp/powerlevel9k-test/alice/docs
|
||||||
|
mkdir -p /tmp/powerlevel9k-test/bob/docs
|
||||||
|
cd /tmp/powerlevel9k-test/alice/devl
|
||||||
|
|
||||||
|
assertEquals "%K{blue} %F{black}txXxpxXxalxXxde %k%F{blue}%f " "$(build_left_prompt)"
|
||||||
|
|
||||||
|
cd -
|
||||||
|
rm -fr /tmp/powerlevel9k-test
|
||||||
|
unset POWERLEVEL9K_DIR_PATH_SEPARATOR
|
||||||
|
unset POWERLEVEL9K_DIR_OMIT_FIRST_CHARACTER
|
||||||
|
unset POWERLEVEL9K_SHORTEN_DIR_LENGTH
|
||||||
|
unset POWERLEVEL9K_SHORTEN_STRATEGY
|
||||||
|
}
|
||||||
|
|
||||||
source shunit2/source/2.1/src/shunit2
|
source shunit2/source/2.1/src/shunit2
|
||||||
|
|
Loading…
Reference in a new issue