Faça com que os nomes das janelas do tmux usem bash $ PS1

Faça com que os nomes das janelas do tmux usem bash $ PS1

No Windows, conectando-se ao tmux1.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 /homenão bashcomo {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 PS1do 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'

  1. Existe alguma maneira de nomear uma janela tmux pelo último comando concluído?

  2. 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 tmuxexibir um título de janela dinâmico, edite-o ~/.bashrcpara 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.confter:

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_COMMANDfaz 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ê $PS1será impresso duas vezes quando não estiver no tmux.

Deve dynamic_titleestar entre aspas simples, caso contrário será definido quando você fornecer o seu ~/.bashrce 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 evalacontece, 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.

informação relacionada