Resolvido para o tmux 2.6 e o tmux 1.8 (testado em ambos).
Para que tmux
exiba um título de janela dinâmico, edite seu ~/.bashrc
para algo semelhante ao seguinte:
settitle() {
printf "3k$13\"
}
dynamic_window_title='${USER:0:3}@${PWD:${#PWD}<25?0:(-25)}'
PROMPT_COMMAND='if [ "$TERM" =~ "screen" ]; then eval prompt=$dynamic_window_title; settitle "$prompt"; fi;'
E você (provavelmente) precisará de ~/.tmux.conf
para ter:
setw -g automatic-rename on
Pelo que entendi, settitle()
é basicamente renomear sua janela após cada comando executado. Eu não entendo completamente como isso acontece.
PROMPT_COMMAND
faz parte do bash que é executado após cada comando executado, o que permite fazer coisas legais como controlando quantos comandos bash corretos você digitou em uma linha , além do nosso uso aqui de redefinir continuamente nosso título.
$TERM
é uma variável de ambiente que, para mim, é configurada para "screen" (ou algo como "screen-256color") quando no tmux ou para "xterm" ao usar o MobaXterm. Verificamos isso porque senão o $PS1
é essencialmente duplicado quando não está no tmux.
O dynamic_title
deve estar entre aspas simples, caso contrário, ele será definido quando você criar seu ~/.bashrc
e não for dinâmico. No entanto, você precisa que ele seja definido em algum momento, senão sua janela será renomeada literalmente ${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}
. Isto é o que o eval
faz, criando uma string que é literalmente o que você quer que o título da janela seja. Então, apenas damos essa string para settitle()
, agrupada em aspas duplas, para que os espaços funcionem corretamente.