
No Windows, conectando-se ao tmux
1.8 no CentOS 7 através do MobaXterm.
Idealmente, quero que minhas janelas tmux tenham o nome do último comando que digitei em qualquer painel ativo (como, cd /home
não bash
como {pane_current_command}
impressões). Não tenho ideia de como fazer isso, então estou tentando descobrir como fazer com que o nome corresponda ao PS1
do painel ativo. tenteias sugestões nesta respostacom isso no meu bashrc:
settitle() {
printf "\033k$1\033\\"
}
basic_prompt='${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}'
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi; settitle($basic_prompt)'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '
e pegou
bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'
Existe alguma maneira de nomear uma janela tmux pelo último comando concluído?
Caso contrário, como posso defini-lo corretamente como my
PS1
, que é dinâmico com base no meu nome de usuário e caminho?
Responder1
Resolvido para tmux 2.6 e tmux 1.8 (testado em ambos).
Para tmux
exibir um título de janela dinâmico, edite-o ~/.bashrc
para algo semelhante ao seguinte:
settitle() {
printf "\033k$1\033\\"
}
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á ~/.tmux.conf
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 comoacompanhando quantos comandos bash corretos você digitou em uma linha, além de usarmos aqui a redefinição contínua de nosso título.
$TERM
é uma variável de ambiente que para mim está definida como "screen" (ou algo como "screen-256color") quando estiver no tmux ou como "xterm" ao usar o MobaXterm. Verificamos isso porque, caso contrário, você $PS1
será impresso duas vezes quando não estiver no tmux.
Deve dynamic_title
estar entre aspas simples, caso contrário será definido quando você fornecer o seu ~/.bashrc
e não será dinâmico. No entanto, você precisa defini-lo em algum momento ou sua janela será renomeada literalmente ${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}
. Isso é o que eval
acontece, criando uma string que é literalmente o que você deseja que seja o título da janela. Em seguida, apenas fornecemos essa string settitle()
entre aspas duplas para que os espaços funcionem corretamente.