web-dev-qa-db-ja.com

Gnome-terminalがscreen-256colorsで正しく機能しない

今日、私はWeechatで256色をサポートしていないことに気付きました。これは簡単な修正だと思いました。そうではありません。

私が最初にグーグルで調べたのは、ターミナルで色のサポートをテストする方法でした。 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と表示されます。だから、weechatで適切に動作するようにscreen-256colorsが表示されます。そのため、次にxterm-256colorsファイルの.zshrcscreen-256colorsに変更しようとしましたが、それを行うと出力が文字化けします。スクリーンショットをご覧ください。

enter image description here

そこで、次にtmuxの変数を変更する方法をグーグルで調べました。 このリンク が見つかりました。 256色を使用するようにtmuxを構成するオプションを示しています。これは、ほとんどすべてのチュートリアルに示されているオプションです。

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

だから私はそれを試したが、それでも物事を変えなかった。それで、私はもう少しグーグルで検索して、 この質問 を見つけました。見積もり:

Tmuxは、ターミナルを正しく設定することについて比較的気難しいです。可能であれば、用語値を.bashrcではなく、gnome-terminalの構成で設定します。それに失敗したら、それらの設定を「screen」または「screen-256color」TERMのチェックで囲み、その場合はリセットしないでください。

さて、tmux以外では、screen*$TERM値を使用すべきではないことを理解しています。 xterm-256colorsに設定されているので大丈夫です。それから、screenに設定されている場合、$TERM変数をオーバーライドしてはならないと明確に述べています。 .zshrcファイルでifテストを使用することを確認しました。

主に私を混乱させるのは、256色が実際にtmuxで機能するということです。下のスクリーンショットをご覧ください。 tmux内でecho $TERMを実行すると、screenと表示されます。 colortest-256を実行すると、すべての色が適切に表示されます。それでも、Ithinkweechatは$TERM変数に基づいて色を表示します。そして、$TERMtmuxに設定してscreen内で実行するため、256色のサポートがないことを前提としています。

enter image description here

この問題を解決する方法に困惑しています。私が欲しかったのはweechatの色だけでした:>

完全を期すために、2つの構成ファイルを示します。

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

まず最初に、あなたが既に理解していること、つまりgnome-terminalの直下(つまり、tmuxまたはscreenの外側)を確認して、TERM=xterm-256color。ただし、tmuxまたはscreen内では、TERM=screen-256colorに設定する必要があります。

明らかに、.zshrcセグメントは、gnome-terminalによって直接実行されるシェルに適切に設定します。

.tmux.confに何を入れる必要があるかわかりません。xterm-256colorの.bashrcフラグメントと同様に.zshrcで解決しました。 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で)適切に設定されるため、正常に動作するはずです。 8/16色TERM=screenに戻るzshによってソースされた何か(たとえば、グローバル構成、またはoh-my-zsh)がありますか?

1
egmont