From f4fc2730cf1a2ae26ebf3707548945a73cd74ff1 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 1 Dec 2019 13:43:58 +0100 Subject: [PATCH 001/155] rewrote _apply_bindings() to support new tmux 3.0 bindings (4) failed to source the proper modified file, fixes #303 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 4333ddf..de35325 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -747,7 +747,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # '{i = $2 == "-T" ? 4 : 5; gsub(/^[;]$/, "\\\\&", $i); gsub(/^[$"#~]$/, "'"'"'&'"'"'", $i); gsub(/^['"'"']$/, "\"&\"", $i); print}' > "$cfg.in" # # # ignore bindings with errors -# while ! out=$(tmux source-file "$cfg"); do +# while ! out=$(tmux source-file "$cfg.in"); do # line=$(printf "%s" "$out" | cut -d':' -f2) # perl -n -i -e "if ($. != $line) { print }" "$cfg.in" # done From a83ba39f09534c2df8f9e94e48174d67be030976 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 29 Feb 2020 20:15:54 +0100 Subject: [PATCH 002/155] fixed _tty_info() to properly discard daemons and their children, fixes #320 --- .tmux.conf | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index de35325..fa47bee 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -480,9 +480,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # user[$2] = $1; parent[$2] = $3; child[$3] = $2 # } # END { -# for (i in user) +# for (i in parent) # { -# if (!(i in child) && parent[i] != 1) +# j = i +# while (parent[j]) +# j = parent[j] +# +# if (!(i in child) && j != 1) # { # file = "/proc/" i "/cmdline"; getline command < file; close(file) # gsub(/\0/, " ", command) @@ -500,7 +504,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # END { # for (i in parent) # { -# if (!(i in child) && parent[i] != 1) +# j = i +# while (parent[j]) +# j = parent[j] +# +# if (!(i in child) && j != 1) # { # print i, user[i], command[i] # exit From 57eeffcf0e5b356b9cda27aa44edbf2c849103eb Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 11 Mar 2020 15:10:51 +0100 Subject: [PATCH 003/155] raised _maximize_pane() retry count and sleep duration, fixes #328 this helps when running under WSL where fork() is slow --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index fa47bee..2353a5f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -222,9 +222,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # window=$(tmux new-window -t "$current_session:" -P "exec maximized... 2> /dev/null & tmux setw -t \"$current_session:\" remain-on-exit on; printf \"Pane has been maximized, press + to restore. %s\" '$current_pane'") # window=${window%.*} # -# retry=10 +# retry=1000 # while [ x"$(tmux list-panes -t "$window" -F '#{session_name}:#{window_index} #{pane_dead}' 2>/dev/null)" != x"$window 1" ] && [ "$retry" -ne 0 ]; do -# sleep 0.05 +# sleep 0.1 # retry=$((retry - 1)) # done # if [ "$retry" -eq 0 ]; then From 4919400fe2a8144c4bab19628bf5f5dec363877a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 17 Mar 2020 19:54:06 +0100 Subject: [PATCH 004/155] improved error bypass logic in _apply_bindings(), fixes #330 --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 2353a5f..becc718 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -755,8 +755,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # '{i = $2 == "-T" ? 4 : 5; gsub(/^[;]$/, "\\\\&", $i); gsub(/^[$"#~]$/, "'"'"'&'"'"'", $i); gsub(/^['"'"']$/, "\"&\"", $i); print}' > "$cfg.in" # # # ignore bindings with errors -# while ! out=$(tmux source-file "$cfg.in"); do -# line=$(printf "%s" "$out" | cut -d':' -f2) +# while ! out=$(tmux source-file -v "$cfg.in"); do +# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) # perl -n -i -e "if ($. != $line) { print }" "$cfg.in" # done # } From d6f0f647dd68561ed010f83d8d226383aebfb805 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 18 Mar 2020 14:25:40 +0100 Subject: [PATCH 005/155] improved error bypass logic in _apply_bindings() (2), fixes #331 source-file -v is not documented in tmux CHANGES but in fact appeared in tmux 3.0 --- .tmux.conf | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index becc718..5c7aad5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -755,10 +755,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # '{i = $2 == "-T" ? 4 : 5; gsub(/^[;]$/, "\\\\&", $i); gsub(/^[$"#~]$/, "'"'"'&'"'"'", $i); gsub(/^['"'"']$/, "\"&\"", $i); print}' > "$cfg.in" # # # ignore bindings with errors -# while ! out=$(tmux source-file -v "$cfg.in"); do -# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) -# perl -n -i -e "if ($. != $line) { print }" "$cfg.in" -# done +# if ! tmux source-file "$cfg.in"; then +# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) +# while ! out=$(tmux source-file "$verbose_flag" "$cfg.in"); do +# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) +# perl -n -i -e "if ($. != $line) { print }" "$cfg.in" +# done +# fi # } # # _apply_theme() { From 905122d13cc14ca07accabd3b87ef190fc4b61a8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 10 Jun 2020 23:03:07 +0200 Subject: [PATCH 006/155] restored tmux_conf_new_pane_retain_current_path default value in .tmux.conf, fixes #364 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 5c7aad5..eb78830 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -693,7 +693,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # perl -p -i -e "s/\bnew-window\b([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2)/new-window\1/g" "$cfg" # fi # -# tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-false} +# tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then # perl -p -i -e "s/\bsplit-window\b(?!([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2))/split-window -c '#{pane_current_path}'/g" "$cfg" # else From 49e55bac061a72b3da0153e90fa03b7c48be6247 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 10 Dec 2019 16:57:28 +0100 Subject: [PATCH 007/155] aligned default tmux_conf_xxx variables with their .tmux.conf.local sample counterpart --- .tmux.conf | 143 +++++++++++++++++++++++++++-------------------------- 1 file changed, 72 insertions(+), 71 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index eb78830..dde6fdc 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -771,8 +771,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_window_fg=${tmux_conf_theme_window_fg:-default} # tmux_conf_theme_window_bg=${tmux_conf_theme_window_bg:-default} # tmux_conf_theme_highlight_focused_pane=${tmux_conf_theme_highlight_focused_pane:-false} -# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-'default'} # default -# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-'#0087d7'} # light blue +# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} # default +# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-#0087d7} # light blue # # # tmux 1.9 doesn't really like set -q # if tmux show -g -w | grep -q window-style; then @@ -786,8 +786,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} -# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-'#444444'} # light gray -# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-'#00afff'} # light blue +# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-#444444} # light gray +# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-#00afff} # light blue # tmux_conf_theme_pane_border_fg=${tmux_conf_theme_pane_border_fg:-$tmux_conf_theme_pane_border} # tmux_conf_theme_pane_active_border_fg=${tmux_conf_theme_pane_active_border_fg:-$tmux_conf_theme_pane_active_border} # case "$tmux_conf_theme_pane_border_style" in @@ -796,14 +796,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-$tmux_conf_theme_pane_active_border_fg} # ;; # thin|*) -# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-'default'} -# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-'default'} +# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-default} +# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-default} # ;; # esac # tmux setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" # -# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-'#00afff'} # light blue -# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-'#00afff'} # light blue +# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-#00afff} # light blue +# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-#00afff} # light blue # # tmux set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" # @@ -814,29 +814,29 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_right_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_main-}") # tmux_conf_theme_right_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_sub-|}") # -# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-'#000000'} # black -# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-'#ffff00'} # yellow -# tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-'bold'} +# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-#000000} # black +# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-#ffff00} # yellow +# tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} # tmux set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" # -# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-'#ffff00'} # yellow -# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-'#000000'} # black -# tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-'bold'} +# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-#ffff00} # yellow +# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-#000000} # black +# tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} # tmux set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" # -# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-'#000000'} # black -# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-'#ffff00'} # yellow -# tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-'bold'} +# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-#000000} # black +# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-#ffff00} # yellow +# tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} # tmux setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" # -# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-'#8a8a8a'} # white -# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-'#080808'} # dark gray -# tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-'none'} +# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-#8a8a8a} # white +# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-#080808} # dark gray +# tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} # tmux set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ # set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ # set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" # -# tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-'#h ❐ #S ● #I #W'} +# tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} # # tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ @@ -847,15 +847,15 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') # tmux set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" # -# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-'#8a8a8a'} # white -# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-'#080808'} # dark gray -# tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-'none'} -# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-'#I #W'} +# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-#8a8a8a} # white +# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-#080808} # dark gray +# tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} +# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} # -# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-'#000000'} # black -# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-'#00afff'} # light blue -# tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-'bold'} -# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-'#I #W'} +# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-#000000} # black +# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-#00afff} # light blue +# tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} +# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} # if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then # tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_window_status_bg]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" # else @@ -882,49 +882,49 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ # setw -g window-status-current-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_current_format")" # -# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-'default'} -# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-'default'} -# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-'underscore'} +# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} +# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} +# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} # tmux setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" # -# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-'#ffff00'} # yellow -# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-'default'} -# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-'blink,bold'} +# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-#ffff00} # yellow +# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} +# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} # tmux setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" # -# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-'#00afff'} # light blue -# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-'default'} -# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-'none'} +# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-#00afff} # light blue +# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} +# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} # tmux setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" # # # -- indicators # -# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-'👓'} # U+1F453 -# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-'#e4e4e4'} # white -# tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-'none'} -# tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-'none'} +# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-👓 } # U+1F453 +# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-#e4e4e4} # white +# tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} +# tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} # -# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-'⌨'} # U+2328 -# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-'#e4e4e4'} # white -# tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-'none'} -# tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-'none'} +# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨ } # U+2328 +# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-#e4e4e4} # white +# tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} +# tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} # -# tmux_conf_theme_root=${tmux_conf_theme_root:-'!'} -# tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-'none'} -# tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-'none'} -# tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-'bold,blink'} +# tmux_conf_theme_root=${tmux_conf_theme_root:-!} +# tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-none} +# tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} +# tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} # -# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-'🔒'} # U+1F512 -# tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-'none'} -# tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-'none'} -# tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-'none'} +# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-🔒} # U+1F512 +# tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} +# tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} +# tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} # # # -- status left style # -# tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S '} -# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-'#000000,#e4e4e4,#e4e4e4'} # black, white , white -# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-'#ffff00,#ff00af,#00afff'} # yellow, pink, white blue -# tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-'bold,none,none'} +# tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} +# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-#000000,#e4e4e4,#e4e4e4} # black, white , white +# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-#ffff00,#ff00af,#00afff} # yellow, pink, white blue +# tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} # # tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g") @@ -1009,9 +1009,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # -- status right style # # tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{pairing}#{prefix} #{battery_status} #{battery_bar} #{battery_percentage} , %R , %d %b | #{username} | #{hostname} '} -# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-'#8a8a8a,#e4e4e4,#000000'} # light gray, white, black -# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-'#080808,#d70000,#e4e4e4'} # dark gray, red, white -# tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-'none,none,bold'} +# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} +# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-#8a8a8a,#e4e4e4,#000000} # light gray, white, black +# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-#080808,#d70000,#e4e4e4} # dark gray, red, white +# tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} # # tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g") @@ -1089,14 +1090,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # tmux set -g '@root' "$tmux_conf_theme_root" # -# tmux_conf_battery_bar_symbol_full=${tmux_conf_battery_bar_symbol_full:-'◼'} -# tmux_conf_battery_bar_symbol_empty=${tmux_conf_battery_bar_symbol_empty:-'◻'} -# tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-'auto'} -# tmux_conf_battery_bar_palette=${tmux_conf_battery_bar_palette:-'gradient'} -# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-'gradient'} # red, orange, green -# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-'gradient'} # red, orange, green -# tmux_conf_battery_status_charging=${tmux_conf_battery_status_charging:-'↑'} # U+2191 -# tmux_conf_battery_status_discharging=${tmux_conf_battery_status_discharging:-'↓'} # U+2193 +# tmux_conf_battery_bar_symbol_full=${tmux_conf_battery_bar_symbol_full:-◼} +# tmux_conf_battery_bar_symbol_empty=${tmux_conf_battery_bar_symbol_empty:-◻} +# tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-auto} +# tmux_conf_battery_bar_palette=${tmux_conf_battery_bar_palette:-gradient} +# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} # red, orange, green +# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} # red, orange, green +# tmux_conf_battery_status_charging=${tmux_conf_battery_status_charging:-↑} # U+2191 +# tmux_conf_battery_status_discharging=${tmux_conf_battery_status_discharging:-↓} # U+2193 # # case "$status_left $status_right" in # *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) @@ -1178,8 +1179,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- clock ------------------------------------------------------------- # -# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-'#00afff'} # light blue -# tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-'24'} +# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-#00afff} # light blue +# tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} # tmux setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ # setw -g clock-mode-style "$tmux_conf_theme_clock_style" # } From 5cc1fe9a12553099bf4147c16b7a5eeb7495a6b4 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 7 May 2019 20:28:28 +0200 Subject: [PATCH 008/155] removed subshell invocations from _is_enabled() --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index dde6fdc..3783148 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -192,7 +192,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ' # # _is_enabled() { -# ( ([ x"$1" = x"enabled" ] || [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"1" ]) && return 0 ) || return 1 +# [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] # } # # _circled() { From 9b5f5155b3e1bfb813458923d4e84f4c6b696d03 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 7 May 2019 21:48:24 +0200 Subject: [PATCH 009/155] updated _apply_configuration() to redact tmux_conf_ variables from environment in a single call --- .tmux.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 3783148..332a1f3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1216,7 +1216,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _apply_overrides # _apply_bindings # _apply_theme -# for name in $(printenv | grep -E -o '^tmux_conf_[^=]+'); do tmux setenv -gu "$name"; done; +# # shellcheck disable=SC2046 +# tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') # } # # _urlview() { From 71d5e1caa1478928c4a6f57f6e4ad6a3aaddfa14 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 13:00:08 +0200 Subject: [PATCH 010/155] sent polyglot heredoc to ':' instead of 'cat > /dev/null' forking to cat, just to write to /dev/null is wasteful --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 332a1f3..e38fd02 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,4 +1,4 @@ -# cat << EOF > /dev/null +# : << EOF # https://github.com/gpakosz/.tmux # (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, # without any warranty. From cba2a6c1ec183b23a35ecc2e413d1a95aeb12903 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 13:06:15 +0200 Subject: [PATCH 011/155] added _uname_s global variable --- .tmux.conf | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e38fd02..af1e18b 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -191,6 +191,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # __newline=' # ' # +# _uname_s=$(uname -s) +# # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] # } @@ -255,8 +257,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _battery() { # count=0 # charge=0 -# uname_s=$(uname -s) -# case "$uname_s" in +# case "$_uname_s" in # *Darwin*) # while IFS= read -r line; do # if [ x"$discharging" != x"true" ]; then @@ -472,7 +473,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _tty_info() { # tty="${1##/dev/}" -# uname -s | grep -q "CYGWIN" && cygwin=true +# case "$_uname_s" in +# *CYGWIN*) +# cygwin=true +# ;; +# esac # # if [ x"$cygwin" = x"true" ]; then # ps -af | tail -n +2 | awk -v tty="$tty" ' @@ -592,7 +597,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # } # # _uptime() { -# case $(uname -s) in +# case "$_uname_s" in # *Darwin*) # boot=$(sysctl -q -n kern.boottime | awk -F'[ ,:]+' '{ print $4 }') # now=$(date +%s) @@ -626,7 +631,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # } # # _loadavg() { -# case $(uname -s) in +# case "$_uname_s" in # *Darwin*) # tmux set -g @loadavg "$(sysctl -q -n vm.loadavg | cut -d' ' -f2)" # ;; From 94eab29107c817bbfba3c4a652b6d119f18f58b1 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 16:04:53 +0200 Subject: [PATCH 012/155] made battery status update at most every minute also, stopped updating when no client is attached --- .tmux.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index af1e18b..834de15 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1127,7 +1127,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" \;\ # set -g '@battery_status_charging' "$(_decode_unicode_escapes "$tmux_conf_battery_status_charging")" \;\ # set -g '@battery_status_discharging' "$(_decode_unicode_escapes "$tmux_conf_battery_status_discharging")" -# status_right="#(cut -c3- ~/.tmux.conf | sh -s _battery)$status_right" +# interval=60 +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery' || true +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _battery; sleep $interval; done)$status_right" # ;; # esac # From 8a5ae4f9fcd0e08a82a0405c8027e9d9e6252129 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 16:06:23 +0200 Subject: [PATCH 013/155] made uptime status update at most every minute or every 'status-interval' seconds depending on whether '#{uptime_s}' is being used also, stopped updating when no client is attached --- .tmux.conf | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 834de15..c4e9851 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1164,7 +1164,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?uptime_h/#\{\1@uptime_h/g' \ # -e 's/#\{(\?)?uptime_m/#\{\1@uptime_m/g' \ # -e 's/#\{(\?)?uptime_s/#\{\1@uptime_s/g') -# status_right="#(cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" +# interval=60 +# case "$status_left $status_right" in +# *'#{@uptime_s}'*) +# interval=$(tmux show -gv status-interval) +# ;; +# esac +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # ;; # esac # From 3676bfc6484fd44d186c1a8dc50c86b444259dba Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 16:07:56 +0200 Subject: [PATCH 014/155] made loadavg status update at most every 'status-interval' seconds also, stopped updating when no client is attached --- .tmux.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index c4e9851..c348ebe 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1181,7 +1181,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # status_right=$(echo "$status_right" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') -# status_right="#(cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" +# interval=$(tmux show -gv status-interval) +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # ;; # esac # From 5447e9fbf5b95d07ac7d8e5e3754a9789497d79a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 28 Jul 2019 16:10:41 +0200 Subject: [PATCH 015/155] made theme settings apply in background to speed up startup time --- .tmux.conf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index c348ebe..24f130f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1230,10 +1230,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # _apply_overrides -# _apply_bindings -# _apply_theme +# _apply_theme& +# _apply_bindings& # # shellcheck disable=SC2046 # tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') +# wait # } # # _urlview() { From f657d6959c1ef425667b8c4e1cf38571e2ff9c60 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 21 Aug 2019 22:10:18 +0200 Subject: [PATCH 016/155] made battery, loadavg and uptime update with low process priority --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 24f130f..e2e3cb5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1129,7 +1129,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # set -g '@battery_status_discharging' "$(_decode_unicode_escapes "$tmux_conf_battery_status_discharging")" # interval=60 # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _battery; sleep $interval; done)$status_right" +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery; sleep $interval; done)$status_right" # ;; # esac # @@ -1171,7 +1171,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # ;; # esac # @@ -1183,7 +1183,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # ;; # esac # From f54cede3680d935817da5356f5e1582c819e37ac Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 18 Sep 2019 23:17:04 +0200 Subject: [PATCH 017/155] pass $tmux_conf_theme_root to the _root() helper instead of using a tmux variable --- .tmux.conf | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e2e3cb5..38cdf13 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -587,13 +587,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _root() { # tty=${1:-$(tmux display -p '#{pane_tty}')} +# root=$2 +# # username=$(_username "$tty" false) # -# if [ x"$username" = x"root" ]; then -# tmux show -gqv '@root' -# else -# echo "" -# fi +# [ x"$username" = x"root" ] && echo "$root" # } # # _uptime() { @@ -938,7 +936,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") # # tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # # tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") @@ -1026,7 +1024,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") # # tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # # tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") @@ -1093,8 +1091,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- variables # -# tmux set -g '@root' "$tmux_conf_theme_root" -# # tmux_conf_battery_bar_symbol_full=${tmux_conf_battery_bar_symbol_full:-◼} # tmux_conf_battery_bar_symbol_empty=${tmux_conf_battery_bar_symbol_empty:-◻} # tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-auto} From 89bc03c61264947fd8e3b5835263691c55bfd31d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 22 Sep 2019 14:20:41 +0200 Subject: [PATCH 018/155] made use of #{==:a,b} to implement #{root} when available compare the output of _username() to 'root' instead of deferring to the _root() helper --- .tmux.conf | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 38cdf13..a0482fc 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -552,7 +552,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # fi # -# printf '%s' "$username" +# printf '%s\n' "$username" # } # # _hostname() { @@ -582,7 +582,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # fi # -# printf '%s' "$hostname" +# printf '%s\n' "$hostname" # } # # _root() { @@ -935,8 +935,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") # -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# if [ -n "$(tmux display -p '#{version}')" ]; then +# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# fi # # tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") @@ -1023,8 +1028,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") # -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# if [ -n "$(tmux display -p '#{version}')" ]; then +# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# fi # # tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") From d6ea9ad9c7a3a9eaeede33a5ace217d80cf8c87b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 22 Sep 2019 15:40:35 +0200 Subject: [PATCH 019/155] split _battery() into _battery_status() and _battery_bar() to refresh #{battery_status} more quickly --- .tmux.conf | 45 +++++++++++++++++++++++++++++++++------------ .tmux.conf.local | 5 ++--- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index a0482fc..2fe8e9f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -254,7 +254,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # display "mouse: $new" # } # -# _battery() { +# _battery_info() { # count=0 # charge=0 # case "$_uname_s" in @@ -301,7 +301,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # charge=$(printf '%s' "$line" | awk -v charge="$charge" '{ print charge + $2 / 100 }') # count=$((count + 1)) # done << EOF -# $(wmic path Win32_Battery get BatteryStatus, EstimatedChargeRemaining | tr -d '\r' | tail -n +2) +# $(wmic path Win32_Battery get BatteryStatus, EstimatedChargeRemaining 2> /dev/null | tr -d '\r' | tail -n +2 || true) # EOF # ;; # *OpenBSD*) @@ -319,10 +319,31 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # done # ;; # esac -# [ "$count" -ne 0 ] && charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') -# if [ "$charge" -eq 0 ]; then -# tmux set -ug '@battery_status' \;\ -# set -ug '@battery_bar' \;\ +# [ "$count" -ne 0 ] && charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') || true +# } +# +# _battery_status() { +# _battery_info +# if [ "$charge" = 0 ]; then +# tmux set -ug '@battery_status' +# return +# fi +# +# battery_status_charging=$1 +# battery_status_discharging=$2 +# if [ x"$discharging" = x"true" ]; then +# battery_status="$battery_status_discharging" +# else +# battery_status="$battery_status_charging" +# fi +# +# tmux set -g '@battery_status' "$battery_status" +# } +# +# _battery_bar() { +# _battery_info +# if [ "$charge" = 0 ]; then +# tmux set -ug '@battery_bar' \;\ # set -ug '@battery_hbar' \;\ # set -ug '@battery_vbar' \;\ # set -ug '@battery_percentage' @@ -543,9 +564,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 -# username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^user / { print $2 }') +# username=$(command ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^user / { print $2 }') # # shellcheck disable=SC2086 -# [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') +# [ -z "$username" ] && username=$(command ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') # else # if ! _is_enabled "$ssh_only"; then # username=$(printf '%s' "$tty_info" | cut -d' ' -f2) @@ -1130,12 +1151,12 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # set -g '@battery_bar_length' "$tmux_conf_battery_bar_length" \;\ # set -g '@battery_bar_palette' "$tmux_conf_battery_bar_palette" \;\ # set -g '@battery_hbar_palette' "$tmux_conf_battery_hbar_palette" \;\ -# set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" \;\ -# set -g '@battery_status_charging' "$(_decode_unicode_escapes "$tmux_conf_battery_status_charging")" \;\ -# set -g '@battery_status_discharging' "$(_decode_unicode_escapes "$tmux_conf_battery_status_discharging")" +# set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" +# tmux_conf_battery_status_charging=$(_decode_unicode_escapes "$tmux_conf_battery_status_charging") +# tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "$tmux_conf_battery_status_discharging") # interval=60 # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery; sleep $interval; done)$status_right" +# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar; sleep $interval; done)$status_right" # ;; # esac # diff --git a/.tmux.conf.local b/.tmux.conf.local index 53b94c7..069d81b 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -251,9 +251,8 @@ tmux_conf_battery_vbar_palette='gradient' # symbols used to indicate whether battery is charging or discharging tmux_conf_battery_status_charging='↑' # U+2191 tmux_conf_battery_status_discharging='↓' # U+2193 -#tmux_conf_battery_status_charging='⚡ ' # U+26A1 -#tmux_conf_battery_status_charging='🔌 ' # U+1F50C -#tmux_conf_battery_status_discharging='🔋 ' # U+1F50B +#tmux_conf_battery_status_charging='🔌' # U+1F50C +#tmux_conf_battery_status_discharging='🔋' # U+1F50B # clock style (when you hit + t) # you may want to use %I:%M %p in place of %R in tmux_conf_theme_status_right From cdda729983f107dd71708a2da48b09ed17eee872 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 22 Sep 2019 15:48:59 +0200 Subject: [PATCH 020/155] made _ssh_or_mosh_args() consume output of _tty_info() directly --- .tmux.conf | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 2fe8e9f..e89d9e8 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -546,7 +546,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # } # # _ssh_or_mosh_args() { -# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1=""; print $0; exit }') +# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = $2 = $3 = ""; print $0; exit }') # if [ -z "$args" ]; then # args=$(printf '%s' "$1" | grep 'mosh-client' | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') # fi @@ -559,14 +559,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_only=$2 # # tty_info=$(_tty_info "$tty") -# command=$(printf '%s' "$tty_info" | cut -d' ' -f3-) # -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") +# ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 -# username=$(command ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^user / { print $2 }') +# username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^user / { print $2 }') # # shellcheck disable=SC2086 -# [ -z "$username" ] && username=$(command ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') +# [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') # else # if ! _is_enabled "$ssh_only"; then # username=$(printf '%s' "$tty_info" | cut -d' ' -f2) @@ -581,9 +580,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_only=$2 # # tty_info=$(_tty_info "$tty") -# command=$(printf '%s' "$tty_info" | cut -d' ' -f3-) # -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") +# ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 # hostname=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^hostname / { print $2 }') From 03d9514071e6079a541a10f84c3f4bda48a74e52 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 25 Sep 2019 23:40:50 +0200 Subject: [PATCH 021/155] optimized _username() and _hostname() by removing some calls to external programs --- .tmux.conf | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e89d9e8..4b9d855 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -563,12 +563,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 -# username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^user / { print $2 }') +# username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^user / { print $2; exit }') # # shellcheck disable=SC2086 # [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') # else # if ! _is_enabled "$ssh_only"; then -# username=$(printf '%s' "$tty_info" | cut -d' ' -f2) +# username="${tty_info#* }" +# username="${username%% *}" # fi # fi # @@ -584,20 +585,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 -# hostname=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk 'NR > 2 { exit } ; /^hostname / { print $2 }') +# hostname=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^hostname / { print $2; exit }') # # shellcheck disable=SC2086 # [ -z "$hostname" ] && hostname=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%hostname%% %h >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%hostname% / { print $2; exit }') -# #shellcheck disable=SC1004 -# hostname=$(echo "$hostname" | awk '\ -# { \ -# if ($1~/^[0-9.:]+$/) \ -# print $1; \ -# else \ -# split($1, a, ".") ; print a[1] \ -# }') +# +# case "$hostname" in +# *[a-z-].*) +# hostname=${hostname%%.*} +# ;; +# 127.0.0.1) +# hostname="localhost" +# ;; +# esac # else # if ! _is_enabled "$ssh_only"; then -# hostname=$(command hostname -s) +# hostname=$3 # fi # fi # @@ -864,9 +866,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # tmux set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-#8a8a8a} # white @@ -888,16 +890,16 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # # tmux setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ # setw -g window-status-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_format")" \;\ @@ -1162,14 +1164,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # *'#{username}'*|*'#{hostname}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*) # status_left=$(echo "$status_left" | sed \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # status_right=$(echo "$status_right" | sed \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # ;; # esac # From 20fa97e310f0e98d259182bb47c88d4e159cb6bb Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 26 Sep 2019 13:45:35 +0200 Subject: [PATCH 022/155] optimized _ssh_or_mosh_args() by deferring calls to external programs --- .tmux.conf | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 4b9d855..e409b52 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -546,10 +546,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # } # # _ssh_or_mosh_args() { -# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = $2 = $3 = ""; print $0; exit }') -# if [ -z "$args" ]; then -# args=$(printf '%s' "$1" | grep 'mosh-client' | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') -# fi +# case "$1" in +# *ssh*) +# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = $2 = $3 = ""; print $0; exit }') +# ;; +# *mosh-client*) +# args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') +# ;; +# esac # # printf '%s' "$args" # } From 7d02a72a466ceb493ec6a27598bc09363a13b528 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 27 Sep 2019 21:41:54 +0200 Subject: [PATCH 023/155] rewrote _apply_theme() to minimize the number of external calls --- .tmux.conf | 157 +++++++++++++++++++++++------------------------------ 1 file changed, 67 insertions(+), 90 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e409b52..11a7bc8 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -802,15 +802,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} # default # tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-#0087d7} # light blue # -# # tmux 1.9 doesn't really like set -q -# if tmux show -g -w | grep -q window-style; then -# tmux setw -g window-style "fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" -# -# if _is_enabled "$tmux_conf_theme_highlight_focused_pane"; then -# tmux setw -g window-active-style "fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" -# else -# tmux setw -g window-active-style default -# fi +# window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" +# if _is_enabled "$tmux_conf_theme_highlight_focused_pane"; then +# window_active_style="fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" +# else +# window_active_style="default" # fi # # tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} @@ -828,13 +824,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-default} # ;; # esac -# tmux setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" # # tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-#00afff} # light blue # tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-#00afff} # light blue # -# tmux set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" -# # # -- status line ------------------------------------------------------- # # tmux_conf_theme_left_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_main-}") @@ -845,24 +838,18 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-#000000} # black # tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-#ffff00} # yellow # tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} -# tmux set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" # # tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-#ffff00} # yellow # tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-#000000} # black # tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} -# tmux set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" # # tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-#000000} # black # tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-#ffff00} # yellow # tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} -# tmux setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" # # tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-#8a8a8a} # white # tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-#080808} # dark gray # tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} -# tmux set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" # # tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} # @@ -873,7 +860,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') -# tmux set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-#8a8a8a} # white # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-#080808} # dark gray @@ -905,25 +891,17 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # -# tmux setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ -# setw -g window-status-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_format")" \;\ -# setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ -# setw -g window-status-current-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_current_format")" -# # tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} # tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} # tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} -# tmux setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" # # tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-#ffff00} # yellow # tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} # tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} -# tmux setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" # # tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-#00afff} # light blue # tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} # tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} -# tmux setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" # # # -- indicators # @@ -954,31 +932,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-#ffff00,#ff00af,#00afff} # yellow, pink, white blue # tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} # -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g") -# -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# -# tmux_conf_theme_status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") -# # if [ -n "$tmux_conf_theme_status_left" ]; then -# status_left=$(awk \ +# status_left=$(printf '%s' "$tmux_conf_theme_status_left" | awk \ # -v fg_="$tmux_conf_theme_status_left_fg" \ # -v bg_="$tmux_conf_theme_status_left_bg" \ # -v attr_="$tmux_conf_theme_status_left_attr" \ # -v mainsep="$tmux_conf_theme_left_separator_main" \ # -v subsep="$tmux_conf_theme_left_separator_sub" ' -# function subsplit(s, l, i, a, r) +# function subsplit(s, l, i, a, r) # { # l = split(s, a, ",") # for (i = 1; i <= l; ++i) @@ -1031,10 +992,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # } # } # printf "#[fg=%s,bg=%s,none]%s", bg[j_], "default", mainsep -# }' << EOF -# $tmux_conf_theme_status_left -# EOF -# ) +# }') +# fi +# +# status_left=$(echo "$status_left" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') +# +# if [ -n "$(tmux display -p '#{version}')" ]; then +# status_left=$(echo "$status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# status_left=$(echo "$status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_left="$status_left " @@ -1047,31 +1019,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-#080808,#d70000,#e4e4e4} # dark gray, red, white # tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} # -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g") -# -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g") -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# -# tmux_conf_theme_status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g") -# # if [ -n "$tmux_conf_theme_status_right" ]; then -# status_right=$(awk \ +# status_right=$(printf '%s' "$tmux_conf_theme_status_right" | awk \ # -v fg_="$tmux_conf_theme_status_right_fg" \ # -v bg_="$tmux_conf_theme_status_right_bg" \ # -v attr_="$tmux_conf_theme_status_right_attr" \ # -v mainsep="$tmux_conf_theme_right_separator_main" \ # -v subsep="$tmux_conf_theme_right_separator_sub" ' -# function subsplit(s, l, i, a, r) +# function subsplit(s, l, i, a, r) # { # l = split(s, a, ",") # for (i = 1; i <= l; ++i) @@ -1118,10 +1073,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # j = j % l + 1 # } # } -# }' << EOF -# $tmux_conf_theme_status_right -# EOF -# ) +# }') +# fi +# +# status_right=$(echo "$status_right" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') +# +# if [ -n "$(tmux display -p '#{version}')" ]; then +# status_right=$(echo "$status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# status_right=$(echo "$status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # # -- variables @@ -1149,15 +1115,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# -# tmux set -g '@battery_bar_symbol_full' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_full")" \;\ -# set -g '@battery_bar_symbol_empty' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_empty")" \;\ -# set -g '@battery_bar_length' "$tmux_conf_battery_bar_length" \;\ -# set -g '@battery_bar_palette' "$tmux_conf_battery_bar_palette" \;\ -# set -g '@battery_hbar_palette' "$tmux_conf_battery_hbar_palette" \;\ -# set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" -# tmux_conf_battery_status_charging=$(_decode_unicode_escapes "$tmux_conf_battery_status_charging") -# tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "$tmux_conf_battery_status_discharging") # interval=60 # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery' || true # status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar; sleep $interval; done)$status_right" @@ -1218,18 +1175,38 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # -# status_left=$(echo "$status_left" | sed 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# status_right=$(echo "$status_right" | sed 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# tmux set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ -# set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" -# # # -- clock ------------------------------------------------------------- # # tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-#00afff} # light blue # tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} -# tmux setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ -# setw -g clock-mode-style "$tmux_conf_theme_clock_style" +# +# tmux setw -g window-style "$window_style" \; setw -g window-active-style "$window_active_style" \;\ +# setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" \;\ +# set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" \;\ +# set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" \;\ +# set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" \;\ +# setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" \;\ +# set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" \;\ +# setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ +# setw -g window-status-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_format")" \;\ +# setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ +# setw -g window-status-current-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_current_format")" \;\ +# setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ +# setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ +# setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ +# set -g '@battery_bar_symbol_full' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_full")" \;\ +# set -g '@battery_bar_symbol_empty' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_empty")" \;\ +# set -g '@battery_bar_length' "$tmux_conf_battery_bar_length" \;\ +# set -g '@battery_bar_palette' "$tmux_conf_battery_bar_palette" \;\ +# set -g '@battery_hbar_palette' "$tmux_conf_battery_hbar_palette" \;\ +# set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" \;\ +# set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ +# set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" \;\ +# setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ +# setw -g clock-mode-style "$tmux_conf_theme_clock_style" # } # # _apply_configuration() { From 22de5533615d4671e95f2c5719ef540864bd4853 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 29 Sep 2019 13:14:37 +0200 Subject: [PATCH 024/155] optimized _tty_info() --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 11a7bc8..4fdb638 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -525,7 +525,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # else # ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk ' # NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { -# user[$2] = $1; parent[$2] = $3; child[$3] = $2; for (i = 4 ; i <= NF; ++i) command[$2] = i > 4 ? command[$2] FS $i : $i +# user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = $0 # } # END { # for (i in parent) From eae2cf27fb3cb3de19a43d6585872f051dc1de5d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 20 Dec 2019 18:22:19 +0100 Subject: [PATCH 025/155] optimized _apply_theme() to launch background jobs straight from _apply_configuration() tmux doesn't share jobs between clients, and when multiple clients are attached the _load_avg(), _uptime() and _battery_bar() jobs get spawned once per client attached, which is wasteful --- .tmux.conf | 49 +++++++++++-------------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 4fdb638..e9e43d3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -188,9 +188,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # fi # -# __newline=' -# ' -# # _uname_s=$(uname -s) # # _is_enabled() { @@ -350,25 +347,12 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # return # fi # -# variables=$(tmux show -gqv '@battery_bar_symbol_full' \;\ -# show -gqv '@battery_bar_symbol_empty' \;\ -# show -gqv '@battery_bar_length' \;\ -# show -gqv '@battery_bar_palette' \;\ -# show -gqv '@battery_hbar_palette' \;\ -# show -gqv '@battery_vbar_palette' \;\ -# show -gqv '@battery_status_charging' \;\ -# show -gqv '@battery_status_discharging') -# # shellcheck disable=SC2086 -# { set -f; IFS="$__newline"; set -- $variables; unset IFS; set +f; } -# # battery_bar_symbol_full=$1 # battery_bar_symbol_empty=$2 # battery_bar_length=$3 # battery_bar_palette=$4 # battery_hbar_palette=$5 # battery_vbar_palette=$6 -# battery_status_charging=$7 -# battery_status_discharging=$8 # # if [ x"$battery_bar_length" = x"auto" ]; then # columns=$(tmux -q display -p '#{client_width}' 2> /dev/null || echo 80) @@ -379,12 +363,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # fi # -# if [ x"$discharging" = x"true" ]; then -# battery_status="$battery_status_discharging" -# else -# battery_status="$battery_status_charging" -# fi -# # if echo "$battery_bar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then # # shellcheck disable=SC2086 # { set -f; IFS=,; set -- $battery_bar_palette; unset IFS; set +f; } @@ -1092,14 +1070,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- variables # -# tmux_conf_battery_bar_symbol_full=${tmux_conf_battery_bar_symbol_full:-◼} -# tmux_conf_battery_bar_symbol_empty=${tmux_conf_battery_bar_symbol_empty:-◻} +# tmux_conf_battery_bar_symbol_full=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_full:-◼}") +# tmux_conf_battery_bar_symbol_empty=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_empty:-◻}") # tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-auto} # tmux_conf_battery_bar_palette=${tmux_conf_battery_bar_palette:-gradient} -# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} # red, orange, green -# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} # red, orange, green -# tmux_conf_battery_status_charging=${tmux_conf_battery_status_charging:-↑} # U+2191 -# tmux_conf_battery_status_discharging=${tmux_conf_battery_status_discharging:-↓} # U+2193 +# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} # red, orange, green +# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} # red, orange, green +# tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 +# tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # # case "$status_left $status_right" in # *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) @@ -1116,8 +1094,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') # interval=60 -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery' || true -# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar; sleep $interval; done)$status_right" +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' || true +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" +# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" # ;; # esac # @@ -1159,7 +1138,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" # ;; # esac # @@ -1171,7 +1150,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true -# status_right="#(printf '\n'; while [ \$(tmux display -p '##{session_attached}') -gt 0 ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" # ;; # esac # @@ -1197,12 +1176,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ # setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ # setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ -# set -g '@battery_bar_symbol_full' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_full")" \;\ -# set -g '@battery_bar_symbol_empty' "$(_decode_unicode_escapes "$tmux_conf_battery_bar_symbol_empty")" \;\ -# set -g '@battery_bar_length' "$tmux_conf_battery_bar_length" \;\ -# set -g '@battery_bar_palette' "$tmux_conf_battery_bar_palette" \;\ -# set -g '@battery_hbar_palette' "$tmux_conf_battery_hbar_palette" \;\ -# set -g '@battery_vbar_palette' "$tmux_conf_battery_vbar_palette" \;\ # set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ # set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" \;\ # setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ From f7e383460d60bdd2950b69bea86dd5b36eb905e3 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 22 Dec 2019 10:35:42 +0100 Subject: [PATCH 026/155] moved pkill calls outside of case blocks otherwise if you change tmux_conf_theme_status_left or tmux_conf_theme_status_right and remove #{uptime_x}, #{loadavg} or #{battery_xxx} variables you end up with stray jobs running in the background --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e9e43d3..2b09b13 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1079,6 +1079,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 # tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' || true # case "$status_left $status_right" in # *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) # status_left=$(echo "$status_left" | sed -E \ @@ -1094,7 +1095,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') # interval=60 -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' || true # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" # status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" # ;; @@ -1115,6 +1115,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true # case "$status_left $status_right" in # *'#{uptime_d}'*|*'#{uptime_h}'*|*'#{uptime_m}'*|*'#{uptime_s}'*) # status_left=$(echo "$status_left" | sed -E \ @@ -1137,11 +1138,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=$(tmux show -gv status-interval) # ;; # esac -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" # ;; # esac # +# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true # case "$status_left $status_right" in # *'#{loadavg}'*) # status_left=$(echo "$status_left" | sed -E \ @@ -1149,7 +1150,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # status_right=$(echo "$status_right" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" # ;; # esac From 98c74671949d11b61ae519e4dd9a1dd70d6440e8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 17 Feb 2020 20:20:19 +0100 Subject: [PATCH 027/155] launch _battery_bar() background job only if a battery is present --- .tmux.conf | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 2b09b13..567db7f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1080,25 +1080,28 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # # pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' || true -# case "$status_left $status_right" in -# *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) -# status_left=$(echo "$status_left" | sed -E \ -# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ -# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ -# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ -# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ -# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# status_right=$(echo "$status_right" | sed -E \ -# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ -# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ -# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ -# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ -# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# interval=60 -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" -# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" -# ;; -# esac +# _battery_info +# if [ "$charge" != 0 ]; then +# case "$status_left $status_right" in +# *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) +# status_left=$(echo "$status_left" | sed -E \ +# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ +# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ +# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ +# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ +# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') +# status_right=$(echo "$status_right" | sed -E \ +# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ +# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ +# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ +# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ +# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') +# interval=60 +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" +# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" +# ;; +# esac +# fi # # case "$status_left $status_right" in # *'#{username}'*|*'#{hostname}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*) From 74602e8d8dc1fc51e1c2c18423f4c43ed55d1fea Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 18 Feb 2020 21:22:29 +0100 Subject: [PATCH 028/155] implemented poor man's pkill --- .tmux.conf | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 567db7f..f9a2ed5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -209,6 +209,33 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # printf '%s' "$*" | perl -CS -pe 's/(\\u([0-9A-Fa-f]{1,4})|\\U([0-9A-Fa-f]{1,8}))/chr(hex($2.$3))/eg' 2>/dev/null # } # +# if command -v pkill > /dev/null 2>&1; then +# _pkillf() { +# pkill -f "$@" || true +# } +# else +# case "$_uname_s" in +# *CYGWIN*) +# _pkillf() { +# while IFS= read -r pid; do +# kill "$pid" || true +# done << EOF +# $(grep -Eao "$@" /proc/*/cmdline | xargs -0 | sed -E -n 's,/proc/([0-9]+)/.+$,\1,pg') +# EOF +# } +# ;; +# *) +# _pkillf() { +# while IFS= read -r pid; do +# kill "$pid" || true +# done << EOF +# $(ps -x -o pid= -o command= | grep -E "$@" | cut -d' ' -f1) +# EOF +# } +# ;; +# esac +# fi +# # _maximize_pane() { # current_session=${1:-$(tmux display -p '#{session_name}')} # current_pane=${2:-$(tmux display -p '#{pane_id}')} @@ -1079,7 +1106,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 # tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' || true +# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' # _battery_info # if [ "$charge" != 0 ]; then # case "$status_left $status_right" in @@ -1118,7 +1145,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' || true +# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' # case "$status_left $status_right" in # *'#{uptime_d}'*|*'#{uptime_h}'*|*'#{uptime_m}'*|*'#{uptime_s}'*) # status_left=$(echo "$status_left" | sed -E \ @@ -1145,7 +1172,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # -# pkill -f 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' || true +# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' # case "$status_left $status_right" in # *'#{loadavg}'*) # status_left=$(echo "$status_left" | sed -E \ From 7a64679c2d9ed74aceefcb3ef444e5f31de6ffb5 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 26 Apr 2020 15:56:48 +0200 Subject: [PATCH 029/155] fixed #{username} being truncated under Cygwin --- .tmux.conf | 105 +++++++++++++++++++++++++++-------------------------- 1 file changed, 54 insertions(+), 51 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index f9a2ed5..c6b5283 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -501,59 +501,57 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tty="${1##/dev/}" # case "$_uname_s" in # *CYGWIN*) -# cygwin=true +# ps -al | tail -n +2 | awk -v tty="$tty" ' +# ((/ssh/ && !/-W/) || !/ssh/) && $5 == tty { +# user[$1] = $6; parent[$1] = $2; child[$2] = $1 +# } +# END { +# for (i in parent) +# { +# j = i +# while (parent[j]) +# j = parent[j] +# +# if (!(i in child) && j != 1) +# { +# file = "/proc/" i "/cmdline"; getline command < file; close(file) +# gsub(/\0/, " ", command) +# "id -un " user[i] | getline username +# print i":"username":"command +# exit +# } +# } +# } +# ' +# ;; +# *) +# ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk ' +# NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { +# user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) +# } +# END { +# for (i in parent) +# { +# j = i +# while (parent[j]) +# j = parent[j] +# +# if (!(i in child) && j != 1) +# { +# print i":"user[i]":"command[i] +# exit +# } +# } +# } +# ' # ;; # esac -# -# if [ x"$cygwin" = x"true" ]; then -# ps -af | tail -n +2 | awk -v tty="$tty" ' -# ((/ssh/ && !/-W/) || !/ssh/) && $4 == tty { -# user[$2] = $1; parent[$2] = $3; child[$3] = $2 -# } -# END { -# for (i in parent) -# { -# j = i -# while (parent[j]) -# j = parent[j] -# -# if (!(i in child) && j != 1) -# { -# file = "/proc/" i "/cmdline"; getline command < file; close(file) -# gsub(/\0/, " ", command) -# print i, user[i], command -# exit -# } -# } -# } -# ' -# else -# ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk ' -# NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { -# user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = $0 -# } -# END { -# for (i in parent) -# { -# j = i -# while (parent[j]) -# j = parent[j] -# -# if (!(i in child) && j != 1) -# { -# print i, user[i], command[i] -# exit -# } -# } -# } -# ' -# fi # } # # _ssh_or_mosh_args() { # case "$1" in # *ssh*) -# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = $2 = $3 = ""; print $0; exit }') +# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = ""; print $0; exit }') # ;; # *mosh-client*) # args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') @@ -568,8 +566,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_only=$2 # # tty_info=$(_tty_info "$tty") +# command=${tty_info#*:} +# command=${command#*:} # -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") +# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 # username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^user / { print $2; exit }') @@ -577,8 +577,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') # else # if ! _is_enabled "$ssh_only"; then -# username="${tty_info#* }" -# username="${username%% *}" +# username=${tty_info#*:} +# username=${username%%:*} # fi # fi # @@ -590,8 +590,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ssh_only=$2 # # tty_info=$(_tty_info "$tty") +# command=${tty_info#*:} +# command=${command#*:} # -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$tty_info") +# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") # if [ -n "$ssh_or_mosh_args" ]; then # # shellcheck disable=SC2086 # hostname=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^hostname / { print $2; exit }') @@ -677,7 +679,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # shift # # tty_info=$(_tty_info "$tty") -# command=$(printf '%s' "$tty_info" | cut -d' ' -f3-) +# command=${tty_info#*:} +# command=${command#*:} # # case "$command" in # *mosh-client*) From cb2bd9f3787f17c335cacfc05ba8f2f6d8316d81 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 1 May 2020 13:46:03 +0200 Subject: [PATCH 030/155] made #{loadavg} work under Cygwin --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index c6b5283..2d860ee 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -665,7 +665,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # *Darwin*) # tmux set -g @loadavg "$(sysctl -q -n vm.loadavg | cut -d' ' -f2)" # ;; -# *Linux*) +# *Linux*|*CYGWIN*) # tmux set -g @loadavg "$(cut -d' ' -f1 < /proc/loadavg)" # ;; # *OpenBSD*) From 9e25f3a5504eb8793c8b893a75b4e13d60c8dc1b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 1 May 2020 22:24:41 +0200 Subject: [PATCH 031/155] fixed _apply_bindings() to support paths with spaces _split_window() needs to be given -c '#{pane_current_path}', properly quoted --- .tmux.conf | 60 +++++++++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 2d860ee..ccea561 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -712,51 +712,47 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _apply_bindings() { # cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT # -# tmux list-keys | grep -vF 'tmux.conf.local' | grep -E '(new-window|split(-|_)window|new-session|copy-selection|copy-pipe)' > "$cfg" +# tmux list-keys | grep -vF 'tmux.conf.local' | grep -E 'new-window|split(-|_)window|new-session|copy-selection|copy-pipe' > "$cfg" # # # tmux 3.0 doesn't include 02254d1e5c881be95fd2fc37b4c4209640b6b266 and the # # output of list-keys can be truncated # perl -p -i -e "s/'#\{\?window_zoomed_flag,Unzoom,Zoom\}' 'z' \{resize-pane -$/'#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}\"/g" "$cfg" # +# perl -p -i -e " +# s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g +# ; +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_tty}\2\5\1/g +# ; +# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{pane_tty\}\3)(.*?)\2/split-window\4/g +# ; +# s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ +# "$cfg" +# # tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} # if _is_enabled "$tmux_conf_new_window_retain_current_path"; then -# perl -p -i \ -# -e "s/\b(new-window)\b(?!\s+-)/{$&}/g if /\bdisplay-menu\b/" \ -# -e ';' \ -# -e "s/\bnew-window\b(?!([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2))/new-window -c '#{pane_current_path}'/g" \ +# perl -p -i -e " +# s/\bnew-window\b(?!\s+-)/{$&}/g if /\bdisplay-menu\b/ +# ; +# s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ # "$cfg" -# else -# perl -p -i -e "s/\bnew-window\b([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2)/new-window\1/g" "$cfg" # fi # # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} -# if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then -# perl -p -i -e "s/\bsplit-window\b(?!([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2))/split-window -c '#{pane_current_path}'/g" "$cfg" -# else -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" "$cfg" -# fi -# # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then -# if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then -# perl -p -i \ -# -e "s/\bsplit-window\b([^;}\n\"]*?)(?:\s+-c\s+(\\\?\"?|'?)#\{pane_current_path\}\2)([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #{pane_tty}\1\3 -c #\{pane_current_path\}'/g" \ -# -e ';' \ -# -e "s/\b_split_window\b\s+#\{pane_tty\}(.*?)\s+-c\s+\\\\\"#\{pane_current_path\}\\\\\"\"/_split_window #{pane_tty}\1 -c \\\\\"#{pane_current_path}\\\\\"\"/g" \ -# "$cfg" -# else -# perl -p -i \ -# -e "s/\bsplit-window\b([^;}\n]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #{pane_tty}\1'/g" \ -# -e ';' \ -# -e "s/\b_split_window\b\s+#\{pane_tty\}(.*?)\s+-c\s+\\\\\"#\{pane_current_path\}\\\\\"\"/_split_window #{pane_tty}\1\"/g" \ -# "$cfg" -# fi -# else -# if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then -# perl -p -i -e "s/\brun-shell\b(\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\})(.*?)\s+-c\s+#\{pane_current_path\}\2/split-window\3 -c '#{pane_current_path}'/g" "$cfg" -# else -# perl -p -i -e "s/\brun-shell\b(\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\})(.*)\2/split-window\3/g" "$cfg" -# fi +# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_tty\}\1'/g" "$cfg" +# fi +# +# if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then +# perl -p -i -e " +# s/\bsplit-window\b(?!\s+-)/{$&}/g if /\bdisplay-menu\b/ +# ; +# s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g +# ; +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window #\{pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\1'/g if /\bdisplay-menu\b/ +# ; +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window #\{pane_tty\} -c \"#\{pane_current_path\}\"\1'/g" \ +# "$cfg" # fi # # tmux_conf_new_session_prompt=${tmux_conf_new_session_prompt:-false} From a8081d87befb0627d6906b7ca43aa567468e3a18 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 3 Jun 2020 20:06:56 +0200 Subject: [PATCH 032/155] fixed tmux_conf_new_window_retain_current_path and tmux_conf_new_pane_retain_current_path not working under Cygwin and MSYS2 --- .tmux.conf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index ccea561..8edd999 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1239,6 +1239,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # esac # fi # +# case "$_uname_s" in +# *CYGWIN*|*MSYS*) +# # prevent Cygwin and MSYS2 from cd-ing into home directory when evaluating /etc/profile +# tmux setenv -g CHERE_INVOKING 1 +# ;; +# esac +# # _apply_overrides # _apply_theme& # _apply_bindings& From d357ae54ee02f750e4d0687dd3f9e843fd047a99 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 23 Jul 2020 12:41:12 +0200 Subject: [PATCH 033/155] removed useless tests in _battery_info() --- .tmux.conf | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 8edd999..8f07d47 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -284,9 +284,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # case "$_uname_s" in # *Darwin*) # while IFS= read -r line; do -# if [ x"$discharging" != x"true" ]; then -# discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") -# fi +# discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") # percentage=$(printf '%s' "$line" | grep -E -o '[0-9]+%') # charge=$(awk -v charge="$charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') # count=$((count + 1)) @@ -298,9 +296,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # while IFS= read -r batpath; do # grep -i -q device "$batpath/scope" 2> /dev/null && continue # -# if [ x"$discharging" != x"true" ]; then -# discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") -# fi +# discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") # bat_capacity="$batpath/capacity" # if [ -r "$bat_capacity" ]; then # charge=$(awk -v charge="$charge" -v capacity="$(cat "$bat_capacity")" 'BEGIN { print charge + capacity / 100 }') @@ -319,9 +315,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # *CYGWIN*|*MSYS*|*MINGW*) # while IFS= read -r line; do # [ -z "$line" ] && continue -# if [ x"$discharging" != x"true" ]; then -# discharging=$(printf '%s' "$line" | awk '{ s = ($1 == 1) ? "true" : "false"; print s }') -# fi +# discharging=$(printf '%s' "$line" | awk '{ s = ($1 == 1) ? "true" : "false"; print s }') # charge=$(printf '%s' "$line" | awk -v charge="$charge" '{ print charge + $2 / 100 }') # count=$((count + 1)) # done << EOF @@ -331,9 +325,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # *OpenBSD*) # for batid in 0 1 2; do # sysctl -n "hw.sensors.acpibat$batid.raw0" 2>&1 | grep -q 'not found' && continue -# if [ x"$discharging" != x"true" ]; then -# discharging=$(sysctl -n "hw.sensors.acpibat$batid.raw0" | grep -q 1 && echo "true" || echo "false") -# fi +# discharging=$(sysctl -n "hw.sensors.acpibat$batid.raw0" | grep -q 1 && echo "true" || echo "false") # if sysctl -n "hw.sensors.acpibat$batid" | grep -q amphour; then # charge=$(awk -v charge="$charge" -v remaining="$(sysctl -n hw.sensors.acpibat$batid.amphour3 | cut -d' ' -f1)" -v full="$(sysctl -n hw.sensors.acpibat$batid.amphour0 | cut -d' ' -f1)" 'BEGIN { print charge + remaining / full }') # else From 5d895f94b7c811f9599383b16c3f608bcb21bb44 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 23 Jul 2020 12:43:52 +0200 Subject: [PATCH 034/155] fixed _battery_info() not accommodating for empty lines, fixes #377 --- .tmux.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index 8f07d47..ee07a8a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -284,6 +284,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # case "$_uname_s" in # *Darwin*) # while IFS= read -r line; do +# [ -z "$line" ] && continue # discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") # percentage=$(printf '%s' "$line" | grep -E -o '[0-9]+%') # charge=$(awk -v charge="$charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') @@ -294,6 +295,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # *Linux*) # while IFS= read -r batpath; do +# [ -z "$batpath" ] && continue # grep -i -q device "$batpath/scope" 2> /dev/null && continue # # discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") From 450d3362b5a6574df0ca7e542a9f3aa99e73e5b3 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 6 Sep 2020 20:32:13 +0200 Subject: [PATCH 035/155] updated installation instructions, closes #348 --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 470007d..2b4c069 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,19 @@ $ ln -s -f .tmux/.tmux.conf $ cp .tmux/.tmux.conf.local . ``` +💡 You can clone the repository anywhere you want, provided you create the +proper `~/.tmux.conf` symlink and you copy the `.tmux.conf.local` sample file in +your home directory: + +``` +$ git clone https://github.com/gpakosz/.tmux.git /path/to/oh-my-tmux +$ ln -s -f /path/to/oh-my-tmux/.tmux.conf ~/.tmux.conf +$ cp /path/t/oh-my-tmux/.tmux.conf.local ~/.tmux.conf.local +``` + Then proceed to [customize] your `~/.tmux.conf.local` copy. -[customize]: #enabling-the-powerline-look +[customize]: #configuration If you're a Vim user, setting the `$EDITOR` environment variable to `vim` will enable and further customize the vi-style key bindings (see tmux manual). From 3648465c33b9b5487cf4bf5970765cf0c430d73a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 7 Sep 2020 15:57:58 +0200 Subject: [PATCH 036/155] added a sleep call to the wttr.in example to throttle network requests, closes #297 --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b4c069..84de36b 100644 --- a/README.md +++ b/README.md @@ -278,8 +278,10 @@ Beside custom variables mentioned above, the `tmux_conf_theme_status_left` and `#()` to call an external command that inserts weather information provided by [wttr.in]: ``` -tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #(curl wttr.in?format=3) , %R , %d %b | #{username}#{root} | #{hostname} ' +tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #(curl -m 1 wttr.in?format=3 2>/dev/null; sleep 900) , %R , %d %b | #{username}#{root} | #{hostname} ' ``` +The `sleep 900` call makes sure the network request is issued at most every 15 +minutes whatever the value of `status-interval`. ![Weather information from wttr.in](https://user-images.githubusercontent.com/553208/52175490-07797c00-27a5-11e9-9fb6-42eec4fe4188.png) From f1db02086fadc4e87e3f03ee9e4c78b759c8bc28 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 7 Sep 2020 23:23:04 +0200 Subject: [PATCH 037/155] updated README.md to mention strftime(3) peculiarities, closes #309 --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 84de36b..dbcbb23 100644 --- a/README.md +++ b/README.md @@ -287,6 +287,15 @@ minutes whatever the value of `status-interval`. [wttr.in]: https://github.com/chubin/wttr.in#one-line-output +Finally, remember `tmux_conf_theme_status_left` and +`tmux_conf_theme_status_right` end up being given to tmux as `status-left` and +`status-right` which means they're passed through `strftime()`. As such, the `%` +character has a special meaning and needs to be escaped by doubling it, e.g. +``` +tmux_conf_theme_status_right='#(echo foo %% bar)' +``` +See `man 3 strftime`. + ### Accessing the macOS clipboard from within tmux sessions [Chris Johnsen created the `reattach-to-user-namespace` From 3522721c6952a3127401e5dd3bba99a443bec550 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 10 Sep 2020 12:40:05 +0200 Subject: [PATCH 038/155] fixed status-left and status-right theming, fixes #397 --- .tmux.conf | 64 +++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ee07a8a..dcee8c6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -923,7 +923,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} # tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} # -# # -- status left style +# # -- status-left style # # tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} # tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-#000000,#e4e4e4,#e4e4e4} # black, white , white @@ -931,7 +931,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} # # if [ -n "$tmux_conf_theme_status_left" ]; then -# status_left=$(printf '%s' "$tmux_conf_theme_status_left" | awk \ +# status_left=$(echo "$tmux_conf_theme_status_left" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') +# +# if [ -n "$(tmux display -p '#{version}')" ]; then +# status_left=$(echo "$status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# status_left=$(echo "$status_left" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# fi +# +# status_left=$(printf '%s' "$status_left" | awk \ # -v fg_="$tmux_conf_theme_status_left_fg" \ # -v bg_="$tmux_conf_theme_status_left_bg" \ # -v attr_="$tmux_conf_theme_status_left_attr" \ @@ -993,23 +1007,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # }') # fi # -# status_left=$(echo "$status_left" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# # status_left="$status_left " # -# # -- status right style +# # -- status-right style # # tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{pairing}#{prefix} #{battery_status} #{battery_bar} #{battery_percentage} , %R , %d %b | #{username} | #{hostname} '} # tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} @@ -1018,7 +1018,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} # # if [ -n "$tmux_conf_theme_status_right" ]; then -# status_right=$(printf '%s' "$tmux_conf_theme_status_right" | awk \ +# status_right=$(echo "$tmux_conf_theme_status_right" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') +# +# if [ -n "$(tmux display -p '#{version}')" ]; then +# status_right=$(echo "$status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# else +# status_right=$(echo "$status_right" | sed \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# fi +# +# status_right=$(printf '%s' "$status_right" | awk \ # -v fg_="$tmux_conf_theme_status_right_fg" \ # -v bg_="$tmux_conf_theme_status_right_bg" \ # -v attr_="$tmux_conf_theme_status_right_attr" \ @@ -1074,20 +1088,6 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # }') # fi # -# status_right=$(echo "$status_right" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# # # -- variables # # tmux_conf_battery_bar_symbol_full=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_full:-◼}") From b4a5d06740c2dc10c5dda15d7bf8cb37d1d51136 Mon Sep 17 00:00:00 2001 From: Joachim Werner Date: Sun, 13 Sep 2020 14:15:58 +0200 Subject: [PATCH 039/155] made #{loadavg} work under FreeBSD --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index dcee8c6..4bf0f28 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -656,7 +656,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _loadavg() { # case "$_uname_s" in -# *Darwin*) +# *Darwin*|*FreeBSD*) # tmux set -g @loadavg "$(sysctl -q -n vm.loadavg | cut -d' ' -f2)" # ;; # *Linux*|*CYGWIN*) From 39cc430268b68899ababf0e0489bdff5a76a6864 Mon Sep 17 00:00:00 2001 From: Joachim Werner Date: Sun, 13 Sep 2020 14:17:09 +0200 Subject: [PATCH 040/155] made #{uptime_xxx} work under FreeBSD --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 4bf0f28..9c09cc3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -622,7 +622,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _uptime() { # case "$_uname_s" in -# *Darwin*) +# *Darwin*|*FreeBSD*) # boot=$(sysctl -q -n kern.boottime | awk -F'[ ,:]+' '{ print $4 }') # now=$(date +%s) # ;; From 17b9a7a59a008879f504be853ea3e6aa95250993 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 16 Sep 2020 22:05:39 +0200 Subject: [PATCH 041/155] enabled GitHub sponsors, closes #339 --- .github/funding.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/funding.yml diff --git a/.github/funding.yml b/.github/funding.yml new file mode 100644 index 0000000..a942c9f --- /dev/null +++ b/.github/funding.yml @@ -0,0 +1 @@ +github: gpakosz From 8976729f4f66ab9d2b5845a21a267e06267023aa Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 6 Sep 2020 18:23:12 +0200 Subject: [PATCH 042/155] added support for explicit 'split-window' with ssh reconnect, closes #164 tmux only allows binding to existing commands, so when the command given to 'split-window' is 'ssh' and only 'ssh', the binding is converted to a call to _split_window_ssh() --- .tmux.conf | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 9c09cc3..f1c0d4e 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -668,7 +668,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # esac # } # -# _split_window() { +# _split_window_ssh() { # tty=${1:-$(tmux display -p '#{pane_tty}')} # shift # @@ -690,6 +690,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # esac # } # +# _split_window() { +# _split_window_ssh "$@" +# } +# # _apply_overrides() { # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-false} # if _is_enabled "$tmux_conf_theme_24b_colour"; then @@ -731,6 +735,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # "$cfg" # fi # +# perl -p -i -e " +# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# "$cfg" +# # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then @@ -743,9 +751,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window #\{pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\1'/g if /\bdisplay-menu\b/ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window #\{pane_tty\} -c \"#\{pane_current_path\}\"\1'/g" \ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ # "$cfg" # fi # From 3c09b78aa620150718ada9384d4457b38da78eff Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 16 Sep 2020 21:03:08 +0200 Subject: [PATCH 043/155] replaced awk by perl in _ssh_or_mosh_args() to benefit from word boundary anchors, closes #363 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index f1c0d4e..d5e696d 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -545,7 +545,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _ssh_or_mosh_args() { # case "$1" in # *ssh*) -# args=$(printf '%s' "$1" | awk '/ssh/ && !/vagrant ssh/ && !/autossh/ && !/-W/ { $1 = ""; print $0; exit }') +# args=$(printf '%s' "$1" | perl -n -e 'print if s/(.*?)\bssh\b\s+(.*)/\2/') # ;; # *mosh-client*) # args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') From fbe2eb311d38096534bba335a94172d47a34b139 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 16 Sep 2020 21:41:32 +0200 Subject: [PATCH 044/155] fixed window-status-current-format, fixes #390, closes #333 --- .tmux.conf | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index d5e696d..03f9814 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -877,9 +877,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} # tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} # if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_window_status_bg]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" +# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none,reverse]$tmux_conf_theme_right_separator_main" # else -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_window_status_current_bg]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_left_separator_main" +# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none,reverse]$tmux_conf_theme_left_separator_main#[noreverse]#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi # # tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ @@ -954,6 +954,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # status_left=$(printf '%s' "$status_left" | awk \ +# -v status_bg="$tmux_conf_theme_status_bg" \ # -v fg_="$tmux_conf_theme_status_left_fg" \ # -v bg_="$tmux_conf_theme_status_left_bg" \ # -v attr_="$tmux_conf_theme_status_left_attr" \ @@ -1011,7 +1012,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # j = j % l + 1 # } # } -# printf "#[fg=%s,bg=%s,none]%s", bg[j_], "default", mainsep +# printf "#[fg=%s,bg=%s,none]%s", bg[j_], status_bg, mainsep # }') # fi # @@ -1041,6 +1042,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # status_right=$(printf '%s' "$status_right" | awk \ +# -v status_bg="$tmux_conf_theme_status_bg" \ # -v fg_="$tmux_conf_theme_status_right_fg" \ # -v bg_="$tmux_conf_theme_status_right_bg" \ # -v attr_="$tmux_conf_theme_status_right_attr" \ @@ -1085,7 +1087,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # if (open_ || open || open__) # printf "|%s", subsplit($i) # else -# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j], (i == 1) ? "default" : bg[j_], mainsep, fg[j], bg[j], attr[j], subsplit($i) +# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j], (i == 1) ? status_bg : bg[j_], mainsep, fg[j], bg[j], attr[j], subsplit($i) # # if (!open && !open_ && !open__) # { From 67d1c23dcabe96b85ca3906d4a70c71e4859a558 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 22 Sep 2020 10:20:20 +0200 Subject: [PATCH 045/155] updated installation instructions, closes #348 (2) fixed typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dbcbb23..d4e2b0e 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ your home directory: ``` $ git clone https://github.com/gpakosz/.tmux.git /path/to/oh-my-tmux $ ln -s -f /path/to/oh-my-tmux/.tmux.conf ~/.tmux.conf -$ cp /path/t/oh-my-tmux/.tmux.conf.local ~/.tmux.conf.local +$ cp /path/to/oh-my-tmux/.tmux.conf.local ~/.tmux.conf.local ``` Then proceed to [customize] your `~/.tmux.conf.local` copy. From a439667d6501d926666dee315e2220cb802aee19 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 26 Sep 2020 17:36:29 +0200 Subject: [PATCH 046/155] worked around tmux not killing jobs launched with run-shell -b, fixes #407 upon exiting, tmux < 3.2 waits for jobs ran with run-shell, even those launched with -b the workaround consists in still launching "heavy" jobs from the status line with #() even though it means e.g. battery information will get updated once per attached client --- .tmux.conf | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 03f9814..39ee46c 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -190,6 +190,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _uname_s=$(uname -s) # +# _tmux_version=$(tmux -V | tr -cd '[:digit:].' | awk -F '.' '{print $1 * 100 + $2}') +# # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] # } @@ -1126,9 +1128,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# interval=60 -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" # status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" +# interval=60 +# if [ $_tmux_version -ge 302 ]; then +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" +# else +# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar "$tmux_conf_battery_bar_symbol_full" "$tmux_conf_battery_bar_symbol_empty" "$tmux_conf_battery_bar_length" "$tmux_conf_battery_bar_palette" "$tmux_conf_battery_hbar_palette" "$tmux_conf_battery_vbar_palette"; sleep $interval; done)$status_right" +# fi # ;; # esac # fi @@ -1171,7 +1177,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=$(tmux show -gv status-interval) # ;; # esac -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" +# if [ $_tmux_version -ge 302 ]; then +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" +# else +# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# fi # ;; # esac # @@ -1183,7 +1193,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # status_right=$(echo "$status_right" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" +# if [ $_tmux_version -ge 302 ]; then +# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" +# else +# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# fi # ;; # esac # From bcb071152b93b9b4f184e4025f36dfbb125c9fde Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 27 Sep 2020 15:31:42 +0200 Subject: [PATCH 047/155] updated _maximize_pane() that stopped working with tmux 3.2, fixes #381 --- .tmux.conf | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 39ee46c..53f76bb 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -243,15 +243,18 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # current_pane=${2:-$(tmux display -p '#{pane_id}')} # # dead_panes=$(tmux list-panes -s -t "$current_session" -F '#{pane_dead} #{pane_id} #{pane_start_command}' | grep -E -o '^1 %.+maximized.+$' || true) -# restore=$(echo "$dead_panes" | sed -n -E -e "s/^1 $current_pane .+maximized.+'(%[0-9]+)'$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t $current_pane/p" -e "s/^1 (%[0-9]+) .+maximized.+'$current_pane'$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t \1/p" ) +# restore=$(echo "$dead_panes" | sed -n -E -e "s/^1 $current_pane .+maximized.+'(%[0-9]+)'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t $current_pane/p"\ +# -e "s/^1 (%[0-9]+) .+maximized.+'$current_pane'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t \1/p") # # if [ -z "$restore" ]; then # [ "$(tmux list-panes -t "$current_session:" | wc -l | sed 's/^ *//g')" -eq 1 ] && tmux display "Can't maximize with only one pane" && return -# window=$(tmux new-window -t "$current_session:" -P "exec maximized... 2> /dev/null & tmux setw -t \"$current_session:\" remain-on-exit on; printf \"Pane has been maximized, press + to restore. %s\" '$current_pane'") -# window=${window%.*} +# current_pane_height=$(tmux display -t "$current_pane" -p "#{pane_height}") +# info=$(tmux new-window -t "$current_session:" -F "#{session_name}:#{window_index}.#{pane_id}" -P "maximized... 2>/dev/null & tmux setw -t \"$current_session:\" remain-on-exit on; printf \"\\033[\$(tput lines);0fPane has been maximized, press + to restore\n\" '$current_pane'") +# session_window=${info%.*} +# new_pane=${info#*.} # # retry=1000 -# while [ x"$(tmux list-panes -t "$window" -F '#{session_name}:#{window_index} #{pane_dead}' 2>/dev/null)" != x"$window 1" ] && [ "$retry" -ne 0 ]; do +# while [ x"$(tmux list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != x"$info 1" ] && [ "$retry" -ne 0 ]; do # sleep 0.1 # retry=$((retry - 1)) # done @@ -259,8 +262,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux display 'Unable to maximize pane' # fi # -# new_pane=$(tmux display -t "$window" -p '#{pane_id}') -# tmux setw -t "$window" remain-on-exit off \; swap-pane -s "$current_pane" -t "$new_pane" +# tmux setw -t "$session_window" remain-on-exit off \; swap-pane -s "$current_pane" -t "$new_pane" # else # $restore || tmux kill-pane # fi From 8e2502abb391ca475fcde0fce4d9844503aad73f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 6 Sep 2020 22:30:13 +0200 Subject: [PATCH 048/155] added support for custom variables defined in ~/.tmux.conf.local closes #96, closes #394 --- .tmux.conf | 10 ++++++++++ .tmux.conf.local | 26 ++++++++++++++++++++++++++ README.md | 17 ++++++++++------- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 53f76bb..f3660a0 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1208,6 +1208,16 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-#00afff} # light blue # tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} # +# # -- custom variables --------------------------------------------------- +# +# if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then +# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#{\1}%#(cut -c3- ~/.tmux.conf.local | sh -s \1)%g; !p' < ~/.tmux.conf.local) +# status_left=$(echo "$status_left" | perl -p -e "$replacements") +# status_right=$(echo "$status_right" | perl -p -e "$replacements") +# fi +# +# # ----------------------------------------------------------------------- +# # tmux setw -g window-style "$window_style" \; setw -g window-active-style "$window_active_style" \;\ # setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" \;\ # set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" \;\ diff --git a/.tmux.conf.local b/.tmux.conf.local index 069d81b..2de8620 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -1,3 +1,4 @@ +# : << EOF # https://github.com/gpakosz/.tmux # (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, # without any warranty. @@ -293,3 +294,28 @@ tmux_conf_copy_to_os_clipboard=false # move status line to top #set -g status-position top + + +# -- custom variables ---------------------------------------------------------- +# to define a custom #{foo} variable, define a POSIX shell function between the +# '# EOF' and the '# "$@"' lines. Please note that the opening brace { character +# must be on the same line as the function name otherwise the parse won't detect +# it. +# +# then, use #{foo} in e.g. the 'tmux_conf_theme_status_left' or the +# 'tmux_conf_theme_status_right' variables. + +# # /!\ do not remove the following line +# EOF +# +# weather() { +# curl -m 1 wttr.in?format=3 2>/dev/null +# sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval +# } +# +# online() { +# ping -t 1 -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' +# } +# +# "$@" +# # /!\ do not remove the previous line diff --git a/README.md b/README.md index d4e2b0e..52978a4 100644 --- a/README.md +++ b/README.md @@ -202,10 +202,10 @@ customize it further to your needs. Instead of altering the `~/.tmux.conf` file and diverging from upstream, the proper way is to edit the `~/.tmux.conf.local` file. -Please refer to the default `~/.tmux.conf.local` file to know more about -variables you can adjust to alter different behaviors. Pressing ` e` -will open `~/.tmux.conf.local` with the editor defined by the `$EDITOR` -environment variable (defaults to `vim` when empty). +Please refer to the sample `.tmux.conf.local` file to know more about variables +you can adjust to alter different behaviors. Pressing ` e` will open +`~/.tmux.conf.local` with the editor defined by the `$EDITOR` environment +variable (defaults to `vim` when empty). ### Enabling the Powerline look @@ -231,8 +231,8 @@ To make use of these symbols, there are several options: Please see the [Powerline manual] for further details. -Then edit the `~/.tmux.conf.local` file (` e`) and adjust the following -variables: +Then edit your `~/.tmux.conf.local` copy (with ` e`) and adjust the +following variables: ``` tmux_conf_theme_left_separator_main='\uE0B0' @@ -245,7 +245,7 @@ tmux_conf_theme_right_separator_sub='\uE0B3' Contrary to the first iterations of this configuration, by now you have total control on the content and order of `status-left` and `status-right`. -Edit the `~/.tmux.conf.local` file (` e`) and adjust the +Edit your `~/.tmux.conf.local` copy (` e`) and adjust the `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables to your own preferences. @@ -287,6 +287,9 @@ minutes whatever the value of `status-interval`. [wttr.in]: https://github.com/chubin/wttr.in#one-line-output +💡 You can also define your own custom variables. See the sample +`.tmux.conf.local` file for instructions. + Finally, remember `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` end up being given to tmux as `status-left` and `status-right` which means they're passed through `strftime()`. As such, the `%` From 13689839d487b669c998a14f548093f9dadb137a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 2 Oct 2020 21:39:48 +0200 Subject: [PATCH 049/155] updated _maximize_pane() that stopped working with tmux 3.2 (2), fixes #415 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index f3660a0..bc665a1 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -243,7 +243,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # current_pane=${2:-$(tmux display -p '#{pane_id}')} # # dead_panes=$(tmux list-panes -s -t "$current_session" -F '#{pane_dead} #{pane_id} #{pane_start_command}' | grep -E -o '^1 %.+maximized.+$' || true) -# restore=$(echo "$dead_panes" | sed -n -E -e "s/^1 $current_pane .+maximized.+'(%[0-9]+)'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t $current_pane/p"\ +# restore=$(printf "%s" "$dead_panes" | sed -n -E -e "s/^1 $current_pane .+maximized.+'(%[0-9]+)'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t $current_pane/p"\ # -e "s/^1 (%[0-9]+) .+maximized.+'$current_pane'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t \1/p") # # if [ -z "$restore" ]; then From 8ffeb1d809dd67b7617622239f328d3c5d96829a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 6 Oct 2020 08:00:42 +0200 Subject: [PATCH 050/155] fixed ' + e' binding when EDITOR is set to 'gvim' or 'mvim', fixes #416 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index bc665a1..f1dc089 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -24,7 +24,7 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "~/.tmux.conf.local" "sh -c '\${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"'" +bind e new-window -n "~/.tmux.conf.local" "EDITOR=\${EDITOR//mvim/vim} && EDITOR=\${EDITOR//gvim/vim} && \${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"" # reload configuration bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' From e03d73df736d6e22ad479f2b9a50c9755a9a887d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 8 Oct 2020 08:56:27 +0200 Subject: [PATCH 051/155] added support for custom variables defined in ~/.tmux.conf.local (2), fixes #417 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index f1dc089..79ed9e6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1211,9 +1211,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # -- custom variables --------------------------------------------------- # # if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#{\1}%#(cut -c3- ~/.tmux.conf.local | sh -s \1)%g; !p' < ~/.tmux.conf.local) -# status_left=$(echo "$status_left" | perl -p -e "$replacements") -# status_right=$(echo "$status_right" | perl -p -e "$replacements") +# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1)%g; !p' < ~/.tmux.conf.local) +# status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") +# status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi # # # ----------------------------------------------------------------------- From d0e073dd08078f7d7d7b62455cc551451c8e4024 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 4 Oct 2020 22:01:28 +0200 Subject: [PATCH 052/155] added 'tmux_conf_theme_colour_XX' variables to ease theming closes #189, closes #224, closes #255 --- .tmux.conf | 88 +++++++++++------- .tmux.conf.local | 233 +++++++++++++++++++++++++++-------------------- 2 files changed, 190 insertions(+), 131 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 79ed9e6..ee26ef3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -700,7 +700,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _apply_overrides() { # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-false} -# if _is_enabled "$tmux_conf_theme_24b_colour"; then +# tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} +# if _is_enabled "$tmux_conf_24b_colour"; then # case "$TERM" in # screen-*|tmux-*) # ;; @@ -804,13 +805,33 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _apply_theme() { # +# # -- default theme ----------------------------------------------------- +# +# tmux_conf_theme_colour_1=${tmux_conf_theme_colour_1:-#080808} # dark gray +# tmux_conf_theme_colour_2=${tmux_conf_theme_colour_2:-#303030} # gray +# tmux_conf_theme_colour_3=${tmux_conf_theme_colour_3:-#8a8a8a} # light gray +# tmux_conf_theme_colour_4=${tmux_conf_theme_colour_4:-#00afff} # light blue +# tmux_conf_theme_colour_5=${tmux_conf_theme_colour_5:-#ffff00} # yellow +# tmux_conf_theme_colour_6=${tmux_conf_theme_colour_6:-#080808} # dark gray +# tmux_conf_theme_colour_7=${tmux_conf_theme_colour_7:-#e4e4e4} # white +# tmux_conf_theme_colour_8=${tmux_conf_theme_colour_8:-#080808} # dark gray +# tmux_conf_theme_colour_9=${tmux_conf_theme_colour_9:-#ffff00} # yellow +# tmux_conf_theme_colour_10=${tmux_conf_theme_colour_10:-#ff00af} # pink +# tmux_conf_theme_colour_11=${tmux_conf_theme_colour_11:-#5fff00} # green +# tmux_conf_theme_colour_12=${tmux_conf_theme_colour_12:-#8a8a8a} # light gray +# tmux_conf_theme_colour_13=${tmux_conf_theme_colour_13:-#e4e4e4} # white +# tmux_conf_theme_colour_14=${tmux_conf_theme_colour_14:-#080808} # dark gray +# tmux_conf_theme_colour_15=${tmux_conf_theme_colour_15:-#080808} # dark gray +# tmux_conf_theme_colour_16=${tmux_conf_theme_colour_16:-#d70000} # red +# tmux_conf_theme_colour_17=${tmux_conf_theme_colour_17:-#e4e4e4} # white +# # # -- panes ------------------------------------------------------------- # # tmux_conf_theme_window_fg=${tmux_conf_theme_window_fg:-default} # tmux_conf_theme_window_bg=${tmux_conf_theme_window_bg:-default} # tmux_conf_theme_highlight_focused_pane=${tmux_conf_theme_highlight_focused_pane:-false} -# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} # default -# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-#0087d7} # light blue +# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} +# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-$tmux_conf_theme_colour_2} # # window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" # if _is_enabled "$tmux_conf_theme_highlight_focused_pane"; then @@ -820,8 +841,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} -# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-#444444} # light gray -# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-#00afff} # light blue +# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-$tmux_conf_theme_colour_2} +# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-$tmux_conf_theme_colour_4} # tmux_conf_theme_pane_border_fg=${tmux_conf_theme_pane_border_fg:-$tmux_conf_theme_pane_border} # tmux_conf_theme_pane_active_border_fg=${tmux_conf_theme_pane_active_border_fg:-$tmux_conf_theme_pane_active_border} # case "$tmux_conf_theme_pane_border_style" in @@ -835,8 +856,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # ;; # esac # -# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-#00afff} # light blue -# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-#00afff} # light blue +# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-$tmux_conf_theme_colour_4} # # # -- status line ------------------------------------------------------- # @@ -845,20 +866,20 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_right_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_main-}") # tmux_conf_theme_right_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_sub-|}") # -# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-#000000} # black -# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-#ffff00} # yellow +# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-$tmux_conf_theme_colour_5} # tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} # -# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-#ffff00} # yellow -# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-#000000} # black +# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-$tmux_conf_theme_colour_1} # tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} # -# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-#000000} # black -# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-#ffff00} # yellow +# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-$tmux_conf_theme_colour_5} # tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} # -# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-#8a8a8a} # white -# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-#080808} # dark gray +# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-$tmux_conf_theme_colour_3} +# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-$tmux_conf_theme_colour_1} # tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} # # tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} @@ -871,13 +892,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # -# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-#8a8a8a} # white -# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-#080808} # dark gray +# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} +# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} # tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} # tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} # -# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-#000000} # black -# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-#00afff} # light blue +# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} # tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} # tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} # if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then @@ -905,23 +926,23 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} # tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} # -# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-#ffff00} # yellow +# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} # tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} # tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} # -# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-#00afff} # light blue +# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} # tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} # tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} # # # -- indicators # -# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-👓 } # U+1F453 -# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-#e4e4e4} # white +# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-👓 } # U+1F453 +# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-none} # tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} # tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} # -# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨ } # U+2328 -# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-#e4e4e4} # white +# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨ } # U+2328 +# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-none} # tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} # tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} # @@ -930,7 +951,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} # tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} # -# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-🔒} # U+1F512 +# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-🔒} # U+1F512 # tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} # tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} # tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} @@ -938,8 +959,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # -- status-left style # # tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} -# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-#000000,#e4e4e4,#e4e4e4} # black, white , white -# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-#ffff00,#ff00af,#00afff} # yellow, pink, white blue +# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8} +# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11} # tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} # # if [ -n "$tmux_conf_theme_status_left" ]; then @@ -1026,8 +1047,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{pairing}#{prefix} #{battery_status} #{battery_bar} #{battery_percentage} , %R , %d %b | #{username} | #{hostname} '} # tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} -# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-#8a8a8a,#e4e4e4,#000000} # light gray, white, black -# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-#080808,#d70000,#e4e4e4} # dark gray, red, white +# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} +# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} # tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} # # if [ -n "$tmux_conf_theme_status_right" ]; then @@ -1108,8 +1129,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_battery_bar_symbol_empty=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_empty:-◻}") # tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-auto} # tmux_conf_battery_bar_palette=${tmux_conf_battery_bar_palette:-gradient} -# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} # red, orange, green -# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} # red, orange, green +# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} +# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} # tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 # tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # @@ -1205,7 +1226,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- clock ------------------------------------------------------------- # -# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-#00afff} # light blue +# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-$tmux_conf_theme_colour_4} # tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} # # # -- custom variables --------------------------------------------------- @@ -1279,6 +1300,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _apply_overrides # _apply_theme& # _apply_bindings& +# # # shellcheck disable=SC2046 # tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') # wait diff --git a/.tmux.conf.local b/.tmux.conf.local index 2de8620..ce6dcb4 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -43,11 +43,49 @@ tmux_conf_new_session_prompt=false # RGB 24-bit colour support (tmux >= 2.2), possible values are: # - true # - false (default) -tmux_conf_theme_24b_colour=false +tmux_conf_24b_colour=false + +# default theme +tmux_conf_theme_colour_1="#080808" # dark gray +tmux_conf_theme_colour_2="#303030" # gray +tmux_conf_theme_colour_3="#8a8a8a" # light gray +tmux_conf_theme_colour_4="#00afff" # light blue +tmux_conf_theme_colour_5="#ffff00" # yellow +tmux_conf_theme_colour_6="#080808" # dark gray +tmux_conf_theme_colour_7="#e4e4e4" # white +tmux_conf_theme_colour_8="#080808" # dark gray +tmux_conf_theme_colour_9="#ffff00" # yellow +tmux_conf_theme_colour_10="#ff00af" # pink +tmux_conf_theme_colour_11="#5fff00" # green +tmux_conf_theme_colour_12="#8a8a8a" # light gray +tmux_conf_theme_colour_13="#e4e4e4" # white +tmux_conf_theme_colour_14="#080808" # dark gray +tmux_conf_theme_colour_15="#080808" # dark gray +tmux_conf_theme_colour_16="#d70000" # red +tmux_conf_theme_colour_17="#e4e4e4" # white + +# default theme (ansi) +#tmux_conf_theme_colour_1="colour0" +#tmux_conf_theme_colour_2="colour8" +#tmux_conf_theme_colour_3="colour8" +#tmux_conf_theme_colour_4="colour14" +#tmux_conf_theme_colour_5="colour11" +#tmux_conf_theme_colour_6="colour0" +#tmux_conf_theme_colour_7="colour15" +#tmux_conf_theme_colour_8="colour0" +#tmux_conf_theme_colour_9="colour11" +#tmux_conf_theme_colour_10="colour13" +#tmux_conf_theme_colour_11="colour10" +#tmux_conf_theme_colour_12="colour8" +#tmux_conf_theme_colour_13="colour15" +#tmux_conf_theme_colour_14="colour0" +#tmux_conf_theme_colour_15="colour0" +#tmux_conf_theme_colour_16="colour1" +#tmux_conf_theme_colour_17="colour15" # window style -tmux_conf_theme_window_fg='default' -tmux_conf_theme_window_bg='default' +tmux_conf_theme_window_fg="default" +tmux_conf_theme_window_bg="default" # highlight focused pane (tmux >= 2.1), possible values are: # - true @@ -55,8 +93,7 @@ tmux_conf_theme_window_bg='default' tmux_conf_theme_highlight_focused_pane=false # focused pane colours: -tmux_conf_theme_focused_pane_fg='default' -tmux_conf_theme_focused_pane_bg='#0087d7' # light blue +tmux_conf_theme_focused_pane_bg="$tmux_conf_theme_colour_2" # pane border style, possible values are: # - thin (default) @@ -64,32 +101,32 @@ tmux_conf_theme_focused_pane_bg='#0087d7' # light blue tmux_conf_theme_pane_border_style=thin # pane borders colours: -tmux_conf_theme_pane_border='#444444' # gray -tmux_conf_theme_pane_active_border='#00afff' # light blue +tmux_conf_theme_pane_border="$tmux_conf_theme_colour_2" +tmux_conf_theme_pane_active_border="$tmux_conf_theme_colour_4" -# pane indicator colours -tmux_conf_theme_pane_indicator='#00afff' # light blue -tmux_conf_theme_pane_active_indicator='#00afff' # light blue +# pane indicator colours (when you hit + q) +tmux_conf_theme_pane_indicator="$tmux_conf_theme_colour_4" +tmux_conf_theme_pane_active_indicator="$tmux_conf_theme_colour_4" # status line style -tmux_conf_theme_message_fg='#000000' # black -tmux_conf_theme_message_bg='#ffff00' # yellow -tmux_conf_theme_message_attr='bold' +tmux_conf_theme_message_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_message_bg="$tmux_conf_theme_colour_5" +tmux_conf_theme_message_attr="bold" # status line command style ( : Escape) -tmux_conf_theme_message_command_fg='#ffff00' # yellow -tmux_conf_theme_message_command_bg='#000000' # black -tmux_conf_theme_message_command_attr='bold' +tmux_conf_theme_message_command_fg="$tmux_conf_theme_colour_5" +tmux_conf_theme_message_command_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_message_command_attr="bold" # window modes style -tmux_conf_theme_mode_fg='#000000' # black -tmux_conf_theme_mode_bg='#ffff00' # yellow -tmux_conf_theme_mode_attr='bold' +tmux_conf_theme_mode_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_mode_bg="$tmux_conf_theme_colour_5" +tmux_conf_theme_mode_attr="bold" # status line style -tmux_conf_theme_status_fg='#8a8a8a' # light gray -tmux_conf_theme_status_bg='#080808' # dark gray -tmux_conf_theme_status_attr='none' +tmux_conf_theme_status_fg="$tmux_conf_theme_colour_3" +tmux_conf_theme_status_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_status_attr="none" # terminal title # - built-in variables are: @@ -99,7 +136,7 @@ tmux_conf_theme_status_attr='none' # - #{hostname_ssh} # - #{username} # - #{username_ssh} -tmux_conf_theme_terminal_title='#h ❐ #S ● #I #W' +tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" # window status style # - built-in variables are: @@ -109,12 +146,12 @@ tmux_conf_theme_terminal_title='#h ❐ #S ● #I #W' # - #{hostname_ssh} # - #{username} # - #{username_ssh} -tmux_conf_theme_window_status_fg='#8a8a8a' # light gray -tmux_conf_theme_window_status_bg='#080808' # dark gray -tmux_conf_theme_window_status_attr='none' -tmux_conf_theme_window_status_format='#I #W' -#tmux_conf_theme_window_status_format='#{circled_window_index} #W' -#tmux_conf_theme_window_status_format='#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}' +tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3" +tmux_conf_theme_window_status_bg="$tmux_conf_theme_colour_1" +tmux_conf_theme_window_status_attr="none" +tmux_conf_theme_window_status_format="#I #W" +#tmux_conf_theme_window_status_format="#{circled_window_index} #W" +#tmux_conf_theme_window_status_format="#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" # window current status style # - built-in variables are: @@ -124,41 +161,41 @@ tmux_conf_theme_window_status_format='#I #W' # - #{hostname_ssh} # - #{username} # - #{username_ssh} -tmux_conf_theme_window_status_current_fg='#000000' # black -tmux_conf_theme_window_status_current_bg='#00afff' # light blue -tmux_conf_theme_window_status_current_attr='bold' -tmux_conf_theme_window_status_current_format='#I #W' -#tmux_conf_theme_window_status_current_format='#{circled_window_index} #W' -#tmux_conf_theme_window_status_current_format='#I #W#{?window_zoomed_flag,🔍,}' +tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1" +tmux_conf_theme_window_status_current_bg="$tmux_conf_theme_colour_4" +tmux_conf_theme_window_status_current_attr="bold" +tmux_conf_theme_window_status_current_format="#I #W" +#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W" +#tmux_conf_theme_window_status_current_format="#I #W#{?window_zoomed_flag,🔍,}" # window activity status style -tmux_conf_theme_window_status_activity_fg='default' -tmux_conf_theme_window_status_activity_bg='default' -tmux_conf_theme_window_status_activity_attr='underscore' +tmux_conf_theme_window_status_activity_fg="default" +tmux_conf_theme_window_status_activity_bg="default" +tmux_conf_theme_window_status_activity_attr="underscore" # window bell status style -tmux_conf_theme_window_status_bell_fg='#ffff00' # yellow -tmux_conf_theme_window_status_bell_bg='default' -tmux_conf_theme_window_status_bell_attr='blink,bold' +tmux_conf_theme_window_status_bell_fg="$tmux_conf_theme_colour_5" +tmux_conf_theme_window_status_bell_bg="default" +tmux_conf_theme_window_status_bell_attr="blink,bold" # window last status style -tmux_conf_theme_window_status_last_fg='#00afff' # light blue -tmux_conf_theme_window_status_last_bg='default' -tmux_conf_theme_window_status_last_attr='none' +tmux_conf_theme_window_status_last_fg="$tmux_conf_theme_colour_4" +tmux_conf_theme_window_status_last_bg="default" +tmux_conf_theme_window_status_last_attr="none" # status left/right sections separators -tmux_conf_theme_left_separator_main='' -tmux_conf_theme_left_separator_sub='|' -tmux_conf_theme_right_separator_main='' -tmux_conf_theme_right_separator_sub='|' -#tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline -#tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with -#tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone -#tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see README.md +tmux_conf_theme_left_separator_main="" +tmux_conf_theme_left_separator_sub="|" +tmux_conf_theme_right_separator_main="" +tmux_conf_theme_right_separator_sub="|" +#tmux_conf_theme_left_separator_main="\uE0B0" # /!\ you don't need to install Powerline +#tmux_conf_theme_left_separator_sub="\uE0B1" # you only need fonts patched with +#tmux_conf_theme_right_separator_main="\uE0B2" # Powerline symbols or the standalone +#tmux_conf_theme_right_separator_sub="\uE0B3" # PowerlineSymbols.otf font, see README.md # status left/right content: -# - separate main sections with '|' -# - separate subsections with ',' +# - separate main sections with "|" +# - separate subsections with "," # - built-in variables are: # - #{battery_bar} # - #{battery_hbar} @@ -180,85 +217,85 @@ tmux_conf_theme_right_separator_sub='|' # - #{uptime_s} # - #{username} # - #{username_ssh} -tmux_conf_theme_status_left=' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} ' -tmux_conf_theme_status_right='#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} ' +tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " +tmux_conf_theme_status_right="#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " # status left style -tmux_conf_theme_status_left_fg='#000000,#e4e4e4,#e4e4e4' # black, white , white -tmux_conf_theme_status_left_bg='#ffff00,#ff00af,#00afff' # yellow, pink, white blue -tmux_conf_theme_status_left_attr='bold,none,none' +tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" +tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11" +tmux_conf_theme_status_left_attr="bold,none,none" # status right style -tmux_conf_theme_status_right_fg='#8a8a8a,#e4e4e4,#000000' # light gray, white, black -tmux_conf_theme_status_right_bg='#080808,#d70000,#e4e4e4' # dark gray, red, white -tmux_conf_theme_status_right_attr='none,none,bold' +tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14" +tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17" +tmux_conf_theme_status_right_attr="none,none,bold" # pairing indicator -tmux_conf_theme_pairing='👓 ' # U+1F453 -tmux_conf_theme_pairing_fg='none' -tmux_conf_theme_pairing_bg='none' -tmux_conf_theme_pairing_attr='none' +tmux_conf_theme_pairing="👓 " # U+1F453 +tmux_conf_theme_pairing_fg="none" +tmux_conf_theme_pairing_bg="none" +tmux_conf_theme_pairing_attr="none" # prefix indicator -tmux_conf_theme_prefix='⌨ ' # U+2328 -tmux_conf_theme_prefix_fg='none' -tmux_conf_theme_prefix_bg='none' -tmux_conf_theme_prefix_attr='none' +tmux_conf_theme_prefix="⌨ " # U+2328 +tmux_conf_theme_prefix_fg="none" +tmux_conf_theme_prefix_bg="none" +tmux_conf_theme_prefix_attr="none" # root indicator -tmux_conf_theme_root='!' -tmux_conf_theme_root_fg='none' -tmux_conf_theme_root_bg='none' -tmux_conf_theme_root_attr='bold,blink' +tmux_conf_theme_root="!" +tmux_conf_theme_root_fg="none" +tmux_conf_theme_root_bg="none" +tmux_conf_theme_root_attr="bold,blink" # synchronized indicator -tmux_conf_theme_synchronized='🔒' # U+1F512 -tmux_conf_theme_synchronized_fg='none' -tmux_conf_theme_synchronized_bg='none' -tmux_conf_theme_synchronized_attr='none' +tmux_conf_theme_synchronized="🔒" # U+1F512 +tmux_conf_theme_synchronized_fg="none" +tmux_conf_theme_synchronized_bg="none" +tmux_conf_theme_synchronized_attr="none" # battery bar symbols -tmux_conf_battery_bar_symbol_full='◼' -tmux_conf_battery_bar_symbol_empty='◻' -#tmux_conf_battery_bar_symbol_full='♥' -#tmux_conf_battery_bar_symbol_empty='·' +tmux_conf_battery_bar_symbol_full="◼" +tmux_conf_battery_bar_symbol_empty="◻" +#tmux_conf_battery_bar_symbol_full="♥" +#tmux_conf_battery_bar_symbol_empty="·" # battery bar length (in number of symbols), possible values are: # - auto # - a number, e.g. 5 -tmux_conf_battery_bar_length='auto' +tmux_conf_battery_bar_length="auto" # battery bar palette, possible values are: # - gradient (default) # - heat -# - 'colour_full_fg,colour_empty_fg,colour_bg' -tmux_conf_battery_bar_palette='gradient' -#tmux_conf_battery_bar_palette='#d70000,#e4e4e4,#000000' # red, white, black +# - "colour_full_fg,colour_empty_fg,colour_bg" +tmux_conf_battery_bar_palette="gradient" +#tmux_conf_battery_bar_palette="#d70000,#e4e4e4,#000000" # red, white, black # battery hbar palette, possible values are: # - gradient (default) # - heat -# - 'colour_low,colour_half,colour_full' -tmux_conf_battery_hbar_palette='gradient' -#tmux_conf_battery_hbar_palette='#d70000,#ff5f00,#5fff00' # red, orange, green +# - "colour_low,colour_half,colour_full" +tmux_conf_battery_hbar_palette="gradient" +#tmux_conf_battery_hbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green # battery vbar palette, possible values are: # - gradient (default) # - heat -# - 'colour_low,colour_half,colour_full' -tmux_conf_battery_vbar_palette='gradient' -#tmux_conf_battery_vbar_palette='#d70000,#ff5f00,#5fff00' # red, orange, green +# - "colour_low,colour_half,colour_full" +tmux_conf_battery_vbar_palette="gradient" +#tmux_conf_battery_vbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green # symbols used to indicate whether battery is charging or discharging -tmux_conf_battery_status_charging='↑' # U+2191 -tmux_conf_battery_status_discharging='↓' # U+2193 -#tmux_conf_battery_status_charging='🔌' # U+1F50C -#tmux_conf_battery_status_discharging='🔋' # U+1F50B +tmux_conf_battery_status_charging="↑" # U+2191 +tmux_conf_battery_status_discharging="↓" # U+2193 +#tmux_conf_battery_status_charging="🔌" # U+1F50C +#tmux_conf_battery_status_discharging="🔋" # U+1F50B # clock style (when you hit + t) # you may want to use %I:%M %p in place of %R in tmux_conf_theme_status_right -tmux_conf_theme_clock_colour='#00afff' # light blue -tmux_conf_theme_clock_style='24' +tmux_conf_theme_clock_colour="$tmux_conf_theme_colour_4" +tmux_conf_theme_clock_style="24" # -- clipboard ----------------------------------------------------------------- From a43ac95e5f88122d81a341038f8b70d712fb420f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 16 Oct 2020 10:59:23 +0200 Subject: [PATCH 053/155] fixed status line that doesn't work with tmux 2.3, fixes #418 --- .tmux.conf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ee26ef3..d58f5ca 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1155,8 +1155,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=60 # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" +# elif [ $_tmux_version -ge 204 ]; then +# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else -# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar "$tmux_conf_battery_bar_symbol_full" "$tmux_conf_battery_bar_symbol_empty" "$tmux_conf_battery_bar_length" "$tmux_conf_battery_bar_palette" "$tmux_conf_battery_hbar_palette" "$tmux_conf_battery_vbar_palette"; sleep $interval; done)$status_right" +# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" # fi # ;; # esac @@ -1202,8 +1204,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # esac # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" -# else +# elif [ $_tmux_version -ge 204 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# else +# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" # fi # ;; # esac @@ -1218,8 +1222,10 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=$(tmux show -gv status-interval) # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" -# else +# elif [ $_tmux_version -ge 204 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# else +# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" # fi # ;; # esac From 918c0f252c3ffa675b6b7b51a8b2240a9ad9ad23 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 27 Oct 2020 19:34:00 +0100 Subject: [PATCH 054/155] fixed status line that doesn't work with tmux 2.4 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index d58f5ca..aa7b939 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1155,7 +1155,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=60 # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" -# elif [ $_tmux_version -ge 204 ]; then +# elif [ $_tmux_version -gt 204 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" @@ -1204,7 +1204,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # esac # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" -# elif [ $_tmux_version -ge 204 ]; then +# elif [ $_tmux_version -gt 204 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" @@ -1222,7 +1222,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # interval=$(tmux show -gv status-interval) # if [ $_tmux_version -ge 302 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" -# elif [ $_tmux_version -ge 204 ]; then +# elif [ $_tmux_version -gt 204 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" From efee3bb4ac649d2aca0c2a20ebd819fffb4a0099 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 27 Oct 2020 19:35:13 +0100 Subject: [PATCH 055/155] made version detection more robust in case tmux executable is renamed --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index aa7b939..6a0e6ef 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -190,7 +190,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # _uname_s=$(uname -s) # -# _tmux_version=$(tmux -V | tr -cd '[:digit:].' | awk -F '.' '{print $1 * 100 + $2}') +# _tmux_version=$(tmux -V | tr -cd '[:digit:].' | cut -d' ' -f2 | awk -F '.' '{print $1 * 100 + $2}') # # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] From 88a10631c0031d63cef11fc6c7b4a604e20db171 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 17 Oct 2020 22:23:48 +0200 Subject: [PATCH 056/155] improved status line rendering, fixes #419 - non current windows now use separators when they're enabled - fixed style for last window, window with activity and window with bell --- .tmux.conf | 84 ++++++++++++++++++++++++++++++++++-------------- .tmux.conf.local | 10 +++--- 2 files changed, 65 insertions(+), 29 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6a0e6ef..29e1b93 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -901,10 +901,57 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} # tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} # tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} -# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none,reverse]$tmux_conf_theme_right_separator_main" +# +# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} +# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} +# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} +# +# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} +# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} +# +# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} +# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} +# +# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_bg" ]; then +# spacer='' +# spacer_current=' ' # else -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none,reverse]$tmux_conf_theme_left_separator_main#[noreverse]#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr] $tmux_conf_theme_window_status_current_format #[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" +# spacer=' ' +# spacer_current=' ' +# fi +# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_last_bg" ]; then +# spacer_last='' +# else +# spacer_last=' ' +# fi +# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_activity_bg" ]; then +# spacer_activity='' +# else +# spacer_activity=' ' +# fi +# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_bell_bg" ]; then +# spacer_bell='' +# else +# spacer_bell=' ' +# fi +# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then +# if [ -z "$tmux_conf_theme_right_separator_main" ]; then +# window_status_separator=' ' +# else +# window_status_separator='' +# fi +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$tmux_conf_theme_window_status_format#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" +# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" +# else +# if [ -z "$tmux_conf_theme_left_separator_main" ]; then +# window_status_separator=' ' +# else +# window_status_separator='' +# fi +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#[none]" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$tmux_conf_theme_window_status_format#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_left_separator_main" +# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi # # tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ @@ -922,26 +969,14 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') # -# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} -# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} -# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} -# -# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} -# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} -# -# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} -# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} -# # # -- indicators # -# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-👓 } # U+1F453 +# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-⚇} # U+2687 # tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-none} # tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} # tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} # -# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨ } # U+2328 +# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨} # U+2328 # tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-none} # tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} # tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} @@ -951,7 +986,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} # tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} # -# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-🔒} # U+1F512 +# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-⚏} # U+268F # tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} # tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} # tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} @@ -965,9 +1000,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # if [ -n "$tmux_conf_theme_status_left" ]; then # status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix$tmux_conf_theme_prefix ,$(print "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # # if [ -n "$(tmux display -p '#{version}')" ]; then @@ -1053,9 +1088,9 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # if [ -n "$tmux_conf_theme_status_right" ]; then # status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix,}/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized,}%g" \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # # if [ -n "$(tmux display -p '#{version}')" ]; then @@ -1262,6 +1297,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ # setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ # setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ +# setw -g window-status-separator "$window_status_separator" \;\ # set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ # set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" \;\ # setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ diff --git a/.tmux.conf.local b/.tmux.conf.local index ce6dcb4..1369712 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -180,7 +180,7 @@ tmux_conf_theme_window_status_bell_attr="blink,bold" # window last status style tmux_conf_theme_window_status_last_fg="$tmux_conf_theme_colour_4" -tmux_conf_theme_window_status_last_bg="default" +tmux_conf_theme_window_status_last_bg="$tmux_conf_theme_colour_2" tmux_conf_theme_window_status_last_attr="none" # status left/right sections separators @@ -218,7 +218,7 @@ tmux_conf_theme_right_separator_sub="|" # - #{username} # - #{username_ssh} tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " -tmux_conf_theme_status_right="#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " +tmux_conf_theme_status_right=" #{prefix}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username_ssh}#{root} | #{hostname_ssh} " # status left style tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" @@ -231,13 +231,13 @@ tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_col tmux_conf_theme_status_right_attr="none,none,bold" # pairing indicator -tmux_conf_theme_pairing="👓 " # U+1F453 +tmux_conf_theme_pairing="⚇" # U+2687 tmux_conf_theme_pairing_fg="none" tmux_conf_theme_pairing_bg="none" tmux_conf_theme_pairing_attr="none" # prefix indicator -tmux_conf_theme_prefix="⌨ " # U+2328 +tmux_conf_theme_prefix="⌨" # U+2328 tmux_conf_theme_prefix_fg="none" tmux_conf_theme_prefix_bg="none" tmux_conf_theme_prefix_attr="none" @@ -249,7 +249,7 @@ tmux_conf_theme_root_bg="none" tmux_conf_theme_root_attr="bold,blink" # synchronized indicator -tmux_conf_theme_synchronized="🔒" # U+1F512 +tmux_conf_theme_synchronized="⚏" # U+268F tmux_conf_theme_synchronized_fg="none" tmux_conf_theme_synchronized_bg="none" tmux_conf_theme_synchronized_attr="none" From 8c342edc6f3bc4f3fd1af6c45cdb4aa65ba2a43b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 4 Nov 2020 11:31:20 +0100 Subject: [PATCH 057/155] fixed 'tmux_conf_theme_status_right' default value, fixes #422 --- .tmux.conf | 3 +-- .tmux.conf.local | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 29e1b93..1b210a8 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1080,8 +1080,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- status-right style # -# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{pairing}#{prefix} #{battery_status} #{battery_bar} #{battery_percentage} , %R , %d %b | #{username} | #{hostname} '} -# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-'#{prefix}#{pairing}#{synchronized} #{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} +# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} # tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} # tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} # tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} diff --git a/.tmux.conf.local b/.tmux.conf.local index 1369712..4ae12eb 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -218,7 +218,7 @@ tmux_conf_theme_right_separator_sub="|" # - #{username} # - #{username_ssh} tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " -tmux_conf_theme_status_right=" #{prefix}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username_ssh}#{root} | #{hostname_ssh} " +tmux_conf_theme_status_right=" #{prefix}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " # status left style tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" From e3960e53475dda8833cdf65f7943675d21d8436b Mon Sep 17 00:00:00 2001 From: Matthew Broomfield Date: Fri, 7 Aug 2020 19:55:19 +0000 Subject: [PATCH 058/155] added icon for mouse mode, fixes #295 mouse icon is to the left of the battery by default. _toggle_mouse no longer prints a status message as the status icon should give enough information. --- .tmux.conf | 12 +++++++++--- .tmux.conf.local | 9 ++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 1b210a8..f6ec15b 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -278,8 +278,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # new="on" # fi # -# tmux set -g mouse $new \;\ -# display "mouse: $new" +# tmux set -g mouse $new # } # # _battery_info() { @@ -981,6 +980,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} # tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} # +# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 +# tmux_conf_theme_mouse_fg=${tmux_conf_theme_mouse_fg:-none} +# tmux_conf_theme_mouse_bg=${tmux_conf_theme_mouse_bg:-none} +# tmux_conf_theme_mouse_attr=${tmux_conf_theme_mouse_attr:-none} +# # tmux_conf_theme_root=${tmux_conf_theme_root:-!} # tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-none} # tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} @@ -1002,6 +1006,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix$tmux_conf_theme_prefix ,$(print "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(print "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # @@ -1080,7 +1085,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # # -- status-right style # -# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} +# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} # tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} # tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} # tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} @@ -1089,6 +1094,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # status_right=$(echo "$tmux_conf_theme_status_right" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # diff --git a/.tmux.conf.local b/.tmux.conf.local index 4ae12eb..dab4aa7 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -206,6 +206,7 @@ tmux_conf_theme_right_separator_sub="|" # - #{hostname_ssh} # - #{hostname} # - #{loadavg} +# - #{mouse} # - #{pairing} # - #{prefix} # - #{root} @@ -218,7 +219,7 @@ tmux_conf_theme_right_separator_sub="|" # - #{username} # - #{username_ssh} tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " -tmux_conf_theme_status_right=" #{prefix}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " +tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " # status left style tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" @@ -242,6 +243,12 @@ tmux_conf_theme_prefix_fg="none" tmux_conf_theme_prefix_bg="none" tmux_conf_theme_prefix_attr="none" +# mouse indicator +tmux_conf_theme_mouse="↗" # U+2197 +tmux_conf_theme_mouse_fg="none" +tmux_conf_theme_mouse_bg="none" +tmux_conf_theme_mouse_attr="none" + # root indicator tmux_conf_theme_root="!" tmux_conf_theme_root_fg="none" From e74dc67a7d40c800d730b4569f5b653d77c2a436 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 5 Dec 2020 10:32:42 +0100 Subject: [PATCH 059/155] improved status line rendering, fixes #419 (2) - do not apply attr to spacers - fixed attr for last window, window with activity and window with bell --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index f6ec15b..e15aba0 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -941,7 +941,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # else # window_status_separator='' # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$tmux_conf_theme_window_status_format#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" # tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" # else # if [ -z "$tmux_conf_theme_left_separator_main" ]; then @@ -949,7 +949,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # else # window_status_separator='' # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#[none]" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#[none]" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$tmux_conf_theme_window_status_format#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_left_separator_main" +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" # tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi # From 8a4dabb19616ac9cfb377194daa60611a4f90b98 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 5 Dec 2020 22:55:25 +0100 Subject: [PATCH 060/155] added support for #{hostname_full} and #{hostname_full_ssh}, closes #361 --- .tmux.conf | 54 ++++++++++++++++++++++++++++++------------------ .tmux.conf.local | 8 +++++++ 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e15aba0..af84cd6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -585,6 +585,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # _hostname() { # tty=${1:-$(tmux display -p '#{pane_tty}')} # ssh_only=$2 +# full=$3 +# h_or_H=$4 # # tty_info=$(_tty_info "$tty") # command=${tty_info#*:} @@ -597,17 +599,19 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # shellcheck disable=SC2086 # [ -z "$hostname" ] && hostname=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%hostname%% %h >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%hostname% / { print $2; exit }') # -# case "$hostname" in -# *[a-z-].*) -# hostname=${hostname%%.*} -# ;; -# 127.0.0.1) -# hostname="localhost" -# ;; -# esac +# if ! _is_enabled "$full"; then +# case "$hostname" in +# *[a-z-].*) +# hostname=${hostname%%.*} +# ;; +# 127.0.0.1) +# hostname="localhost" +# ;; +# esac +# fi # else # if ! _is_enabled "$ssh_only"; then -# hostname=$3 +# hostname="$h_or_H" # fi # fi # @@ -887,9 +891,11 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} @@ -957,16 +963,20 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') # tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') # # # -- indicators # @@ -1205,17 +1215,21 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # fi # # case "$status_left $status_right" in -# *'#{username}'*|*'#{hostname}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*) +# *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) # status_left=$(echo "$status_left" | sed \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') # status_right=$(echo "$status_right" | sed \ # -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false #h #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ # -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true #h #D)%g') +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') # ;; # esac # diff --git a/.tmux.conf.local b/.tmux.conf.local index dab4aa7..f40cedc 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -134,6 +134,8 @@ tmux_conf_theme_status_attr="none" # - #{circled_session_name} # - #{hostname} # - #{hostname_ssh} +# - #{hostname_full} +# - #{hostname_full_ssh} # - #{username} # - #{username_ssh} tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" @@ -144,6 +146,8 @@ tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" # - #{circled_session_name} # - #{hostname} # - #{hostname_ssh} +# - #{hostname_full} +# - #{hostname_full_ssh} # - #{username} # - #{username_ssh} tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3" @@ -159,6 +163,8 @@ tmux_conf_theme_window_status_format="#I #W" # - #{circled_session_name} # - #{hostname} # - #{hostname_ssh} +# - #{hostname_full} +# - #{hostname_full_ssh} # - #{username} # - #{username_ssh} tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1" @@ -205,6 +211,8 @@ tmux_conf_theme_right_separator_sub="|" # - #{circled_session_name} # - #{hostname_ssh} # - #{hostname} +# - #{hostname_full} +# - #{hostname_full_ssh} # - #{loadavg} # - #{mouse} # - #{pairing} From 249f0be096b4a30c0fb66eb776e6b95efb8e4e3b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 12 Dec 2020 18:35:01 +0100 Subject: [PATCH 061/155] fixed use of invalid 'print' command --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index af84cd6..fbc7e23 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1015,8 +1015,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # if [ -n "$tmux_conf_theme_status_left" ]; then # status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix$tmux_conf_theme_prefix ,$(print "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(print "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # From 8df1666ddc91e4ac8c9797082c2aa662a4e0040b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 12 Dec 2020 18:39:37 +0100 Subject: [PATCH 062/155] improved status line rendering, fixes #419 (3) fixed spacers --- .tmux.conf | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index fbc7e23..08fbb8a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -919,35 +919,44 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} # tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} # -# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_bg" ]; then +# if [ x"$tmux_conf_theme_window_status_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bg" = x"default" ]; then # spacer='' # spacer_current=' ' # else # spacer=' ' # spacer_current=' ' # fi -# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_last_bg" ]; then +# if [ x"$tmux_conf_theme_window_status_last_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_last_bg" = x"default" ] ; then # spacer_last='' # else # spacer_last=' ' # fi -# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_activity_bg" ]; then +# if [ x"$tmux_conf_theme_window_status_activity_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_activity_bg" = x"default" ] ; then # spacer_activity='' +# spacer_last_activity="$spacer_last" # else # spacer_activity=' ' +# spacer_last_activity=' ' # fi -# if [ x"$tmux_conf_theme_status_bg" = x"$tmux_conf_theme_window_status_bell_bg" ]; then +# if [ x"$tmux_conf_theme_window_status_bell_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bell_bg" = x"default" ] ; then # spacer_bell='' +# spacer_last_bell="$spacer_last" +# spacer_activity_bell="$spacer_activity" +# spacer_last_activity_bell="$spacer_last_activity" # else # spacer_bell=' ' +# spacer_last_bell=' ' +# spacer_activity_bell=' ' +# spacer_last_activity_bell=' ' # fi +# spacer="#{?window_last_flag,#{?window_activity_flag,#{?window_bell_flag,$spacer_last_activity_bell,$spacer_last_activity},#{?window_bell_flag,$spacer_last_bell,$spacer_last}},#{?window_activity_flag,#{?window_bell_flag,$spacer_activity_bell,$spacer_activity},#{?window_bell_flag,$spacer_bell,$spacer}}}" # if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then # if [ -z "$tmux_conf_theme_right_separator_main" ]; then # window_status_separator=' ' # else # window_status_separator='' # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" # tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" # else # if [ -z "$tmux_conf_theme_left_separator_main" ]; then @@ -955,7 +964,7 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # else # window_status_separator='' # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]#{?window_bell_flag,$spacer_bell,#{?window_activity_flag,$spacer_activity,#{?window_last_flag,$spacer_last,$spacer}}}#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" +# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" # tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi # From 53d7ce831127b6f1b6f1600b53213cb3060b7e6d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 13 Dec 2020 20:50:04 +0100 Subject: [PATCH 063/155] fixed indentation in _apply_overrides() --- .tmux.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 08fbb8a..7dc2978 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -705,13 +705,13 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-false} # tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} # if _is_enabled "$tmux_conf_24b_colour"; then -# case "$TERM" in -# screen-*|tmux-*) -# ;; -# *) -# tmux set-option -ga terminal-overrides ",*256col*:Tc" -# ;; -# esac +# case "$TERM" in +# screen-*|tmux-*) +# ;; +# *) +# tmux set-option -ga terminal-overrides ",*256col*:Tc" +# ;; +# esac # fi # } # From 2aaacfbd8f6cc394df05c472f115378a2f2fa914 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 9 Jan 2021 20:47:20 +0100 Subject: [PATCH 064/155] mention 'reattach-no-usernamespace' is not needed for tmux > 2.6 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 52978a4..fccca2a 100644 --- a/README.md +++ b/README.md @@ -299,7 +299,7 @@ tmux_conf_theme_status_right='#(echo foo %% bar)' ``` See `man 3 strftime`. -### Accessing the macOS clipboard from within tmux sessions +### Accessing the macOS clipboard from within tmux sessions (tmux `< 2.6`) [Chris Johnsen created the `reattach-to-user-namespace` utility][reattach-to-user-namespace] that makes `pbcopy` and `pbpaste` work From d950ee3c8c3a967cf6f52ab4caf4cfccfa7b702f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 10 Oct 2020 18:56:13 +0200 Subject: [PATCH 065/155] added support for tpm, resolves #61 --- .gitignore | 1 + .tmux.conf | 80 ++++++++++++++++++++++++++++++++++++++++-------- .tmux.conf.local | 31 +++++++++++++++++++ README.md | 22 +++++++++++-- 4 files changed, 118 insertions(+), 16 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bfd626 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +plugins/** diff --git a/.tmux.conf b/.tmux.conf index 7dc2978..8d0e36f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -162,13 +162,12 @@ bind P choose-buffer # choose which buffer to paste from # -- user defined overrides ---------------------------------------------------- -if '[ -f ~/.tmux.conf.local ]' 'source ~/.tmux.conf.local' +source -q ~/.tmux.conf.local # -- 8< ------------------------------------------------------------------------ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' -run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-time 3000 \; display "This configuration will soon require tmux >= 2.4" \; set -u display-time || true' # EOF @@ -1332,19 +1331,72 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # setw -g clock-mode-style "$tmux_conf_theme_clock_style" # } # +# __apply_plugins() { +# window_active="$1" +# tmux_conf_update_plugins_on_launch="$2" +# tmux_conf_update_plugins_on_reload="$3" +# +# TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} +# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# install_tpm=true +# tmux display 'Installing tpm and plugins...' +# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" +# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then +# update_tpm=true +# tmux display 'Updating tpm and plugins...' +# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) +# fi +# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then +# perl -0777 -p -i -e 's/git clone --recursive/git clone --recursive --depth 1 --shallow-submodules/g +# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" +# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" +# fi +# if [ x"$update_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 +# tmux display 'Done updating tpm and plugins...' +# elif [ x"$install_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 +# tmux display 'Done installing tpm and plugins...' +# fi +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" +# if [ -z "$window_active" ] && [ $_tmux_version -lt 204 ]; then +# tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" +# fi +# } +# +# _apply_plugins() { +# tmux_conf_update_plugins_on_launch=${tmux_conf_update_plugins_on_launch:-true} +# tmux_conf_update_plugins_on_reload=${tmux_conf_update_plugins_on_reload:-true} +# if [ -n "$(tmux show -gv '@plugin')" ] || [ -n "$(tmux show -gv '@tpm_plugins')" ]; then +# tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\"" +# elif [ -z "$window_active" ]; then +# if [ $_tmux_version -lt 204 ]; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration will soon require tmux 2.4+" \; set -u display-time' +# fi +# fi +# } +# # _apply_configuration() { # -# if ! command -v perl > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires perl" \; set -u display-time' -# return -# fi -# if ! command -v sed > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires sed" \; set -u display-time' -# return -# fi -# if ! command -v awk > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time' -# return +# window_active="$(tmux display -p '#{window_active}' 2>/dev/null || true)" +# if [ -z "$window_active" ]; then +# if ! command -v perl > /dev/null 2>&1; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires perl" \; set -u display-time \; run "sleep 3" \; kill-server' +# return +# fi +# if ! command -v sed > /dev/null 2>&1; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires sed" \; set -u display-time \; run "sleep 3" \; kill-server' +# return +# fi +# if ! command -v awk > /dev/null 2>&1; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time \; run "sleep 3" \; kill-server' +# return +# fi +# if [ $_tmux_version -lt 203 ]; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.3+" \; set -u display-time \; run "sleep 3" \; kill-server' +# return +# fi # fi # # # see https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard @@ -1374,6 +1426,8 @@ run -b '[ -z "#{window_active}" ] && [ -z "#{version}" ] && tmux set display-tim # # shellcheck disable=SC2046 # tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') # wait +# +# _apply_plugins # } # # _urlview() { diff --git a/.tmux.conf.local b/.tmux.conf.local index f40cedc..fc749dc 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -347,8 +347,39 @@ tmux_conf_copy_to_os_clipboard=false # move status line to top #set -g status-position top +# -- tpm ----------------------------------------------------------------------- + +# while I don't use tpm myself, many people requested official support so here +# is a seamless integration that automatically installs plugins in parallel + +# whenever a plugin introduces a variable to be used in 'status-left' or +# 'status-right', you can use it in 'tmux_conf_theme_status_left' and +# 'tmux_conf_theme_status_right' variables. + +# by default, launching tmux will update tpm and all plugins +# - true (default) +# - false +tmux_conf_update_plugins_on_launch=true + +# by default, reloading the configuration will update tpm and all plugins +# - true (default) +# - false +tmux_conf_update_plugins_on_reload=true + +# /!\ do not add set -g @plugin 'tmux-plugins/tpm' +# /!\ do not add run '~/.tmux/plugins/tpm/tpm' + +# to enable a plugin, use the 'set -g @plugin' syntax: +# visit https://github.com/tmux-plugins for available plugins +#set -g @plugin 'tmux-plugins/tmux-copycat' +#set -g @plugin 'tmux-plugins/tmux-cpu' +#set -g @plugin 'tmux-plugins/tmux-resurrect' +#set -g @plugin 'tmux-plugins/tmux-continuum' +#set -g @continuum-restore 'on' + # -- custom variables ---------------------------------------------------------- + # to define a custom #{foo} variable, define a POSIX shell function between the # '# EOF' and the '# "$@"' lines. Please note that the opening brace { character # must be on the same line as the function name otherwise the parse won't detect diff --git a/README.md b/README.md index fccca2a..c007560 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Installation Requirements: - - tmux **`>= 2.1`** (soon `>= 2.4`) running inside Linux, Mac, OpenBSD, Cygwin + - tmux **`>= 2.3`** (soon `>= 2.4`) running inside Linux, Mac, OpenBSD, Cygwin or WSL - awk, perl and sed - outside of tmux, `$TERM` must be set to `xterm-256color` @@ -109,12 +109,12 @@ Features if available - laptop battery status line information - uptime status line information - - optional highlight of focused pane (tmux `>= 2.1`) + - optional highlight of focused pane - configurable new windows and panes behavior (optionally retain current path) - SSH/Mosh aware split pane (reconnects to remote server) - copy to OS clipboard (needs [`reattach-to-user-namespace`][reattach-to-user-namespace] on macOS, `xsel` or `xclip` on Linux) - - support for 4-digit hexadecimal Unicode characters (requires `perl` or Bash >= 4.1.2) + - support for 4-digit hexadecimal Unicode characters - [Facebook PathPicker][] integration if available - [Urlview][] integration if available @@ -299,6 +299,22 @@ tmux_conf_theme_status_right='#(echo foo %% bar)' ``` See `man 3 strftime`. +### Using TPM plugins + +This configuration now comes with built-in [TPM] support: +- use the `set -g @plugin ...` syntax to enable a plugin +- whenever a plugin introduces a variable to be used in `status-left` or + `status-right`, you can use it in `tmux_conf_theme_status_left` and + `tmux_conf_theme_status_right` variables, see instructions above 👆 +- ⚠️ do not add `set -g @plugin 'tmux-plugins/tpm'` +- ⚠️ do not add `run '~/.tmux/plugins/tpm/tpm'` to `~/.tmux.conf` or your +- `~/.tmux.conf.local` copy ← people who are used to alter + `.tmux.conf` to add TPM support will have to adapt their configuration + +See `~/.tmux.conf.local` for instructions. + +[TPM]: https://github.com/tmux-plugins/tpm + ### Accessing the macOS clipboard from within tmux sessions (tmux `< 2.6`) [Chris Johnsen created the `reattach-to-user-namespace` From 41af713ff786ae2ea38ec52f7d7ef258ccd9fb9c Mon Sep 17 00:00:00 2001 From: Frederick Zhang Date: Sun, 10 Jan 2021 19:34:57 +1100 Subject: [PATCH 066/155] fixed BusyBox's tr command compatibility, fixes #441 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 8d0e36f..cab2275 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -189,7 +189,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _uname_s=$(uname -s) # -# _tmux_version=$(tmux -V | tr -cd '[:digit:].' | cut -d' ' -f2 | awk -F '.' '{print $1 * 100 + $2}') +# _tmux_version=$(tmux -V | tr -cd '0123456789.' | cut -d' ' -f2 | awk -F '.' '{print $1 * 100 + $2}') # # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] From 788ffd8e6f51d268a502c94e563f5bef32bec882 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 12 Nov 2020 13:39:43 +0100 Subject: [PATCH 067/155] fixed variable replacement in tmux_conf_theme_status_right and tmux_conf_theme_status_left, fixes #356 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index cab2275..e31b67a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1196,7 +1196,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _battery_info # if [ "$charge" != 0 ]; then # case "$status_left $status_right" in -# *'#{battery_status}'*|*'#{battery_bar}'*|*'#{battery_hbar}'*|*'#{battery_vbar}'*|*'#{battery_percentage}'*) +# *'#{?battery_status'*|*'#{?battery_bar'*|*'#{?battery_hbar'*|*'#{?battery_vbar'*|*'#{?battery_percentage'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ # -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ @@ -1243,7 +1243,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' # case "$status_left $status_right" in -# *'#{uptime_d}'*|*'#{uptime_h}'*|*'#{uptime_m}'*|*'#{uptime_s}'*) +# *'#{?uptime_d'*|*'#{?uptime_h'*|*'#{?uptime_m'*|*'#{?uptime_s'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?uptime_y/#\{\1@uptime_y/g' \ # -e 's/#\{(\?)?uptime_d/#\{\1@uptime_d/g' \ @@ -1276,7 +1276,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' # case "$status_left $status_right" in -# *'#{loadavg}'*) +# *'#{?loadavg'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # status_right=$(echo "$status_right" | sed -E \ From d2b5758bdd42364f0add8791444f1581ae3b7bf5 Mon Sep 17 00:00:00 2001 From: Neil Mahoney Date: Sun, 10 Jan 2021 21:39:42 -0500 Subject: [PATCH 068/155] fix left status prefix rendering --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index e31b67a..9ceaa61 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1023,7 +1023,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ -n "$tmux_conf_theme_status_left" ]; then # status_left=$(echo "$tmux_conf_theme_status_left" | sed \ # -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') From 4bf9263fbded44928ca9bf95333582503c73b584 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 11 Jan 2021 07:50:47 +0100 Subject: [PATCH 069/155] fixed variable replacement in tmux_conf_theme_status_right and tmux_conf_theme_status_left (2), fixes #442 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 9ceaa61..1bf77f6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1196,7 +1196,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _battery_info # if [ "$charge" != 0 ]; then # case "$status_left $status_right" in -# *'#{?battery_status'*|*'#{?battery_bar'*|*'#{?battery_hbar'*|*'#{?battery_vbar'*|*'#{?battery_percentage'*) +# *'#{battery_'*|*'#{?battery_'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ # -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ @@ -1243,7 +1243,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' # case "$status_left $status_right" in -# *'#{?uptime_d'*|*'#{?uptime_h'*|*'#{?uptime_m'*|*'#{?uptime_s'*) +# *'#{uptime_'*|*'#{?uptime_'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?uptime_y/#\{\1@uptime_y/g' \ # -e 's/#\{(\?)?uptime_d/#\{\1@uptime_d/g' \ @@ -1276,7 +1276,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' # case "$status_left $status_right" in -# *'#{?loadavg'*) +# *'#{loadavg'*|*'#{?loadavg'*) # status_left=$(echo "$status_left" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # status_right=$(echo "$status_right" | sed -E \ From 7a71a82b43cc9afe77850bf05f5e807880a37b68 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 25 Jan 2021 17:38:46 +0100 Subject: [PATCH 070/155] fixed #{online} custom variable implementation as ping -t is not portable, fixes #451 --- .tmux.conf.local | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf.local b/.tmux.conf.local index fc749dc..ffdf2eb 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -397,7 +397,7 @@ tmux_conf_update_plugins_on_reload=true # } # # online() { -# ping -t 1 -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' +# ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' # } # # "$@" From 5abe651ccb810c90b13758a30e3100c8a6d5551a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 25 Feb 2021 14:02:46 +0100 Subject: [PATCH 071/155] remind people to not "uncomment" local functions in .tmux.conf.local --- .tmux.conf.local | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.tmux.conf.local b/.tmux.conf.local index ffdf2eb..b97d67b 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -391,6 +391,8 @@ tmux_conf_update_plugins_on_reload=true # # /!\ do not remove the following line # EOF # +# # /!\ do not "uncomment" the functions: the leading "# " characters are needed +# # weather() { # curl -m 1 wttr.in?format=3 2>/dev/null # sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval From a752c41bca59622987e9a7275404893d7c9013eb Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 4 Mar 2021 17:10:37 +0100 Subject: [PATCH 072/155] fixed copy to os clipboard on macOS when xclip or xsel is installed, fixes #459 --- .tmux.conf | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 1bf77f6..ee6968c 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -142,12 +142,12 @@ run -b 'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true' run -b 'tmux bind -t vi-copy L end-of-line 2> /dev/null || true' run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' -# copy to macOS clipboard -if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' -if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' # copy to X11 clipboard if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' +# copy to macOS clipboard +if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' +if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' # copy to Windows clipboard if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | clip.exe"' if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboard"' @@ -776,10 +776,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # tmux_conf_copy_to_os_clipboard=${tmux_conf_copy_to_os_clipboard:-false} -# command -v pbcopy > /dev/null 2>&1 && command='pbcopy' -# command -v reattach-to-user-namespace > /dev/null 2>&1 && command='reattach-to-user-namespace pbcopy' # command -v xsel > /dev/null 2>&1 && command='xsel -i -b' # ! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1 && command='xclip -i -selection clipboard > \/dev\/null 2>\&1' +# command -v pbcopy > /dev/null 2>&1 && command='pbcopy' +# command -v reattach-to-user-namespace > /dev/null 2>&1 && command='reattach-to-user-namespace pbcopy' # command -v clip.exe > /dev/null 2>&1 && command='clip\.exe' # [ -c /dev/clipboard ] && command='cat > \/dev\/clipboard' # From 4868ac4bd9910de3c8a89ab5b1d150e24caf2c6f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 5 Mar 2021 19:02:15 +0100 Subject: [PATCH 073/155] worked around broken /sys/class/power_supply//capacity > 100, resolves #460 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index ee6968c..503d9c6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -303,7 +303,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") # bat_capacity="$batpath/capacity" # if [ -r "$bat_capacity" ]; then -# charge=$(awk -v charge="$charge" -v capacity="$(cat "$bat_capacity")" 'BEGIN { print charge + capacity / 100 }') +# charge=$(awk -v charge="$charge" -v capacity="$(cat "$bat_capacity")" 'BEGIN { print charge + (capacity > 100 ? 100 : capacity) / 100 }') # else # bat_energy_full="$batpath/energy_full" # bat_energy_now="$batpath/energy_now" From 8aefa1e79809de7f69259ea91299313cca7579f7 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 4 Mar 2021 08:15:45 +0100 Subject: [PATCH 074/155] made version detection more robust in case tmux executable is renamed (2), fixes #457 --- .tmux.conf | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 503d9c6..4d0ef4a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -189,7 +189,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _uname_s=$(uname -s) # -# _tmux_version=$(tmux -V | tr -cd '0123456789.' | cut -d' ' -f2 | awk -F '.' '{print $1 * 100 + $2}') +# _tmux_version=$(tmux -V | awk '{print ($2+0) * 100}') # # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] @@ -1211,9 +1211,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') # status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" # interval=60 -# if [ $_tmux_version -ge 302 ]; then +# if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" -# elif [ $_tmux_version -gt 204 ]; then +# elif [ $_tmux_version -gt 240 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" @@ -1264,9 +1264,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # interval=$(tmux show -gv status-interval) # ;; # esac -# if [ $_tmux_version -ge 302 ]; then +# if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" -# elif [ $_tmux_version -gt 204 ]; then +# elif [ $_tmux_version -gt 240 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" @@ -1282,9 +1282,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # status_right=$(echo "$status_right" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) -# if [ $_tmux_version -ge 302 ]; then +# if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" -# elif [ $_tmux_version -gt 204 ]; then +# elif [ $_tmux_version -gt 240 ]; then # status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" @@ -1360,7 +1360,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux display 'Done installing tpm and plugins...' # fi # "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" -# if [ -z "$window_active" ] && [ $_tmux_version -lt 204 ]; then +# if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then # tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" # fi # } @@ -1371,7 +1371,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ -n "$(tmux show -gv '@plugin')" ] || [ -n "$(tmux show -gv '@tpm_plugins')" ]; then # tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\"" # elif [ -z "$window_active" ]; then -# if [ $_tmux_version -lt 204 ]; then +# if [ $_tmux_version -lt 240 ]; then # tmux run -b 'tmux set display-time 3000 \; display "This configuration will soon require tmux 2.4+" \; set -u display-time' # fi # fi @@ -1393,7 +1393,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi -# if [ $_tmux_version -lt 203 ]; then +# if [ $_tmux_version -lt 230 ]; then # tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.3+" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi From 3bfec1a25a8a66dd251d37f4efcd6a0e9f30a6da Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 18 Mar 2021 11:54:39 +0100 Subject: [PATCH 075/155] made version detection more robust in case tmux executable is renamed (3), fixes #462 fixed a regression introduced by commit 8aefa1e79809de7f69259ea91299313cca7579f7 that breaks version detection for tmux HEAD for which 'tmux -V' prints e.g. tmux next-3.3 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 4d0ef4a..7f2f988 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -189,7 +189,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _uname_s=$(uname -s) # -# _tmux_version=$(tmux -V | awk '{print ($2+0) * 100}') +# _tmux_version=$(tmux -V | awk '{gsub(/[^0-9.]/, "", $2); print ($2+0) * 100}') # # _is_enabled() { # [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] From 760bf4fabda9a41f67f8ad7e202c2a66a2a3d4e1 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 24 Apr 2021 19:26:16 +0200 Subject: [PATCH 076/155] made _apply_bindings() work with tmux 3.2 stock bindings, fixes #472 --- .tmux.conf | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 7f2f988..6f66866 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -785,9 +785,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$command" ]; then # if _is_enabled "$tmux_conf_copy_to_os_clipboard"; then -# perl -p -i -e "s/\bcopy-selection(-and-cancel)?\b/copy-pipe\1 '$command'/g" "$cfg" +# perl -p -i -e "s/(?!.*?$command)\bcopy-(?:selection|pipe)(-and-cancel)?\b/copy-pipe\1 '$command'/g" "$cfg" # else -# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2/copy-selection\1/g" "$cfg" +# if [ $_tmux_version -ge 320 ]; then +# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-pipe\1/g" "$cfg" +# else +# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-selection\1/g" "$cfg" +# fi # fi # fi # @@ -998,7 +1002,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} # tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} # -# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 +# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 # tmux_conf_theme_mouse_fg=${tmux_conf_theme_mouse_fg:-none} # tmux_conf_theme_mouse_bg=${tmux_conf_theme_mouse_bg:-none} # tmux_conf_theme_mouse_attr=${tmux_conf_theme_mouse_attr:-none} From 1f91646af104ed423054a1dd47a3b8c7ae69cfbc Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 8 May 2021 22:46:02 +0200 Subject: [PATCH 077/155] replaced printf '\n' calls by echo calls, fixes #479 TPM plugins further editing status-left or status-right may alter the content in such a way that the line feed character becomes a space --- .tmux.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6f66866..8e7b05a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1213,12 +1213,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# status_right="#(printf '\n'; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" +# status_right="#(echo; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" # interval=60 # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" # fi @@ -1271,7 +1271,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" # fi @@ -1289,7 +1289,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(printf '\n'; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" # fi From ed0b83a1184929ec967921d0db6bb0c4e6e9a2c5 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 5 Jun 2021 22:21:39 +0200 Subject: [PATCH 078/155] use single quotes for strings containing Unicode escapes, fixes #486 --- .tmux.conf.local | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.tmux.conf.local b/.tmux.conf.local index b97d67b..057b2b2 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -194,10 +194,10 @@ tmux_conf_theme_left_separator_main="" tmux_conf_theme_left_separator_sub="|" tmux_conf_theme_right_separator_main="" tmux_conf_theme_right_separator_sub="|" -#tmux_conf_theme_left_separator_main="\uE0B0" # /!\ you don't need to install Powerline -#tmux_conf_theme_left_separator_sub="\uE0B1" # you only need fonts patched with -#tmux_conf_theme_right_separator_main="\uE0B2" # Powerline symbols or the standalone -#tmux_conf_theme_right_separator_sub="\uE0B3" # PowerlineSymbols.otf font, see README.md +#tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline +#tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with +#tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone +#tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see README.md # status left/right content: # - separate main sections with "|" From 67b1d38a87e40c09c75fd49a728e80b5f7bdc505 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 13 Jul 2021 18:40:54 +0200 Subject: [PATCH 079/155] mitigate tmux displaying its "<... not ready>" message, closes #496 the "flickering" perceived when the "<... not ready>" message is long won't be totally eliminated until tmux 3.3 though (commit 38c5788232e0e3abdd08ade55a9d4fbcda637df1) --- .tmux.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index 8e7b05a..9a5434a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -558,6 +558,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _username() { +# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # ssh_only=$2 # @@ -582,6 +583,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _hostname() { +# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # ssh_only=$2 # full=$3 @@ -618,6 +620,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _root() { +# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # root=$2 # From 4ef0626b6db5c63ca22c9c6849668f78f2a0da4c Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 19 Aug 2021 11:51:49 +0200 Subject: [PATCH 080/155] revert "mitigate tmux displaying its "<... not ready>" message, closes #496" this reverts commit 67b1d38a87e40c09c75fd49a728e80b5f7bdc505. the proposed mitigation causes flickering for some, see followups in #496 --- .tmux.conf | 3 --- 1 file changed, 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 9a5434a..8e7b05a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -558,7 +558,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _username() { -# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # ssh_only=$2 # @@ -583,7 +582,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _hostname() { -# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # ssh_only=$2 # full=$3 @@ -620,7 +618,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _root() { -# echo # tty=${1:-$(tmux display -p '#{pane_tty}')} # root=$2 # From a63dc5c6a9a59a935c058fba12009495ef0c4100 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 29 Aug 2021 11:02:08 +0200 Subject: [PATCH 081/155] check connectivity to github.com before installing and/or updating tpm and plugins, fixes #513 --- .tmux.conf | 50 +++++++++++++++++++++++++++--------------------- .tmux.conf.local | 1 + 2 files changed, 29 insertions(+), 22 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 8e7b05a..18df782 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1341,29 +1341,35 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_update_plugins_on_reload="$3" # # TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} -# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then -# install_tpm=true -# tmux display 'Installing tpm and plugins...' -# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" -# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then -# update_tpm=true -# tmux display 'Updating tpm and plugins...' -# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) +# +# if curl -Ikfs -o /dev/null --connect-timeout 2 --max-time 2 https://github.com; then +# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# install_tpm=true +# tmux display 'Installing tpm and plugins...' +# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" +# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then +# update_tpm=true +# tmux display 'Updating tpm and plugins...' +# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) +# fi +# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then +# perl -0777 -p -i -e 's/git clone --recursive/git clone --recursive --depth 1 --shallow-submodules/g +# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" +# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" +# fi +# if [ x"$update_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 +# tmux display 'Done updating tpm and plugins...' +# elif [ x"$install_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 +# tmux display 'Done installing tpm and plugins...' +# fi +# else +# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." # fi -# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone --recursive/git clone --recursive --depth 1 --shallow-submodules/g -# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" -# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" -# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" -# fi -# if [ x"$update_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 -# tmux display 'Done updating tpm and plugins...' -# elif [ x"$install_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 -# tmux display 'Done installing tpm and plugins...' -# fi -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" +# +# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" # if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then # tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" # fi diff --git a/.tmux.conf.local b/.tmux.conf.local index 057b2b2..c440076 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -347,6 +347,7 @@ tmux_conf_copy_to_os_clipboard=false # move status line to top #set -g status-position top + # -- tpm ----------------------------------------------------------------------- # while I don't use tpm myself, many people requested official support so here From 4f332e6b1748c1bc54db9e456c64f8509b465da8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 31 Aug 2021 09:37:48 +0200 Subject: [PATCH 082/155] fixed _battery_info() when pmset doesn't report a charge percentage, fixes #512 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 18df782..060f134 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -288,7 +288,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # while IFS= read -r line; do # [ -z "$line" ] && continue # discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") -# percentage=$(printf '%s' "$line" | grep -E -o '[0-9]+%') +# percentage=$(printf '%s' "$line" | grep -E -o '[0-9]+%' || echo "0%") # charge=$(awk -v charge="$charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') # count=$((count + 1)) # done << EOF From a97e3021cca1f8220cdf906233e1aef0bda044f5 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 4 Sep 2021 18:00:02 +0200 Subject: [PATCH 083/155] updated tpm integration - automatically delete tpm when not used - automatically delete unused plugins - install plugins when subsequently enabling then in ~/.tmux.conf.local - use + u to update plugins as + U is bound to Urlview, fixes #507 --- .tmux.conf | 75 +++++++++++++++++++++++++++--------------------- .tmux.conf.local | 11 +++++++ README.md | 5 ++++ 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 060f134..82d7313 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1339,37 +1339,53 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # window_active="$1" # tmux_conf_update_plugins_on_launch="$2" # tmux_conf_update_plugins_on_reload="$3" +# tmux_conf_uninstall_plugins_on_reload="$4" # # TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} -# -# if curl -Ikfs -o /dev/null --connect-timeout 2 --max-time 2 https://github.com; then -# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then -# install_tpm=true -# tmux display 'Installing tpm and plugins...' -# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" -# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then -# update_tpm=true -# tmux display 'Updating tpm and plugins...' -# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) -# fi -# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone --recursive/git clone --recursive --depth 1 --shallow-submodules/g -# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" -# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" -# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" -# fi -# if [ x"$update_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 -# tmux display 'Done updating tpm and plugins...' -# elif [ x"$install_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 -# tmux display 'Done installing tpm and plugins...' +# if [ -z "$(tmux show -gv '@plugin')" ] && [ -z "$(tmux show -gv '@tpm_plugins')" ]; then +# if _is_enabled "$tmux_conf_uninstall_plugins_on_reload" && [ -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# tmux display 'Uninstalling tpm and plugins...' +# rm -rf "$TMUX_PLUGIN_MANAGER_PATH" +# tmux display 'Done uninstalling tpm and plugins...' # fi # else -# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." +# if curl -Ikfs -o /dev/null --connect-timeout 2 --max-time 2 https://github.com; then +# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# install_tpm=true +# tmux display 'Installing tpm and plugins...' +# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" +# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then +# update_tpm=true +# tmux display 'Updating tpm and plugins...' +# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) +# fi +# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then +# perl -0777 -p -i -e 's/git clone/git clone --depth 1 --shallow-submodules/g +# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh"& +# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh"& +# wait +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" +# fi +# if [ x"$update_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >/dev/null 2>&1 +# tmux display 'Done updating tpm and plugins...' +# elif [ x"$install_tpm" = x"true" ]; then +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 +# tmux display 'Done installing tpm and plugins...' +# fi +# else +# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." +# fi +# +# [ -z "$(tmux show -gv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' +# [ -z "$(tmux show -gv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' +# [ -z "$(tmux show -gv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' +# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" +# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' # fi # -# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" # if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then # tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" # fi @@ -1378,13 +1394,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _apply_plugins() { # tmux_conf_update_plugins_on_launch=${tmux_conf_update_plugins_on_launch:-true} # tmux_conf_update_plugins_on_reload=${tmux_conf_update_plugins_on_reload:-true} -# if [ -n "$(tmux show -gv '@plugin')" ] || [ -n "$(tmux show -gv '@tpm_plugins')" ]; then -# tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\"" -# elif [ -z "$window_active" ]; then -# if [ $_tmux_version -lt 240 ]; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration will soon require tmux 2.4+" \; set -u display-time' -# fi -# fi +# tmux_conf_uninstall_plugins_on_reload=${tmux_conf_uninstall_plugins_on_reload:-true} +# tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\" \"$tmux_conf_uninstall_plugins_on_reload\"" # } # # _apply_configuration() { diff --git a/.tmux.conf.local b/.tmux.conf.local index c440076..515bc31 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -367,6 +367,17 @@ tmux_conf_update_plugins_on_launch=true # - false tmux_conf_update_plugins_on_reload=true +# by default, reloading the configuration will uninstall tpm and plugins when no +# plugins are enabled +# - true (default) +# - false +tmux_conf_uninstall_plugins_on_reload=true + +# /!\ the tpm bindings differ slightly from upstream: +# - installing plugins: + I +# - uninstalling plugins: + Alt + u +# - updating plugins: + u + # /!\ do not add set -g @plugin 'tmux-plugins/tpm' # /!\ do not add run '~/.tmux/plugins/tpm/tpm' diff --git a/README.md b/README.md index c007560..84263e5 100644 --- a/README.md +++ b/README.md @@ -311,6 +311,11 @@ This configuration now comes with built-in [TPM] support: - `~/.tmux.conf.local` copy ← people who are used to alter `.tmux.conf` to add TPM support will have to adapt their configuration +⚠️ The TPM bindings differ slightly from upstream: + - installing plugins: ` + I` + - uninstalling plugins: ` + Alt + u` + - updating plugins: ` + u` + See `~/.tmux.conf.local` for instructions. [TPM]: https://github.com/tmux-plugins/tpm From df46ab2ba97d7022cfe15d16a59baf3156b299b8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 2 Oct 2021 23:49:58 +0200 Subject: [PATCH 084/155] fixed tpm plugins not installing on CentOS 7, fixes #520 - drop git clone --shallow-submodules as it requires git >= 2.9.0 - display a message when one of the tpm script fails --- .tmux.conf | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 82d7313..7a56936 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1360,19 +1360,21 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) # fi # if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone/git clone --depth 1 --shallow-submodules/g +# perl -0777 -p -i -e 's/git clone/git clone --depth 1/g # ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh"& # perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh"& # wait # tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # fi # if [ x"$update_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >/dev/null 2>&1 -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >/dev/null 2>&1 -# tmux display 'Done updating tpm and plugins...' +# { +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# tmux display 'Done updating tpm and plugins...' +# } || tmux display 'Failed updating tpm and plugins...' # elif [ x"$install_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >/dev/null 2>&1 +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 # tmux display 'Done installing tpm and plugins...' # fi # else From f8a5a0886808f7dcef96a87103f726d213d8e237 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 3 Oct 2021 09:43:18 +0200 Subject: [PATCH 085/155] worked around Falcon.app agent slowing everything down, fixes #492 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit it appears the Falcon anti-malware product for end-points slows down ps -t /dev/ttysXXX commands 🤷 the workaround consists in passing ttysXXX instead of /dev/ttysXXX and is achieved by removing the /dev/ prefix in #{pane_tty} expansion with the help of formats substitutions --- .tmux.conf | 78 +++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 7a56936..6f2537e 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -558,7 +558,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _username() { -# tty=${1:-$(tmux display -p '#{pane_tty}')} +# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # ssh_only=$2 # # tty_info=$(_tty_info "$tty") @@ -582,7 +582,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _hostname() { -# tty=${1:-$(tmux display -p '#{pane_tty}')} +# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # ssh_only=$2 # full=$3 # h_or_H=$4 @@ -618,7 +618,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _root() { -# tty=${1:-$(tmux display -p '#{pane_tty}')} +# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # root=$2 # # username=$(_username "$tty" false) @@ -675,7 +675,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _split_window_ssh() { -# tty=${1:-$(tmux display -p '#{pane_tty}')} +# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # shift # # tty_info=$(_tty_info "$tty") @@ -726,7 +726,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # perl -p -i -e " # s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g # ; -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_tty}\2\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{s,/dev/,,:pane_tty}\2\5\1/g # ; # s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{pane_tty\}\3)(.*?)\2/split-window\4/g # ; @@ -893,12 +893,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} @@ -974,21 +974,21 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') # tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') # # # -- indicators # @@ -1034,10 +1034,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$(tmux display -p '#{version}')" ]; then # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_left=$(printf '%s' "$status_left" | awk \ @@ -1122,10 +1122,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$(tmux display -p '#{version}')" ]; then # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_right=$(printf '%s' "$status_right" | awk \ @@ -1229,19 +1229,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$status_left $status_right" in # *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) # status_left=$(echo "$status_left" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') # status_right=$(echo "$status_right" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') # ;; # esac # From a976b17bede13d4dd1cb13f39d954d0d03c5fb97 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 6 Oct 2021 16:17:36 +0200 Subject: [PATCH 086/155] worked around Falcon.app agent slowing everything down (2), fixes #522 --- .tmux.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6f2537e..5506d52 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -726,9 +726,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # perl -p -i -e " # s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g # ; -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{s,/dev/,,:pane_tty}\2\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{s,\/dev\/,,:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{s,\/dev\/,,:pane_tty}\2\5\1/g # ; -# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{pane_tty\}\3)(.*?)\2/split-window\4/g +# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{s,\/dev\/,,:pane_tty\}\3)(.*?)\2/split-window\4/g # ; # s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ # "$cfg" @@ -743,13 +743,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # perl -p -i -e " -# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{s,\/dev\/,,:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" # # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_tty\}\1'/g" "$cfg" +# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{s,\/dev\/,,:pane_tty\}\1'/g" "$cfg" # fi # # if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then @@ -758,9 +758,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{s,\/dev\/,,:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{s,\/dev\/,,:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{s,\/dev\/,,:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{s,\/dev\/,,:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ # "$cfg" # fi # From 18775e12a4ec8d4ecd7f8f9bd698f47ceedfbabd Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 11 Oct 2021 20:36:38 +0200 Subject: [PATCH 087/155] reworked pane / tty introspection, fixes #403, fixes #458 - renamed _tty_info() to _pane_info() - pass both #{pane_pid} and #{pane_tty} to _pane_info() - when inspecting ps output, walk down from #{pane_pid} to the child-most pid --- .tmux.conf | 147 +++++++++++++++++++++++++---------------------------- 1 file changed, 69 insertions(+), 78 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 5506d52..c4af41f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -493,51 +493,39 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # set -g '@battery_percentage' "$battery_percentage" # } # -# _tty_info() { -# tty="${1##/dev/}" +# _pane_info() { +# pane_pid="$1" +# tty="${2##/dev/}" # case "$_uname_s" in # *CYGWIN*) -# ps -al | tail -n +2 | awk -v tty="$tty" ' +# ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$tty" ' # ((/ssh/ && !/-W/) || !/ssh/) && $5 == tty { # user[$1] = $6; parent[$1] = $2; child[$2] = $1 # } # END { -# for (i in parent) -# { -# j = i -# while (parent[j]) -# j = parent[j] +# pid = pane_pid +# while (child[pid]) +# pid = child[pid] # -# if (!(i in child) && j != 1) -# { -# file = "/proc/" i "/cmdline"; getline command < file; close(file) -# gsub(/\0/, " ", command) -# "id -un " user[i] | getline username -# print i":"username":"command -# exit -# } -# } +# print pid":"user[pid]":"command[pid] +# file = "/proc/" pid "/cmdline"; getline command < file; close(file) +# gsub(/\0/, " ", command) +# "id -un " user[pid] | getline username +# print pid":"username":"command # } # ' # ;; # *) -# ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk ' +# ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' # NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { # user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } # END { -# for (i in parent) -# { -# j = i -# while (parent[j]) -# j = parent[j] +# pid = pane_pid +# while (child[pid]) +# pid = child[pid] # -# if (!(i in child) && j != 1) -# { -# print i":"user[i]":"command[i] -# exit -# } -# } +# print pid":"user[pid]":"command[pid] # } # ' # ;; @@ -558,11 +546,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _username() { -# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} -# ssh_only=$2 +# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} +# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# ssh_only=$3 # -# tty_info=$(_tty_info "$tty") -# command=${tty_info#*:} +# pane_info=$(_pane_info "$pane_pid" "$tty") +# command=${pane_info#*:} # command=${command#*:} # # ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") @@ -573,7 +562,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') # else # if ! _is_enabled "$ssh_only"; then -# username=${tty_info#*:} +# username=${pane_info#*:} # username=${username%%:*} # fi # fi @@ -582,13 +571,14 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _hostname() { -# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} -# ssh_only=$2 -# full=$3 -# h_or_H=$4 +# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} +# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# ssh_only=$3 +# full=$4 +# h_or_H=$5 # -# tty_info=$(_tty_info "$tty") -# command=${tty_info#*:} +# pane_info=$(_pane_info "$pane_pid" "$tty") +# command=${pane_info#*:} # command=${command#*:} # # ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") @@ -675,11 +665,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _split_window_ssh() { -# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} +# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # shift # -# tty_info=$(_tty_info "$tty") -# command=${tty_info#*:} +# pane_info=$(_pane_info "$pane_pid" "$tty") +# command=${pane_info#*:} # command=${command#*:} # # case "$command" in @@ -726,7 +717,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # perl -p -i -e " # s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g # ; -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{s,\/dev\/,,:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{s,\/dev\/,,:pane_tty}\2\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{s,\/dev\/,,:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{s,\/dev\/,,:pane_tty}\2\5\1/g # ; # s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{s,\/dev\/,,:pane_tty\}\3)(.*?)\2/split-window\4/g # ; @@ -743,13 +734,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # perl -p -i -e " -# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{s,\/dev\/,,:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{s,\/dev\/,,:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" # # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{s,\/dev\/,,:pane_tty\}\1'/g" "$cfg" +# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{s,\/dev\/,,:pane_tty\}\1'/g" "$cfg" # fi # # if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then @@ -893,12 +884,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} @@ -974,21 +965,21 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') # tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') # # # -- indicators # @@ -1034,7 +1025,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$(tmux display -p '#{version}')" ]; then # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_left=$(echo "$status_left" | sed \ # -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") @@ -1122,7 +1113,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$(tmux display -p '#{version}')" ]; then # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_right=$(echo "$status_right" | sed \ # -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") @@ -1229,19 +1220,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$status_left $status_right" in # *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) # status_left=$(echo "$status_left" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') # status_right=$(echo "$status_right" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') # ;; # esac # From a71d0d9f8de4773893d52befba18d7735b37faaa Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 28 Aug 2021 23:15:03 +0200 Subject: [PATCH 088/155] made background sleep process exit immediately when exiting tmux, fixes #509 --- .tmux.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index c4af41f..97f6c23 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1207,9 +1207,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # status_right="#(echo; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" # interval=60 # if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done" +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" +# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" # fi @@ -1260,9 +1260,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ;; # esac # if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done" +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" # fi @@ -1278,9 +1278,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) # if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap 'exit 0' TERM; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done" +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" # elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" # fi From e8032e3ffb77f6ac59185f797ec8d0df221eeb5e Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 19 Oct 2021 22:11:18 +0200 Subject: [PATCH 089/155] set default-terminal to tmux-256color when available, fixes #205, fixes #382, closes #386 see https://github.com/tmux/tmux/wiki/FAQ#i-dont-see-italics-or-italics-and-reverse-are-the-wrong-way-round --- .tmux.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 97f6c23..e098c81 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -9,7 +9,9 @@ # -- general ------------------------------------------------------------------- -set -g default-terminal "screen-256color" # colors! +set -g default-terminal "screen-256color" +if 'infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"' + setw -g xterm-keys on set -s escape-time 10 # faster command sequences set -sg repeat-time 600 # increase repeat timeout From 90cdbbc32fb55017077d08f1f5e1597a0be70e73 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 22 Oct 2021 15:32:19 +0200 Subject: [PATCH 090/155] check connectivity to github.com before installing and/or updating tpm and plugins (2) --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index e098c81..3cda41b 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1342,7 +1342,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux display 'Done uninstalling tpm and plugins...' # fi # else -# if curl -Ikfs -o /dev/null --connect-timeout 2 --max-time 2 https://github.com; then +# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then # if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then # install_tpm=true # tmux display 'Installing tpm and plugins...' From 14bd87c7b2b4efd9dee2d54bfe7f2a82041e749c Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 15 Sep 2021 23:05:01 +0200 Subject: [PATCH 091/155] added word boundaries when replacing uptime_xxx variables --- .tmux.conf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3cda41b..49236fb 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1242,19 +1242,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$status_left $status_right" in # *'#{uptime_'*|*'#{?uptime_'*) # status_left=$(echo "$status_left" | sed -E \ -# -e 's/#\{(\?)?uptime_y/#\{\1@uptime_y/g' \ -# -e 's/#\{(\?)?uptime_d/#\{\1@uptime_d/g' \ +# -e 's/#\{(\?)?uptime_y\b/#\{\1@uptime_y/g' \ +# -e 's/#\{(\?)?uptime_d\b/#\{\1@uptime_d/g' \ # -e '/@uptime_y/ s/@uptime_d/@uptime_dy/g' \ # -e 's/#\{(\?)?uptime_h/#\{\1@uptime_h/g' \ -# -e 's/#\{(\?)?uptime_m/#\{\1@uptime_m/g' \ -# -e 's/#\{(\?)?uptime_s/#\{\1@uptime_s/g') +# -e 's/#\{(\?)?uptime_m\b/#\{\1@uptime_m/g' \ +# -e 's/#\{(\?)?uptime_s\b/#\{\1@uptime_s/g') # status_right=$(echo "$status_right" | sed -E \ -# -e 's/#\{(\?)?uptime_y/#\{\1@uptime_y/g' \ -# -e 's/#\{(\?)?uptime_d/#\{\1@uptime_d/g' \ +# -e 's/#\{(\?)?uptime_y\b/#\{\1@uptime_y/g' \ +# -e 's/#\{(\?)?uptime_d\b/#\{\1@uptime_d/g' \ # -e '/@uptime_y/ s/@uptime_d/@uptime_dy/g' \ -# -e 's/#\{(\?)?uptime_h/#\{\1@uptime_h/g' \ -# -e 's/#\{(\?)?uptime_m/#\{\1@uptime_m/g' \ -# -e 's/#\{(\?)?uptime_s/#\{\1@uptime_s/g') +# -e 's/#\{(\?)?uptime_h\b/#\{\1@uptime_h/g' \ +# -e 's/#\{(\?)?uptime_m\b/#\{\1@uptime_m/g' \ +# -e 's/#\{(\?)?uptime_s\b/#\{\1@uptime_s/g') # interval=60 # case "$status_left $status_right" in # *'#{@uptime_s}'*) From 1cd8ed93d33f3ad4384d486bc6092507a0bb7713 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 15 Sep 2021 23:01:32 +0200 Subject: [PATCH 092/155] added support for arguments to custom variables defined in ~/.tmux.conf.local --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 49236fb..39214b3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1297,7 +1297,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # -- custom variables --------------------------------------------------- # # if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1)%g; !p' < ~/.tmux.conf.local) +# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1(.*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) # status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi From 0da7d5c3db463a048b654bac79321d532a890271 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 31 Oct 2021 18:15:18 +0100 Subject: [PATCH 093/155] reworked pane / tty introspection (2) fixed implementation and calls to _root() --- .tmux.conf | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 39214b3..6c49bba 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -497,10 +497,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _pane_info() { # pane_pid="$1" -# tty="${2##/dev/}" +# pane_tty="${2##/dev/}" # case "$_uname_s" in # *CYGWIN*) -# ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$tty" ' +# ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$pane_tty" ' # ((/ssh/ && !/-W/) || !/ssh/) && $5 == tty { # user[$1] = $6; parent[$1] = $2; child[$2] = $1 # } @@ -518,7 +518,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ' # ;; # *) -# ps -t "$tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' +# ps -t "$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' # NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { # user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } @@ -549,10 +549,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _username() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # ssh_only=$3 # -# pane_info=$(_pane_info "$pane_pid" "$tty") +# pane_info=$(_pane_info "$pane_pid" "$pane_tty") # command=${pane_info#*:} # command=${command#*:} # @@ -574,12 +574,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _hostname() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # ssh_only=$3 # full=$4 # h_or_H=$5 # -# pane_info=$(_pane_info "$pane_pid" "$tty") +# pane_info=$(_pane_info "$pane_pid" "$pane_tty") # command=${pane_info#*:} # command=${command#*:} # @@ -610,10 +610,11 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _root() { -# tty=${1:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} -# root=$2 +# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} +# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# root=$3 # -# username=$(_username "$tty" false) +# username=$(_username "$pane_id" "$pane_tty" false) # # [ x"$username" = x"root" ] && echo "$root" # } @@ -668,10 +669,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _split_window_ssh() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} # shift # -# pane_info=$(_pane_info "$pane_pid" "$tty") +# pane_info=$(_pane_info "$pane_pid" "$pane_tty") # command=${pane_info#*:} # command=${command#*:} # @@ -1030,7 +1031,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_left=$(printf '%s' "$status_left" | awk \ @@ -1113,12 +1114,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') # -# if [ -n "$(tmux display -p '#{version}')" ]; then +# if [ -z "$(tmux display -p '#{version}')" ]; then # status_right=$(echo "$status_right" | sed \ # -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_right=$(printf '%s' "$status_right" | awk \ From 0ad7f141dc10fe4964b963bc215bb5e12972b0c3 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 31 Oct 2021 20:55:41 +0100 Subject: [PATCH 094/155] added word boundaries when replacing uptime_xxx variables (2) use perl instead of sead as on macOS sed doesn't support \b to match word boundaries --- .tmux.conf | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6c49bba..32b7b78 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1242,20 +1242,20 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' # case "$status_left $status_right" in # *'#{uptime_'*|*'#{?uptime_'*) -# status_left=$(echo "$status_left" | sed -E \ -# -e 's/#\{(\?)?uptime_y\b/#\{\1@uptime_y/g' \ -# -e 's/#\{(\?)?uptime_d\b/#\{\1@uptime_d/g' \ -# -e '/@uptime_y/ s/@uptime_d/@uptime_dy/g' \ -# -e 's/#\{(\?)?uptime_h/#\{\1@uptime_h/g' \ -# -e 's/#\{(\?)?uptime_m\b/#\{\1@uptime_m/g' \ -# -e 's/#\{(\?)?uptime_s\b/#\{\1@uptime_s/g') -# status_right=$(echo "$status_right" | sed -E \ -# -e 's/#\{(\?)?uptime_y\b/#\{\1@uptime_y/g' \ -# -e 's/#\{(\?)?uptime_d\b/#\{\1@uptime_d/g' \ -# -e '/@uptime_y/ s/@uptime_d/@uptime_dy/g' \ -# -e 's/#\{(\?)?uptime_h\b/#\{\1@uptime_h/g' \ -# -e 's/#\{(\?)?uptime_m\b/#\{\1@uptime_m/g' \ -# -e 's/#\{(\?)?uptime_s\b/#\{\1@uptime_s/g') +# status_left=$(echo "$status_left" | perl -p -e ' +# ; s/#\{(\?)?uptime_y\b/#\{\1\@uptime_y/g +# ; s/#\{(\?)?uptime_d\b/#\{\1\@uptime_d/g +# ; s/\@uptime_d\b/\@uptime_dy/g if /\@uptime_y\b/ +# ; s/#\{(\?)?uptime_h\b/#\{\1\@uptime_h/g +# ; s/#\{(\?)?uptime_m\b/#\{\1\@uptime_m/g +# ; s/#\{(\?)?uptime_s\b/#\{\1\@uptime_s/g') +# status_right=$(echo "$status_right" | perl -p -e ' +# ; s/#\{(\?)?uptime_y\b/#\{\1\@uptime_y/g +# ; s/#\{(\?)?uptime_d\b/#\{\1\@uptime_d/g +# ; s/\@uptime_d\b/\@uptime_dy/g if /\@uptime_y\b/ +# ; s/#\{(\?)?uptime_h\b/#\{\1\@uptime_h/g +# ; s/#\{(\?)?uptime_m\b/#\{\1\@uptime_m/g +# ; s/#\{(\?)?uptime_s\b/#\{\1\@uptime_s/g') # interval=60 # case "$status_left $status_right" in # *'#{@uptime_s}'*) From ee1547cb6c9a8586e28b31092e28c4d196b6d8ff Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 9 Nov 2021 19:03:08 +0100 Subject: [PATCH 095/155] reworked pane / tty introspection (3) fixed _pane_info() when running under Cygwin --- .tmux.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 32b7b78..164836b 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -509,7 +509,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # while (child[pid]) # pid = child[pid] # -# print pid":"user[pid]":"command[pid] # file = "/proc/" pid "/cmdline"; getline command < file; close(file) # gsub(/\0/, " ", command) # "id -un " user[pid] | getline username From 2751c215a1962f0772464ccc8e05ca1feac12fd0 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 8 Nov 2021 19:34:28 +0100 Subject: [PATCH 096/155] do not unset @tpm-install, @tpm-update, @tpm-clean and @plugin variables after tpm has launched, fixes #531 --- .tmux.conf | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 164836b..67421bc 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1374,11 +1374,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." # fi # -# [ -z "$(tmux show -gv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' -# [ -z "$(tmux show -gv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' -# [ -z "$(tmux show -gv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' +# [ -z "$(tmux show -gqv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' +# [ -z "$(tmux show -gqv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' +# [ -z "$(tmux show -gqv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' # [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" -# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' +# if [ $_tmux_version -gt 260 ]; then +# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' +# fi # fi # # if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then From c4220639fffd8d5d346299ece42699236ad48ce1 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 9 Nov 2021 18:40:44 +0100 Subject: [PATCH 097/155] worked around Falcon.app agent slowing everything down (3) tmux < 2.8 doesn't support regex substitutions so we use basename substitution instead --- .tmux.conf | 88 +++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 67421bc..6c8ed27 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -548,7 +548,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _username() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} # ssh_only=$3 # # pane_info=$(_pane_info "$pane_pid" "$pane_tty") @@ -573,7 +573,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _hostname() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} # ssh_only=$3 # full=$4 # h_or_H=$5 @@ -610,7 +610,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _root() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} # root=$3 # # username=$(_username "$pane_id" "$pane_tty" false) @@ -668,7 +668,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _split_window_ssh() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{s,/dev/,,:pane_tty}')} +# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} # shift # # pane_info=$(_pane_info "$pane_pid" "$pane_tty") @@ -719,9 +719,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # perl -p -i -e " # s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g # ; -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{s,\/dev\/,,:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{s,\/dev\/,,:pane_tty}\2\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{b:pane_tty}\2\5\1/g # ; -# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{s,\/dev\/,,:pane_tty\}\3)(.*?)\2/split-window\4/g +# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\3)(.*?)\2/split-window\4/g # ; # s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ # "$cfg" @@ -736,13 +736,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # perl -p -i -e " -# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{s,\/dev\/,,:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" # # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{s,\/dev\/,,:pane_tty\}\1'/g" "$cfg" +# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\1'/g" "$cfg" # fi # # if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then @@ -751,9 +751,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{s,\/dev\/,,:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{s,\/dev\/,,:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{s,\/dev\/,,:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{s,\/dev\/,,:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ # "$cfg" # fi # @@ -886,12 +886,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} @@ -967,21 +967,21 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ # -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ # -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # # # -- indicators # @@ -1027,10 +1027,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -n "$(tmux display -p '#{version}')" ]; then # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_left=$(printf '%s' "$status_left" | awk \ @@ -1115,10 +1115,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if [ -z "$(tmux display -p '#{version}')" ]; then # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # else # status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{s,/dev/,,:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") # fi # # status_right=$(printf '%s' "$status_right" | awk \ @@ -1222,19 +1222,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$status_left $status_right" in # *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) # status_left=$(echo "$status_left" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # status_right=$(echo "$status_right" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{s,/dev/,,:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{s,/dev/,,:pane_tty} true true #H #D)%g') +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # ;; # esac # From 24f1222307f072a7f6d83dfd57572e16f6b82569 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 9 Nov 2021 19:34:03 +0100 Subject: [PATCH 098/155] made background sleep process exit immediately when exiting tmux (2) tmux < 2.8 doesn't support #{l:...} --- .tmux.conf | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6c8ed27..7affd11 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1210,8 +1210,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # interval=60 # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 240 ]; then +# elif [ $_tmux_version -ge 280 ]; then # status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" +# elif [ $_tmux_version -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" # fi @@ -1263,8 +1265,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # esac # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 240 ]; then +# elif [ $_tmux_version -gt 280 ]; then # status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# elif [ $_tmux_version -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" # fi @@ -1281,8 +1285,10 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # interval=$(tmux show -gv status-interval) # if [ $_tmux_version -ge 320 ]; then # tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 240 ]; then +# elif [ $_tmux_version -gt 280 ]; then # status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# elif [ $_tmux_version -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" # else # status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" # fi From 69f744117ac5c97eb0f8f3481546974180174260 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 11 Nov 2021 18:56:11 +0100 Subject: [PATCH 099/155] updated tpm integration to display a message when one or more plugin(s) fails to run, closes #533 --- .tmux.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 7affd11..3e3bdca 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1362,6 +1362,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # perl -0777 -p -i -e 's/git clone/git clone --depth 1/g # ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh"& # perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh"& +# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh"& # wait # tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # fi @@ -1383,7 +1384,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # [ -z "$(tmux show -gqv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' # [ -z "$(tmux show -gqv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' # [ -z "$(tmux show -gqv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' -# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" +# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" || tmux display "One or more tpm plugin(s) failed" # if [ $_tmux_version -gt 260 ]; then # tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' # fi From 1ef9b68d80da43d85b394c64247ce47e88b75e8d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 20 Oct 2021 22:37:03 +0200 Subject: [PATCH 100/155] improved _pane_info() accuracy by excluding ssh proxy connections, tee, and only considering the first child of a process ps output is sorted by controlling terminal then pid in case of a cmd1 | cmd2 | cmd3 pipe chain, we only consider the first child of the parent process, which is cmd1 in the majority of cases the rare situation when pids wrap around isn't worth additional work on Linux - we sort ps output by lstart in hope precision is enough to make cmd1 always appear first even when pids wrap around - the more complex solution involves inspecting /proc//fd/0 to filter out processes being piped to finally, while lsof was promising, it won't list processes owned by other users unless run as root --- .tmux.conf | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3e3bdca..48f0117 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -501,8 +501,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$_uname_s" in # *CYGWIN*) # ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$pane_tty" ' -# ((/ssh/ && !/-W/) || !/ssh/) && $5 == tty { -# user[$1] = $6; parent[$1] = $2; child[$2] = $1 +# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ && $5 == tty { +# user[$1] = $6; if (!child[$2]) child[$2] = $1 # } # END { # pid = pane_pid @@ -516,10 +516,24 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # ' # ;; +# *Linux*) +# ps -t "$pane_tty" --sort=lstart -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' +# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { +# user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) +# } +# END { +# pid = pane_pid +# while (child[pid]) +# pid = child[pid] +# +# print pid":"user[pid]":"command[pid] +# } +# ' +# ;; # *) # ps -t "$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' -# NR > 1 && ((/ssh/ && !/-W/) || !/ssh/) { -# user[$2] = $1; parent[$2] = $3; child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) +# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { +# user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } # END { # pid = pane_pid From c6bab99f051c73c5ba3879751f25bb66c4c6be0d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 2 Nov 2021 14:21:55 +0100 Subject: [PATCH 101/155] updated _ssh_or_mosh_args() relaxed the regex to accommodate for renamed ssh clients and to ignore the command if supplied --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 48f0117..5a6b808 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -550,7 +550,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _ssh_or_mosh_args() { # case "$1" in # *ssh*) -# args=$(printf '%s' "$1" | perl -n -e 'print if s/(.*?)\bssh\b\s+(.*)/\2/') +# args=$(printf '%s' "$1" | perl -n -e 'print if s/.*?\bssh[\w]*\s*((?:\s+-\w+)*)(\s+\w+)(\s\w+)?/\1\2/') # ;; # *mosh-client*) # args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') From d471ccc068d83670b5b21be27eb2d33cc9f4f417 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 10 Nov 2021 19:37:03 +0100 Subject: [PATCH 102/155] updated _username() in when the ssh client doesn't support %r in ProxyCommand in such a case, we use -o IdentityFile='%%username%%/%r' and parse the output of ssh -v --- .tmux.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 5a6b808..62447e5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -574,7 +574,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # shellcheck disable=SC2086 # username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^user / { print $2; exit }') # # shellcheck disable=SC2086 -# [ -z "$username" ] && username=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%username% / { print $2; exit }') +# [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" 2>&1 | awk '/^%username% / { print $2; exit }') +# [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -v -T -o ControlPath=none -o ProxyCommand=false -o IdentityFile='%%username%%/%r' 2>&1 | awk '/%username%/ { print substr($4,12); exit }') # else # if ! _is_enabled "$ssh_only"; then # username=${pane_info#*:} From 0fe760fa6decf6e743e2f9b38a97ae2e2df998a3 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 19 Nov 2021 12:06:17 +0100 Subject: [PATCH 103/155] reworked pane / tty introspection (4), fixes #535 fixed _split_window_ssh() --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 62447e5..691efd5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -684,7 +684,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _split_window_ssh() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} # pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} -# shift +# shift 2 # # pane_info=$(_pane_info "$pane_pid" "$pane_tty") # command=${pane_info#*:} From a453b7fe60c289afe9e4aeaa37dc810add4b6643 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 29 Nov 2021 22:24:48 +0100 Subject: [PATCH 104/155] use send-keys -R to clear terminal and remove the sleep call --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 691efd5..4c7866d 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -48,7 +48,7 @@ set -g display-time 1000 # slightly longer status messages display time set -g status-interval 10 # redraw status line every 10 seconds # clear both screen and history -bind -n C-l send-keys C-l \; run 'sleep 0.1' \; clear-history +bind -n C-l send-keys -R \; clear-history # activity set -g monitor-activity on From 985d64c82ef86266513acbe9ebea2bb7614bfc0b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 30 Nov 2021 07:27:23 +0100 Subject: [PATCH 105/155] Revert "use send-keys -R to clear terminal and remove the sleep call", fixes #538 Instead, increase the sleep delay --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 4c7866d..e2e4d76 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -48,7 +48,7 @@ set -g display-time 1000 # slightly longer status messages display time set -g status-interval 10 # redraw status line every 10 seconds # clear both screen and history -bind -n C-l send-keys -R \; clear-history +bind -n C-l send-keys C-l \; run 'sleep 0.2' \; clear-history # activity set -g monitor-activity on From 96d085eaa702a5c2b003961e46aa5378d7e6d93e Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 9 Dec 2021 22:37:22 +0100 Subject: [PATCH 106/155] made _apply_bindings() work with tmux 3.4 stock bindings, fixes #541 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e2e4d76..cc8ecd0 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -744,7 +744,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} # if _is_enabled "$tmux_conf_new_window_retain_current_path"; then # perl -p -i -e " -# s/\bnew-window\b(?!\s+-)/{$&}/g if /\bdisplay-menu\b/ +# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ # ; # s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ # "$cfg" @@ -762,7 +762,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then # perl -p -i -e " -# s/\bsplit-window\b(?!\s+-)/{$&}/g if /\bdisplay-menu\b/ +# s/\bsplit-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; @@ -775,7 +775,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_new_session_prompt=${tmux_conf_new_session_prompt:-false} # if _is_enabled "$tmux_conf_new_session_prompt"; then # perl -p -i \ -# -e "s/(? Date: Sun, 12 Dec 2021 11:15:19 +0100 Subject: [PATCH 107/155] made tpm integration and patching more robust, fixes #540 --- .tmux.conf | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index cc8ecd0..a9b1be8 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1371,26 +1371,31 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then # update_tpm=true # tmux display 'Updating tpm and plugins...' -# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git checkout -q master && git reset -q --hard HEAD && git pull -q origin master) +# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) # fi # if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone/git clone --depth 1/g -# ;s/(install_plugin "\$plugin")\n(\s+)done/\1&\n\2done\n\2wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh"& -# perl -p -i -e 's/git submodule update --init --recursive/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh"& -# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh"& -# wait +# perl -0777 -p -i -e 's/git clone(?!\s+--depth\s+1)/git clone --depth 1/g +# ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" +# perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" +# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" # tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # fi # if [ x"$update_tpm" = x"true" ]; then # { -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ # "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ # "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ # tmux display 'Done updating tpm and plugins...' # } || tmux display 'Failed updating tpm and plugins...' # elif [ x"$install_tpm" = x"true" ]; then -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 -# tmux display 'Done installing tpm and plugins...' +# { +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 +# tmux display 'Done installing tpm and plugins...' +# } || tmux display 'Failed installing tpm and plugins...' # fi # else # tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." From b3915221f8590914e681e2da0d7ecd6e8ceb97b0 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 11 Jan 2022 18:21:48 +0100 Subject: [PATCH 108/155] added the ' + Shift + Tab' binding to move to the last session --- .tmux.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index a9b1be8..15d70bf 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -63,6 +63,9 @@ bind C-c new-session # find session bind C-f command-prompt -p find-session 'switch-client -t %%' +# session navigation +bind BTab switch-client -l # move to last session + # split current window horizontally bind - split-window -v # split current window vertically From 9a2387c0c7aa8d12cff06d6be17251e8ebdfd034 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 14 Jan 2022 07:45:06 +0100 Subject: [PATCH 109/155] added support for arguments to custom variables defined in ~/.tmux.conf.local (2), fixes #547 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 15d70bf..3b65e46 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1321,7 +1321,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # -- custom variables --------------------------------------------------- # # if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1(.*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) +# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) # status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi From 6242e4974f3120e069c0e3983b2a70ec177c7454 Mon Sep 17 00:00:00 2001 From: Alan Oliveira Date: Sat, 21 May 2022 18:39:43 +0900 Subject: [PATCH 110/155] pass #{pane_current_path} to _fpp() and then to split-window --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3b65e46..3046fb3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -106,7 +106,7 @@ bind U run "cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}" # -- facebook pathpicker ------------------------------------------------------- -bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id}" +bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id} #{pane_current_path}" # -- list choice (tmux < 2.4) -------------------------------------------------- @@ -1485,7 +1485,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _fpp() { # tmux capture-pane -J -S - -E - -b "fpp-$1" -t "$1" -# tmux split-window "tmux show-buffer -b fpp-$1 | fpp || true; tmux delete-buffer -b fpp-$1" +# tmux split-window -c $2 "tmux show-buffer -b fpp-$1 | fpp || true; tmux delete-buffer -b fpp-$1" # } # # "$@" From f1cc46812bbefa977f59e7b9926c5a3bcdd6e626 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 16 Apr 2022 17:53:54 +0200 Subject: [PATCH 111/155] added RGB 24-bit colour support automatic detection --- .tmux.conf | 16 ++++++++++++++-- .tmux.conf.local | 9 +++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3046fb3..961e6b3 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -712,9 +712,21 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _apply_overrides() { -# tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-false} +# tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-auto} # tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} -# if _is_enabled "$tmux_conf_24b_colour"; then +# if [ x"$tmux_conf_24b_colour" = x"auto" ]; then +# case "$COLORTERM" in +# truecolor|24bit) +# apply_overrides=true +# ;; +# esac +# if [ x"$apply_overrides" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then +# apply_overrides=true +# fi +# elif _is_enabled "$tmux_conf_24b_colour"; then +# apply_overrides=true +# fi +# if [ x"$apply_overrides" = x"true" ]; then # case "$TERM" in # screen-*|tmux-*) # ;; diff --git a/.tmux.conf.local b/.tmux.conf.local index 515bc31..45725ae 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -42,8 +42,13 @@ tmux_conf_new_session_prompt=false # RGB 24-bit colour support (tmux >= 2.2), possible values are: # - true -# - false (default) -tmux_conf_24b_colour=false +# - false +# - auto (default) +# +# automatic detection relies on the COLORTERM environment variable being defined +# to 'truecolor' or '24bit' or '$ tput colors' answering '16777216' +# see https://github.com/termstandard/colors +tmux_conf_24b_colour=auto # default theme tmux_conf_theme_colour_1="#080808" # dark gray From b69ae7c1a4243afd02c5883a500c61218f6bbf3b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 19 Jun 2022 19:10:30 +0200 Subject: [PATCH 112/155] reworked pane / tty introspection (5), fixes #573 --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 961e6b3..420ddee 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -781,9 +781,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ +# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ # "$cfg" # fi # From e865a8a1c1fd4f3e2ca0e3f45aab9e1ccabbead1 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 14 Jul 2022 16:26:48 +0200 Subject: [PATCH 113/155] added a way to selectively disable binding manipulation, closes #514 you can set the following variables to 'disabled': - tmux_conf_new_window_retain_current_path - tmux_conf_new_pane_retain_current_path - tmux_conf_new_pane_reconnect_ssh - tmux_conf_new_session_prompt - tmux_conf_copy_to_os_clipboard --- .tmux.conf | 70 +++++++++++++++++++++++++++++------------------- .tmux.conf.local | 7 ++++- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 420ddee..53d0bc6 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -196,8 +196,16 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _tmux_version=$(tmux -V | awk '{gsub(/[^0-9.]/, "", $2); print ($2+0) * 100}') # +# _is_true() { +# [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"1" ] +# } +# # _is_enabled() { -# [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"enabled" ] || [ x"$1" = x"1" ] +# [ x"$1" = x"enabled" ] +# } +# +# _is_disabled() { +# [ x"$1" = x"disabled" ] # } # # _circled() { @@ -580,7 +588,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" 2>&1 | awk '/^%username% / { print $2; exit }') # [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -v -T -o ControlPath=none -o ProxyCommand=false -o IdentityFile='%%username%%/%r' 2>&1 | awk '/%username%/ { print substr($4,12); exit }') # else -# if ! _is_enabled "$ssh_only"; then +# if ! _is_true "$ssh_only"; then # username=${pane_info#*:} # username=${username%%:*} # fi @@ -607,7 +615,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # shellcheck disable=SC2086 # [ -z "$hostname" ] && hostname=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%hostname%% %h >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%hostname% / { print $2; exit }') # -# if ! _is_enabled "$full"; then +# if ! _is_true "$full"; then # case "$hostname" in # *[a-z-].*) # hostname=${hostname%%.*} @@ -618,7 +626,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # esac # fi # else -# if ! _is_enabled "$ssh_only"; then +# if ! _is_true "$ssh_only"; then # hostname="$h_or_H" # fi # fi @@ -723,7 +731,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ x"$apply_overrides" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then # apply_overrides=true # fi -# elif _is_enabled "$tmux_conf_24b_colour"; then +# elif _is_true "$tmux_conf_24b_colour"; then # apply_overrides=true # fi # if [ x"$apply_overrides" = x"true" ]; then @@ -746,36 +754,44 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # output of list-keys can be truncated # perl -p -i -e "s/'#\{\?window_zoomed_flag,Unzoom,Zoom\}' 'z' \{resize-pane -$/'#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}\"/g" "$cfg" # -# perl -p -i -e " -# s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g -# ; -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{b:pane_tty}\2\5\1/g -# ; -# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\3)(.*?)\2/split-window\4/g -# ; -# s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ -# "$cfg" -# # tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} -# if _is_enabled "$tmux_conf_new_window_retain_current_path"; then +# if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then # perl -p -i -e " -# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ -# ; -# s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ +# s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g" \ # "$cfg" # fi # +# tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} +# if ! _is_disabled "$tmux_conf_new_pane_retain_current_path"; then +# perl -p -i -e " +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{b:pane_tty}\2\5\1/g +# ; +# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\3)(.*?)\2/split-window\4/g +# ; +# s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ +# "$cfg" +# fi +# +# if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then +# if _is_true "$tmux_conf_new_window_retain_current_path"; then +# perl -p -i -e " +# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ +# ; +# s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ +# "$cfg" +# fi +# fi +# # perl -p -i -e " # s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" # -# tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} -# if _is_enabled "$tmux_conf_new_pane_reconnect_ssh"; then +# if ! _is_disabled "$tmux_conf_new_pane_reconnect_ssh" && _is_true "$tmux_conf_new_pane_reconnect_ssh"; then # perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\1'/g" "$cfg" # fi # -# if _is_enabled "$tmux_conf_new_pane_retain_current_path"; then +# if ! _is_disabled "$tmux_conf_new_pane_retain_current_path" && _is_true "$tmux_conf_new_pane_retain_current_path"; then # perl -p -i -e " # s/\bsplit-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ # ; @@ -788,7 +804,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # tmux_conf_new_session_prompt=${tmux_conf_new_session_prompt:-false} -# if _is_enabled "$tmux_conf_new_session_prompt"; then +# if ! _is_disabled "$tmux_conf_new_session_prompt" && _is_true "$tmux_conf_new_session_prompt"; then # perl -p -i \ # -e "s/(? \/dev\/clipboard' # # if [ -n "$command" ]; then -# if _is_enabled "$tmux_conf_copy_to_os_clipboard"; then +# if ! _is_disabled "$tmux_conf_copy_to_os_clipboard" && _is_true "$tmux_conf_copy_to_os_clipboard"; then # perl -p -i -e "s/(?!.*?$command)\bcopy-(?:selection|pipe)(-and-cancel)?\b/copy-pipe\1 '$command'/g" "$cfg" # else # if [ $_tmux_version -ge 320 ]; then @@ -863,7 +879,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-$tmux_conf_theme_colour_2} # # window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" -# if _is_enabled "$tmux_conf_theme_highlight_focused_pane"; then +# if _is_true "$tmux_conf_theme_highlight_focused_pane"; then # window_active_style="fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" # else # window_active_style="default" @@ -1372,7 +1388,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} # if [ -z "$(tmux show -gv '@plugin')" ] && [ -z "$(tmux show -gv '@tpm_plugins')" ]; then -# if _is_enabled "$tmux_conf_uninstall_plugins_on_reload" && [ -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# if _is_true "$tmux_conf_uninstall_plugins_on_reload" && [ -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then # tmux display 'Uninstalling tpm and plugins...' # rm -rf "$TMUX_PLUGIN_MANAGER_PATH" # tmux display 'Done uninstalling tpm and plugins...' @@ -1383,7 +1399,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # install_tpm=true # tmux display 'Installing tpm and plugins...' # git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" -# elif { [ -z "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_enabled "$tmux_conf_update_plugins_on_reload"; }; then +# elif { [ -z "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_reload"; }; then # update_tpm=true # tmux display 'Updating tpm and plugins...' # (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) diff --git a/.tmux.conf.local b/.tmux.conf.local index 45725ae..fb77d04 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -20,21 +20,25 @@ # new window retains current path, possible values are: # - true # - false (default) +# - disabled (do not modify new-window bindings) tmux_conf_new_window_retain_current_path=false # new pane retains current path, possible values are: # - true (default) # - false +# - disabled (do not modify split-window bindings) tmux_conf_new_pane_retain_current_path=true -# new pane tries to reconnect ssh sessions (experimental), possible values are: +# new pane tries to reconnect ssh sessions, possible values are: # - true # - false (default) +# - disabled (do not modify split-window bindings) tmux_conf_new_pane_reconnect_ssh=false # prompt for session name when creating a new session, possible values are: # - true # - false (default) +# - disabled (do not modify new-session bindings) tmux_conf_new_session_prompt=false @@ -323,6 +327,7 @@ tmux_conf_theme_clock_style="24" # in copy mode, copying selection also copies to the OS clipboard # - true # - false (default) +# - disabled # on macOS, this requires installing reattach-to-user-namespace, see README.md # on Linux, this requires xsel or xclip tmux_conf_copy_to_os_clipboard=false From 52f1c4a3b1c9a4f62d7f1dae3c0deec69775e703 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 16 Jul 2022 20:33:13 +0200 Subject: [PATCH 114/155] updated the weather() sample function, closes #580 - increase the curl timeout to 2 seconds - use curl -f -s instead of redirecting stderr to /dev/null - print an empty line in case curl is not available or exists in error, which should prevent tmux from displaying <... not ready> --- .tmux.conf.local | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf.local b/.tmux.conf.local index fb77d04..76065ec 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -415,9 +415,9 @@ tmux_conf_uninstall_plugins_on_reload=true # # # /!\ do not "uncomment" the functions: the leading "# " characters are needed # -# weather() { -# curl -m 1 wttr.in?format=3 2>/dev/null -# sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval +# weather() { # see https://github.com/chubin/wttr.in#one-line-output +# curl -f -s -m 2 'wttr.in?format=3' || printf '\n' # /!\ make sure curl is installed +# sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval # } # # online() { From 18a111ff93aaaeb18ea94667d749d90aa26ec81d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 14 Jul 2022 17:29:15 +0200 Subject: [PATCH 115/155] added a way to mark set/bind/unbind commands as important in ~/.tmux.conf.local, closes #571 inspired by css, any set/bind/unbind command ending with #!important will be executed honored, e.g.: bind-key -T copy-mode-vi Escape send-keys -X clear-selection #!important --- .tmux.conf | 41 ++++++++++++++++++++++++++--------------- .tmux.conf.local | 3 +++ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 53d0bc6..6f6ff7c 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -165,13 +165,9 @@ bind p paste-buffer # paste from the top paste buffer bind P choose-buffer # choose which buffer to paste from -# -- user defined overrides ---------------------------------------------------- - -source -q ~/.tmux.conf.local - - # -- 8< ------------------------------------------------------------------------ +source -q ~/.tmux.conf.local run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' @@ -719,22 +715,22 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _split_window_ssh "$@" # } # -# _apply_overrides() { +# _apply_24b() { # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-auto} # tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} # if [ x"$tmux_conf_24b_colour" = x"auto" ]; then # case "$COLORTERM" in # truecolor|24bit) -# apply_overrides=true +# apply_24b=true # ;; # esac -# if [ x"$apply_overrides" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then -# apply_overrides=true +# if [ x"$apply_24b" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then +# apply_24b=true # fi # elif _is_true "$tmux_conf_24b_colour"; then -# apply_overrides=true +# apply_24b=true # fi -# if [ x"$apply_overrides" = x"true" ]; then +# if [ x"$apply_24b" = x"true" ]; then # case "$TERM" in # screen-*|tmux-*) # ;; @@ -1453,6 +1449,20 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\" \"$tmux_conf_uninstall_plugins_on_reload\"" # } # +# _apply_important() { +# cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT +# +# if perl -n -e 'print if /^\s*(?:set|bind|unbind).+?#!important\s*$/' ~/.tmux.conf.local 2>/dev/null > "$cfg.local"; then +# if ! tmux source-file "$cfg.local"; then +# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) +# while ! out=$(tmux source-file "$verbose_flag" "$cfg.local"); do +# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) +# perl -n -i -e "if ($. != $line) { print }" "$cfg.local" +# done +# fi +# fi +# } +# # _apply_configuration() { # # window_active="$(tmux display -p '#{window_active}' 2>/dev/null || true)" @@ -1495,15 +1505,16 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ;; # esac # -# _apply_overrides +# _apply_24b # _apply_theme& # _apply_bindings& -# -# # shellcheck disable=SC2046 -# tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') # wait # # _apply_plugins +# _apply_important +# +# # shellcheck disable=SC2046 +# tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') # } # # _urlview() { diff --git a/.tmux.conf.local b/.tmux.conf.local index 76065ec..4bc6c83 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -354,6 +354,9 @@ tmux_conf_copy_to_os_clipboard=false # set -g prefix C-a # bind C-a send-prefix +# if you don't want Oh my tmux! to alter a binding, use #!important +# bind v new-window -c #{pane_current_path} #!important + # move status line to top #set -g status-position top From 68a909d4ca560f02a095aa79bd98c2e0d71d45b0 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 1 Aug 2022 01:24:33 +0200 Subject: [PATCH 116/155] turn off history substitution in case it's been enabled, closes #582 --- .tmux.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/.tmux.conf b/.tmux.conf index 6f6ff7c..1e20460 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -178,6 +178,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # unset GREP_OPTIONS # export LC_NUMERIC=C +# set +H 2>/dev/null || true # # if ! printf '' | sed -E 's///' 2>/dev/null; then # if printf '' | sed -r 's///' 2>/dev/null; then From b620a4f0fb6d8631b98559022a1d5e5f2bd2ce4f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 1 Aug 2022 17:14:21 +0200 Subject: [PATCH 117/155] turn off history substitution in case it's been enabled (2), fixes #583 dash considers "set +H" is a syntax error and doesn't even evaluate the " || true" part the workaround consists in trying "set +H" in a subshell first --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 1e20460..a23bdad 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -178,7 +178,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # unset GREP_OPTIONS # export LC_NUMERIC=C -# set +H 2>/dev/null || true +# (set +H 2>/dev/null) && set +H || true # # if ! printf '' | sed -E 's///' 2>/dev/null; then # if printf '' | sed -r 's///' 2>/dev/null; then From 5fa30deb20865bdcb966ee362f76a6b82cdb079a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 18 Aug 2022 17:15:12 +0200 Subject: [PATCH 118/155] fixed +e not working when EDITOR is set to 'emacsclient -t' and the default shell is zsh, fixes #591 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index a23bdad..fbaa9b2 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -26,7 +26,7 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "~/.tmux.conf.local" "EDITOR=\${EDITOR//mvim/vim} && EDITOR=\${EDITOR//gvim/vim} && \${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\"" +bind e new-window -n "~/.tmux.conf.local" sh -c 'EDITOR=${EDITOR//mvim/vim} && EDITOR=${EDITOR//gvim/vim} && ${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' # reload configuration bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' From 562f9c128e627d55b0fa8ca71a205a421702ffe0 Mon Sep 17 00:00:00 2001 From: Luis Davim Date: Fri, 19 Aug 2022 23:37:12 +0100 Subject: [PATCH 119/155] fixed +e not working when EDITOR is set to 'emacsclient -t' and the default shell is zsh (2), fixes #593 ${EDITOR//gvim/vim} and ${EDITOR//mvim/vim} have been introduced to fix #416, however the replace all substitution is not POSIX and is not supported by termux or dash the proper fix for #416 is to set EDITOR to 'gvim -f' or 'mvim -f' --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index fbaa9b2..b71bbae 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -26,7 +26,7 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "~/.tmux.conf.local" sh -c 'EDITOR=${EDITOR//mvim/vim} && EDITOR=${EDITOR//gvim/vim} && ${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' +bind e new-window -n "~/.tmux.conf.local" sh -c '${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' # reload configuration bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' From ccbfdf2091356e001b384d8e03ad863dc989bbf1 Mon Sep 17 00:00:00 2001 From: sarumont Date: Mon, 8 Aug 2022 14:08:36 -0600 Subject: [PATCH 120/155] added support for wl-clipboard, closes #589, closes #606 see https://github.com/bugaevc/wl-clipboard --- .tmux.conf | 3 +++ .tmux.conf.local | 2 +- README.md | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index b71bbae..b8c30c9 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -150,6 +150,8 @@ run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' # copy to X11 clipboard if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' +# copy to Wayland clipboard +if -b 'command -v wl-copy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | wl-copy"' # copy to macOS clipboard if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' @@ -814,6 +816,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_copy_to_os_clipboard=${tmux_conf_copy_to_os_clipboard:-false} # command -v xsel > /dev/null 2>&1 && command='xsel -i -b' # ! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1 && command='xclip -i -selection clipboard > \/dev\/null 2>\&1' +# command -v wl-copy > /dev/null 2>&1 && command='wl-copy' # command -v pbcopy > /dev/null 2>&1 && command='pbcopy' # command -v reattach-to-user-namespace > /dev/null 2>&1 && command='reattach-to-user-namespace pbcopy' # command -v clip.exe > /dev/null 2>&1 && command='clip\.exe' diff --git a/.tmux.conf.local b/.tmux.conf.local index 4bc6c83..7fc8a09 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -329,7 +329,7 @@ tmux_conf_theme_clock_style="24" # - false (default) # - disabled # on macOS, this requires installing reattach-to-user-namespace, see README.md -# on Linux, this requires xsel or xclip +# on Linux, this requires xsel, xclip or wl-copy tmux_conf_copy_to_os_clipboard=false diff --git a/README.md b/README.md index 84263e5..dd79dec 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ Features - configurable new windows and panes behavior (optionally retain current path) - SSH/Mosh aware split pane (reconnects to remote server) - copy to OS clipboard (needs [`reattach-to-user-namespace`][reattach-to-user-namespace] - on macOS, `xsel` or `xclip` on Linux) + on macOS, `xsel`, `xclip`, or `wl-copy` on Linux) - support for 4-digit hexadecimal Unicode characters - [Facebook PathPicker][] integration if available - [Urlview][] integration if available From fa601ed607300f0884306493d9ddfdbde6bff11d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 26 Oct 2022 09:16:40 +0200 Subject: [PATCH 121/155] bind p to paste-buffer -p to match tmux defaults, closes #610 see https://github.com/tmux/tmux/issues/2248#issuecomment-638329932 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index b8c30c9..77b3b51 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -162,9 +162,9 @@ if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboar # -- buffers ------------------------------------------------------------------- -bind b list-buffers # list paste buffers -bind p paste-buffer # paste from the top paste buffer -bind P choose-buffer # choose which buffer to paste from +bind b list-buffers # list paste buffers +bind p paste-buffer -p # paste from the top paste buffer +bind P choose-buffer # choose which buffer to paste from # -- 8< ------------------------------------------------------------------------ From 5641d3b3f5f9c353c58dfcba4c265df055a05b6b Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 4 Nov 2022 21:38:41 -0700 Subject: [PATCH 122/155] fixed custom variables detection, fixes #613 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 77b3b51..ee587dd 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1349,7 +1349,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # -- custom variables --------------------------------------------------- # # if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) +# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*(?:#.*)?\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) # status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi From 5c41188a31231e9c1ad37ef5f55d8dd21a78877e Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 26 Dec 2022 22:40:08 +0100 Subject: [PATCH 123/155] removed support for tmux < 2.4 --- .tmux.conf | 70 +++++++++--------------------------------------- .tmux.conf.local | 14 ++-------- README.md | 3 +-- 3 files changed, 15 insertions(+), 72 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ee587dd..6c06415 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -109,43 +109,16 @@ bind U run "cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}" bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id} #{pane_current_path}" -# -- list choice (tmux < 2.4) -------------------------------------------------- - -# vi-choice is gone in tmux >= 2.4 -run -b 'tmux bind -t vi-choice h tree-collapse 2> /dev/null || true' -run -b 'tmux bind -t vi-choice l tree-expand 2> /dev/null || true' -run -b 'tmux bind -t vi-choice K start-of-list 2> /dev/null || true' -run -b 'tmux bind -t vi-choice J end-of-list 2> /dev/null || true' -run -b 'tmux bind -t vi-choice H tree-collapse-all 2> /dev/null || true' -run -b 'tmux bind -t vi-choice L tree-expand-all 2> /dev/null || true' -run -b 'tmux bind -t vi-choice Escape cancel 2> /dev/null || true' - - -# -- edit mode (tmux < 2.4) ---------------------------------------------------- - -# vi-edit is gone in tmux >= 2.4 -run -b 'tmux bind -ct vi-edit H start-of-line 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit L end-of-line 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit q cancel 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit Escape cancel 2> /dev/null || true' - - # -- copy mode ----------------------------------------------------------------- bind Enter copy-mode # enter copy mode -run -b 'tmux bind -t vi-copy v begin-selection 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi v send -X begin-selection 2> /dev/null || true' -run -b 'tmux bind -t vi-copy C-v rectangle-toggle 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi C-v send -X rectangle-toggle 2> /dev/null || true' -run -b 'tmux bind -t vi-copy y copy-selection 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi y send -X copy-selection-and-cancel 2> /dev/null || true' -run -b 'tmux bind -t vi-copy Escape cancel 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi Escape send -X cancel 2> /dev/null || true' -run -b 'tmux bind -t vi-copy H start-of-line 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true' -run -b 'tmux bind -t vi-copy L end-of-line 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' +bind -T copy-mode-vi v send -X begin-selection +bind -T copy-mode-vi C-v send -X rectangle-toggle +bind -T copy-mode-vi y send -X copy-selection-and-cancel +bind -T copy-mode-vi Escape send -X cancel +bind -T copy-mode-vi H send -X start-of-line +bind -T copy-mode-vi L send -X end-of-line # copy to X11 clipboard if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' @@ -1069,15 +1042,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # # status_left=$(printf '%s' "$status_left" | awk \ # -v status_bg="$tmux_conf_theme_status_bg" \ @@ -1157,15 +1123,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -z "$(tmux display -p '#{version}')" ]; then -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") # # status_right=$(printf '%s' "$status_right" | awk \ # -v status_bg="$tmux_conf_theme_status_bg" \ @@ -1440,10 +1399,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' # fi # fi -# -# if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then -# tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" -# fi # } # # _apply_plugins() { @@ -1468,7 +1423,6 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _apply_configuration() { -# # window_active="$(tmux display -p '#{window_active}' 2>/dev/null || true)" # if [ -z "$window_active" ]; then # if ! command -v perl > /dev/null 2>&1; then @@ -1483,8 +1437,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi -# if [ $_tmux_version -lt 230 ]; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.3+" \; set -u display-time \; run "sleep 3" \; kill-server' +# if [ $_tmux_version -lt 240 ]; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.4+" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi # fi diff --git a/.tmux.conf.local b/.tmux.conf.local index 7fc8a09..559a685 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -5,16 +5,6 @@ # Copyright 2012— Gregory Pakosz (@gpakosz). -# -- navigation ---------------------------------------------------------------- - -# if you're running tmux within iTerm2 -# - and tmux is 1.9 or 1.9a -# - and iTerm2 is configured to let option key act as +Esc -# - and iTerm2 is configured to send [1;9A -> [1;9D for option + arrow keys -# then uncomment the following line to make Meta + arrow keys mapping work -#set -ga terminal-overrides "*:kUP3=\e[1;9A,*:kDN3=\e[1;9B,*:kRIT3=\e[1;9C,*:kLFT3=\e[1;9D" - - # -- windows & pane creation --------------------------------------------------- # new window retains current path, possible values are: @@ -44,7 +34,7 @@ tmux_conf_new_session_prompt=false # -- display ------------------------------------------------------------------- -# RGB 24-bit colour support (tmux >= 2.2), possible values are: +# RGB 24-bit colour support, possible values are: # - true # - false # - auto (default) @@ -96,7 +86,7 @@ tmux_conf_theme_colour_17="#e4e4e4" # white tmux_conf_theme_window_fg="default" tmux_conf_theme_window_bg="default" -# highlight focused pane (tmux >= 2.1), possible values are: +# highlight focused pane, possible values are: # - true # - false (default) tmux_conf_theme_highlight_focused_pane=false diff --git a/README.md b/README.md index dd79dec..2fd51a8 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,7 @@ Installation Requirements: - - tmux **`>= 2.3`** (soon `>= 2.4`) running inside Linux, Mac, OpenBSD, Cygwin - or WSL + - tmux **`>= 2.4`** running inside Linux, Mac, OpenBSD, Cygwin or WSL - awk, perl and sed - outside of tmux, `$TERM` must be set to `xterm-256color` From cca37fb84ef91ef199617307ca7b512dd1ff9772 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 28 Dec 2022 21:43:00 +0100 Subject: [PATCH 124/155] split _battery() into _battery_status() and _battery_bar() to refresh #{battery_status} more quickly (2) --- .tmux.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 6c06415..8b1be59 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -471,8 +471,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # battery_percentage="$(awk "BEGIN { printf \"%.0f%%\", ($charge) * 100 }")" # -# tmux set -g '@battery_status' "$battery_status" \;\ -# set -g '@battery_bar' "$battery_bar" \;\ +# tmux set -g '@battery_bar' "$battery_bar" \;\ # set -g '@battery_hbar' "$battery_hbar" \;\ # set -g '@battery_vbar' "$battery_vbar" \;\ # set -g '@battery_percentage' "$battery_percentage" From aea75c7ea490512f65753b04c1e7a26abf2b7f5a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 28 Dec 2022 22:19:57 +0100 Subject: [PATCH 125/155] use %if ... %endif conditionals to enhance tmux_conf_theme_pane_active_border for tmux >= 3.2, resolves #490 --- .tmux.conf.local | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.tmux.conf.local b/.tmux.conf.local index 559a685..46bda27 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -102,6 +102,9 @@ tmux_conf_theme_pane_border_style=thin # pane borders colours: tmux_conf_theme_pane_border="$tmux_conf_theme_colour_2" tmux_conf_theme_pane_active_border="$tmux_conf_theme_colour_4" +%if #{>=:#{version},3.2} +tmux_conf_theme_pane_active_border="#{?pane_in_mode,$tmux_conf_theme_colour_9,#{?synchronize-panes,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_4}}" +%endif # pane indicator colours (when you hit + q) tmux_conf_theme_pane_indicator="$tmux_conf_theme_colour_4" From 72f09fae75d82e67439af1c74fa31035f39e8f4d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 1 Jan 2023 21:25:47 +0100 Subject: [PATCH 126/155] added tmux_conf_theme that controles whether theming is enabled or disabled, resolves #536 --- .tmux.conf | 737 ++++++++++++++++++++++++----------------------- .tmux.conf.local | 20 +- 2 files changed, 395 insertions(+), 362 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 8b1be59..2ccad39 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -821,368 +821,409 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _apply_theme() { +# tmux_conf_theme=${tmux_conf_theme:-enabled} +# if ! _is_disabled "$tmux_conf_theme"; then # -# # -- default theme ----------------------------------------------------- +# # -- default theme ------------------------------------------------------- # -# tmux_conf_theme_colour_1=${tmux_conf_theme_colour_1:-#080808} # dark gray -# tmux_conf_theme_colour_2=${tmux_conf_theme_colour_2:-#303030} # gray -# tmux_conf_theme_colour_3=${tmux_conf_theme_colour_3:-#8a8a8a} # light gray -# tmux_conf_theme_colour_4=${tmux_conf_theme_colour_4:-#00afff} # light blue -# tmux_conf_theme_colour_5=${tmux_conf_theme_colour_5:-#ffff00} # yellow -# tmux_conf_theme_colour_6=${tmux_conf_theme_colour_6:-#080808} # dark gray -# tmux_conf_theme_colour_7=${tmux_conf_theme_colour_7:-#e4e4e4} # white -# tmux_conf_theme_colour_8=${tmux_conf_theme_colour_8:-#080808} # dark gray -# tmux_conf_theme_colour_9=${tmux_conf_theme_colour_9:-#ffff00} # yellow -# tmux_conf_theme_colour_10=${tmux_conf_theme_colour_10:-#ff00af} # pink -# tmux_conf_theme_colour_11=${tmux_conf_theme_colour_11:-#5fff00} # green -# tmux_conf_theme_colour_12=${tmux_conf_theme_colour_12:-#8a8a8a} # light gray -# tmux_conf_theme_colour_13=${tmux_conf_theme_colour_13:-#e4e4e4} # white -# tmux_conf_theme_colour_14=${tmux_conf_theme_colour_14:-#080808} # dark gray -# tmux_conf_theme_colour_15=${tmux_conf_theme_colour_15:-#080808} # dark gray -# tmux_conf_theme_colour_16=${tmux_conf_theme_colour_16:-#d70000} # red -# tmux_conf_theme_colour_17=${tmux_conf_theme_colour_17:-#e4e4e4} # white +# tmux_conf_theme_colour_1=${tmux_conf_theme_colour_1:-#080808} # dark gray +# tmux_conf_theme_colour_2=${tmux_conf_theme_colour_2:-#303030} # gray +# tmux_conf_theme_colour_3=${tmux_conf_theme_colour_3:-#8a8a8a} # light gray +# tmux_conf_theme_colour_4=${tmux_conf_theme_colour_4:-#00afff} # light blue +# tmux_conf_theme_colour_5=${tmux_conf_theme_colour_5:-#ffff00} # yellow +# tmux_conf_theme_colour_6=${tmux_conf_theme_colour_6:-#080808} # dark gray +# tmux_conf_theme_colour_7=${tmux_conf_theme_colour_7:-#e4e4e4} # white +# tmux_conf_theme_colour_8=${tmux_conf_theme_colour_8:-#080808} # dark gray +# tmux_conf_theme_colour_9=${tmux_conf_theme_colour_9:-#ffff00} # yellow +# tmux_conf_theme_colour_10=${tmux_conf_theme_colour_10:-#ff00af} # pink +# tmux_conf_theme_colour_11=${tmux_conf_theme_colour_11:-#5fff00} # green +# tmux_conf_theme_colour_12=${tmux_conf_theme_colour_12:-#8a8a8a} # light gray +# tmux_conf_theme_colour_13=${tmux_conf_theme_colour_13:-#e4e4e4} # white +# tmux_conf_theme_colour_14=${tmux_conf_theme_colour_14:-#080808} # dark gray +# tmux_conf_theme_colour_15=${tmux_conf_theme_colour_15:-#080808} # dark gray +# tmux_conf_theme_colour_16=${tmux_conf_theme_colour_16:-#d70000} # red +# tmux_conf_theme_colour_17=${tmux_conf_theme_colour_17:-#e4e4e4} # white # -# # -- panes ------------------------------------------------------------- +# # -- panes --------------------------------------------------------------- # -# tmux_conf_theme_window_fg=${tmux_conf_theme_window_fg:-default} -# tmux_conf_theme_window_bg=${tmux_conf_theme_window_bg:-default} -# tmux_conf_theme_highlight_focused_pane=${tmux_conf_theme_highlight_focused_pane:-false} -# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} -# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-$tmux_conf_theme_colour_2} +# tmux_conf_theme_window_fg=${tmux_conf_theme_window_fg:-default} +# tmux_conf_theme_window_bg=${tmux_conf_theme_window_bg:-default} +# tmux_conf_theme_highlight_focused_pane=${tmux_conf_theme_highlight_focused_pane:-false} +# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} +# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-$tmux_conf_theme_colour_2} # -# window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" -# if _is_true "$tmux_conf_theme_highlight_focused_pane"; then -# window_active_style="fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" -# else -# window_active_style="default" -# fi -# -# tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} -# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-$tmux_conf_theme_colour_2} -# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_pane_border_fg=${tmux_conf_theme_pane_border_fg:-$tmux_conf_theme_pane_border} -# tmux_conf_theme_pane_active_border_fg=${tmux_conf_theme_pane_active_border_fg:-$tmux_conf_theme_pane_active_border} -# case "$tmux_conf_theme_pane_border_style" in -# fat) -# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-$tmux_conf_theme_pane_border_fg} -# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-$tmux_conf_theme_pane_active_border_fg} -# ;; -# thin|*) -# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-default} -# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-default} -# ;; -# esac -# -# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-$tmux_conf_theme_colour_4} -# -# # -- status line ------------------------------------------------------- -# -# tmux_conf_theme_left_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_main-}") -# tmux_conf_theme_left_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_sub-|}") -# tmux_conf_theme_right_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_main-}") -# tmux_conf_theme_right_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_sub-|}") -# -# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} -# -# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} -# -# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} -# -# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-$tmux_conf_theme_colour_3} -# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} -# -# tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} -# -# tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# -# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} -# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} -# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} -# -# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} -# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} -# -# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} -# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} -# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} -# -# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} -# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} -# -# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} -# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} -# -# if [ x"$tmux_conf_theme_window_status_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bg" = x"default" ]; then -# spacer='' -# spacer_current=' ' -# else -# spacer=' ' -# spacer_current=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_last_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_last_bg" = x"default" ] ; then -# spacer_last='' -# else -# spacer_last=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_activity_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_activity_bg" = x"default" ] ; then -# spacer_activity='' -# spacer_last_activity="$spacer_last" -# else -# spacer_activity=' ' -# spacer_last_activity=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_bell_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bell_bg" = x"default" ] ; then -# spacer_bell='' -# spacer_last_bell="$spacer_last" -# spacer_activity_bell="$spacer_activity" -# spacer_last_activity_bell="$spacer_last_activity" -# else -# spacer_bell=' ' -# spacer_last_bell=' ' -# spacer_activity_bell=' ' -# spacer_last_activity_bell=' ' -# fi -# spacer="#{?window_last_flag,#{?window_activity_flag,#{?window_bell_flag,$spacer_last_activity_bell,$spacer_last_activity},#{?window_bell_flag,$spacer_last_bell,$spacer_last}},#{?window_activity_flag,#{?window_bell_flag,$spacer_activity_bell,$spacer_activity},#{?window_bell_flag,$spacer_bell,$spacer}}}" -# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then -# if [ -z "$tmux_conf_theme_right_separator_main" ]; then -# window_status_separator=' ' +# window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" +# if _is_true "$tmux_conf_theme_highlight_focused_pane"; then +# window_active_style="fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" # else -# window_status_separator='' +# window_active_style="default" # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" -# else -# if [ -z "$tmux_conf_theme_left_separator_main" ]; then -# window_status_separator=' ' +# +# tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} +# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-$tmux_conf_theme_colour_2} +# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_pane_border_fg=${tmux_conf_theme_pane_border_fg:-$tmux_conf_theme_pane_border} +# tmux_conf_theme_pane_active_border_fg=${tmux_conf_theme_pane_active_border_fg:-$tmux_conf_theme_pane_active_border} +# case "$tmux_conf_theme_pane_border_style" in +# fat) +# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-$tmux_conf_theme_pane_border_fg} +# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-$tmux_conf_theme_pane_active_border_fg} +# ;; +# thin|*) +# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-default} +# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-default} +# ;; +# esac +# +# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-$tmux_conf_theme_colour_4} +# +# # -- status line --------------------------------------------------------- +# +# tmux_conf_theme_left_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_main-}") +# tmux_conf_theme_left_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_sub-|}") +# tmux_conf_theme_right_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_main-}") +# tmux_conf_theme_right_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_sub-|}") +# +# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} +# +# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} +# +# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} +# +# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-$tmux_conf_theme_colour_3} +# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} +# +# tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} +# +# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} +# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} +# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} +# +# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-$tmux_conf_theme_colour_1} +# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} +# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} +# +# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} +# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} +# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} +# +# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} +# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} +# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} +# +# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} +# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} +# +# if [ x"$tmux_conf_theme_window_status_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bg" = x"default" ]; then +# spacer='' +# spacer_current=' ' # else -# window_status_separator='' +# spacer=' ' +# spacer_current=' ' +# fi +# if [ x"$tmux_conf_theme_window_status_last_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_last_bg" = x"default" ] ; then +# spacer_last='' +# else +# spacer_last=' ' +# fi +# if [ x"$tmux_conf_theme_window_status_activity_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_activity_bg" = x"default" ] ; then +# spacer_activity='' +# spacer_last_activity="$spacer_last" +# else +# spacer_activity=' ' +# spacer_last_activity=' ' +# fi +# if [ x"$tmux_conf_theme_window_status_bell_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bell_bg" = x"default" ] ; then +# spacer_bell='' +# spacer_last_bell="$spacer_last" +# spacer_activity_bell="$spacer_activity" +# spacer_last_activity_bell="$spacer_last_activity" +# else +# spacer_bell=' ' +# spacer_last_bell=' ' +# spacer_activity_bell=' ' +# spacer_last_activity_bell=' ' +# fi +# spacer="#{?window_last_flag,#{?window_activity_flag,#{?window_bell_flag,$spacer_last_activity_bell,$spacer_last_activity},#{?window_bell_flag,$spacer_last_bell,$spacer_last}},#{?window_activity_flag,#{?window_bell_flag,$spacer_activity_bell,$spacer_activity},#{?window_bell_flag,$spacer_bell,$spacer}}}" +# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then +# if [ -z "$tmux_conf_theme_right_separator_main" ]; then +# window_status_separator=' ' +# else +# window_status_separator='' +# fi +# window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" +# window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" +# else +# if [ -z "$tmux_conf_theme_left_separator_main" ]; then +# window_status_separator=' ' +# else +# window_status_separator='' +# fi +# window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" +# window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" -# fi # -# tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# # -- indicators # -# # -- indicators +# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-⚇} # U+2687 +# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-none} +# tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} +# tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} # -# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-⚇} # U+2687 -# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-none} -# tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} -# tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} +# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨} # U+2328 +# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-none} +# tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} +# tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} # -# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨} # U+2328 -# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-none} -# tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} -# tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} +# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 +# tmux_conf_theme_mouse_fg=${tmux_conf_theme_mouse_fg:-none} +# tmux_conf_theme_mouse_bg=${tmux_conf_theme_mouse_bg:-none} +# tmux_conf_theme_mouse_attr=${tmux_conf_theme_mouse_attr:-none} # -# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 -# tmux_conf_theme_mouse_fg=${tmux_conf_theme_mouse_fg:-none} -# tmux_conf_theme_mouse_bg=${tmux_conf_theme_mouse_bg:-none} -# tmux_conf_theme_mouse_attr=${tmux_conf_theme_mouse_attr:-none} +# tmux_conf_theme_root=${tmux_conf_theme_root:-!} +# tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-none} +# tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} +# tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} # -# tmux_conf_theme_root=${tmux_conf_theme_root:-!} -# tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-none} -# tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} -# tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} +# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-⚏} # U+268F +# tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} +# tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} +# tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} # -# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-⚏} # U+268F -# tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} -# tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} -# tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} +# # -- status-left style # -# # -- status-left style +# tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} +# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8} +# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11} +# tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} # -# tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} -# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8} -# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11} -# tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} +# if [ -n "$tmux_conf_theme_status_left" ]; then +# status_left=$(echo "$tmux_conf_theme_status_left" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{pairing}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{prefix}/g" \ +# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{mouse}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{synchronized}%g" \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{root}#[inherit]%g") # -# if [ -n "$tmux_conf_theme_status_left" ]; then -# status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# -# status_left=$(printf '%s' "$status_left" | awk \ -# -v status_bg="$tmux_conf_theme_status_bg" \ -# -v fg_="$tmux_conf_theme_status_left_fg" \ -# -v bg_="$tmux_conf_theme_status_left_bg" \ -# -v attr_="$tmux_conf_theme_status_left_attr" \ -# -v mainsep="$tmux_conf_theme_left_separator_main" \ -# -v subsep="$tmux_conf_theme_left_separator_sub" ' -# function subsplit(s, l, i, a, r) -# { -# l = split(s, a, ",") -# for (i = 1; i <= l; ++i) +# status_left=$(printf '%s' "$status_left" | awk \ +# -v status_bg="$tmux_conf_theme_status_bg" \ +# -v fg_="$tmux_conf_theme_status_left_fg" \ +# -v bg_="$tmux_conf_theme_status_left_bg" \ +# -v attr_="$tmux_conf_theme_status_left_attr" \ +# -v mainsep="$tmux_conf_theme_left_separator_main" \ +# -v subsep="$tmux_conf_theme_left_separator_sub" ' +# function subsplit(s, l, i, a, r) # { -# o = split(a[i], _, "(") - 1 -# c = split(a[i], _, ")") - 1 -# open += o - c -# o_ = split(a[i], _, "{") - 1 -# c_ = split(a[i], _, "}") - 1 -# open_ += o_ - c_ -# o__ = split(a[i], _, "[") - 1 -# c__ = split(a[i], _, "]") - 1 -# open__ += o__ - c__ -# -# if (i == l) -# r = sprintf("%s%s", r, a[i]) -# else if (open || open_ || open__) -# r = sprintf("%s%s,", r, a[i]) -# else -# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) -# } -# -# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) -# return r -# } -# BEGIN { -# FS = "|" -# l1 = split(fg_, fg, ",") -# l2 = split(bg_, bg, ",") -# l3 = split(attr_, attr, ",") -# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) -# } -# { -# for (i = j = 1; i <= NF; ++i) -# { -# if (open || open_ || open__) -# printf "|%s", subsplit($i) -# else +# l = split(s, a, ",") +# for (i = 1; i <= l; ++i) # { -# if (i > 1) -# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j_], bg[j], mainsep, fg[j], bg[j], attr[j], subsplit($i) +# o = split(a[i], _, "(") - 1 +# c = split(a[i], _, ")") - 1 +# open += o - c +# o_ = split(a[i], _, "{") - 1 +# c_ = split(a[i], _, "}") - 1 +# open_ += o_ - c_ +# o__ = split(a[i], _, "[") - 1 +# c__ = split(a[i], _, "]") - 1 +# open__ += o__ - c__ +# +# if (i == l) +# r = sprintf("%s%s", r, a[i]) +# else if (open || open_ || open__) +# r = sprintf("%s%s,", r, a[i]) # else -# printf "#[fg=%s,bg=%s,%s]%s", fg[j], bg[j], attr[j], subsplit($i) +# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) # } # -# if (!open && !open_ && !open__) -# { -# j_ = j -# j = j % l + 1 -# } +# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) +# return r # } -# printf "#[fg=%s,bg=%s,none]%s", bg[j_], status_bg, mainsep -# }') +# BEGIN { +# FS = "|" +# l1 = split(fg_, fg, ",") +# l2 = split(bg_, bg, ",") +# l3 = split(attr_, attr, ",") +# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) +# } +# { +# for (i = j = 1; i <= NF; ++i) +# { +# if (open || open_ || open__) +# printf "|%s", subsplit($i) +# else +# { +# if (i > 1) +# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j_], bg[j], mainsep, fg[j], bg[j], attr[j], subsplit($i) +# else +# printf "#[fg=%s,bg=%s,%s]%s", fg[j], bg[j], attr[j], subsplit($i) +# } +# +# if (!open && !open_ && !open__) +# { +# j_ = j +# j = j % l + 1 +# } +# } +# printf "#[fg=%s,bg=%s,none]%s", bg[j_], status_bg, mainsep +# }') +# +# status_left="$status_left " +# fi +# +# # -- status-right style +# +# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} +# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} +# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} +# tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} +# +# if [ -n "$tmux_conf_theme_status_right" ]; then +# status_right=$(echo "$tmux_conf_theme_status_right" | sed \ +# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{pairing}/g" \ +# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{prefix}/g" \ +# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{mouse}/g" \ +# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{synchronized}%g" \ +# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{root}#[inherit]%g") +# +# status_right=$(printf '%s' "$status_right" | awk \ +# -v status_bg="$tmux_conf_theme_status_bg" \ +# -v fg_="$tmux_conf_theme_status_right_fg" \ +# -v bg_="$tmux_conf_theme_status_right_bg" \ +# -v attr_="$tmux_conf_theme_status_right_attr" \ +# -v mainsep="$tmux_conf_theme_right_separator_main" \ +# -v subsep="$tmux_conf_theme_right_separator_sub" ' +# function subsplit(s, l, i, a, r) +# { +# l = split(s, a, ",") +# for (i = 1; i <= l; ++i) +# { +# o = split(a[i], _, "(") - 1 +# c = split(a[i], _, ")") - 1 +# open += o - c +# o_ = split(a[i], _, "{") - 1 +# c_ = split(a[i], _, "}") - 1 +# open_ += o_ - c_ +# o__ = split(a[i], _, "[") - 1 +# c__ = split(a[i], _, "]") - 1 +# open__ += o__ - c__ +# +# if (i == l) +# r = sprintf("%s%s", r, a[i]) +# else if (open || open_ || open__) +# r = sprintf("%s%s,", r, a[i]) +# else +# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) +# } +# +# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) +# return r +# } +# BEGIN { +# FS = "|" +# l1 = split(fg_, fg, ",") +# l2 = split(bg_, bg, ",") +# l3 = split(attr_, attr, ",") +# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) +# } +# { +# for (i = j = 1; i <= NF; ++i) +# { +# if (open_ || open || open__) +# printf "|%s", subsplit($i) +# else +# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j], (i == 1) ? status_bg : bg[j_], mainsep, fg[j], bg[j], attr[j], subsplit($i) +# +# if (!open && !open_ && !open__) +# { +# j_ = j +# j = j % l + 1 +# } +# } +# }') +# fi +# +# # -- clock --------------------------------------------------------------- +# +# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-$tmux_conf_theme_colour_4} +# tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} +# +# tmux setw -g window-style "$window_style" \; setw -g window-active-style "$window_active_style" \;\ +# setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" \;\ +# set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" \;\ +# set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" \;\ +# set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" \;\ +# setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" \;\ +# set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ +# setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ +# setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ +# setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ +# setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ +# setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ +# setw -g window-status-separator "$window_status_separator" \;\ +# setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ +# setw -g clock-mode-style "$tmux_conf_theme_clock_style" # fi # -# status_left="$status_left " +# # -- variables ------------------------------------------------------------- # -# # -- status-right style +# set_titles_string=$(printf '%s' "${tmux_conf_theme_terminal_title:-$(tmux show -gv set-titles-string)}" | sed \ +# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # -# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} -# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} -# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} -# tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} +# window_status_format=$(printf '%s' "${window_status_format:-$(tmux show -gv window-status-format)}" | sed \ +# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # -# if [ -n "$tmux_conf_theme_status_right" ]; then -# status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") +# window_status_current_format=$(printf '%s' "${window_status_current_format:-$(tmux show -gv window-status-current-format)}" | sed \ +# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ +# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ +# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ +# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ +# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ +# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ +# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ +# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # -# status_right=$(printf '%s' "$status_right" | awk \ -# -v status_bg="$tmux_conf_theme_status_bg" \ -# -v fg_="$tmux_conf_theme_status_right_fg" \ -# -v bg_="$tmux_conf_theme_status_right_bg" \ -# -v attr_="$tmux_conf_theme_status_right_attr" \ -# -v mainsep="$tmux_conf_theme_right_separator_main" \ -# -v subsep="$tmux_conf_theme_right_separator_sub" ' -# function subsplit(s, l, i, a, r) -# { -# l = split(s, a, ",") -# for (i = 1; i <= l; ++i) -# { -# o = split(a[i], _, "(") - 1 -# c = split(a[i], _, ")") - 1 -# open += o - c -# o_ = split(a[i], _, "{") - 1 -# c_ = split(a[i], _, "}") - 1 -# open_ += o_ - c_ -# o__ = split(a[i], _, "[") - 1 -# c__ = split(a[i], _, "]") - 1 -# open__ += o__ - c__ +# status_left=$(printf '%s' "${status_left:-$(tmux show -gv status-left)}" | sed \ +# -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ +# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ +# -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ +# -e "s%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g" \ +# -e "s%#{root}%#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}%g") # -# if (i == l) -# r = sprintf("%s%s", r, a[i]) -# else if (open || open_ || open__) -# r = sprintf("%s%s,", r, a[i]) -# else -# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) -# } -# -# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) -# return r -# } -# BEGIN { -# FS = "|" -# l1 = split(fg_, fg, ",") -# l2 = split(bg_, bg, ",") -# l3 = split(attr_, attr, ",") -# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) -# } -# { -# for (i = j = 1; i <= NF; ++i) -# { -# if (open_ || open || open__) -# printf "|%s", subsplit($i) -# else -# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j], (i == 1) ? status_bg : bg[j_], mainsep, fg[j], bg[j], attr[j], subsplit($i) -# -# if (!open && !open_ && !open__) -# { -# j_ = j -# j = j % l + 1 -# } -# } -# }') -# fi -# -# # -- variables +# status_right=$(printf '%s' "${status_right:-$(tmux show -gv status-right)}" | sed \ +# -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ +# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ +# -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ +# -e "s%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g" \ +# -e "s%#{root}%#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}%g") # # tmux_conf_battery_bar_symbol_full=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_full:-◼}") # tmux_conf_battery_bar_symbol_empty=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_empty:-◻}") @@ -1299,12 +1340,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ;; # esac # -# # -- clock ------------------------------------------------------------- -# -# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} -# -# # -- custom variables --------------------------------------------------- +# # -- custom variables ------------------------------------------------------ # # if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then # replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*(?:#.*)?\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) @@ -1312,30 +1348,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi # -# # ----------------------------------------------------------------------- +# # -------------------------------------------------------------------------- # -# tmux setw -g window-style "$window_style" \; setw -g window-active-style "$window_active_style" \;\ -# setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" \;\ -# set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" \;\ -# set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" \;\ -# set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" \;\ -# setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" \;\ -# set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" \;\ -# setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ -# setw -g window-status-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_format")" \;\ -# setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ -# setw -g window-status-current-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_current_format")" \;\ -# setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ -# setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ -# setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ -# setw -g window-status-separator "$window_status_separator" \;\ +# tmux set -g set-titles-string "$(_decode_unicode_escapes "$set_titles_string")" \;\ +# setw -g window-status-format "$(_decode_unicode_escapes "$window_status_format")" \;\ +# setw -g window-status-current-format "$(_decode_unicode_escapes "$window_status_current_format")" \;\ # set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ -# set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" \;\ -# setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ -# setw -g clock-mode-style "$tmux_conf_theme_clock_style" +# set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" # } # # __apply_plugins() { @@ -1462,7 +1481,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ;; # esac # -# _apply_24b +# _apply_24b& # _apply_theme& # _apply_bindings& # wait diff --git a/.tmux.conf.local b/.tmux.conf.local index 46bda27..51d93ab 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -35,15 +35,29 @@ tmux_conf_new_session_prompt=false # -- display ------------------------------------------------------------------- # RGB 24-bit colour support, possible values are: -# - true -# - false -# - auto (default) +# - true +# - false +# - auto (default) # # automatic detection relies on the COLORTERM environment variable being defined # to 'truecolor' or '24bit' or '$ tput colors' answering '16777216' # see https://github.com/termstandard/colors tmux_conf_24b_colour=auto + +# -- theming ------------------------------------------------------------------- + +# enable or disable theming: +# - enabled (default) +# - disabled +# when disabled, all tmux_conf_theme_xxx variables are ignored except: +# - tmux_conf_theme_pairing +# - tmux_conf_theme_prefix +# - tmux_conf_theme_mouse +# - tmux_conf_theme_root +# - tmux_conf_theme_synchronized +tmux_conf_theme=enabled + # default theme tmux_conf_theme_colour_1="#080808" # dark gray tmux_conf_theme_colour_2="#303030" # gray From 2cf4d9a10415f58612c1a387fbeb9c0efe79d751 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 9 Jan 2023 10:35:32 +0100 Subject: [PATCH 127/155] make sure to use /usr/bin/infocmp to probe if tmux-256color is available system wide on macOS, here are the steps to install tmux-256color system wide $ $(brew --prefix ncurses)/bin/infocmp tmux-256color > /tmp/tmux-256color.info $ /usr/bin/tic -x /tmp/tmux-256color.info which will install tmux-256color in ~/.terminfo/74/tmux-256color resolves #530, resolves #592, resolves #601 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 2ccad39..0971fef 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -10,7 +10,7 @@ # -- general ------------------------------------------------------------------- set -g default-terminal "screen-256color" -if 'infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"' +if '/usr/bin/infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"' setw -g xterm-keys on set -s escape-time 10 # faster command sequences From 044d6336e84034c14760a2fe178f604a89626bfb Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 21 Jan 2023 21:57:51 +0100 Subject: [PATCH 128/155] make sure to use /usr/bin/infocmp to probe if tmux-256color is available system wide (2), fixes #617 some operating systems like NixOS don't have /usr/bin/infocmp --- .tmux.conf | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 0971fef..a81f736 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -10,7 +10,6 @@ # -- general ------------------------------------------------------------------- set -g default-terminal "screen-256color" -if '/usr/bin/infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"' setw -g xterm-keys on set -s escape-time 10 # faster command sequences @@ -690,6 +689,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _split_window_ssh "$@" # } # +# _apply_tmux_256color() { +# # when tmux-256color is available, use it +# # on macOS though, make sure to use /usr/bin/infocmp to probe if it's availalbe system wide +# case "$uname_s" in +# *Darwin*) +# /usr/bin/infocmp -x tmux-256color > /dev/null 2>&1 && tmux set -g default-terminal 'tmux-256color' +# ;; +# *) +# command infocmp -x tmux-256color > /dev/null 2>&1 && tmux set -g default-terminal 'tmux-256color' +# ;; +# esac +# } +# # _apply_24b() { # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-auto} # tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} @@ -1481,6 +1493,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ;; # esac # +# _apply_tmux_256color # _apply_24b& # _apply_theme& # _apply_bindings& From de1031a7d43aeb355482890159f53437094bf7a9 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 23 Jan 2023 16:11:34 +0100 Subject: [PATCH 129/155] make sure to use /usr/bin/infocmp to probe if tmux-256color is available system wide (3), fixes #618 infocmp may not exist or may return a non 0 exit status which would abort _apply_configuration() because of set -e --- .tmux.conf | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index a81f736..6de9c24 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -694,10 +694,14 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # on macOS though, make sure to use /usr/bin/infocmp to probe if it's availalbe system wide # case "$uname_s" in # *Darwin*) -# /usr/bin/infocmp -x tmux-256color > /dev/null 2>&1 && tmux set -g default-terminal 'tmux-256color' +# if /usr/bin/infocmp -x tmux-256color > /dev/null 2>&1; then +# tmux set -g default-terminal 'tmux-256color' +# fi # ;; # *) -# command infocmp -x tmux-256color > /dev/null 2>&1 && tmux set -g default-terminal 'tmux-256color' +# if command infocmp -x tmux-256color > /dev/null 2>&1; then +# tmux set -g default-terminal 'tmux-256color' +# fi # ;; # esac # } From 12f96dac7cd4fa7c6aeebd46a2905f0c77c1d3ba Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 24 Jan 2023 08:05:50 +0100 Subject: [PATCH 130/155] make sure to use /usr/bin/infocmp to probe if tmux-256color is available system wide (4), fixes #619 fixed $uname_s typo --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 6de9c24..bf97827 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -692,7 +692,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _apply_tmux_256color() { # # when tmux-256color is available, use it # # on macOS though, make sure to use /usr/bin/infocmp to probe if it's availalbe system wide -# case "$uname_s" in +# case "$_uname_s" in # *Darwin*) # if /usr/bin/infocmp -x tmux-256color > /dev/null 2>&1; then # tmux set -g default-terminal 'tmux-256color' From 537b276d74968a72811f0779979b4e78fc7f4777 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 22 Feb 2023 10:41:30 +0100 Subject: [PATCH 131/155] make sure to use /usr/bin/infocmp to probe if tmux-256color is available system wide (5), fixes #626 bail out if default-terminal is already globally set to tmux-256color or tmux-direct --- .tmux.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index bf97827..c1ce1df 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -690,6 +690,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # # _apply_tmux_256color() { +# case "$(tmux show -gv default-terminal)" in +# tmux-256color|tmux-direct) +# return +# ;; +# esac +# # # when tmux-256color is available, use it # # on macOS though, make sure to use /usr/bin/infocmp to probe if it's availalbe system wide # case "$_uname_s" in From f242584ba34d416f8446977a5e271c2243529f69 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 22 Feb 2023 23:28:53 +0100 Subject: [PATCH 132/155] updated _ssh_or_mosh_args() (2), fixes #627 do not try to ignore the command if supplied parsing the ssh command line is brittle and people sometimes pass options after user@hostname, e.g. ssh -p 222 user@hostname -I /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index c1ce1df..3538f56 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -531,7 +531,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _ssh_or_mosh_args() { # case "$1" in # *ssh*) -# args=$(printf '%s' "$1" | perl -n -e 'print if s/.*?\bssh[\w]*\s*((?:\s+-\w+)*)(\s+\w+)(\s\w+)?/\1\2/') +# args=$(printf '%s' "$1" | perl -n -e 'print if s/.*?\bssh[\w_-]*\s*(.*)/\1/') # ;; # *mosh-client*) # args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') From c5f598ea869f39a37f93a03f4ed0b62713ae8023 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 133/155] added tmux_conf_theme that controls whether theming is enabled or disabled (2), fixes #629 --- .tmux.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3538f56..72e9241 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1099,9 +1099,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # printf "#[fg=%s,bg=%s,none]%s", bg[j_], status_bg, mainsep # }') -# -# status_left="$status_left " # fi +# status_left="$status_left " # # # -- status-right style # @@ -1174,6 +1173,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # } # }') # fi +# status_right=${status_right-} # # # -- clock --------------------------------------------------------------- # @@ -1231,7 +1231,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ # -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') # -# status_left=$(printf '%s' "${status_left:-$(tmux show -gv status-left)}" | sed \ +# status_left=$(printf '%s' "${status_left-$(tmux show -gv status-left)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ @@ -1239,7 +1239,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e "s%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g" \ # -e "s%#{root}%#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}%g") # -# status_right=$(printf '%s' "${status_right:-$(tmux show -gv status-right)}" | sed \ +# status_right=$(printf '%s' "${status_right-$(tmux show -gv status-right)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ From b17d57f325957ca85c477fa3d80077da06cccf7c Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 134/155] added support for configuration files in the following locations: - ~/.tmux.conf and ~/.tmux.conf.local - $XDG_CONFIG_HOME/tmux/tmux.conf and $XDG_CONFIG_HOME/tmux/tmux.conf.local - ~/.config/tmux/tmux.conf and ~/.config/tmux/tmux.conf.local location of configuration files is determined by the following environment variables: - TMUX_CONF - TMUX_CONF_LOCAL the TMUX_PROGRAM environment variable contains the path to the tmux executable resolves #200, resolves #221, resolves #439, resolves #586, resolves #624 --- .tmux.conf | 351 ++++++++++++++++++++++++++++++----------------------- README.md | 109 ++++++++++------- 2 files changed, 263 insertions(+), 197 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 72e9241..836c063 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,10 +1,13 @@ -# : << EOF +# : << 'EOF' # https://github.com/gpakosz/.tmux # (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, # without any warranty. # Copyright 2012— Gregory Pakosz (@gpakosz). -# /!\ do not edit this file -# instead, override settings in ~/.tmux.conf.local, see README.md +# +# ------------------------------------------------------------------------------ +# /!\ DO NOT EDIT THIS FILE +# instead, override your .local customization file copy, see README.md /!\ +# ------------------------------------------------------------------------------ # -- general ------------------------------------------------------------------- @@ -25,10 +28,10 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "~/.tmux.conf.local" sh -c '${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' +bind e new-window -n "#{TMUX_CONF_LOCAL}" sh -c '${EDITOR:-vim} "$TMUX_CONF_LOCAL" && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"' # reload configuration -bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' +bind r run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"' \; display "#{TMUX_CONF} sourced" # -- display ------------------------------------------------------------------- @@ -79,7 +82,7 @@ bind > swap-pane -D # swap current pane with the next one bind < swap-pane -U # swap current pane with the previous one # maximize current pane -bind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D' +bind + run "cut -c3- '#{TMUX_CONF}' | sh -s _maximize_pane '#{session_name}' '#D'" # pane resizing bind -r H resize-pane -L 2 @@ -95,17 +98,17 @@ bind -r C-l next-window # select next window bind Tab last-window # move to last active window # toggle mouse -bind m run "cut -c3- ~/.tmux.conf | sh -s _toggle_mouse" +bind m run "cut -c3- '#{TMUX_CONF}' | sh -s _toggle_mouse" # -- urlview ------------------------------------------------------------------- -bind U run "cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}" +bind U run "cut -c3- '#{TMUX_CONF}' | sh -s _urlview '#{pane_id}'" # -- facebook pathpicker ------------------------------------------------------- -bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id} #{pane_current_path}" +bind F run "cut -c3- '#{TMUX_CONF}' | sh -s _fpp '#{pane_id}' '#{pane_current_path}'" # -- copy mode ----------------------------------------------------------------- @@ -120,16 +123,16 @@ bind -T copy-mode-vi H send -X start-of-line bind -T copy-mode-vi L send -X end-of-line # copy to X11 clipboard -if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' -if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' +if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | xsel -i -b"' +if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' # copy to Wayland clipboard -if -b 'command -v wl-copy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | wl-copy"' +if -b 'command -v wl-copy > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | wl-copy"' # copy to macOS clipboard -if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' -if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' +if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | pbcopy"' +if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | reattach-to-usernamespace pbcopy"' # copy to Windows clipboard -if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | clip.exe"' -if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboard"' +if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - | clip.exe"' +if -b '[ -c /dev/clipboard ]' 'bind y run -b "\"\$TMUX_PROGRAM\" \${TMUX_SOCKET:+-S \"\$TMUX_SOCKET\"} save-buffer - > /dev/clipboard"' # -- buffers ------------------------------------------------------------------- @@ -141,9 +144,21 @@ bind P choose-buffer # choose which buffer to paste from # -- 8< ------------------------------------------------------------------------ -source -q ~/.tmux.conf.local -run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' +%if #{==:#{TMUX_PROGRAM},} + run 'TMUX_PROGRAM="$(lsof -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"' +%endif +%if #{==:#{TMUX_SOCKET},} + run '"$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_SOCKET "#{socket_path}"' +%endif +%if #{==:#{TMUX_CONF},} + run '"$TMUX_PROGRAM" set-environment -g TMUX_CONF $(for conf in "$HOME/.tmux.conf" "$XDG_CONFIG_HOME/tmux/tmux.conf" "$HOME/.config/tmux/tmux.conf"; do [ -f "$conf" ] && printf "%s" "$conf" && break; done)' +%endif +%if #{==:#{TMUX_CONF_LOCAL},} + run '"$TMUX_PROGRAM" set-environment -g TMUX_CONF_LOCAL "$TMUX_CONF.local"' +%endif +run '"$TMUX_PROGRAM" source "$TMUX_CONF_LOCAL"' +run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # EOF # @@ -165,6 +180,24 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _uname_s=$(uname -s) # +# [ -z "$TMUX" ] && exit 255 +# if [ -z "$TMUX_SOCKET" ]; then +# TMUX_SOCKET=$(printf '%s' "$TMUX" | cut -d, -f1) +# fi +# if [ -z "$TMUX_PROGRAM" ]; then +# TMUX_PID=$(printf '%s' "$TMUX" | cut -d, -f2) +# TMUX_PROGRAM=$(lsof -b -w -a -d txt -p "$TMUX_PID" -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/$TMUX_PID/exe" 2>/dev/null || printf tmux) +# fi +# if [ x"$TMUX_PROGRAM" = x"tmux" ]; then +# tmux() { +# command tmux ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} "$@" +# } +# else +# tmux() { +# "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} "$@" +# } +# fi +# # _tmux_version=$(tmux -V | awk '{gsub(/[^0-9.]/, "", $2); print ($2+0) * 100}') # # _is_true() { @@ -232,12 +265,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if [ -z "$restore" ]; then # [ "$(tmux list-panes -t "$current_session:" | wc -l | sed 's/^ *//g')" -eq 1 ] && tmux display "Can't maximize with only one pane" && return # current_pane_height=$(tmux display -t "$current_pane" -p "#{pane_height}") -# info=$(tmux new-window -t "$current_session:" -F "#{session_name}:#{window_index}.#{pane_id}" -P "maximized... 2>/dev/null & tmux setw -t \"$current_session:\" remain-on-exit on; printf \"\\033[\$(tput lines);0fPane has been maximized, press + to restore\n\" '$current_pane'") +# info=$(tmux new-window -t "$current_session:" -F "#{session_name}:#{window_index}.#{pane_id}" -P "maximized... 2>/dev/null & \"$TMUX_PROGRAM\" ${TMUX_SOCKET:+-S \"$TMUX_SOCKET\"} setw -t \"$current_session:\" remain-on-exit on; printf \"\\033[\$(tput lines);0fPane has been maximized, press + to restore\n\" '$current_pane'") # session_window=${info%.*} # new_pane=${info#*.} # -# retry=1000 -# while [ x"$(tmux list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != x"$info 1" ] && [ "$retry" -ne 0 ]; do +# retry=20 +# while [ x"$("$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != x"$info 1" ] && [ "$retry" -ne 0 ]; do # sleep 0.1 # retry=$((retry - 1)) # done @@ -470,7 +503,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # battery_percentage="$(awk "BEGIN { printf \"%.0f%%\", ($charge) * 100 }")" # -# tmux set -g '@battery_bar' "$battery_bar" \;\ +# tmux set -g '@battery_bar' "$battery_bar" \;\ # set -g '@battery_hbar' "$battery_hbar" \;\ # set -g '@battery_vbar' "$battery_vbar" \;\ # set -g '@battery_percentage' "$battery_percentage" @@ -629,7 +662,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # now=$(date +%s) # esac # # shellcheck disable=SC1004 -# awk -v boot="$boot" -v now="$now" ' +# awk -v tmux="$TMUX_PROGRAM ${TMUX_SOCKET:+-S "$TMUX_SOCKET"}" -v boot="$boot" -v now="$now" ' # BEGIN { # uptime = now - boot # y = int(uptime / 31536000) @@ -639,12 +672,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # m = int(uptime / 60) % 60 # s = int(uptime) % 60 # -# system("tmux set -g @uptime_y " y + 0 " \\; " \ -# "set -g @uptime_dy " dy + 0 " \\; " \ -# "set -g @uptime_d " d + 0 " \\; " \ -# "set -g @uptime_h " h + 0 " \\; " \ -# "set -g @uptime_m " m + 0 " \\; " \ -# "set -g @uptime_s " s + 0) +# system(tmux " set -g @uptime_y " y + 0 " \\;" \ +# " set -g @uptime_dy " dy + 0 " \\;" \ +# " set -g @uptime_d " d + 0 " \\;" \ +# " set -g @uptime_h " h + 0 " \\;" \ +# " set -g @uptime_m " m + 0 " \\;" \ +# " set -g @uptime_s " s + 0) # }' # } # @@ -741,7 +774,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # _apply_bindings() { # cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT # -# tmux list-keys | grep -vF 'tmux.conf.local' | grep -E 'new-window|split(-|_)window|new-session|copy-selection|copy-pipe' > "$cfg" +# tmux list-keys | grep -vF 'TMUX_CONF_LOCAL' | grep -E 'new-window|split(-|_)window|new-session|copy-selection|copy-pipe' > "$cfg" # # # tmux 3.0 doesn't include 02254d1e5c881be95fd2fc37b4c4209640b6b266 and the # # output of list-keys can be truncated @@ -757,9 +790,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # if ! _is_disabled "$tmux_conf_new_pane_retain_current_path"; then # perl -p -i -e " -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{b:pane_tty}\2\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- \2 | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\3\5\1/g # ; -# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\3)(.*?)\2/split-window\4/g +# s/\brun-shell\b(?:\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+(?:.+?)\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\2)(.*?)\1/split-window\3/g # ; # s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ # "$cfg" @@ -776,12 +809,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # fi # # perl -p -i -e " -# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# s,\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?,run-shell 'cut -c3- \"$TMUX_CONF\" | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1',g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" # # tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} # if ! _is_disabled "$tmux_conf_new_pane_reconnect_ssh" && _is_true "$tmux_conf_new_pane_reconnect_ssh"; then -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\1'/g" "$cfg" +# perl -p -i -e "s,\bsplit-window\b([^;}\n\"]*),run-shell 'cut -c3- \"$TMUX_CONF\" | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\1',g" "$cfg" # fi # # if ! _is_disabled "$tmux_conf_new_pane_retain_current_path" && _is_true "$tmux_conf_new_pane_retain_current_path"; then @@ -790,9 +823,9 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # ; # s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ +# s/\brun-shell\b\s+'cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- \1 | sh -s _split_window\2 #\{pane_pid\} #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\3'/g if /\bdisplay-menu\b/ # ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ +# s/\brun-shell\b\s+'cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- \1 | sh -s _split_window\2 #\{pane_pid\} #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\3'/g" \ # "$cfg" # fi # @@ -820,7 +853,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # if ! _is_disabled "$tmux_conf_copy_to_os_clipboard" && _is_true "$tmux_conf_copy_to_os_clipboard"; then # perl -p -i -e "s/(?!.*?$command)\bcopy-(?:selection|pipe)(-and-cancel)?\b/copy-pipe\1 '$command'/g" "$cfg" # else -# if [ $_tmux_version -ge 320 ]; then +# if [ "$_tmux_version" -ge 320 ]; then # perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-pipe\1/g" "$cfg" # else # perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-selection\1/g" "$cfg" @@ -1202,50 +1235,50 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # -- variables ------------------------------------------------------------- # # set_titles_string=$(printf '%s' "${tmux_conf_theme_terminal_title:-$(tmux show -gv set-titles-string)}" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# -e "s%#{circled_window_index}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#I')%g" \ +# -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ +# -e "s%#{username}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' false '#D')%g" \ +# -e "s%#{hostname}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false false '#h' '#D')%g" \ +# -e "s%#{hostname_full}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false true '#H' '#D')%g" \ +# -e "s%#{username_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' true '#D')%g" \ +# -e "s%#{hostname_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true false '#h' '#D')%g" \ +# -e "s%#{hostname_full_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true true '#H' '#D')%g") # # window_status_format=$(printf '%s' "${window_status_format:-$(tmux show -gv window-status-format)}" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# -e "s%#{circled_window_index}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#I')%g" \ +# -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ +# -e "s%#{username}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' false '#D')%g" \ +# -e "s%#{hostname}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false false '#h' '#D')%g" \ +# -e "s%#{hostname_full}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false true '#H' '#D')%g" \ +# -e "s%#{username_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' true '#D')%g" \ +# -e "s%#{hostname_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true false '#h' '#D')%g" \ +# -e "s%#{hostname_full_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true true '#H' '#D')%g") # # window_status_current_format=$(printf '%s' "${window_status_current_format:-$(tmux show -gv window-status-current-format)}" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# -e "s%#{circled_window_index}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#I')%g" \ +# -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ +# -e "s%#{username}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' false '#D')%g" \ +# -e "s%#{hostname}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false false '#h' '#D')%g" \ +# -e "s%#{hostname_full}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false true '#H' '#D')%g" \ +# -e "s%#{username_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' true '#D')%g" \ +# -e "s%#{hostname_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true false '#h' '#D')%g" \ +# -e "s%#{hostname_full_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true true '#H' '#D')%g") # # status_left=$(printf '%s' "${status_left-$(tmux show -gv status-left)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e "s%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g" \ -# -e "s%#{root}%#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}%g") +# -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ +# -e "s%#{root}%#{?#{==:#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' '#D'),root},$tmux_conf_theme_root,}%g") # # status_right=$(printf '%s' "${status_right-$(tmux show -gv status-right)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ # -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ # -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e "s%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g" \ -# -e "s%#{root}%#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}%g") +# -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ +# -e "s%#{root}%#{?#{==:#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' '#D'),root},$tmux_conf_theme_root,}%g") # # tmux_conf_battery_bar_symbol_full=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_full:-◼}") # tmux_conf_battery_bar_symbol_empty=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_empty:-◻}") @@ -1256,7 +1289,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 # tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 # -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' +# _pkillf "cut -c3- '$TMUX_CONF' \| sh -s _battery_bar" # _battery_info # if [ "$charge" != 0 ]; then # case "$status_left $status_right" in @@ -1273,16 +1306,16 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ # -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ # -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# status_right="#(echo; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" +# status_right="#(echo; nice cut -c3- '$TMUX_CONF' | sh -s _battery_status '$tmux_conf_battery_status_charging' '$tmux_conf_battery_status_discharging')$status_right" # interval=60 -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -ge 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" +# if [ "$_tmux_version" -ge 320 ]; then +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \"\$sleep_pid\"; exit 0' TERM; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _battery_bar '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_length' '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_hbar_palette' '$tmux_conf_battery_vbar_palette'; sleep $interval & sleep_pid=\$!; wait \"\$sleep_pid\"; sleep_pid=; done" +# elif [ "$_tmux_version" -ge 280 ]; then +# status_right="#(echo; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _battery_bar '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_length' '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_hbar_palette' '$tmux_conf_battery_vbar_palette'; sleep $interval; done)$status_right" +# elif [ "$_tmux_version" -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- '$TMUX_CONF' | sh -s _battery_bar '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_length' '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_hbar_palette' '$tmux_conf_battery_vbar_palette'; sleep $interval; done)$status_right" # else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" +# status_right="#(nice cut -c3- '$TMUX_CONF' | sh -s _battery_bar '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_length' '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_hbar_palette' '$tmux_conf_battery_vbar_palette')$status_right" # fi # ;; # esac @@ -1291,23 +1324,23 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # case "$status_left $status_right" in # *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) # status_left=$(echo "$status_left" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# -e "s%#{username}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' false '#D')%g" \ +# -e "s%#{hostname}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false false '#h' '#D')%g" \ +# -e "s%#{hostname_full}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false true '#H' '#D')%g" \ +# -e "s%#{username_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' true '#D')%g" \ +# -e "s%#{hostname_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true false '#h' '#D')%g" \ +# -e "s%#{hostname_full_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true true '#H' '#D')%g") # status_right=$(echo "$status_right" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') +# -e "s%#{username}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' false '#D')%g" \ +# -e "s%#{hostname}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false false '#h' '#D')%g" \ +# -e "s%#{hostname_full}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' false true '#H' '#D')%g" \ +# -e "s%#{username_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' true '#D')%g" \ +# -e "s%#{hostname_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true false '#h' '#D')%g" \ +# -e "s%#{hostname_full_ssh}%#(cut -c3- '$TMUX_CONF' | sh -s _hostname '#{pane_pid}' '#{b:pane_tty}' true true '#H' '#D')%g") # ;; # esac # -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' +# _pkillf "cut -c3- '$TMUX_CONF' \| sh -s _uptime" # case "$status_left $status_right" in # *'#{uptime_'*|*'#{?uptime_'*) # status_left=$(echo "$status_left" | perl -p -e ' @@ -1330,19 +1363,19 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # interval=$(tmux show -gv status-interval) # ;; # esac -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" +# if [ "$_tmux_version" -ge 320 ]; then +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \"\$sleep_pid\"; exit 0' TERM; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _uptime; sleep $interval & sleep_pid=\$!; wait \"\$sleep_pid\"; sleep_pid=; done" +# elif [ "$_tmux_version" -ge 280 ]; then +# status_right="#(echo; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _uptime; sleep $interval; done)$status_right" +# elif [ "$_tmux_version" -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- '$TMUX_CONF' | sh -s _uptime; sleep $interval; done)$status_right" # else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" +# status_right="#(nice cut -c3- '$TMUX_CONF' | sh -s _uptime)$status_right" # fi # ;; # esac # -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' +# _pkillf "cut -c3- '$TMUX_CONF' \| sh -s _loadavg" # case "$status_left $status_right" in # *'#{loadavg'*|*'#{?loadavg'*) # status_left=$(echo "$status_left" | sed -E \ @@ -1350,22 +1383,22 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # status_right=$(echo "$status_right" | sed -E \ # -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') # interval=$(tmux show -gv status-interval) -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" +# if [ "$_tmux_version" -ge 320 ]; then +# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \"\$sleep_pid\"; exit 0' TERM; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _loadavg; sleep $interval & sleep_pid=\$!; wait \"\$sleep_pid\"; sleep_pid=; done" +# elif [ "$_tmux_version" -ge 280 ]; then +# status_right="#(echo; while [ x\"\$('$TMUX_PROGRAM' -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- '$TMUX_CONF' | sh -s _loadavg; sleep $interval; done)$status_right" +# elif [ "$_tmux_version" -gt 240 ]; then +# status_right="#(echo; while :; do nice cut -c3- '$TMUX_CONF' | sh -s _loadavg; sleep $interval; done)$status_right" # else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" +# status_right="#(nice cut -c3- '$TMUX_CONF' | sh -s _loadavg)$status_right" # fi # ;; # esac # # # -- custom variables ------------------------------------------------------ # -# if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*(?:#.*)?\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) +# if [ -f "$TMUX_CONF_LOCAL" ] && [ x"$(cut -c3- "$TMUX_CONF_LOCAL" | sh 2>/dev/null -s printf probe)" = x"probe" ]; then +# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*(?:#.*)?\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- \"\\\$TMUX_CONF_LOCAL\" | sh -s \1\\1)%g; !p' "$TMUX_CONF_LOCAL") # status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") # fi @@ -1385,58 +1418,74 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_update_plugins_on_reload="$3" # tmux_conf_uninstall_plugins_on_reload="$4" # -# TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} -# if [ -z "$(tmux show -gv '@plugin')" ] && [ -z "$(tmux show -gv '@tpm_plugins')" ]; then +# TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-$(dirname "$TMUX_CONF")/plugins} +# mkdir -p "$TMUX_PLUGIN_MANAGER_PATH" +# +# tpm_plugins=$(tmux show -gvq '@tpm_plugins' 2>/dev/null) +# if [ -z "$(tmux show -gv '@plugin' 2>/dev/null)" ] && [ -z "$tpm_plugins" ]; then # if _is_true "$tmux_conf_uninstall_plugins_on_reload" && [ -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then # tmux display 'Uninstalling tpm and plugins...' # rm -rf "$TMUX_PLUGIN_MANAGER_PATH" # tmux display 'Done uninstalling tpm and plugins...' # fi # else -# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then -# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then -# install_tpm=true -# tmux display 'Installing tpm and plugins...' -# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" -# elif { [ -z "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_reload"; }; then -# update_tpm=true -# tmux display 'Updating tpm and plugins...' -# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) -# fi -# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone(?!\s+--depth\s+1)/git clone --depth 1/g -# ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" -# perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" -# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" -# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" -# fi -# if [ x"$update_tpm" = x"true" ]; then -# { -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# tmux display 'Done updating tpm and plugins...' -# } || tmux display 'Failed updating tpm and plugins...' -# elif [ x"$install_tpm" = x"true" ]; then -# { -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 -# tmux display 'Done installing tpm and plugins...' -# } || tmux display 'Failed installing tpm and plugins...' +# if [ x"$(command tmux display -p '#{pid} #{version} #{socket_path}')" = x"$($TMUX_PROGRAM display -p '#{pid} #{version} #{socket_path}')" ]; then +# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then +# tpm_plugins=$(cat << EOF | tr ' ' '\n' | awk '/^\s*$/ {next;}; !seen[$0]++ { gsub(/^[ \t]+/,"",$0); gsub(/[ \t]+$/,"",$0); print $0 }' +# $(awk '/^[ \t]*set(-option)?.*[ \t]@plugin[ \t]/ { gsub(/'\''/, ""); gsub(/'\"'/, ""); print $NF }' "$TMUX_CONF_LOCAL" 2>/dev/null) +# EOF +# ) +# tmux set -g '@tpm_plugins' "$tpm_plugins" +# +# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then +# install_tpm=true +# tmux display 'Installing tpm and plugins...' +# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" +# elif { [ -z "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_reload"; }; then +# update_tpm=true +# tmux display 'Updating tpm and plugins...' +# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) +# fi +# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then +# perl -0777 -p -i -e 's/git clone(?!\s+--depth\s+1)/git clone --depth 1/g +# ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" +# perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" +# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" +# fi +# if [ x"$update_tpm" = x"true" ]; then +# { +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ +# tmux display 'Done updating tpm and plugins...' +# } || tmux display 'Failed updating tpm and plugins...' +# elif [ x"$install_tpm" = x"true" ]; then +# { +# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 +# tmux display 'Done installing tpm and plugins...' +# } || tmux display 'Failed installing tpm and plugins...' +# fi +# else +# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." # fi +# +# [ -z "$(tmux show -gqv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' +# [ -z "$(tmux show -gqv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' +# [ -z "$(tmux show -gqv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' +# "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" || tmux display "One or more tpm plugin(s) failed" # else -# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." +# tmux run -b "sleep \$((#{display-time} / 1000)) && '$TMUX_PROGRAM' set display-time 3000 \; display 'Cannot use tpm which assumes a globally installed tmux' \; set -u display-time" # fi # -# [ -z "$(tmux show -gqv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' -# [ -z "$(tmux show -gqv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' -# [ -z "$(tmux show -gqv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' -# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" || tmux display "One or more tpm plugin(s) failed" -# if [ $_tmux_version -gt 260 ]; then -# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' +# if [ "$_tmux_version" -gt 260 ]; then +# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' \; set -gu '@tpm_plugins' +# else +# tmux set -g '@tpm-install' '' \; set -g '@tpm-update' '' \; set -g '@tpm-clean' '' \; set -g '@plugin' '' \; set -g '@tpm_plugins' '' # fi # fi # } @@ -1445,13 +1494,13 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux_conf_update_plugins_on_launch=${tmux_conf_update_plugins_on_launch:-true} # tmux_conf_update_plugins_on_reload=${tmux_conf_update_plugins_on_reload:-true} # tmux_conf_uninstall_plugins_on_reload=${tmux_conf_uninstall_plugins_on_reload:-true} -# tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\" \"$tmux_conf_uninstall_plugins_on_reload\"" +# tmux run -b "cut -c3- '$TMUX_CONF' | sh -s __apply_plugins '$window_active' '$tmux_conf_update_plugins_on_launch' '$tmux_conf_update_plugins_on_reload' '$tmux_conf_uninstall_plugins_on_reload'" # } # # _apply_important() { # cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT # -# if perl -n -e 'print if /^\s*(?:set|bind|unbind).+?#!important\s*$/' ~/.tmux.conf.local 2>/dev/null > "$cfg.local"; then +# if perl -n -e 'print if /^\s*(?:set|bind|unbind).+?#!important\s*$/' "$TMUX_CONF_LOCAL" 2>/dev/null > "$cfg.local"; then # if ! tmux source-file "$cfg.local"; then # verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) # while ! out=$(tmux source-file "$verbose_flag" "$cfg.local"); do @@ -1477,7 +1526,7 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi -# if [ $_tmux_version -lt 240 ]; then +# if [ "$_tmux_version" -lt 240 ]; then # tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.4+" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi @@ -1518,12 +1567,12 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # # _urlview() { # tmux capture-pane -J -S - -E - -b "urlview-$1" -t "$1" -# tmux split-window "tmux show-buffer -b urlview-$1 | urlview || true; tmux delete-buffer -b urlview-$1" +# tmux split-window "'$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} show-buffer -b 'urlview-$1' | urlview || true; '$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} delete-buffer -b 'urlview-$1'" # } # # _fpp() { # tmux capture-pane -J -S - -E - -b "fpp-$1" -t "$1" -# tmux split-window -c $2 "tmux show-buffer -b fpp-$1 | fpp || true; tmux delete-buffer -b fpp-$1" +# tmux split-window -c "$2" "'$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} show-buffer -b 'fpp-$1' | fpp || true; '$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} delete-buffer -b 'fpp-$1'" # } # # "$@" diff --git a/README.md b/README.md index 2fd51a8..92f5e4c 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,14 @@ Requirements: - awk, perl and sed - outside of tmux, `$TERM` must be set to `xterm-256color` -To install, run the following from your terminal: (you may want to backup your -existing `~/.tmux.conf` first) +⚠️ Before installing, you may want to backup your existing configuration. +You can install Oh my tmux! at any of the following locations: +- `~` +- `$XDG_CONFIG_HOME/tmux` +- `~/.config/tmux` + +Installing in `~`: ``` $ cd $ git clone https://github.com/gpakosz/.tmux.git @@ -24,28 +29,39 @@ $ ln -s -f .tmux/.tmux.conf $ cp .tmux/.tmux.conf.local . ``` -💡 You can clone the repository anywhere you want, provided you create the -proper `~/.tmux.conf` symlink and you copy the `.tmux.conf.local` sample file in -your home directory: - +Installing in `$XDG_CONFIG_HOME/tmux`: ``` -$ git clone https://github.com/gpakosz/.tmux.git /path/to/oh-my-tmux -$ ln -s -f /path/to/oh-my-tmux/.tmux.conf ~/.tmux.conf -$ cp /path/to/oh-my-tmux/.tmux.conf.local ~/.tmux.conf.local +$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" +$ mkdir -p "$XDG_CONFIG_HOME/tmux" +$ ln -s "/path/to/oh-my-tmux/.tmux.conf" "$XDG_CONFIG_HOME/tmux/tmux.conf" +$ cp "/path/to/oh-my-tmux/.tmux.conf.local" "$XDG_CONFIG_HOME/tmux/tmux.conf.local" ``` -Then proceed to [customize] your `~/.tmux.conf.local` copy. +Installing in `~/.config/tmux`: +``` +$ git clone https://github.com/gpakosz/.tmux.git "/path/to/oh-my-tmux" +$ mkdir -p "~/.config/tmux" +$ ln -s "/path/to/oh-my-tmux/.tmux.conf" "~/.config/tmux/tmux.conf" +$ cp "/path/to/oh-my-tmux/.tmux.conf.local" "~/.config/tmux/tmux.conf.local" +``` +⚠️ When installing `$XDG_CONFIG_HOME/tmux` or `~/.config/tmux`, the configuration +file names don't have a leading `.` character. -[customize]: #configuration +❗️ You should never alter the main `.tmux.conf` or `tmux.conf` file. If you do, +you're on your own. Instead, every customization should happen in your +`.tmux.conf.local` or `tmux.conf.local` customization file copy. If you're a Vim user, setting the `$EDITOR` environment variable to `vim` will enable and further customize the vi-style key bindings (see tmux manual). -If you're new to tmux, I recommend you read [tmux 2: Productive Mouse-Free +If you're new to tmux, I recommend you to read [tmux 2: Productive Mouse-Free Development][bhtmux2] by [@bphogan]. -[bhtmux2]: https://pragprog.com/book/bhtmux2/tmux-2 +Now proceed to [adjust] your `.local` customization file copy. + +[bhtmux2]: https://pragprog.com/titles/bhtmux2/tmux-2 [@bphogan]: https://twitter.com/bphogan +[adjust]: #configuration Troubleshooting --------------- @@ -69,23 +85,23 @@ Troubleshooting This can also happen on macOS when using iTerm2 and "Use Unicode version 9 character widths" is enabled in `Preferences... > Profiles > Text` - For that reason, the default `~/.tmux.conf.local` file stopped using Unicode - characters for which width changed in between Unicode 8.0 and 9.0 standards, - as well as Emojis. + For that reason, the default sample `.local` customization file stopped using + Unicode characters for which width changed in between Unicode 8.0 and 9.0 + standards, as well as Emojis. - **I installed Powerline and/or (patched) fonts but can't see Powerline symbols.** First, you don't need to install Powerline. You only need fonts patched with Powerline symbols or the standalone `PowerlineSymbols.otf` font. Then make - sure your `~/.tmux.conf.local` copy uses the right code points for + sure your `.local` customization file copy uses the Powerline code points for `tmux_conf_theme_left_separator_XXX` values. - - **I'm using Bash On Windows (WSL), colors and Powerline look are broken.** + - **I'm using Bash On Windows (WSL), colors and the Powerline look are broken.** There is currently a [bug][1681] in the new console powering Bash On Windows preventing text attributes (bold, underscore, ...) to combine properly with - colors. The workaround is to search your `~/.tmux.conf.local` copy and + colors. The workaround is to search your `.local` customization file copy and replace attributes with `'none'`. Also, until Window's console replaces its GDI based render with a DirectWrite @@ -150,8 +166,8 @@ list of key bindings: This configuration uses the following bindings: - - ` e` opens `~/.tmux.conf.local` with the editor defined by the - `$EDITOR` environment variable (defaults to `vim` when empty) + - ` e` opens the `.local` customization file copy with the editor + defined by the `$EDITOR` environment variable (defaults to `vim` when empty) - ` r` reloads the configuration - `C-l` clears both the screen and the tmux history @@ -197,14 +213,16 @@ Configuration ------------- While this configuration tries to bring sane default settings, you may want to -customize it further to your needs. Instead of altering the `~/.tmux.conf` file -and diverging from upstream, the proper way is to edit the `~/.tmux.conf.local` -file. +customize it further to your needs. -Please refer to the sample `.tmux.conf.local` file to know more about variables -you can adjust to alter different behaviors. Pressing ` e` will open -`~/.tmux.conf.local` with the editor defined by the `$EDITOR` environment -variable (defaults to `vim` when empty). +❗️ Again, you should never alter the main `.tmux.conf` or `tmux.conf` file. +If you do, you're on your own. + +Please refer to the sample `.local` customization file to know more about the +variables that allow you to alter different behaviors. Upon successful +installation, pressing ` e` will open your `.local` customization file +copy with the editor defined by the `$EDITOR` environment variable (defaults to +`vim` when empty). ### Enabling the Powerline look @@ -226,12 +244,9 @@ To make use of these symbols, there are several options: [powerline patched fonts]: https://github.com/powerline/fonts [powerline font]: https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf [terminal support]: http://powerline.readthedocs.io/en/master/usage.html#usage-terminal-emulators -[Powerline manual]: http://powerline.readthedocs.org/en/latest/installation.html#fonts-installation -Please see the [Powerline manual] for further details. - -Then edit your `~/.tmux.conf.local` copy (with ` e`) and adjust the -following variables: +Then edit your `.local` customization file copy (with ` e`) and adjust +the following variables: ``` tmux_conf_theme_left_separator_main='\uE0B0' @@ -239,12 +254,16 @@ tmux_conf_theme_left_separator_sub='\uE0B1' tmux_conf_theme_right_separator_main='\uE0B2' tmux_conf_theme_right_separator_sub='\uE0B3' ``` + +The [Powerline manual] contains further details on how to install fonts +containing the Powerline symbols. You don't need to install Powerline itself +though. + +[Powerline manual]: http://powerline.readthedocs.org/en/latest/installation.html#fonts-installation + ### Configuring the status line -Contrary to the first iterations of this configuration, by now you have total -control on the content and order of `status-left` and `status-right`. - -Edit your `~/.tmux.conf.local` copy (` e`) and adjust the +Edit your `.local` customization file copy (` e`) and adjust the `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables to your own preferences. @@ -272,7 +291,7 @@ This configuration supports the following builtin variables: - `#{username_ssh}`: SSH aware username information, blank when not connected to a remote server through SSH/Mosh -Beside custom variables mentioned above, the `tmux_conf_theme_status_left` and +Beside the variables mentioned above, the `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables support usual tmux syntax, e.g. using `#()` to call an external command that inserts weather information provided by [wttr.in]: @@ -286,8 +305,8 @@ minutes whatever the value of `status-interval`. [wttr.in]: https://github.com/chubin/wttr.in#one-line-output -💡 You can also define your own custom variables. See the sample -`.tmux.conf.local` file for instructions. +💡 You can also define your own custom variables by writing special functions, +see the sample `.local` customization file for instructions. Finally, remember `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` end up being given to tmux as `status-left` and @@ -296,7 +315,7 @@ character has a special meaning and needs to be escaped by doubling it, e.g. ``` tmux_conf_theme_status_right='#(echo foo %% bar)' ``` -See `man 3 strftime`. +See also `man 3 strftime`. ### Using TPM plugins @@ -305,17 +324,15 @@ This configuration now comes with built-in [TPM] support: - whenever a plugin introduces a variable to be used in `status-left` or `status-right`, you can use it in `tmux_conf_theme_status_left` and `tmux_conf_theme_status_right` variables, see instructions above 👆 -- ⚠️ do not add `set -g @plugin 'tmux-plugins/tpm'` -- ⚠️ do not add `run '~/.tmux/plugins/tpm/tpm'` to `~/.tmux.conf` or your -- `~/.tmux.conf.local` copy ← people who are used to alter - `.tmux.conf` to add TPM support will have to adapt their configuration +- ⚠️ do not add `set -g @plugin 'tmux-plugins/tpm'` to any configuration file +- ⛔️ do not add `run '~/.tmux/plugins/tpm/tpm'` to any configuration file ⚠️ The TPM bindings differ slightly from upstream: - installing plugins: ` + I` - uninstalling plugins: ` + Alt + u` - updating plugins: ` + u` -See `~/.tmux.conf.local` for instructions. +See the sample `.local` customization file for instructions. [TPM]: https://github.com/tmux-plugins/tpm From f27641c84619a3b44551a689bac8f5d9aa303bf9 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 135/155] turn off history substitution in case it's been enabled (3) disabled SC3041 violation and fixed SC2015 violation SC3041 (warning): In POSIX sh, set flag -H is undefined SC2015 (info): Note that A && B || C is not if-then-else. C may run when A is true --- .tmux.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 836c063..c1fa09c 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -167,7 +167,10 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # unset GREP_OPTIONS # export LC_NUMERIC=C -# (set +H 2>/dev/null) && set +H || true +# # shellcheck disable=SC3041 +# if (set +H 2>/dev/null); then +# set +H +# fi # # if ! printf '' | sed -E 's///' 2>/dev/null; then # if printf '' | sed -r 's///' 2>/dev/null; then From f930dbe12a9a733c8f6ecc3e62507514ab152ba4 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 136/155] updated _maximize_pane() that stopped working with tmux 3.2 (2) fixed SC2014 violation SC2034 (warning): current_pane_height appears unused. Verify use (or export if used externally) --- .tmux.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index c1fa09c..64b6087 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -267,7 +267,6 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # if [ -z "$restore" ]; then # [ "$(tmux list-panes -t "$current_session:" | wc -l | sed 's/^ *//g')" -eq 1 ] && tmux display "Can't maximize with only one pane" && return -# current_pane_height=$(tmux display -t "$current_pane" -p "#{pane_height}") # info=$(tmux new-window -t "$current_session:" -F "#{session_name}:#{window_index}.#{pane_id}" -P "maximized... 2>/dev/null & \"$TMUX_PROGRAM\" ${TMUX_SOCKET:+-S \"$TMUX_SOCKET\"} setw -t \"$current_session:\" remain-on-exit on; printf \"\\033[\$(tput lines);0fPane has been maximized, press + to restore\n\" '$current_pane'") # session_window=${info%.*} # new_pane=${info#*.} From 28d6670bb9f44d1b72353a76593afc850d763a23 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 137/155] reworked pane / tty introspection (3) fixed SC2154 violation SC2154 (warning): pane_id is referenced but not assigned --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 64b6087..12e0ee9 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -644,7 +644,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} # root=$3 # -# username=$(_username "$pane_id" "$pane_tty" false) +# username=$(_username "$pane_pid" "$pane_tty" false) # # [ x"$username" = x"root" ] && echo "$root" # } From adf2e0caec46fa82eea3ae4754fd0bea8d137e3d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 138/155] fixed shellcheck SC2015 violation SC2015 (info): Note that A && B || C is not if-then-else. C may run when A is true --- .tmux.conf | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 12e0ee9..3646eb7 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -358,7 +358,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # done # ;; # esac -# [ "$count" -ne 0 ] && charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') || true +# if [ "$count" -ne 0 ]; then +# charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') +# fi # } # # _battery_status() { @@ -869,8 +871,10 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # # ignore bindings with errors # if ! tmux source-file "$cfg.in"; then -# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) -# while ! out=$(tmux source-file "$verbose_flag" "$cfg.in"); do +# if tmux source-file -v /dev/null 2> /dev/null; then +# verbose_flag='-v' +# fi +# while ! out=$(tmux source-file "${verbose_flag:+$verbose_flag}" "$cfg.in"); do # line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) # perl -n -i -e "if ($. != $line) { print }" "$cfg.in" # done @@ -1504,8 +1508,10 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # if perl -n -e 'print if /^\s*(?:set|bind|unbind).+?#!important\s*$/' "$TMUX_CONF_LOCAL" 2>/dev/null > "$cfg.local"; then # if ! tmux source-file "$cfg.local"; then -# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) -# while ! out=$(tmux source-file "$verbose_flag" "$cfg.local"); do +# if tmux source-file -v /dev/null 2> /dev/null; then +# verbose_flag='-v' +# fi +# while ! out=$(tmux source-file "${verbose_flag:+$verbose_flag}" "$cfg.local"); do # line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) # perl -n -i -e "if ($. != $line) { print }" "$cfg.local" # done From 3994ce38d8dc144aee3518cf8b07fe4c74571b16 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 139/155] fixed shellcheck SC2059 violation SC2059 (info): Don't use variables in the printf format string. Use printf '..%s..' "$foo" --- .tmux.conf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 3646eb7..12a5841 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1023,7 +1023,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # else # window_status_separator='' # fi -# window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" +# window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf '%s' "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf '%s' "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf '%s' "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" # window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" # else # if [ -z "$tmux_conf_theme_left_separator_main" ]; then @@ -1031,7 +1031,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # else # window_status_separator='' # fi -# window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" +# window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf '%s' "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf '%s' "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf '%s' "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf '%s' "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf '%s' "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf '%s' "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" # window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" # fi # @@ -1272,16 +1272,16 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # status_left=$(printf '%s' "${status_left-$(tmux show -gv status-left)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ +# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf '%s' "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf '%s' "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ # -e "s%#{root}%#{?#{==:#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' '#D'),root},$tmux_conf_theme_root,}%g") # # status_right=$(printf '%s' "${status_right-$(tmux show -gv status-right)}" | sed \ # -e "s/#{pairing}/#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ +# -e "s/#{prefix}/#{?client_prefix,$tmux_conf_theme_prefix ,$(printf '%s' "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ +# -e "s/#{mouse}/#{?mouse,$tmux_conf_theme_mouse ,$(printf '%s' "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ # -e "s%#{synchronized}%#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ # -e "s%#{circled_session_name}%#(cut -c3- '$TMUX_CONF' | sh -s _circled '#S')%g" \ # -e "s%#{root}%#{?#{==:#(cut -c3- '$TMUX_CONF' | sh -s _username '#{pane_pid}' '#{b:pane_tty}' '#D'),root},$tmux_conf_theme_root,}%g") From 1f5a0648206a248f75e679f6c405550bfb41550a Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 140/155] updated _username() in when the ssh client doesn't support %r in ProxyCommand (2) disabled SC2086 violation SC2086 (info): Double quote to prevent globbing and word splitting --- .tmux.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/.tmux.conf b/.tmux.conf index 12a5841..ee021f5 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -593,6 +593,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^user / { print $2; exit }') # # shellcheck disable=SC2086 # [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" 2>&1 | awk '/^%username% / { print $2; exit }') +# # shellcheck disable=SC2086 # [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -v -T -o ControlPath=none -o ProxyCommand=false -o IdentityFile='%%username%%/%r' 2>&1 | awk '/%username%/ { print substr($4,12); exit }') # else # if ! _is_true "$ssh_only"; then From 0f6b28e1e9a8b358e0f90ed1420981e4f7600e96 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 141/155] fixed SC2268 violation SC2268 (style): Avoid x-prefix in comparisons as it no longer serves a purpose --- .tmux.conf | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ee021f5..57dc334 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -191,7 +191,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # TMUX_PID=$(printf '%s' "$TMUX" | cut -d, -f2) # TMUX_PROGRAM=$(lsof -b -w -a -d txt -p "$TMUX_PID" -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/$TMUX_PID/exe" 2>/dev/null || printf tmux) # fi -# if [ x"$TMUX_PROGRAM" = x"tmux" ]; then +# if [ "$TMUX_PROGRAM" = "tmux" ]; then # tmux() { # command tmux ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} "$@" # } @@ -204,15 +204,15 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # _tmux_version=$(tmux -V | awk '{gsub(/[^0-9.]/, "", $2); print ($2+0) * 100}') # # _is_true() { -# [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"1" ] +# [ "$1" = "true" ] || [ "$1" = "yes" ] || [ "$1" = "1" ] # } # # _is_enabled() { -# [ x"$1" = x"enabled" ] +# [ "$1" = "enabled" ] # } # # _is_disabled() { -# [ x"$1" = x"disabled" ] +# [ "$1" = "disabled" ] # } # # _circled() { @@ -272,7 +272,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # new_pane=${info#*.} # # retry=20 -# while [ x"$("$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != x"$info 1" ] && [ "$retry" -ne 0 ]; do +# while [ "$("$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != "$info 1" ] && [ "$retry" -ne 0 ]; do # sleep 0.1 # retry=$((retry - 1)) # done @@ -372,7 +372,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # battery_status_charging=$1 # battery_status_discharging=$2 -# if [ x"$discharging" = x"true" ]; then +# if [ "$discharging" = "true" ]; then # battery_status="$battery_status_discharging" # else # battery_status="$battery_status_charging" @@ -398,7 +398,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # battery_hbar_palette=$5 # battery_vbar_palette=$6 # -# if [ x"$battery_bar_length" = x"auto" ]; then +# if [ "$battery_bar_length" = "auto" ]; then # columns=$(tmux -q display -p '#{client_width}' 2> /dev/null || echo 80) # if [ "$columns" -ge 80 ]; then # battery_bar_length=10 @@ -412,9 +412,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # { set -f; IFS=,; set -- $battery_bar_palette; unset IFS; set +f; } # palette_style=$1 # battery_bg=${2:-none} -# [ x"$palette_style" = x"gradient" ] && \ +# [ "$palette_style" = "gradient" ] && \ # palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ +# [ "$palette_style" = "heat" ] && \ # palette="243 245 247 144 143 142 184 214 208 202 196" # # palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') @@ -439,7 +439,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # battery_bg=$3 # # full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# [ x"$battery_bg" != x"none" ] && \ +# [ "$battery_bg" != "none" ] && \ # battery_bar="#[bg=$battery_bg]" # #shellcheck disable=SC2046 # [ "$full" -gt 0 ] && \ @@ -455,9 +455,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # shellcheck disable=SC2086 # { set -f; IFS=,; set -- $battery_hbar_palette; unset IFS; set +f; } # palette_style=$1 -# [ x"$palette_style" = x"gradient" ] && \ +# [ "$palette_style" = "gradient" ] && \ # palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ +# [ "$palette_style" = "heat" ] && \ # palette="233 234 235 237 239 241 243 245 247 144 143 142 184 214 208 202 196" # # palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') @@ -482,9 +482,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # shellcheck disable=SC2086 # { set -f; IFS=,; set -- $battery_vbar_palette; unset IFS; set +f; } # palette_style=$1 -# [ x"$palette_style" = x"gradient" ] && \ +# [ "$palette_style" = "gradient" ] && \ # palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ +# [ "$palette_style" = "heat" ] && \ # palette="233 234 235 237 239 241 243 245 247 144 143 142 184 214 208 202 196" # # palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') @@ -649,7 +649,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # username=$(_username "$pane_pid" "$pane_tty" false) # -# [ x"$username" = x"root" ] && echo "$root" +# [ "$username" = "root" ] && echo "$root" # } # # _uptime() { @@ -753,19 +753,19 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # _apply_24b() { # tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-auto} # tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} -# if [ x"$tmux_conf_24b_colour" = x"auto" ]; then +# if [ "$tmux_conf_24b_colour" = "auto" ]; then # case "$COLORTERM" in # truecolor|24bit) # apply_24b=true # ;; # esac -# if [ x"$apply_24b" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then +# if [ "$apply_24b" = "" ] && [ "$(tput colors)" = "16777216" ]; then # apply_24b=true # fi # elif _is_true "$tmux_conf_24b_colour"; then # apply_24b=true # fi -# if [ x"$apply_24b" = x"true" ]; then +# if [ "$apply_24b" = "true" ]; then # case "$TERM" in # screen-*|tmux-*) # ;; @@ -987,26 +987,26 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} # tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} # -# if [ x"$tmux_conf_theme_window_status_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bg" = x"default" ]; then +# if [ "$tmux_conf_theme_window_status_bg" = "$tmux_conf_theme_status_bg" ] || [ "$tmux_conf_theme_window_status_bg" = "default" ]; then # spacer='' # spacer_current=' ' # else # spacer=' ' # spacer_current=' ' # fi -# if [ x"$tmux_conf_theme_window_status_last_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_last_bg" = x"default" ] ; then +# if [ "$tmux_conf_theme_window_status_last_bg" = "$tmux_conf_theme_status_bg" ] || [ "$tmux_conf_theme_window_status_last_bg" = "default" ] ; then # spacer_last='' # else # spacer_last=' ' # fi -# if [ x"$tmux_conf_theme_window_status_activity_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_activity_bg" = x"default" ] ; then +# if [ "$tmux_conf_theme_window_status_activity_bg" = "$tmux_conf_theme_status_bg" ] || [ "$tmux_conf_theme_window_status_activity_bg" = "default" ] ; then # spacer_activity='' # spacer_last_activity="$spacer_last" # else # spacer_activity=' ' # spacer_last_activity=' ' # fi -# if [ x"$tmux_conf_theme_window_status_bell_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bell_bg" = x"default" ] ; then +# if [ "$tmux_conf_theme_window_status_bell_bg" = "$tmux_conf_theme_status_bg" ] || [ "$tmux_conf_theme_window_status_bell_bg" = "default" ] ; then # spacer_bell='' # spacer_last_bell="$spacer_last" # spacer_activity_bell="$spacer_activity" @@ -1018,7 +1018,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # spacer_last_activity_bell=' ' # fi # spacer="#{?window_last_flag,#{?window_activity_flag,#{?window_bell_flag,$spacer_last_activity_bell,$spacer_last_activity},#{?window_bell_flag,$spacer_last_bell,$spacer_last}},#{?window_activity_flag,#{?window_bell_flag,$spacer_activity_bell,$spacer_activity},#{?window_bell_flag,$spacer_bell,$spacer}}}" -# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then +# if [ "$(tmux show -g -v status-justify)" = "right" ]; then # if [ -z "$tmux_conf_theme_right_separator_main" ]; then # window_status_separator=' ' # else @@ -1404,7 +1404,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # # -- custom variables ------------------------------------------------------ # -# if [ -f "$TMUX_CONF_LOCAL" ] && [ x"$(cut -c3- "$TMUX_CONF_LOCAL" | sh 2>/dev/null -s printf probe)" = x"probe" ]; then +# if [ -f "$TMUX_CONF_LOCAL" ] && [ "$(cut -c3- "$TMUX_CONF_LOCAL" | sh 2>/dev/null -s printf probe)" = "probe" ]; then # replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*(?:#.*)?\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- \"\\\$TMUX_CONF_LOCAL\" | sh -s \1\\1)%g; !p' "$TMUX_CONF_LOCAL") # status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") # status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") @@ -1436,7 +1436,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux display 'Done uninstalling tpm and plugins...' # fi # else -# if [ x"$(command tmux display -p '#{pid} #{version} #{socket_path}')" = x"$($TMUX_PROGRAM display -p '#{pid} #{version} #{socket_path}')" ]; then +# if [ "$(command tmux display -p '#{pid} #{version} #{socket_path}')" = "$($TMUX_PROGRAM display -p '#{pid} #{version} #{socket_path}')" ]; then # if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then # tpm_plugins=$(cat << EOF | tr ' ' '\n' | awk '/^\s*$/ {next;}; !seen[$0]++ { gsub(/^[ \t]+/,"",$0); gsub(/[ \t]+$/,"",$0); print $0 }' # $(awk '/^[ \t]*set(-option)?.*[ \t]@plugin[ \t]/ { gsub(/'\''/, ""); gsub(/'\"'/, ""); print $NF }' "$TMUX_CONF_LOCAL" 2>/dev/null) @@ -1453,14 +1453,14 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux display 'Updating tpm and plugins...' # (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) # fi -# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then +# if [ "$install_tpm" = "true" ] || [ "$update_tpm" = "true" ]; then # perl -0777 -p -i -e 's/git clone(?!\s+--depth\s+1)/git clone --depth 1/g # ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" # perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" # perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" # tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # fi -# if [ x"$update_tpm" = x"true" ]; then +# if [ "$update_tpm" = "true" ]; then # { # echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ # "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ @@ -1470,7 +1470,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ # tmux display 'Done updating tpm and plugins...' # } || tmux display 'Failed updating tpm and plugins...' -# elif [ x"$install_tpm" = x"true" ]; then +# elif [ "$install_tpm" = "true" ]; then # { # echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ # "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 From 5f54ee985284727ac6a6d317fda9c010bce27962 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 142/155] implemented poor man's pkill (2) disabled SC2009 SC2009 (info): Consider using pgrep instead of grepping ps output --- .tmux.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/.tmux.conf b/.tmux.conf index 57dc334..97329b0 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -246,6 +246,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # } # ;; # *) +# # shellcheck disable=SC2009 # _pkillf() { # while IFS= read -r pid; do # kill "$pid" || true From 9941420c6d9b48cd08d47a2aa871acfbf49e7a44 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 5 Mar 2023 17:26:21 +0100 Subject: [PATCH 143/155] added a way to mark set/bind/unbind commands as important in ~/.tmux.conf.local (2) --- .tmux.conf.local | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf.local b/.tmux.conf.local index 51d93ab..8b2fc7c 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -362,7 +362,7 @@ tmux_conf_copy_to_os_clipboard=false # bind C-a send-prefix # if you don't want Oh my tmux! to alter a binding, use #!important -# bind v new-window -c #{pane_current_path} #!important +# bind c new-window -c '#{pane_current_path}' #!important # move status line to top #set -g status-position top From 96b36d4bbe586390f71267257815cb4398e4d108 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 6 Mar 2023 09:14:34 +0100 Subject: [PATCH 144/155] added support for configuration files in the following locations: (2), fixes #630 - ~/.tmux.conf and ~/.tmux.conf.local - $XDG_CONFIG_HOME/tmux/tmux.conf and $XDG_CONFIG_HOME/tmux/tmux.conf.local - ~/.config/tmux/tmux.conf and ~/.config/tmux/tmux.conf.local fixed TMUX_PLUGIN_MANAGER_PATH when installed in ~ also made TMUX_PLUGIN_MANAGER_PATH available in the environment of the first created pane --- .tmux.conf | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 97329b0..cd065a4 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1426,7 +1426,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux_conf_update_plugins_on_reload="$3" # tmux_conf_uninstall_plugins_on_reload="$4" # -# TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-$(dirname "$TMUX_CONF")/plugins} +# if [ -z "$TMUX_PLUGIN_MANAGER_PATH" ]; then +# return 255 +# fi # mkdir -p "$TMUX_PLUGIN_MANAGER_PATH" # # tpm_plugins=$(tmux show -gvq '@tpm_plugins' 2>/dev/null) @@ -1459,7 +1461,6 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" # perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" # perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" -# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # fi # if [ "$update_tpm" = "true" ]; then # { @@ -1502,7 +1503,19 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux_conf_update_plugins_on_launch=${tmux_conf_update_plugins_on_launch:-true} # tmux_conf_update_plugins_on_reload=${tmux_conf_update_plugins_on_reload:-true} # tmux_conf_uninstall_plugins_on_reload=${tmux_conf_uninstall_plugins_on_reload:-true} -# tmux run -b "cut -c3- '$TMUX_CONF' | sh -s __apply_plugins '$window_active' '$tmux_conf_update_plugins_on_launch' '$tmux_conf_update_plugins_on_reload' '$tmux_conf_uninstall_plugins_on_reload'" +# +# tpm_plugins=$(tmux show -gvq '@tpm_plugins' 2>/dev/null) +# if [ -n "$(tmux show -gv '@plugin' 2>/dev/null)" ] || [ -n "$tpm_plugins" ]; then +# if [ -z "$TMUX_PLUGIN_MANAGER_PATH" ]; then +# if [ "$(dirname "$TMUX_CONF")" = "$HOME" ]; then +# TMUX_PLUGIN_MANAGER_PATH="$HOME/.tmux/plugins" +# else +# TMUX_PLUGIN_MANAGER_PATH="$(dirname "$TMUX_CONF")/plugins" +# fi +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" +# fi +# tmux run -b "cut -c3- '$TMUX_CONF' | sh -s __apply_plugins '$window_active' '$tmux_conf_update_plugins_on_launch' '$tmux_conf_update_plugins_on_reload' '$tmux_conf_uninstall_plugins_on_reload'" +# fi # } # # _apply_important() { From a989554fbc124ec428089819f5ca81ddd500c584 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 6 Mar 2023 14:40:45 +0100 Subject: [PATCH 145/155] added support for configuration files in the following locations: (3), fixes #631 - ~/.tmux.conf and ~/.tmux.conf.local - $XDG_CONFIG_HOME/tmux/tmux.conf and $XDG_CONFIG_HOME/tmux/tmux.conf.local - ~/.config/tmux/tmux.conf and ~/.config/tmux/tmux.conf.local Oh my tmux! now relies on setting @tpm_plugins so as to not impose its opinions on TPM and its way of discovering sourced tmux configuration tiles do not unset '@tpm_plugins' once initial setup is done as it prevents the update plugins binding from working --- .tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index cd065a4..d141711 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1492,9 +1492,9 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # fi # # if [ "$_tmux_version" -gt 260 ]; then -# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' \; set -gu '@tpm_plugins' +# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' # else -# tmux set -g '@tpm-install' '' \; set -g '@tpm-update' '' \; set -g '@tpm-clean' '' \; set -g '@plugin' '' \; set -g '@tpm_plugins' '' +# tmux set -g '@tpm-install' '' \; set -g '@tpm-update' '' \; set -g '@tpm-clean' '' \; set -g '@plugin' '' # fi # fi # } From 79430acd853f03f3aa8cbfe2d3009544b1b4b2d3 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 31 Mar 2023 20:38:04 +0200 Subject: [PATCH 146/155] added (back) window bell and window zoomed flags, resolves #628 --- .tmux.conf | 4 ++-- .tmux.conf.local | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index d141711..ee20a9f 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -969,12 +969,12 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} # tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} # tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} -# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} +# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-'#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}'} # # tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-$tmux_conf_theme_colour_1} # tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} # tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} -# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} +# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-'#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}'} # # tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} # tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} diff --git a/.tmux.conf.local b/.tmux.conf.local index 8b2fc7c..979a94d 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -169,9 +169,9 @@ tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3" tmux_conf_theme_window_status_bg="$tmux_conf_theme_colour_1" tmux_conf_theme_window_status_attr="none" -tmux_conf_theme_window_status_format="#I #W" -#tmux_conf_theme_window_status_format="#{circled_window_index} #W" -#tmux_conf_theme_window_status_format="#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" +tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" +#tmux_conf_theme_window_status_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" +#tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" # window current status style # - built-in variables are: @@ -186,9 +186,9 @@ tmux_conf_theme_window_status_format="#I #W" tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1" tmux_conf_theme_window_status_current_bg="$tmux_conf_theme_colour_4" tmux_conf_theme_window_status_current_attr="bold" -tmux_conf_theme_window_status_current_format="#I #W" -#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W" -#tmux_conf_theme_window_status_current_format="#I #W#{?window_zoomed_flag,🔍,}" +tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" +#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" +#tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" # window activity status style tmux_conf_theme_window_status_activity_fg="default" From 55d47e9c15cc5ff9e2f13826ae873d9b329f453d Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 1 Apr 2023 09:55:28 +0200 Subject: [PATCH 147/155] added support for connecting to the same host when creating a new window from a pane running an SSH session, resolves #632 see tmux_conf_new_window_reconnect_ssh also fixed toggling tmux_conf_xxx_reconnect_ssh back and forth --- .tmux.conf | 69 +++++++++++++++++++++++++++++++++++++++--------- .tmux.conf.local | 21 ++++++++++----- 2 files changed, 71 insertions(+), 19 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ee20a9f..f7bd315 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -701,6 +701,33 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # esac # } # +# _new_window_ssh() { +# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} +# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} +# shift 2 +# +# pane_info=$(_pane_info "$pane_pid" "$pane_tty") +# command=${pane_info#*:} +# command=${command#*:} +# +# case "$command" in +# *mosh-client*) +# # shellcheck disable=SC2046 +# tmux new-window "$@" mosh $(echo "$command" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/') +# ;; +# *ssh*) +# # shellcheck disable=SC2046 +# tmux new-window "$@" $(echo "$command" | sed -e 's/;/\\;/g') +# ;; +# *) +# tmux new-window "$@" +# esac +# } +# +# _new_window() { +# _new_window_ssh "$@" +# } +# # _split_window_ssh() { # pane_pid=${1:-$(tmux display -p '#{pane_pid}')} # pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} @@ -786,34 +813,50 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # output of list-keys can be truncated # perl -p -i -e "s/'#\{\?window_zoomed_flag,Unzoom,Zoom\}' 'z' \{resize-pane -$/'#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}\"/g" "$cfg" # -# tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} +# tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-true} # if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then # perl -p -i -e " +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_new_window\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^\n\1]*?)(?:\s+-c\s+((?:\\\\{1,3}\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*?)\1/run-shell \1cut -c3- \2 | sh -s _new_window #\{pane_pid\} #\{b:pane_tty\}\3\5\1/g +# ; +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+.+?\s+\|\s+sh\s+-s\s+_new_window\s+#\{pane_pid\}\s+#\{b:pane_tty\}(\s+.+?)?\1/new-window\2/g +# ; # s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g" \ # "$cfg" # fi # +# perl -p -i -e " +# s,\bnew-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?,run-shell 'cut -c3- \"$TMUX_CONF\" | sh -s _new_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1',g if /\bnew-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ +# "$cfg" +# +# tmux_conf_new_window_reconnect_ssh=${tmux_conf_new_window_reconnect_ssh:-false} +# if ! _is_disabled "$tmux_conf_new_window_reconnect_ssh" && _is_true "$tmux_conf_new_window_reconnect_ssh"; then +# perl -p -i -e "s,\bnew-window\b([^;}\n\"]*),run-shell 'cut -c3- \"$TMUX_CONF\" | sh -s _new_window #\{pane_pid\} #\{b:pane_tty\}\1',g" "$cfg" +# fi +# +# tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} +# if ! _is_disabled "$tmux_conf_new_window_retain_current_path" && _is_true "$tmux_conf_new_window_retain_current_path"; then +# perl -p -i -e " +# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ +# ; +# s/\bnew-window\b/new-window -c '#{pane_current_path}'\1/g +# ; +# s/\brun-shell\b\s+'cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_new_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- \1 | sh -s _new_window\2 #\{pane_pid\} #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\3'/g if /\bdisplay-menu\b/ +# ; +# s/\brun-shell\b\s+'cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_new_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- \1 | sh -s _new_window\2 #\{pane_pid\} #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\3'/g" \ +# "$cfg" +# fi + # tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} # if ! _is_disabled "$tmux_conf_new_pane_retain_current_path"; then # perl -p -i -e " -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- \2 | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\3\5\1/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+(.+?)\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^\n\1]*?)(?:\s+-c\s+((?:\\\\{1,3}\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*?)\1/run-shell \1cut -c3- \2 | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\3\5\1/g # ; -# s/\brun-shell\b(?:\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+(?:.+?)\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\2)(.*?)\1/split-window\3/g +# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+.+?\s+\|\s+sh\s+-s\s+_split_window\s+#\{pane_pid\}\s+#\{b:pane_tty\}(\s+.+?)?\1/split-window\2/g # ; # s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ # "$cfg" # fi # -# if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then -# if _is_true "$tmux_conf_new_window_retain_current_path"; then -# perl -p -i -e " -# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ -# ; -# s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ -# "$cfg" -# fi -# fi -# # perl -p -i -e " # s,\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?,run-shell 'cut -c3- \"$TMUX_CONF\" | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1',g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ # "$cfg" diff --git a/.tmux.conf.local b/.tmux.conf.local index 979a94d..01fa27a 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -5,6 +5,15 @@ # Copyright 2012— Gregory Pakosz (@gpakosz). +# -- session creation ---------------------------------------------------------- + +# prompt for session name when creating a new session, possible values are: +# - true +# - false (default) +# - disabled (do not modify new-session bindings) +tmux_conf_new_session_prompt=false + + # -- windows & pane creation --------------------------------------------------- # new window retains current path, possible values are: @@ -13,6 +22,12 @@ # - disabled (do not modify new-window bindings) tmux_conf_new_window_retain_current_path=false +# new window tries to reconnect ssh sessions, possible values are: +# - true +# - false (default) +# - disabled (do not modify new-window bindings) +tmux_conf_new_window_reconnect_ssh=false + # new pane retains current path, possible values are: # - true (default) # - false @@ -25,12 +40,6 @@ tmux_conf_new_pane_retain_current_path=true # - disabled (do not modify split-window bindings) tmux_conf_new_pane_reconnect_ssh=false -# prompt for session name when creating a new session, possible values are: -# - true -# - false (default) -# - disabled (do not modify new-session bindings) -tmux_conf_new_session_prompt=false - # -- display ------------------------------------------------------------------- From 7706ab724f3811479a358c6f9ea6aeb6decece5f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sat, 1 Apr 2023 17:28:47 +0200 Subject: [PATCH 148/155] when lsof cannot be found in PATH, search in /usr/local/bin, /usr/bin, /bin, /usr/sbin and /sbin this helps using tmux as a default shell on macOS where PATH is initially set to /usr/bin:/bin resolves #587 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index f7bd315..b29aa34 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -145,7 +145,7 @@ bind P choose-buffer # choose which buffer to paste from # -- 8< ------------------------------------------------------------------------ %if #{==:#{TMUX_PROGRAM},} - run 'TMUX_PROGRAM="$(lsof -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"' + run 'TMUX_PROGRAM="$(LSOF=$(PATH="$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command -v lsof); $LSOF -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"' %endif %if #{==:#{TMUX_SOCKET},} run '"$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_SOCKET "#{socket_path}"' From 2a6145d74fde0b5c48b06dd734a7ce1d86218b2d Mon Sep 17 00:00:00 2001 From: sylph1o Date: Wed, 5 Apr 2023 16:40:56 +0200 Subject: [PATCH 149/155] we don't rely on TPM to scan configuration files anymore... as such we need to populate the @tpm_plugins outside of the internet connectivity check , otherwise TPM loads no plugin at all fixes #637 --- .tmux.conf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index b29aa34..05392c9 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1483,13 +1483,12 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # fi # else # if [ "$(command tmux display -p '#{pid} #{version} #{socket_path}')" = "$($TMUX_PROGRAM display -p '#{pid} #{version} #{socket_path}')" ]; then -# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then -# tpm_plugins=$(cat << EOF | tr ' ' '\n' | awk '/^\s*$/ {next;}; !seen[$0]++ { gsub(/^[ \t]+/,"",$0); gsub(/[ \t]+$/,"",$0); print $0 }' -# $(awk '/^[ \t]*set(-option)?.*[ \t]@plugin[ \t]/ { gsub(/'\''/, ""); gsub(/'\"'/, ""); print $NF }' "$TMUX_CONF_LOCAL" 2>/dev/null) +# tpm_plugins=$(cat << EOF | tr ' ' '\n' | awk '/^\s*$/ {next;}; !seen[$0]++ { gsub(/^[ \t]+/,"",$0); gsub(/[ \t]+$/,"",$0); print $0 }' +# $(awk '/^[ \t]*set(-option)?.*[ \t]@plugin[ \t]/ { gsub(/'\''/, ""); gsub(/'\"'/, ""); print $NF }' "$TMUX_CONF_LOCAL" 2>/dev/null) # EOF -# ) -# tmux set -g '@tpm_plugins' "$tpm_plugins" -# +# ) +# tmux set -g '@tpm_plugins' "$tpm_plugins" +# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then # if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then # install_tpm=true # tmux display 'Installing tpm and plugins...' From fd1bbb56148101f4b286ddafd98f2ac2dcd69cd8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Wed, 12 Apr 2023 22:02:16 +0200 Subject: [PATCH 150/155] fixed TMUX_PROGRAM introspection on FreeBSD, fixes #639 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 05392c9..760cf96 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -145,7 +145,7 @@ bind P choose-buffer # choose which buffer to paste from # -- 8< ------------------------------------------------------------------------ %if #{==:#{TMUX_PROGRAM},} - run 'TMUX_PROGRAM="$(LSOF=$(PATH="$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command -v lsof); $LSOF -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"' + run 'TMUX_PROGRAM="$(LSOF=$(PATH="$PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" command -v lsof); $LSOF -b -w -a -d txt -p #{pid} -Fn 2>/dev/null | perl -n -e "if (s/^n((?:.(?!dylib$|so$))+)$/\1/g && s/(?:\s+\([^\s]+?\))?$//g) { print; exit } } exit 1; {" || readlink "/proc/#{pid}/exe" 2>/dev/null || printf tmux)"; "$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_PROGRAM "$TMUX_PROGRAM"' %endif %if #{==:#{TMUX_SOCKET},} run '"$TMUX_PROGRAM" -S #{socket_path} set-environment -g TMUX_SOCKET "#{socket_path}"' From b7877487530b8cc72b70d7b7c3826d36f949595f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 6 Nov 2023 10:29:35 +0100 Subject: [PATCH 151/155] fixed +e not working when EDITOR is not defined in sh, fixes #679 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 760cf96..ac65105 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -28,7 +28,7 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "#{TMUX_CONF_LOCAL}" sh -c '${EDITOR:-vim} "$TMUX_CONF_LOCAL" && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"' +bind e new-window -n "#{TMUX_CONF_LOCAL}" -e "EDITOR=$EDITOR" sh -c '${EDITOR:-vim} "$TMUX_CONF_LOCAL" && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"' # reload configuration bind r run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"' \; display "#{TMUX_CONF} sourced" From 42adc354b68ffe210264f6522e47d60cfc1e3e9f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 27 Nov 2023 18:13:04 +0100 Subject: [PATCH 152/155] pass -c ":set syntax=tmux" when opening $EDITOR with +e, resolves #667 --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index ac65105..a614439 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -28,7 +28,7 @@ setw -q -g utf8 on set -g history-limit 5000 # boost history # edit configuration -bind e new-window -n "#{TMUX_CONF_LOCAL}" -e "EDITOR=$EDITOR" sh -c '${EDITOR:-vim} "$TMUX_CONF_LOCAL" && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"' +bind e new-window -n "#{TMUX_CONF_LOCAL}" -e "EDITOR=$EDITOR" sh -c 'case "${EDITOR:-vim}" in *vim) ${EDITOR:-vim} -c ":set syntax=tmux" "$TMUX_CONF_LOCAL";; *) "$EDITOR" "$TMUX_CONF_LOCAL";; esac && "$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF" \; display "$TMUX_CONF_LOCAL sourced"' # reload configuration bind r run '"$TMUX_PROGRAM" ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} source "$TMUX_CONF"' \; display "#{TMUX_CONF} sourced" From 78c8d0483db770367e0b3cab9836c898770a5aa7 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 3 Dec 2023 21:43:09 +0100 Subject: [PATCH 153/155] added FreeBSD support to _battery_info(), resolves #680 --- .tmux.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.tmux.conf b/.tmux.conf index a614439..921d5fc 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -358,6 +358,11 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # count=$((count + 1)) # done # ;; +# *FreeBSD*) +# discharging=$(sysctl -n 'hw.acpi.battery.state' | grep -q 1 && echo "true" || echo "false") +# charge=$(awk -v charge="$(sysctl -n 'hw.acpi.battery.life')" 'BEGIN { print charge / 100 }') +# count=1 +# ;; # esac # if [ "$count" -ne 0 ]; then # charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') From 1b88bf2127ab5260e82acaf8a51e857727b50dae Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 8 Dec 2023 16:12:31 +0100 Subject: [PATCH 154/155] fixed username detection on OpenBSD --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 921d5fc..28477fb 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -555,7 +555,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # ' # ;; # *) -# ps -t "$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' +# ps -t "/dev/$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' # ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { # user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } From 5354501a5bff69457b37132c1959e9063b1c1714 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 14 Dec 2023 14:01:31 +0100 Subject: [PATCH 155/155] made _pane_info() aware of teleport's 'tsh proxy ssh' command, fixes #690 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 28477fb..5e4b49a 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -525,7 +525,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # case "$_uname_s" in # *CYGWIN*) # ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$pane_tty" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ && $5 == tty { +# ((/ssh/ && !/-W/ && !/tsh proxy ssh/) || !/ssh/) && !/tee/ && $5 == tty { # user[$1] = $6; if (!child[$2]) child[$2] = $1 # } # END { @@ -542,7 +542,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # ;; # *Linux*) # ps -t "$pane_tty" --sort=lstart -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { +# ((/ssh/ && !/-W/ && !/tsh proxy ssh/) || !/ssh/) && !/tee/ { # user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } # END { @@ -556,7 +556,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # ;; # *) # ps -t "/dev/$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { +# ((/ssh/ && !/-W/ && !/tsh proxy ssh/) || !/ssh/) && !/tee/ { # user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) # } # END {