1
0
Fork 0
mirror of https://github.com/romkatv/powerlevel10k.git synced 2024-11-25 13:30:07 +00:00

add an optional parameter to _p9k_upglob to pass glob qualifiers and use it in most cases to restrict globbing to files/directories/links/etc (#2175)

This commit is contained in:
Roman Perepelitsa 2023-01-30 20:25:55 +01:00
parent e7b2bb2372
commit a30145b0f8

View file

@ -233,7 +233,7 @@ function _p9k_fetch_cwd() {
_p9k__parent_mtimes_s="$_p9k__parent_mtimes_i" _p9k__parent_mtimes_s="$_p9k__parent_mtimes_i"
} }
# Usage: _p9k_glob parent_dir_index pattern # Usage: _p9k_glob parent_dir_index pattern [glob_qual]
# #
# parent_dir_index indexes _p9k__parent_dirs. # parent_dir_index indexes _p9k__parent_dirs.
# #
@ -250,12 +250,12 @@ function _p9k_glob() {
fi fi
local -a stat local -a stat
zstat -A stat +mtime -- $dir 2>/dev/null || stat=(-1) zstat -A stat +mtime -- $dir 2>/dev/null || stat=(-1)
local files=($dir/$~2(N:t)) eval 'local files=($dir/$~2('$3'N:t))'
_p9k__glob_cache[$dir/$2]="$stat[1]:$#files" _p9k__glob_cache[$dir/$2]="$stat[1]:$#files"
return $#files return $#files
} }
# Usage: _p9k_upglob pattern # Usage: _p9k_upglob pattern [glob_qual]
# #
# Returns index within _p9k__parent_dirs or 0 if there is no match. # Returns index within _p9k__parent_dirs or 0 if there is no match.
# #
@ -273,7 +273,7 @@ function _p9k_upglob() {
cached[-1]=() cached[-1]=()
local -i i local -i i
for i in ${(@)${cached:|_p9k__parent_mtimes_i}%:*}; do for i in ${(@)${cached:|_p9k__parent_mtimes_i}%:*}; do
_p9k_glob $i $1 && continue _p9k_glob $i "$@" && continue
_p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i"
return i return i
done done
@ -286,7 +286,7 @@ function _p9k_upglob() {
local -i i=1 local -i i=1
fi fi
for ((; i <= $#_p9k__parent_mtimes; ++i)); do for ((; i <= $#_p9k__parent_mtimes; ++i)); do
_p9k_glob $i $1 && continue _p9k_glob $i "$@" && continue
_p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i" _p9k__upsearch_cache[$_p9k__cwd/$1]="${_p9k__parent_mtimes_i[1,i]} $i"
return i return i
done done
@ -1212,7 +1212,7 @@ _p9k_prompt_aws_init() {
################################################################ ################################################################
# Current Elastic Beanstalk environment # Current Elastic Beanstalk environment
prompt_aws_eb_env() { prompt_aws_eb_env() {
_p9k_upglob .elasticbeanstalk && return _p9k_upglob .elasticbeanstalk -/ && return
local dir=$_p9k__parent_dirs[$?] local dir=$_p9k__parent_dirs[$?]
if ! _p9k_cache_stat_get $0 $dir/.elasticbeanstalk/config.yml; then if ! _p9k_cache_stat_get $0 $dir/.elasticbeanstalk/config.yml; then
@ -1304,26 +1304,22 @@ function _p9k_read_file() {
} }
function _p9k_fvm_old() { function _p9k_fvm_old() {
_p9k_upglob fvm && return 1 _p9k_upglob fvm @ && return 1
local fvm=$_p9k__parent_dirs[$?]/fvm local fvm=$_p9k__parent_dirs[$?]/fvm
if [[ -L $fvm ]]; then
if [[ ${fvm:A} == (#b)*/versions/([^/]##)/bin/flutter ]]; then if [[ ${fvm:A} == (#b)*/versions/([^/]##)/bin/flutter ]]; then
_p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%}
return 0 return 0
fi fi
fi
return 1 return 1
} }
function _p9k_fvm_new() { function _p9k_fvm_new() {
_p9k_upglob .fvm && return 1 _p9k_upglob .fvm @ && return 1
local sdk=$_p9k__parent_dirs[$?]/.fvm/flutter_sdk local sdk=$_p9k__parent_dirs[$?]/.fvm/flutter_sdk
if [[ -L $sdk ]]; then
if [[ ${sdk:A} == (#b)*/versions/([^/]##) ]]; then if [[ ${sdk:A} == (#b)*/versions/([^/]##) ]]; then
_p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%} _p9k_prompt_segment prompt_fvm blue $_p9k_color1 FLUTTER_ICON 0 '' ${match[1]//\%/%%}
return 0 return 0
fi fi
fi
return 1 return 1
} }
@ -2196,7 +2192,7 @@ prompt_go_version() {
fi fi
fi fi
if [[ $_p9k__cwd/ != $p/* && $_p9k__cwd_a/ != $p/* ]]; then if [[ $_p9k__cwd/ != $p/* && $_p9k__cwd_a/ != $p/* ]]; then
_p9k_upglob go.mod && return _p9k_upglob go.mod -. && return
fi fi
fi fi
_p9k_prompt_segment "$0" "green" "grey93" "GO_ICON" 0 '' "${v//\%/%%}" _p9k_prompt_segment "$0" "green" "grey93" "GO_ICON" 0 '' "${v//\%/%%}"
@ -2216,7 +2212,7 @@ prompt_history() {
prompt_package() { prompt_package() {
unset P9K_PACKAGE_NAME P9K_PACKAGE_VERSION unset P9K_PACKAGE_NAME P9K_PACKAGE_VERSION
_p9k_upglob package.json && return _p9k_upglob package.json -. && return
local file=$_p9k__parent_dirs[$?]/package.json local file=$_p9k__parent_dirs[$?]/package.json
if ! _p9k_cache_stat_get $0 $file; then if ! _p9k_cache_stat_get $0 $file; then
@ -2321,6 +2317,7 @@ _p9k_vpn_ip_render() {
################################################################ ################################################################
# Segment to display laravel version # Segment to display laravel version
prompt_laravel_version() { prompt_laravel_version() {
# TODO: add a '-/' or '-.' here depending on whether artisan is a directory or a file.
_p9k_upglob artisan && return _p9k_upglob artisan && return
local dir=$_p9k__parent_dirs[$?] local dir=$_p9k__parent_dirs[$?]
local app=$dir/vendor/laravel/framework/src/Illuminate/Foundation/Application.php local app=$dir/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
@ -2432,7 +2429,7 @@ function _p9k_cached_cmd() {
################################################################ ################################################################
# Segment to diplay Node version # Segment to diplay Node version
prompt_node_version() { prompt_node_version() {
_p9k_upglob package.json _p9k_upglob package.json -.
local -i idx=$? local -i idx=$?
if (( idx )); then if (( idx )); then
_p9k_cached_cmd 0 $_p9k__parent_dirs[idx]/package.json node --version || return _p9k_cached_cmd 0 $_p9k__parent_dirs[idx]/package.json node --version || return
@ -2612,7 +2609,7 @@ prompt_nodenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .node-version _p9k_upglob .node-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.node-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.node-version; then
(( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_NODENV_SOURCES[(I)local]} )) || return
@ -2648,11 +2645,11 @@ _p9k_prompt_nodenv_init() {
prompt_dotnet_version() { prompt_dotnet_version() {
if (( _POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY )); then if (( _POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY )); then
_p9k_upglob 'project.json|global.json|packet.dependencies|*.csproj|*.fsproj|*.xproj|*.sln' && return _p9k_upglob 'project.json|global.json|packet.dependencies|*.csproj|*.fsproj|*.xproj|*.sln' -. && return
fi fi
local cfg local cfg
_p9k_upglob global.json || cfg=$_p9k__parent_dirs[$?]/global.json _p9k_upglob global.json -. || cfg=$_p9k__parent_dirs[$?]/global.json
_p9k_cached_cmd 0 "$cfg" dotnet --version || return _p9k_cached_cmd 0 "$cfg" dotnet --version || return
_p9k_prompt_segment "$0" "magenta" "white" 'DOTNET_ICON' 0 '' "$_p9k__ret" _p9k_prompt_segment "$0" "magenta" "white" 'DOTNET_ICON' 0 '' "$_p9k__ret"
} }
@ -2675,7 +2672,7 @@ instant_prompt_os_icon() { prompt_os_icon; }
# Segment to display PHP version number # Segment to display PHP version number
prompt_php_version() { prompt_php_version() {
if (( _POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY )); then if (( _POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY )); then
_p9k_upglob 'composer.json|*.php' && return _p9k_upglob 'composer.json|*.php' -. && return
fi fi
_p9k_cached_cmd 0 '' php --version || return _p9k_cached_cmd 0 '' php --version || return
[[ $_p9k__ret == (#b)(*$'\n')#'PHP '([[:digit:].]##)* ]] || return [[ $_p9k__ret == (#b)(*$'\n')#'PHP '([[:digit:].]##)* ]] || return
@ -2782,7 +2779,7 @@ prompt_rbenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .ruby-version _p9k_upglob .ruby-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.ruby-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.ruby-version; then
(( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_RBENV_SOURCES[(I)local]} )) || return
@ -2845,7 +2842,7 @@ prompt_scalaenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .scala-version _p9k_upglob .scala-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.scala-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.scala-version; then
(( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_SCALAENV_SOURCES[(I)local]} )) || return
@ -2903,7 +2900,7 @@ prompt_phpenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .php-version _p9k_upglob .php-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.php-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.php-version; then
(( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_PHPENV_SOURCES[(I)local]} )) || return
@ -2964,7 +2961,7 @@ prompt_luaenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .lua-version _p9k_upglob .lua-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.lua-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.lua-version; then
(( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_LUAENV_SOURCES[(I)local]} )) || return
@ -3025,7 +3022,7 @@ prompt_jenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .java-version _p9k_upglob .java-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.java-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.java-version; then
(( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_JENV_SOURCES[(I)local]} )) || return
@ -3086,7 +3083,7 @@ prompt_plenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .perl-version _p9k_upglob .perl-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.perl-version; then if (( idx )) && _p9k_read_word $_p9k__parent_dirs[idx]/.perl-version; then
(( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_PLENV_SOURCES[(I)local]} )) || return
@ -3124,7 +3121,7 @@ _p9k_prompt_plenv_init() {
prompt_perlbrew() { prompt_perlbrew() {
if (( _POWERLEVEL9K_PERLBREW_PROJECT_ONLY )); then if (( _POWERLEVEL9K_PERLBREW_PROJECT_ONLY )); then
_p9k_upglob 'cpanfile|.perltidyrc|(|MY)META.(yml|json)|(Makefile|Build).PL|*.(pl|pm|t|pod)' && return _p9k_upglob 'cpanfile|.perltidyrc|(|MY)META.(yml|json)|(Makefile|Build).PL|*.(pl|pm|t|pod)' -. && return
fi fi
local v=$PERLBREW_PERL local v=$PERLBREW_PERL
@ -3165,7 +3162,7 @@ instant_prompt_root_indicator() { prompt_root_indicator; }
prompt_rust_version() { prompt_rust_version() {
unset P9K_RUST_VERSION unset P9K_RUST_VERSION
if (( _POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY )); then if (( _POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY )); then
_p9k_upglob Cargo.toml && return _p9k_upglob Cargo.toml -. && return
fi fi
local rustc=$commands[rustc] toolchain deps=() local rustc=$commands[rustc] toolchain deps=()
if (( $+commands[ldd] )); then if (( $+commands[ldd] )); then
@ -3198,7 +3195,7 @@ prompt_rust_version() {
fi fi
fi fi
local -A overrides=($_p9k__cache_val) local -A overrides=($_p9k__cache_val)
_p9k_upglob rust-toolchain _p9k_upglob rust-toolchain -.
local dir=$_p9k__parent_dirs[$?] local dir=$_p9k__parent_dirs[$?]
local -i n m=${dir[(I)/]} local -i n m=${dir[(I)/]}
local pair local pair
@ -4321,7 +4318,7 @@ function _p9k_pyenv_compute() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .python-version _p9k_upglob .python-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.python-version python-; then if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.python-version python-; then
(( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_PYENV_SOURCES[(I)local]} )) || return
@ -4401,7 +4398,7 @@ prompt_goenv() {
fi fi
fi fi
if [[ -z $_p9k__ret ]]; then if [[ -z $_p9k__ret ]]; then
_p9k_upglob .go-version _p9k_upglob .go-version -.
local -i idx=$? local -i idx=$?
if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.go-version go-; then if (( idx )) && _p9k_read_pyenv_like_version_file $_p9k__parent_dirs[idx]/.go-version go-; then
(( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return (( ${_POWERLEVEL9K_GOENV_SOURCES[(I)local]} )) || return
@ -4586,7 +4583,7 @@ _p9k_prompt_dropbox_init() {
# print Java version number # print Java version number
prompt_java_version() { prompt_java_version() {
if (( _POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY )); then if (( _POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY )); then
_p9k_upglob 'pom.xml|build.gradle.kts|build.sbt|deps.edn|project.clj|build.boot|*.(java|class|jar|gradle|clj|cljc)' && return _p9k_upglob 'pom.xml|build.gradle.kts|build.sbt|deps.edn|project.clj|build.boot|*.(java|class|jar|gradle|clj|cljc)' -. && return
fi fi
local java=$commands[java] local java=$commands[java]
@ -5631,7 +5628,7 @@ prompt_haskell_stack() {
_p9k_haskell_stack_version $STACK_YAML _p9k_haskell_stack_version $STACK_YAML
else else
(( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local|global]} )) || return (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)local|global]} )) || return
if _p9k_upglob stack.yaml; then if _p9k_upglob stack.yaml -.; then
(( _POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) || return (( _POWERLEVEL9K_HASKELL_STACK_PROMPT_ALWAYS_SHOW )) || return
(( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)global]} )) || return (( ${_POWERLEVEL9K_HASKELL_STACK_SOURCES[(I)global]} )) || return
_p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml _p9k_haskell_stack_version ${STACK_ROOT:-~/.stack}/global-project/stack.yaml
@ -8358,7 +8355,7 @@ _p9k_must_init() {
[[ $sig == $_p9k__param_sig ]] && return 1 [[ $sig == $_p9k__param_sig ]] && return 1
_p9k_deinit _p9k_deinit
fi fi
_p9k__param_pat=$'v140\1'${(q)ZSH_VERSION}$'\1'${(q)ZSH_PATCHLEVEL}$'\1' _p9k__param_pat=$'v141\1'${(q)ZSH_VERSION}$'\1'${(q)ZSH_PATCHLEVEL}$'\1'
_p9k__param_pat+=$__p9k_force_term_shell_integration$'\1' _p9k__param_pat+=$__p9k_force_term_shell_integration$'\1'
_p9k__param_pat+=$'${#parameters[(I)POWERLEVEL9K_*]}\1${(%):-%n%#}\1$GITSTATUS_LOG_LEVEL\1' _p9k__param_pat+=$'${#parameters[(I)POWERLEVEL9K_*]}\1${(%):-%n%#}\1$GITSTATUS_LOG_LEVEL\1'
_p9k__param_pat+=$'$GITSTATUS_ENABLE_LOGGING\1$GITSTATUS_DAEMON\1$GITSTATUS_NUM_THREADS\1' _p9k__param_pat+=$'$GITSTATUS_ENABLE_LOGGING\1$GITSTATUS_DAEMON\1$GITSTATUS_NUM_THREADS\1'