zsh: establece TERM=screen-256color en tmux, pero xterm-256color sin tmux

zsh: establece TERM=screen-256color en tmux, pero xterm-256color sin tmux

Necesito que $TERMesté xterm-256colorfuera de tmux (en una terminal "simple" con zsh), pero screen-256colordentro de tmux.

Primero probé:

  • añadir export TERM='xterm-256color'a mi ~/.zshrc.
  • agregar set -g default-terminal "screen-256color"a mi~/.tmux.conf

Ahora, cuando abro la terminal (digamos, xterm), TERMes xterm-256color, lo cual es correcto. Pero cuando ejecuto tmux, TERM¡es otra vez xterm-256color!

Luego intenté comentar nuestra línea en mi ~/.zshrc. Ahora, cuando abro la terminal, TERMes xtermy cuando ejecuto tmux, TERMes screen-256color. Entonces, parece que si configuro TERMen .zshrc, tmux primero se configura TERMen screen-256color, ejecuta Shell (que es zsh) y zsh lee .zshrcy restablece TERMen xterm-256color.

Entonces, ¿cómo hacer TERMpara estar xterm-256coloren una terminal "simple" y screen-256coloren tmux?

Respuesta1

La variable de entorno TERM debe ser configurada por la aplicación que actúa como su terminal. Este es el objetivo del asunto: permitir que los programas que se ejecutan dentro de ellos sepan qué terminal se está utilizando y, por lo tanto, qué tipo de funciones admite.

Zsh no es una terminal. Es una concha. Puede que le importe cuál está configurado su TERM si quiere hacer cosas especiales, pero no debería ser responsable deconfiguraciónél. En su lugar, es responsable de configurar variables como ZSH_VERSION, que pueden ser utilizadas por scripts u otros procesos secundarios para comprender qué comportamiento esperar de su shell principal.

En su lugar, debe verificar la configuración de cualquier aplicación de terminal que esté utilizando y pedirle que se informe correctamente. Por ejemplo, puedes hacer esto para xterm agregando esta línea al ~/.Xdefaultsarchivo que usa para los valores de configuración:

xterm*termName: xterm-256color

Parece que gnome-terminal hace la idiotez de leer cuál sería su configuración de xterm en lugar de tener la suya propia. Esto podría ayudarle en algunos casos, pero debería configurarse más correctamente en vte-256color. Esto parece ser una queja de larga data contra él (y contra algunos otros emuladores de terminal basados ​​en VTE). Aforma comúnPara solucionar esto es explotar otro valor que sí establece:

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=vte-256color
fi 

Pero esto te lleva nuevamente a tu problema con tmux, por lo que tendrías que tenerlo en cuenta al no restablecer TERM si ya es algo como "pantalla-256color" o "pantalla":

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=vte-256color
fi

Para otros terminales necesitarás buscar sus rutinas de configuración adecuadas.

Respuesta2

Dentro de tu .zshrc, pon

[[ -n $TMUX ]] && export TERM="xterm-256color"

Y, dentro de tu .tmux.conf

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

información relacionada