From ddecb91a0f3963eb11d00231da31c8736930bc28 Mon Sep 17 00:00:00 2001 From: romkatv Date: Mon, 13 Jan 2020 15:13:44 +0100 Subject: [PATCH 1/2] rust_version: support rustup; see #418 --- internal/p10k.zsh | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/internal/p10k.zsh b/internal/p10k.zsh index aa9fbdc..8f56afe 100644 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -2329,12 +2329,10 @@ prompt_rust_version() { dir=${dir:h} done fi - local rustc=$commands[rustc] so + local rustc=${commands[rustc]:A} toolchain deps=() if (( $+commands[ldd] )); then - if _p9k_cache_stat_get $0_so $rustc; then - so=$_p9k_cache_val[1] - else - local line match + if ! _p9k_cache_stat_get $0_so $rustc; then + local line match so for line in "${(@f)$(ldd $rustc 2>/dev/null)}"; do [[ $line == (#b)[[:space:]]#librustc_driver[^[:space:]]#.so' => '(*)' (0x'[[:xdigit:]]#')' ]] || continue so=$match[1] @@ -2342,8 +2340,36 @@ prompt_rust_version() { done _p9k_cache_stat_set "$so" fi + deps+=$_p9k_cache_val[1] fi - if ! _p9k_cache_stat_get $0_v $rustc $so; then + if (( $+commands[rustup] )); then + local rustup=${commands[rustup]:A} + local rustup_home=${RUSTUP_HOME:-~/.rustup} + local cfg=($rustup_home/settings.toml(.N)) + deps+=($cfg $rustup_home/update-hashes/*(.N)) + if [[ -z ${toolchain::=$RUSTUP_TOOLCHAIN} ]]; then + if ! _p9k_cache_stat_get $0_overrides $rustup $cfg; then + local lines=(${(f)"$(rustup override list 2>/dev/null)"}) + local keys=(/ ${lines%%[[:space:]]#[^[:space:]]#}) + local vals=(_ ${lines##*[[:space:]]}) + _p9k_cache_stat_set ${keys:^vals} + fi + local -A overrides=($_p9k_cache_val) + local dir=$_p9k_pwd_a + while true; do + if (( $+overrides[$dir] )); then + toolchain=$overrides[$dir] + break + fi + if [[ -r $dir/rust-toolchain ]]; then + { toolchain="$(<$dir/rust-toolchain)" } 2>/dev/null + break + fi + dir=${dir:h} + done + fi + fi + if ! _p9k_cache_stat_get $0_v$toolchain $rustc $deps; then _p9k_cache_stat_set "$($rustc --version 2>/dev/null)" fi local v=${${_p9k_cache_val[1]#rustc }%% *} From 1cf99b34e550e0294cb5d300bbf5b4eb331687aa Mon Sep 17 00:00:00 2001 From: romkatv Date: Mon, 13 Jan 2020 15:17:29 +0100 Subject: [PATCH 2/2] give content expansion for rust_version access to full version through $P9K_RUST_VERSION; see #418 --- internal/p10k.zsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/p10k.zsh b/internal/p10k.zsh index 8f56afe..400a53f 100644 --- a/internal/p10k.zsh +++ b/internal/p10k.zsh @@ -2320,6 +2320,7 @@ instant_prompt_root_indicator() { prompt_root_indicator; } ################################################################ # Segment to display Rust version number prompt_rust_version() { + unset P9K_RUST_VERSION (( $+commands[rustc] )) || return if (( _POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY )); then local dir=$_p9k_pwd_a @@ -2374,6 +2375,7 @@ prompt_rust_version() { fi local v=${${_p9k_cache_val[1]#rustc }%% *} [[ -n $v ]] || return + typeset -g P9K_RUST_VERSION=$_p9k_cache_val[1] _p9k_prompt_segment "$0" "darkorange" "$_p9k_color1" 'RUST_ICON' 0 '' "${v//\%/%%}" }