Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write if statement in .tmux.conf to set different options for different tmux versions?

I have a .tmux.conf which I use on different machines with different tmux versions installed.

I want to set different mouse options, depending on the tmux version. On one machine I have version 2.0 on the other 2.1.

I do not get his part right

if "[[(( $(tmux -V | cut -c 6-) < 2.1 ))]]" \   "set -g mode-mouse on;" \   "set -g mouse-resize-pane on;" \   "set -g select-pane on;" \   "set -g select-window on" "set -g mouse on" 

When I source the file

$ tmux source-file .tmux.conf

I get this message

.tmux.conf:12: unknown command: set -g mouse-resize-pane on

The machine where I run it has version 2.1 so it shouldn't set the four options.

I want to set the four options when running tmux 2.0 or less or the one option when running tmux 2.1.

This bash statement works

$ tmux -V tmux 2.1 $ if [[(( $(tmux -V | cut -c 6-) < 2.1 ))]];then echo $?;else echo $?;fi 1 
like image 512
mrt181 Avatar asked Jan 26 '16 14:01

mrt181


People also ask

Where can you find examples for custom tmux conf config files?

There should be several example configuration files in either /usr/share/doc/tmux/examples or /usr/share/tmux/ . You can copy any of those over to ~/. tmux.


1 Answers

Based on @ericx's answer and @thiagowfx's answer I put the following together which covers many of the listed incompatibilties from version 2.0 onwards:

# Version-specific commands [grumble, grumble] # See: https://github.com/tmux/tmux/blob/master/CHANGES run-shell 'tmux setenv -g TMUX_VERSION $(tmux -V | \                            sed -En "s/^tmux[^0-9]*([.0-9]+).*/\1/p")'   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; \     set -g message-fg red; \     set -g message-bg black; \     set -g message-attr bright; \     set -g window-status-bg default; \     set -g window-status-fg default; \     set -g window-status-current-attr bold; \     set -g window-status-current-bg cyan; \     set -g window-status-current-fg default; \     set -g window-status-bell-fg red; \     set -g window-status-bell-bg black; \     set -g window-status-activity-fg white; \     set -g window-status-activity-bg black"  # 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 -- selection / copy / paste if-shell -b '[ "$(echo "$TMUX_VERSION < 2.4" | bc)" = 1 ]' " \    bind-key -t vi-copy v   begin-selection; \    bind-key -t vi-copy V   send -X select-line; \    bind-key -t vi-copy C-v rectangle-toggle; \    bind-key -t vi-copy y   copy-pipe 'xclip -selection clipboard -in'"  # Newer versions if-shell -b '[ "$(echo "$TMUX_VERSION < 2.9" | bc)" = 1 ]' " \    bind-key -T copy-mode-vi v   send -X begin-selection; \    bind-key -T copy-mode-vi V   send -X select-line; \    bind-key -T copy-mode-vi C-v send -X rectangle-toggle; \    bind-key -T copy-mode-vi y   send -X copy-pipe-and-cancel 'xclip -selection clipboard -in'"  if-shell -b '[ "$(echo "$TMUX_VERSION >= 2.9" | bc)" = 1 ]' \    "set -g message-style fg=red,bg=black; \     set -g message-style bright; \     set -g window-status-style          fg=default,bg=default; \     set -g window-status-current-style  fg=default,bg=cyan,bold; \     set -g window-status-bell-style     fg=red,bg=black; \     set -g window-status-activity-style fg=white,bg=black" 

I raised an issue about the problems with tmux's non-backward-compatibility here. The summary is that the tmux devs will not support backward compatibility, nor will they adopt a version numbering scheme which highlights which versions contain breaking changes. 😢

I raised an issue to support numeric comparators for %if which was implemented in v3.0.

like image 60
Tom Hale Avatar answered Sep 18 '22 14:09

Tom Hale