根据当前文件夹更改 Powerlevel9k 段

Change Powerlevel9k segment based on current folder

我正在尝试自定义我的 zsh 终端,以我想要的方式获得大部分内容,但随后我 运行 进入一个页面,展示如何制作语言段以显示 Javascript、Python,等等。我在我的 .zshrc 文件中尝试了以下代码:

lang_segment () {
    dir="$(dirname "$PWD")"
    if [[ $dir == *"Dev/python"* ]] ; then 
        echo -n "%{%F{yellow}%K{blue}'\uf81f' Python}"
    fi
    if [[ $dir == *"Dev/javascript"* ]] ; then
        echo -n "%{%F{black}%K{yellow}'\ue781' Javascript}"
    fi

}

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon user dir custom_lang_segment vcs)
POWERLEVEL9K_CUSTOM_LANG_SEGMENT="lang_segment"

我正在使用 powerlevel9k 主题。我的想法是,当您 cd 进入 dev/python 文件夹内的文件夹时,将显示一个带有 Python 文本、图标和配色方案的片段,与 dev/javascript 文件夹或任何语言文件夹相同为此使用。事实上,什么也没有出现。所以我的问题是,是否可以这样做?

经过一些修补我设法解决了这个问题,代码如下所示:

prompt_lang_segment () {
    # Looks up the folder path + name
    dir="$( cd "$(dirname "[=10=]")" ; pwd -P )"
    # Checks if it is the desired language/framework folder, in this case, python
    if [[ $dir == *"Dev/python"* ]] ; then 
        content="\uf81f Python%f"
        "_prompt_segment" "[=10=]" "" "blue" "yellow" "$content" "#"
    fi
    if [[ $dir == *"Dev/js"* ]] ; then
        content="\ue781 Javascript%f"
        "_prompt_segment" "[=10=]" "" "yellow" "black" "$content" "#"
    fi

...
}

# Added the lang_segment to the left prompt
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon user dir lang_segment vcs)

我必须在函数上使用提示(prompt_lang_segment 而不是仅 lang_segment)创建一个自定义段并使用它我必须更改此:

echo -n "%{%F{black}%K{yellow}'\ue781' Javascript}" 

进入默认的 powerlevel9k 命令以显示段:

"_prompt_segment" "[=14=]" "" "yellow" "black" "$content" "#"

所以我为每个 language/framework 添加了一个 if 语句,此时我有一个文件夹,我还必须将文件夹名称 javascript 更改为 js,因为它同时显示 java脚本和java段。

此配置适用于 language/framework 文件夹及其所有子文件夹。 这是最终结果: