prompt do tmux não colorindo o PS1

11

Recentemente, decidi alterar minha variável PS1 para acomodar algumas cores bonitas de Solarized para o meu prazer de visualização do terminal. Quando não está em uma sessão tmux, tudo está ótimo! Arco-íris, pôneis, unicórnios e um prompt distinguível! Legal!

O problema está no tmux, no entanto. Eu verifiquei que o valor do PS1 é o que eu espero que seja e o mesmo que quando o tmux não está sendo executado, a saber \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

Todos os meus aliases etc. no meu .bash_profile também estão funcionando conforme o esperado. O tmux também está exibindo cores sem incidentes, com o echo -ne "\033[1;33m hi"comportamento esperado gls --color.

A atual linha relevante no meu .bash_profile é que export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]", embora originalmente eu estava fornecendo um script localizado em um arquivo .bash_prompt para lidar com algumas condicionais, etc. Tentei reverter para a versão mais simples.

A execução bashfará com que o prompt seja colorido, mas deve ser feito em cada painel. export PS1=[that long string I've already posted]não vou.

Meu arquivo .tmux.conf é o seguinte:

set-option -g default-command "reattach-to-user-namespace -l /usr/local/bin/bash"
set -g default-terminal "xterm-256color"
set-window-option -g automatic-rename on
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"

Partes relevantes de .bash_profile:

export TERM="xterm-256color"
if which tmux >/dev/null 2>&1; then
    test -z "$TMUX" && (tmux attach || tmux new-session)
fi

Estou usando o macOS Sierra, o iTerm 2, tentei a versão homebrew atual do bash e o bash do sistema (atualmente está usando o homebrew), tmux 2.4.

Também coloquei touch testing_touch_from_bash_profileno meu .bash_profile durante uma sessão do tmux com dois painéis, abandonei um painel, abri um painel e verifiquei se o arquivo foi realmente criado.

echo $TERMretorna xterm-256color.

Eu assegurei que, ao sair do tmux para testar as alterações nas configurações, saí do tmux e que nenhum processo do tmux esteja sendo executado no sistema atualmente ps -ax | grep tmux.

Estranhamente, a fonte do script .bash_prompt também muda a cor, desde que eu faça isso em cada painel do tmux.

Eu olhei /programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w e tentei adicionar o sinalizador --login após a chamada bash na primeira linha do meu .tmux.conf. Iniciar o tmux with tmux new bashfará com que o primeiro painel seja colorido, mas os painéis subsequentes não.

A variável $ PS1 está sendo respeitada por aparentemente todos os aspectos, exceto para colorir qualquer um dos campos.

Alguém tem alguma ideia?

J. Sagurton
fonte
Tente aspas simples
Kevin
5
A PS1configuração que você postou não tem nenhum comando para alterar as cores. Poste uma configuração real que funcione fora do tmux. Além disso, você deve definir PS1em .bashrc, não em .bash_profile: .bash_profilepode não ser executado em tudo, e as configurações podem ser substituídas mais tarde.
Gilles 'SO- stop be evil'

Respostas:

3

Seu PS1 também me fornece saída em preto e branco.

No entanto, voltar para o meu me dá cor, então você deve descobrir o diferente, eu uso

$ echo $PS1
\[\033[01;31m\]\t \[\033[01;32m\]durrantm \[\033[02;36m\]\h \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"` \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$

O git_branch é uma função do bash que tenho:

git_branch () { 
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

Seu vs. Meu:

insira a descrição da imagem aqui

Isso funciona da mesma maneira no OSX e no Ubuntu

Michael Durrant
fonte
10

Minha solução para esse problema foi definir

force_color_prompt=yes

no meu .bashrc. Agora, meu prompt do tmux tem cores.

Panki
fonte
Não sei por que isso se comporta de maneira diferente no tmux e fora dele, mas isso também fez o truque para mim.
Matt Lacey
Você deve especificar o seguinte: o que você precisa fazer é executar o comando tmuxe, em seguida, dentro de uma sessão do tmux source ~/.bashrc. Você precisa fazer isso em cada painel.
Evaristegd 19/07/19
Obrigado, este trabalho para mim também no Ubuntu 18.04 gnome-terminal.
27719
0

Na minha máquina, a solução é adicionar

set -g default-terminal "xterm-256color"

para ~/.tmux.conf.

Siyuan Ren
fonte