brson/multirust

Current toolchain name for PS1 prompt

aetherknight opened this issue · 0 comments

I like to include profile information in my bash shell prompt about the current directory/project (eg, current git branch, rbenv ruby version, etc.). I would like to be able to indicate which multirust toolchain is currently active in a succinct fashion (eg, "nightly", "stable").

Currently, the only way to determine which toolchain would be run is to parse output from multirust show-override:

$ multirust show-override
multirust: override toolchain: nightly
multirust: override location: /Users/aetherkn/.multirust/toolchains/nightly
multirust: override reason: directory override for '/Users/aetherkn/src/rust/games-for-redox'

rustc 1.9.0-nightly (b12b4e4e3 2016-03-17)
cargo 0.10.0-nightly (ece4e96 2016-03-17)

I'm currently parsing it with something like:

    __rust_version() {
        test -r Cargo.toml || return # Detect a Rust project
        type -p multirust > /dev/null || return

        local v=""
        local overrideinfo=$(multirust show-override)
        local firstline=$(echo "${overrideinfo}" | head -n1)
        if [[ "$firstline" =~ "override toolchain:" ]] ; then
            v=${firstline#*override toolchain: }
        else
            local secondline=$(echo "${overrideinfo}" | head -n2 | tail -n1)
            v=${secondline#*default toolchain: }
        fi

        if [ ! -z "$v" ] ; then
            echo "|⚙ ${v}"
        fi
    }

However, this could be greatly simplified (and would be less brittle to changes in multirust's output) if multirust provided a sub-command or a flag to compute the the current toolchain name. It could also avoid calling rustc and cargo to get their versions. It could simplify to something like:

    __rust_version() {
        test -r Cargo.toml || return # Detect a Rust project
        type -p multirust > /dev/null || return

        local v=$(multirust show-toolchain)

        if [ ! -z "$v" ] ; then
            echo "|⚙ ${v}"
        fi
    }