# 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: ```shell #!/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 ```