tmux ne colorise pas l'invite PS1

11

J'ai récemment décidé de changer ma variable PS1 pour accueillir de jolies couleurs Solarized pour mon plaisir de visualisation du terminal. Lorsqu'il n'est pas dans une session tmux, tout est super! Arc-en-ciel, poneys, licornes et une invite distincte! Cool!

Le problème est cependant dans tmux. J'ai vérifié que la valeur de PS1 est ce que je m'attends à ce qu'elle soit et la même que lorsque tmux ne fonctionne pas, à savoir \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

Tous mes alias, etc. dans mon .bash_profile fonctionnent également comme prévu. tmux affiche également des couleurs sans incident, comme il echo -ne "\033[1;33m hi"se comporte comme prévu gls --color.

La ligne pertinente actuelle dans mon .bash_profile est export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]", bien qu'à l'origine je cherchais un script situé dans un fichier .bash_prompt pour gérer certaines conditions, etc. J'ai essayé de revenir à la version plus simple.

L'exécution bashprovoquera la coloration de l'invite, mais doit être effectuée dans chaque volet. export PS1=[that long string I've already posted]Ne fera pas.

Mon .tmux.conf est le suivant:

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}"

Parties pertinentes de .bash_profile:

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

J'utilise macOS Sierra, iTerm 2, j'ai essayé à la fois la version homebrew actuelle de bash et le système bash (il utilise actuellement l'homebrew), tmux 2.4.

J'ai également placé touch testing_touch_from_bash_profiledans mon .bash_profile lors d'une session tmux avec deux volets, tué un volet, ouvert un volet et vérifié que le fichier a bien été créé.

echo $TERMretourne xterm-256color.

Je me suis assuré qu'en quittant tmux pour tester les changements de paramètres, j'ai quitté tmux et qu'aucun processus tmux n'est actuellement en cours d'exécution sur le système via ps -ax | grep tmux.

Curieusement, le sourcing du script .bash_prompt change également la couleur tant que je le fais dans chaque volet tmux.

J'ai regardé /programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w et essayé d'ajouter le drapeau --login après l'appel bash dans la première ligne de mon .tmux.conf. Le lancement de tmux avec tmux new bashentraînera la coloration du premier volet, mais pas les volets suivants.

La variable $ PS1 est honorée pour apparemment tous les aspects sauf la colorisation de l'un des champs.

Quelqu'un a des idées?

J. Sagurton
la source
Essayez des guillemets simples
Kevin
5
Le PS1paramètre que vous avez publié n'a aucune commande pour changer les couleurs. Publiez un paramètre réel qui fonctionne en dehors de tmux. En outre, vous devez définir PS1in .bashrc, not in .bash_profile: il se .bash_profilepeut que l'exécution ne soit pas exécutée du tout et que les paramètres puissent être remplacés ultérieurement.
Gilles 'SO- arrête d'être méchant'

Réponses:

3

Votre PS1 me donne également une sortie en noir et blanc.

Cependant, revenir au mien me donne de la couleur, vous devriez donc être en mesure de comprendre les différents, j'utilise

$ 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\$

git_branch est une fonction bash que j'ai:

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

Le vôtre contre le mien:

entrez la description de l'image ici

Cela fonctionne de la même manière sur OSX et Ubuntu

Michael Durrant
la source
10

Ma solution à ce problème était de définir

force_color_prompt=yes

dans mon .bashrc. Maintenant, mon invite tmux a une couleur.

Panki
la source
Je ne sais pas pourquoi cela se comporte différemment dans tmux à l'extérieur, mais cela a aussi fait l'affaire pour moi.
Matt Lacey
À l'encre, vous devez spécifier ceci: ce que vous avez à faire est d'exécuter la commande tmux, puis d'exécuter une session tmux source ~/.bashrc. Vous devez le faire dans chaque panneau.
evaristegd
Merci, ce travail pour moi aussi sur Ubuntu 18.04 gnome-terminal.
intijk
1

Sur ma machine la solution est d'ajouter

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

à ~/.tmux.conf.

Siyuan Ren
la source