Obtendo 256 cores para trabalhar no multiplexador de terminal

4

tmux

Eu segui Fazendo 256 cores funcionarem no tmux :

  • eu tenho alias tmux='TERM=xterm-256color tmux' em ~/.bashrc
  • e também set-option -g default-terminal "screen-256color" em ~/.tmux.conf

Em konsole :

$ echo $TERM
xterm

Em tmux :

$ echo $TERM
screen-256color

Ainda cores não funcionam em tmux :

boris@vasilisa:~$ PROMPT_GREEN='tput setf 2'
boris@vasilisa:~$ PROMPT_RED='tput setf 4'
boris@vasilisa:~$ PROMPT_BLACK='tput setf 8'
boris@vasilisa:~$ PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

Resulta em um prompt de cores em preto e branco. Também não há cor com ls .

tela

Eu tenho force_color_prompt=yes em ~/.bashrc . Ainda:

boris@vasilisa:~$ PROMPT_GREEN='tput setf 2'
boris@vasilisa:~$ PROMPT_RED='tput setf 4'
boris@vasilisa:~$ PROMPT_BLACK='tput setf 8'
boris@vasilisa:~$ PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

Não torna o prompt colorido. Mas, em contraste com tmux - ls , lista arquivos com cores.

Então

Eu acho que tput setf não deveria funcionar com multiplexadores de terminal?

Editar

Tive de alterar setf para setaf e também alterar os códigos de cor:

PROMPT_BLACK='tput setaf 0'
PROMPT_RED='tput setaf 1'
PROMPT_GREEN='tput setaf 2'
PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

Não preciso de alterar tmux , definindo

set-option -g default-terminal "tela-256 cores"

em ~/.tmux.conf é suficiente.

Então eu coloquei

# colorful prompt
PROMPT_BLACK='tput setaf 0'
PROMPT_RED='tput setaf 1'
PROMPT_GREEN='tput setaf 2'
PS1='\[$PROMPT_RED\]\w\[$PROMPT_GREEN\]:\[$PROMPT_BLACK\] '

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto --group-directories-first'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# man pages with color!
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

# enable colors:
force_color_prompt=yes

em ambos: ~/.bashrc e ~/.bash_login e, em seguida, as cores funcionam em tmux .

    
por Adobe 23.04.2014 / 08:41

2 respostas

3

Bem, você adivinhou corretamente que setf não é o recurso correto para definir a cor de primeiro plano no contexto da entrada xterm-256color ( screen-256color ) terminfo. Você deve usar setaf (definir cor de primeiro plano usando escape ANSI).

$ echo $TERM
screen-256color

$ infocmp -1 | grep setf
$ infocmp -1 | grep setaf
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,

Nota:

  1. você não precisa fazer alias tmux='TERM=xterm-256color tmux' , certifique-se de que seu emulador de terminal quando iniciou o valor correto de relatórios de TERM=xterm-256color
  2. se (1) for verdadeiro, então tmux irá configurar corretamente seu TERM para screen-256color dentro dele, também ele irá, por exemplo, configurá-lo corretamente se você estiver rodando no console linux para screen.linux , pode haver caso você precise manipulá-lo, mas geralmente não
por 23.04.2014 / 09:21
0

O que funcionou para mim é colocar as seguintes linhas no meu arquivo .bashrc:

    if [ "x$DISPLAY" != "x" ]
    then
        export HAS_256_COLORS=yes
        alias tmux="tmux -2"
        if [ "$TERM" = "xterm" ]
        then
            export TERM=xterm-256color
        fi
    else
        if [ "$TERM" == "xterm" ] || [ "$TERM" == "xterm-256color" ]
        then
            export HAS_256_COLORS=yes
            alias tmux="tmux -2"
        fi
    fi

    if [ "$TERM" = "screen" ] && [ "$HAS_256_COLORS" = "yes" ]
    then
        export TERM=screen-256color
    fi

Deixe-me saber se isso ajuda.

Observe que essa solução é baseada nesta postagem !

    
por 23.04.2014 / 09:15