tmux nie koloruje monitu PS1

11

Niedawno postanowiłem zmienić zmienną PS1, aby dostosować ją do całkiem ładnych kolorów Solarizowanych dla mojej przyjemności oglądania na terminalu. Gdy nie ma sesji tmux, wszystko jest świetnie! Tęcze, kucyki, jednorożce i wyróżniająca się zachęta! Fajne!

Problem leży jednak w tmux. Sprawdziłem, że wartość PS1 jest taka, jakiej się spodziewam i taka sama, jak wtedy, gdy tmux nie działa, a mianowicie \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\].

Wszystkie moje aliasy itp. W moim .bash_profile również działają zgodnie z oczekiwaniami. tmux wyświetla również kolory bez incydentów, echo -ne "\033[1;33m hi"zachowując się tak , jak się spodziewano gls --color.

Obecny odpowiedni wiersz w moim export PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]"pliku .bash_profile to , chociaż pierwotnie szukałem skryptu znajdującego się w pliku .bash_prompt do obsługi niektórych warunków warunkowych itp. Próbowałem przywrócić prostszą wersję.

Wykonanie bashspowoduje kolorowanie monitu, ale należy to zrobić w każdym okienku. export PS1=[that long string I've already posted]nie będzie.

Mój plik .tmux.conf wygląda następująco:

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

Odpowiednie części .bash_profile:

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

Używam macOS Sierra, iTerm 2, wypróbowałem zarówno bieżącą wersję homebrew bash, jak i systemową (obecnie używa homebrew), tmux 2.4.

Umieściłem również touch testing_touch_from_bash_profilew moim .bash_profile podczas sesji tmux z dwoma panelami, zabiłem jeden panel, otworzyłem panel i sprawdziłem, czy plik faktycznie został utworzony.

echo $TERMzwraca xterm-256color.

Upewniłem się, że kiedy wychodzę z Tmuxa, aby przetestować ustawienia, zmieniłem to, że wyszedłem z Tmux i że żaden proces tmux nie jest aktualnie uruchomiony w systemie ps -ax | grep tmux.

Co dziwne, pozyskiwanie skryptu .bash_prompt zmienia również kolor, o ile robię to w ramach każdego panelu tmux.

Obejrzałem /programming/21005966/tmux-prompt-not-following-normal-bash-prompt-ps1-w i spróbowałem dodać flagę --login po wywołaniu bash w pierwszym wierszu z mojego .tmux.conf. Uruchomienie tmux z tmux new bashspowoduje, że pierwszy panel zostanie pokolorowany, ale kolejne panele nie.

Zmienna $ PS1 jest honorowana za pozornie wszystkie aspekty oprócz kolorowania któregokolwiek z pól.

Czy ktoś ma jakieś pomysły?

J. Sagurton
źródło
Wypróbuj pojedyncze cytaty
Kevin
5
W PS1opublikowanym ustawieniu nie ma polecenia zmiany kolorów. Opublikuj rzeczywiste ustawienie, które działa poza Tmux. Ponadto powinieneś ustawić PS1w .bashrc, a nie w .bash_profile: .bash_profilemoże w ogóle nie zostać wykonany, a ustawienia mogą zostać później zastąpione.
Gilles „SO- przestań być zły”

Odpowiedzi:

3

Twój PS1 daje mi również czarno-biały obraz.

Jednak przejście z powrotem do mojego daje mi kolor, więc powinieneś być w stanie dowiedzieć się inaczej, używam

$ 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 jest funkcją bash, którą mam, która jest:

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

Twój vs. Mój:

wprowadź opis zdjęcia tutaj

To działa tak samo w OSX i Ubuntu

Michael Durrant
źródło
11

Moim rozwiązaniem tego problemu było ustawienie

force_color_prompt=yes

w moim .bashrc. Teraz mój monit Tmux ma kolor.

Panki
źródło
Nie jestem pewien, dlaczego zachowuje się inaczej w tmuxie niż poza nim, ale to też załatwiło sprawę dla mnie.
Matt Lacey
I tusz powinieneś określić to: musisz uruchomić polecenie tmux, a następnie uruchomić sesję tmux source ~/.bashrc. Musisz to zrobić w każdym panelu.
evaristegd
Dzięki, ta praca dla mnie działa także na gnome-terminalu Ubuntu 18.04.
intijk
2

Na mojej maszynie rozwiązaniem jest dodanie

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

do ~/.tmux.conf.

Siyuan Ren
źródło