Crie nomes de janelas do tmux use bash $ PS1

1

No Windows, conectando-se a tmux 1.8 no CentOS 7 a MobaXterm.

Idealmente, quero que minhas janelas tmux tenham o nome do último comando digitado no painel que estiver ativo (por exemplo, cd /home not bash like {pane_current_command} prints). Não tenho ideia de como fazer isso, então estou tentando descobrir como obter o nome que corresponde ao PS1 do painel ativo. Eu tentei as sugestões nesta resposta com isso no meu bashrc:

settitle() {
    printf "3k$13\"
}
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 obtivemos

bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'

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

  2. Se não, como posso configurá-lo corretamente para meu PS1 , que é dinâmico com base no meu nome de usuário e caminho?

por jeremysprofile 30.03.2018 / 04:36

1 resposta

0

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.

    
por 02.04.2018 / 21:12

Tags