tmux baseadas na versão do Tmux

5

Esta questão está vagamente relacionada com esta .

Portanto, estou usando um intervalo de versões do Tmux entre 1.5 e 2.2 em vários sistemas operacionais (e distros do Linux).

Meu ~/.tmux.conf , que foi adaptado para versões anteriores, mostra as três linhas de aviso a seguir no Tmux 2.2:

/home/username/.tmux.conf:34: unknown option: mode-mouse
/home/username/.tmux.conf:70: unknown option: status-utf8
/home/username/.tmux.conf:71: unknown option: utf8

Uma rápida olhada na página man sugere que essas opções de configuração foram descontinuadas. No entanto, em vez de ignorá-los silenciosamente, o Tmux reclama das opções "desconhecidas".

As linhas correspondentes aos avisos acima são:

set-window-option -g mode-mouse off
set-option -g status-utf8 on
set-window-option -g utf8 on

A opção mode-mouse foi descontinuada no Tmux 2.1, status-utf8 e utf8 foram descontinuados no Tmux 2.2. O arquivo CHANGES na árvore de origem detalha as opções que foram removidas, juntamente com uma breve descrição .

Existe um método pelo qual eu possa suprimir essa saída? Melhor ainda, é possível executar condicionalmente sub-rotinas de arquivo de configuração com base na versão do Tmux sem trechos de arquivo de configuração separados (o que teria de ser source -d)?

Resumindo: qual é a maneira simples de usar exatamente o mesmo .tmux.conf em várias versões do Tmux?

Justificativa: a razão pela qual isso me incomoda é que o Tmux mostrará esses avisos sempre que uma sessão for iniciada . E é preciso uma ação da minha parte (pressionando uma tecla) para cair no shell. No entanto, em versões mais antigas do Tmux eu não tenho problemas, mas gostaria de definir as respectivas opções nessas versões antigas do Tmux.

Da antiga página man :

status-utf8 [on | off]

Instruct tmux to treat top-bit-set characters in the status-left and status-right strings as UTF-8; notably, this is important for wide characters. This option defaults to off.

e:

utf8 [on | off]

Instructs tmux to expect UTF-8 sequences to appear in this window.

    
por 0xC0000022L 26.04.2016 / 12:51

5 respostas

3

Is there a method by which I can suppress this output?

Sim. Os comandos set-option e set-window-option recebem um sinalizador -q ("quiet"), que suprime erros sobre opções desconhecidas. Isso deve cobrir você:

set-window-option -gq mouse off
set-window-option -gq mode-mouse off
set-option -gq status-utf8 on
set-window-option -gq utf8 on
    
por 10.05.2016 / 17:00
2

Baseado em @ ericx's answer e @ thiagowfx's answer Eu coloquei o seguinte em conjunto, o qual cobre as incompatibilidades listadas da versão 2.0 em diante:

# Version-specific commands [grumble, grumble]
# See: https://github.com/tmux/tmux/blob/master/CHANGES
run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-)"

if-shell -b '[ "$(echo "$TMUX_VERSION < 2.1" | bc)" = 1 ]' \
  "set -g mouse-select-pane on; set -g mode-mouse on; \
    set -g mouse-resize-pane on; set -g mouse-select-window on"

# In version 2.1 "mouse" replaced the previous 4 mouse options
if-shell -b '[ "$(echo "$TMUX_VERSION >= 2.1" | bc)" = 1 ]' \
  "set -g mouse on"

# UTF8 is autodetected in 2.2 onwards, but errors if explicitly set
if-shell -b '[ "$(echo "$TMUX_VERSION < 2.2" | bc)" = 1 ]' \
  "set -g utf8 on; set -g status-utf8 on; set -g mouse-utf8 on"

# bind-key syntax changed in 2.4
if-shell -b '[ "$(echo "$TMUX_VERSION < 2.4" | bc)" = 1 ]' \
  "bind-key -t vi-copy v   begin-selection; \
   bind-key -t vi-copy V   rectangle-toggle \
   bind-key -t vi-copy y   copy-selection"

bind-key -T copy-mode-vi v   send -X begin-selection
bind-key -T copy-mode-vi V   send -X rectangle-toggle
bind-key -T copy-mode-vi y   send -X copy-pipe-and-cancel 'xclip -selection clipboard -in'
    
por 01.12.2016 / 04:42
0

Eu gosto da resposta do @ tom-hale, mas acho que usando "expr" mais breve no meu caso de uso:

run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-)"
if-shell 'expr $TMUX_VERSION ">=" 1.7' 'bind-key R move-window -r'

Isto explora o fato de que a comparação com expr irá ignorar as letras à direita, pode comparar floats e "Sair do status é 0 se EXPRESSION não for nulo nem 0, 1 se EXPRESSION for nulo ou 0 [...]" de acordo com o manpage.

    
por 23.05.2017 / 09:31
0

Esta é a minha solução favorita para o problema, que também evita o problema de que if-shell era menos confiável em versões mais antigas Versões do Tmux.

Como solução temporária, usei as seguintes sub-rotinas de configuração:

if-shell "tmux -V|awk '{if($2 < 2.1) {exit 0} else {exit 1}}'" "set-window-option -g mode-mouse off" "set-window-option -g mouse off"
if-shell "tmux -V|awk '{if($2 < 2.2) {exit 0} else {exit 1}}'" "set-option -g status-utf8 on"
if-shell "tmux -V|awk '{if($2 < 2.2) {exit 0} else {exit 1}}'" "set-window-option -g utf8 on"

no lugar das estrofes originais:

set-window-option -g mode-mouse off
set-option -g status-utf8 on
set-window-option -g utf8 on

Não tenho certeza se isso funcionará com todos os awk flavors em todos os sistemas operacionais e distribuições Linux que estou usando, mas talvez ajude alguém que pode confiar em um conjunto restrito de awk flavors (por exemplo, apenas gawk e mawk para os quais testei o comando).

Por favor, note os comentários para esta resposta para alguns problemas com esta abordagem.

    
por 26.04.2016 / 13:15
-1

Nesse caso, gosto da resposta "silenciosa" sugerida acima; mas se você tiver alterações de configuração condicional da versão original, considere esta solução semelhante à sua própria resposta:

# grab version info about the tmux currently running
run-shell "tmux setenv -g TMUX_VERSION_MAJOR $(tmux -V | cut -d' ' -f2 | cut -d'.' -f1 | sed 's/[^0-9]*//g')"
run-shell "tmux setenv -g TMUX_VERSION_MINOR $(tmux -V | cut -d' ' -f2 | cut -d'.' -f2 | sed 's/[^0-9]*//g')"

Eu tenho várias verificações de if-shell ; então, neste caso:

if-shell \
    '[ $TMUX_VERSION_MAJOR -le 1 -o \
         \( $TMUX_VERSION_MAJOR -eq 2 -a $TMUX_VERSION_MINOR -lt 1 \) ]' \
    "set-window-option -g mode-mouse off" \
    "set-window-option -g mouse off"

if-shell \
    '[ $TMUX_VERSION_MAJOR -le 1 -o \
         \( $TMUX_VERSION_MAJOR -eq 2 -a $TMUX_VERSION_MINOR -lt 2 \) ]' \
    "set-option -g status-utf8 on; set-window-option -g utf8 on" \
    ""

Não me lembro de onde encontrei isto; mas outra pessoa recebe o crédito.

    
por 22.05.2016 / 20:49

Tags