passando a variável tmux para o shell-command no tmux.conf

2

Estou tentando editar minha seção de status inferior esquerdo do tmux. Eu gostaria que mostrasse

Sessão: # {session_name}

O comprimento máximo atual para esta string é definido em 20 usando essa configuração

status-left-length 20

Isso funciona bem, mas depois que eu insiro um nome de sessão que é maior que 20 (incluindo "Session:"), o tmux apenas corta o texto. Eu gostaria de processar toda a string para que qualquer coisa com mais de 20 caracteres apareça assim

Sessão: mysessio ...

ie. a string é cortada em 20 caracteres e os três últimos caracteres são substituídos por pontos. Eu tenho um roteiro de trabalho fazendo o que eu gostaria

string="verylongstringfortesting"
lengthLimit=10

if [ ${#string} -gt $lengthLimit ]
then
  echo ${string:0:$(($lengthLimit-3))}"..."
fi

como faço para incorporar isso no tmux.conf? Eu sei sobre # (shell-command) e tentei # (echo # {session_name}), mas isso não parece retornar o nome da sessão.

    
por user3875648 02.04.2015 / 03:16

2 respostas

1

Algumas informações coletadas para ajudar na busca de uma solução:

  • Fazer #(echo #{session_name}) não produz nada, mas #(echo \"#{session_name}\") mostra o nome da sessão, que parece promissor, mas ...

  • A razão pela qual funciona quando citada é que o comando echo obtém literalmente o texto #{session_name} , onde, sem as aspas, o shell considera um comentário e, com as aspas, retorna-o textualmente ao tmux. Tmux expande a sequência depois que o comando sai

  • Isso significa que não podemos manipular a string expandida dentro do shell.

Abordagens alternativas

  • A tentativa de definir um limite, como #7S para limitar o nome da sessão a 7 caracteres, sempre aplica o limite, mas não permite que você teste isso. Portanto, #7... sempre mostrará as reticências mesmo quando não desejadas , então isso não funciona

  • A tentativa de acessar diretamente via comandos do tmux não parece obter resultados razoáveis. Por exemplo, tmux list-sessions -F "#{client_session}" não mostra nada e tmux list-clients -F "#{client_session}" mostra as sessões de cada cliente, mas se você tiver mais de um cliente, não há uma maneira óbvia de dizer qual é o que está executando o comando.

Ainda não investiguei a fonte, mas suspeito que o tmux execute o comando antes mesmo de saber para qual sessão ele pode ser.

Sua melhor aposta para obter essa funcionalidade pode ser ajustar o código-fonte.

A versão 1.8 faz o cálculo do comprimento em status_redraw_get_left( em torno da linha 79 de status.c e a gravação dele em status_redraw( na linha 322.

    
por 02.04.2015 / 06:48
1

Isso foi corrigido no tmux Git HEAD, consulte o link

    
por 04.06.2015 / 19:07