feat: add mode indicator

This commit is contained in:
technofab 2025-06-17 12:14:40 +02:00
parent 2935a9ea7f
commit feef9a9d6d
No known key found for this signature in database
2 changed files with 59 additions and 6 deletions

47
scripts/mode.sh Executable file
View file

@ -0,0 +1,47 @@
#!/usr/bin/env bash
current_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$current_dir"/utils.sh
# Define styles
STYLE_COPY="#[bg=black,fg=#ffff00]"
STYLE_PREFIX="#[bg=black,fg=#00ee00]"
STYLE_SYNC="#[bg=black,fg=#ff0000]"
STYLE_KNOWN_TABLE="#[bg=black,fg=#00aaff]"
STYLE_TABLE="#[bg=black,fg=#0066ff]"
STYLE_NORMAL="#[bg=black,fg=red]"
main() {
# Get active client and active pane for it
active_client=$(tmux display -p '#{client_tty}')
active_pane=$(tmux list-panes -a -F '#{pane_active} #{pane_tty} #{pane_id}' | \
awk -v tty="$active_client" '$1 == "1" && $2 == tty { print $3 }')
# Check states relative to that pane
pane_in_mode=$(tmux display -p -t "$active_pane" '#{pane_in_mode}')
client_prefix=$(tmux display -p '#{client_prefix}')
pane_sync=$(tmux display -p -t "$active_pane" '#{pane_synchronized}')
key_table=$(tmux display -p '#{client_key_table}')
# Mode priority logic
if [ "$pane_in_mode" = "1" ]; then
echo "${STYLE_COPY} COPY #[default]"
elif [ "$key_table" != "root" ] && [ "$key_table" != "prefix" ]; then
if [ "$key_table" = "resize" ]; then
echo "${STYLE_KNOWN_TABLE} RESIZE #[default]"
elif [ "$key_table" = "cpyrt" ]; then
echo "${STYLE_KNOWN_TABLE} RAT #[default]"
else
echo "${STYLE_TABLE} TABLE:$key_table #[default]"
fi
elif [ "$client_prefix" = "1" ]; then
echo "${STYLE_PREFIX} PREFIX #[default]"
elif [ "$pane_sync" = "1" ]; then
echo "${STYLE_SYNC} SYNC #[default]"
else
echo "${STYLE_NORMAL} TMUX #[default]"
fi
}
main

View file

@ -49,7 +49,8 @@ declare -A plugin_colors=(
["time"]="light_blue text" ["time"]="light_blue text"
["pomodoro"]="red text" ["pomodoro"]="red text"
["window"]="bg_main blue" ["window"]="bg_main blue"
["current"]="bg_main blue" ["current"]="green text"
["mode"]="duo_bg blue"
) )
get_plugin_colors() { get_plugin_colors() {
@ -167,7 +168,8 @@ set_theme() {
["time"]="text light_blue" ["time"]="text light_blue"
["pomodoro"]="text red" ["pomodoro"]="text red"
["window"]="blue bg_main" ["window"]="blue bg_main"
["current"]="blue bg_main" ["current"]="text red"
["mode"]="blue bg_main"
) )
fi fi
} }
@ -206,6 +208,10 @@ status_bar() {
IFS=' ' read -r -a colors <<<"$(get_plugin_colors "$plugin")" IFS=' ' read -r -a colors <<<"$(get_plugin_colors "$plugin")"
script="#($current_dir/$plugin.sh)" script="#($current_dir/$plugin.sh)"
# the mode module adds it's own spaces
if [ "$plugin" != "mode" ]; then
script=" $script "
fi
if [ "$side" == "left" ]; then if [ "$side" == "left" ]; then
if $show_powerline; then if $show_powerline; then