Gnome-терминал не работает должным образом с экранами-256 цветов

Сегодня я заметил, что у меня нет поддержки 256 цветов в Weechat. Я решил, что это будет быстрое решение. Это не так.

Первое, что я погуглил, было то, как проверить поддержку цвета в терминале. Я установил colortest на моей локальной машине, и когда я запускаю его, он показывает мне 256 цветов. Тем не менее, когда я бегу echo $TERM это продолжало показывать мне xterm,

Поскольку я не знаю подробностей обо всех этих вещах, я попытался настроить его так, чтобы он соответствовал каждому учебнику по теме. Они все говорят, что это должно дать мне screen-256colors,

Первое, что я сделал, это добавил это в мой .zshrc файл:

# If the $term variable is xterm, change it to 256 colors!
if [ "$TERM" = "xterm" ]; then
    # No it isn't, it's gnome-terminal
    export TERM="xterm-256color"
fi

Это говорит xterm-256colors вместо screen-256colors, Это нормально, какой-то учебник сказал мне сделать это.

Я начинаю новый терминал, echo $TERM и я замечаю, что оно действительно установлено. Зажги tmux и посмотреть, что это говорит мне, когда я печатаю echo $TERM, Это говорит screen, Так что это должно показать мне screen-256colors чтобы он работал правильно в выходные. Итак, затем я попытался изменить xterm-256colors в моем .zshrc подать в screen-256colors но когда я делаю это, я получаю искаженный вывод. Смотрите скриншот.

введите описание здесь

Итак, затем я погуглил, как изменить переменную для tmux. Я нашел эту ссылку. Он показывает возможность настроить tmux на использование 256 цветов. Эта опция показана практически во всех уроках.

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

Я попробовал, но это ничего не изменило. Так что я погуглил еще немного и нашел этот вопрос. Цитата:

Tmux довольно требователен к правильной настройке терминала. Если вы можете, установите значение термина в конфигурации терминала gnome, а не в вашем.bashrc. В противном случае окружите эти настройки галочкой для " screen " или же " screen-256color "СРОК, и не сбрасывайте их в этом случае.

Хорошо, я понимаю, что вне tmux Я не должен использовать screen* значения для $TERM, Это нормально, потому что установлено xterm-256colors, Тогда ясно говорится, что я не должен отменять $TERM переменная, если она установлена ​​в screen, Что я убедился в использовании if тест по моему .zshrc файл.

Больше всего меня смущает то, что 256 цветов на самом деле работают в tmux. Смотрите скриншот ниже. Когда я бегу echo $TERM внутри Tmux это показывает screen, Когда я бегу colortest-256 он показывает мне все цвета правильно. Тем не менее, я думаю, что выходной базируется на $TERM переменная для отображения цветов. И потому что я запускаю это внутри tmux с $TERM установлен в screen Предполагается, что у меня нет поддержки 256 цветов.

введите описание здесь

Я нахожусь в тупике о том, как решить эту проблему. Все, что я хотел, было несколько цветов в выходные дни:>

Для полноты ниже мои два файла конфигурации.

.zshrc

# Path to your oh-my-zsh installation.
export ZSH=/home/christophe/.oh-my-zsh
ZSH_THEME="flazz"
plugins=(git command-not-found common-aliases dircycle lein)


# Show dots for progress
COMPLETION_WAITING_DOTS="true"

##########
## PATH ##
##########

# Export directory if it exists.
#if [ -d "/usr/local/go/bin" ]; then
#    export PATH=$PATH:/usr/local/go/bin
#fi

#############
## ALIASES ##
#############

alias randompass="< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;"

############
## TWEAKS ##
############

# Disable shared history
setopt no_share_history


# Start existing or new tmux session each shell startup
#[[ $TERM != "screen" ]] && exec tmux attach -d
alias chat='tmux attach -dt weechat || tmux new -s weechat \; new-window htop'


# If the $term variable is xterm, change it to 256 colors!
if [ "$TERM" = "xterm" ]; then
    # No it isn't, it's gnome-terminal
    export TERM="xterm-256color"
fi


######################
# User configuration #
######################

export PATH="/home/christophe/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
source $ZSH/oh-my-zsh.sh

.tmux.conf

# 256 color support
set -g default-terminal "screen-256color"

1 ответ

Решение

Прежде всего, я хотел бы подтвердить то, что вы уже поняли, а именно, что прямо под gnome-terminal (то есть вне tmux или же screen) вы должны установить TERM=xterm-256colorтогда как внутри tmux или же screen должно быть установлено TERM=screen-256color,

Видимо твой .zshrc сегмент правильно устанавливает его для оболочки, которая запускается непосредственно gnome-терминал.

Я не уверен, что нужно положить в .tmux.confЯ решил это в моем .bashrc аналогично вашему .zshrc фрагмент для xterm-256color. Я также удаляю TERMCAP который установлен screen и вызывает некоторые проблемы, но, по-видимому, tmux не устанавливает его, так что это не должно иметь никакого значения для вас.

if [ "$TERM" = "xterm" ]; then
    export TERM=xterm-256color
fi
if [ "$TERM" = "screen" -o "$TERM" = "screen-256color" ]; then
    export TERM=screen-256color
    unset TERMCAP
fi

Решает ли это проблему для вас?

Кстати, вместо этого сниппеты копируют ваши .tmux.conf также устанавливает это правильно для меня (на Vivid), так что вы на правильном пути, это должно работать. Может быть, есть что-то еще от вашего zsh (например, глобальный конфиг или oh-my-zsh), который возвращается к 8/16-цветному TERM=screen?

Другие вопросы по тегам