TMUX Configuration with Mode Indication
TMUX operates in two main modes depending on if the prefix is pressed and this setup will display the active mode. This is very helpful to know when you have accidentally entered TMUX command mode.
Example Conf:
set-environment -g PATH "/usr/local/bin:/bin:/usr/bin"
set -g default-terminal "screen-256color"
set -g status-bg colour236
set -g status-fg white
set -g status-right "#{tmux_mode_indicator}"
run-shell ~/.tmux_mode_indicator.tmux
The last line for run-shell
is where the magic happens. It loads this file:
#!/usr/bin/env bash
__print_tmux_mode_indicator() {
# Get values set by user in .tmux.conf or fallback to defaults
local copy_mode_text="$(__get_tmux_option "@tmux_mode_indicator_copy_mode_text" "COPY")"
local prefix_pressed_text="$(__get_tmux_option "@tmux_mode_indicator_prefix_pressed_text" "PREFIX PRESSED")"
local insert_mode_text="$(__get_tmux_option "@tmux_mode_indicator_insert_mode_text" "INSERT")"
local normal_mode_text="$(__get_tmux_option "@tmux_mode_indicator_normal_mode_text" "NORMAL")"
local separator="$(__get_tmux_option "@tmux_mode_indicator_separator" ":")"
local left_edge_character="$(__get_tmux_option "@tmux_mode_indicator_left_edge_character" "")"
local right_edge_character="$(__get_tmux_option "@tmux_mode_indicator_right_edge_character" "")"
local background="$(__get_tmux_option "@tmux_mode_indicator_background" "colour33")"
local copy_mode_fg="$(__get_tmux_option "@tmux_mode_indicator_copy_mode_fg" "colour82")"
local prefix_pressed_fg="$(__get_tmux_option "@tmux_mode_indicator_prefix_pressed_fg" "colour226")"
local normal_fg="$(__get_tmux_option "@tmux_mode_indicator_normal_fg" "#000000")"
local left_edge_character_bg="$(__get_tmux_option "@tmux_mode_indicator_left_edge_character_bg" "#626262")"
local separator_fg="$(__get_tmux_option "@tmux_mode_indicator_separator_fg" $normal_fg)"
local after_interpolation_fg="$(__get_tmux_option "@tmux_mode_indicator_after_interpolation_fg" "#000000")"
local after_interpolation_bg="$(__get_tmux_option "@tmux_mode_indicator_after_interpolation_bg" "#626262")"
local right_edge_character_bg="$(__get_tmux_option "@tmux_mode_indicator_right_edge_character_bg" $background)"
local right_edge_character_fg="$(__get_tmux_option "@tmux_mode_indicator_right_edge_character_fg" "#626262")"
local left_edge_char="#[fg=${background},bg=${left_edge_character_bg}]${left_edge_character}#[bg=${background},fg=${normal_fg}]"
local prefix_indicator="#[bg=${background}]#{?client_prefix,#[fg=${prefix_pressed_fg}]${prefix_pressed_text},#[fg=${normal_fg}]${normal_mode_text}}"
local separator=" #[fg=${separator_fg}]${separator}"
local normal_or_copy_indicator="#[bg=${background}]#{?pane_in_mode,#[fg=${copy_mode_fg}]${copy_mode_text},#[fg=${normal_fg}]${insert_mode_text}}"
local right_edge_char="#[bg=${right_edge_character_bg},fg=${right_edge_character_fg}]${right_edge_character}"
echo -n $left_edge_char
echo -n " "
echo -n $prefix_indicator
echo -n " "
echo -n $separator
echo -n " "
echo -n $normal_or_copy_indicator
echo -n " "
echo -n $right_edge_char
echo -n "#[bg=${after_interpolation_bg},fg=${after_interpolation_fg}]"
}
# Get tmux option or default value
__get_tmux_option() {
local option=$1
local default_value=$2
local option_value=$(tmux show-option -gqv "$option")
if [ -z $option_value ]; then
echo $default_value
else
echo $option_value
fi
}
# Set tmux internal option to given value
__set_tmux_option() {
local option="$1"
local value="$2"
tmux set-option -gq "$option" "$value"
}
# Replaces interpolation in sent string with tmux_mode_indicator
__do_interpolation() {
local string="$1"
local interpolated="${string/$tmux_mode_indicator_interpolation_string/$tmux_mode_indicator}"
echo "$interpolated"
}
# Update internal tmux option using interpolation
__udpate_tmux_option_with_interpolation() {
local option="$1"
local option_value="$(__get_tmux_option "$option")"
local new_option_value="$(__do_interpolation "$option_value")"
__set_tmux_option "$option" "$new_option_value"
}
tmux_mode_indicator="$(__print_tmux_mode_indicator)"
tmux_mode_indicator_interpolation_string="\#{tmux_mode_indicator}"
main() {
__udpate_tmux_option_with_interpolation "status-right"
}
main