Posso fazer a variável de esquema de cores do meu terminal no meu cwd?

0

Auto explicativo, por exemplo, quando eu cd Desktop a resposta é nominal além do termo esquema de cores que muda da paleta atribuída a ~ para um atribuído a ~/Desktop

    
por kpie 01.05.2017 / 05:59

2 respostas

0

Isso está relacionado à minha outra resposta, mas usa uma sequência de escape ANSI para ativar ou desativar o modo de vídeo reverso apenas para o terminal atual.

Coloque isso no seu ~/.bashrc :

_terminal_reverse_video_cwd(){
    if [[ $PWD == ~/Desktop ||
          $PWD == ~/Desktop/* ]]
    then
        printf '\e[?5h' # Reverse
    else
        printf '\e[?5l' # Non-reverse
    fi
}

PROMPT_COMMAND="_terminal_reverse_video_cwd"

Existem dois problemas com o modo de vídeo reverso:

  1. Ele só pode estar ativado ou desativado, portanto, esse método funciona apenas para um diretório
  2. Pode ser feio / difícil de ler
por wjandrea 11.05.2017 / 21:40
2

Você poderia ter o $PROMPT_COMMAND alterando as configurações de cores do terminal, mas mudaria o esquema de cores em todas as janelas do terminal, não apenas no atual.

Para o 14.04, coloque o abaixo em seu ~/.bashrc . Você pode querer fazer o backup de suas configurações atuais do gconf antes de continuar.

_terminal_colors(){
    local dir="/apps/gnome-terminal/profiles/$TERMINAL_PROFILE"

    local bg_default="#30300A0A2424"
    local bg_xterm="#147A147A147A"
    local bg

    local fg_default="#FFFFFFFFFFFF"
    local fg_xterm="#EEEEEEEEECEC"
    local fg

    local palette_default="#2E2E34343636:#CCCC00000000:#4E4E9A9A0606:#C4C4A0A00000:#34346565A4A4:#757550507B7B:#060698209A9A:#D3D3D7D7CFCF:#555557575353:#EFEF29292929:#8A8AE2E23434:#FCFCE9E94F4F:#72729F9FCFCF:#ADAD7F7FA8A8:#3434E2E2E2E2:#EEEEEEEEECEC"
    local palette_xterm="#000000000000:#CDCB00000000:#0000CDCB0000:#CDCBCDCB0000:#1E1A908FFFFF:#CDCB0000CDCB:#0000CDCBCDCB:#E5E2E5E2E5E2:#4CCC4CCC4CCC:#FFFF00000000:#0000FFFF0000:#FFFFFFFF0000:#46458281B4AE:#FFFF0000FFFF:#0000FFFFFFFF:#FFFFFFFFFFFF"
    local palette

    if [[ $PWD == ~/Desktop ||
          $PWD == ~/Desktop/* ]]
    then
        palette="$palette_xterm"
        bg="$bg_xterm"
        fg="$fg_xterm"
    else
        palette="$palette_default"
        bg="$bg_default"
        fg="$fg_default"
    fi

    gconftool-2 --set "$dir/palette" --type=string "$palette"
    gconftool-2 --set "$dir/background_color" --type=string "$bg"
    gconftool-2 --set "$dir/foreground_color" --type=string "$fg"
}

TERMINAL_PROFILE="" # Your profile here.
PROMPT_COMMAND="_terminal_colors"

Para o 16.04 e mais recente, você precisará adaptar os comandos para usar dconf em vez de gconftool-2 . É uma sintaxe e estrutura de diretórios totalmente diferentes.

Solução mais simples

Assim, dada a complexidade do acima, acho que é mais fácil apenas definir a cor do pwd no prompt do PS1. Isso é compatível com versões anteriores e posteriores e, provavelmente, também entre plataformas:

_PROMPT_pwd_color(){
    if [[ $PWD == ~/Desktop ||
          $PWD == ~/Desktop/* ]]
    then
        printf "\e[1;31m" # Red
    else
        printf "\e[1;32m" # Green
    fi
}

PS1='${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u@\h\[\e[m\]:\[$(_PROMPT_pwd_color)\]\w\[\e[m\]\n\$ '
    
por wjandrea 01.05.2017 / 07:33