From 67b1d38a87e40c09c75fd49a728e80b5f7bdc505 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Tue, 13 Jul 2021 18:40:54 +0200 Subject: [PATCH 01/84] 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 8e7b05aef..9a5434a07 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 02/84] 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 9a5434a07..8e7b05aef 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 03/84] 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 8e7b05aef..18df78277 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) -# 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 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 -# "$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 057b2b20b..c440076cd 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 04/84] 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 18df78277..060f1346b 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 05/84] 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 060f1346b..82d7313a7 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 c440076cd..515bc3132 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 c007560b2..84263e5cc 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 06/84] 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 82d7313a7..7a56936c7 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 07/84] 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 7a56936c7..6f2537e4a 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 08/84] 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 6f2537e4a..5506d528a 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 09/84] 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 | 153 +++++++++++++++++++++++++---------------------------- 1 file changed, 72 insertions(+), 81 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 5506d528a..c4af41f08 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] -# -# 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 -# } -# } +# pid = pane_pid +# 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 +# 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] -# -# if (!(i in child) && j != 1) -# { -# print i":"user[i]":"command[i] -# exit -# } -# } +# pid = pane_pid +# while (child[pid]) +# pid = child[pid] +# +# 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 -# -# tty_info=$(_tty_info "$tty") -# command=${tty_info#*:} +# 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 +# +# 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 10/84] 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 c4af41f08..97f6c23e6 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 11/84] 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 97f6c23e6..e098c812b 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 12/84] 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 e098c812b..3cda41ba7 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 13/84] 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 3cda41ba7..49236fb28 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 14/84] 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 49236fb28..39214b318 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 15/84] 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 39214b318..6c49bbaa3 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 16/84] 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 6c49bbaa3..32b7b78c8 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 17/84] 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 32b7b78c8..164836bdb 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 18/84] 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 164836bdb..67421bc5a 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 19/84] 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 67421bc5a..6c8ed27c9 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 20/84] 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 6c8ed27c9..7affd1106 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 21/84] 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 7affd1106..3e3bdca0b 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 22/84] 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 3e3bdca0b..48f01175e 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 23/84] 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 48f01175e..5a6b808f1 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 24/84] 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 5a6b808f1..62447e5ba 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 25/84] 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 62447e5ba..691efd5a7 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 26/84] 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 691efd5a7..4c7866daa 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 27/84] 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 4c7866daa..e2e4d766e 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 28/84] 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 e2e4d766e..cc8ecd0d7 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 29/84] 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 cc8ecd0d7..a9b1be8be 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 30/84] 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 a9b1be8be..15d70bf8e 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 31/84] 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 15d70bf8e..3b65e4653 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 32/84] 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 3b65e4653..3046fb3ba 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 33/84] 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 3046fb3ba..961e6b3c6 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 515bc3132..45725ae81 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 34/84] 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 961e6b3c6..420ddee3d 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 35/84] 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 | 68 ++++++++++++++++++++++++++++++------------------ .tmux.conf.local | 7 ++++- 2 files changed, 48 insertions(+), 27 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 420ddee3d..53d0bc605 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([^;}\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/\bnew-window\b(?!\s+(?:-|}))/{$&}/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+#\{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/\bnew-window\b/new-window -c '#\{pane_current_path\}'/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 45725ae81..fb77d0407 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 36/84] 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 fb77d0407..76065ec78 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 37/84] 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 53d0bc605..6f6ff7c52 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 76065ec78..4bc6c8397 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 38/84] 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 6f6ff7c52..1e20460b8 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 39/84] 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 1e20460b8..a23bdad46 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 40/84] 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 a23bdad46..fbaa9b2b2 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 41/84] 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 fbaa9b2b2..b71bbae3d 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 42/84] 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 b71bbae3d..b8c30c9a1 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 4bc6c8397..7fc8a09b4 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 84263e5cc..dd79decb2 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 43/84] 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 b8c30c9a1..77b3b51c6 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 44/84] 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 77b3b51c6..ee587dd4c 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 45/84] 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 ee587dd4c..6c0641564 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 7fc8a09b4..559a685a8 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 dd79decb2..2fd51a88c 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 46/84] 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 6c0641564..8b1be592c 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 47/84] 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 559a685a8..46bda2704 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 48/84] added tmux_conf_theme that controles whether theming is enabled or disabled, resolves #536 --- .tmux.conf | 725 ++++++++++++++++++++++++----------------------- .tmux.conf.local | 20 +- 2 files changed, 389 insertions(+), 356 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 8b1be592c..2ccad39c7 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -821,168 +821,365 @@ 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 ------------------------------------------------------- +# +# 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} +# 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 # -# # -- 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} -# 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_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} # -# 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 --------------------------------------------------------- # -# # -- 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_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_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_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_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_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=${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_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_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_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_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_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_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_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_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} # -# 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=' ' +# 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 -# 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=' ' +# 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 -# window_status_separator='' +# 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" +# +# # -- 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_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_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} +# +# # -- 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} +# +# 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") +# +# 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) +# { +# 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 +# { +# 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 # -# tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ +# # -- 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' \ @@ -991,7 +1188,8 @@ run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' # -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 \ +# +# 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' \ @@ -1001,188 +1199,31 @@ 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') # -# # -- 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_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_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} -# -# # -- 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} -# -# 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) -# { -# 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 -# { -# 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 -# }') -# fi -# -# status_left="$status_left " -# -# # -- 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]#{?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_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 +# 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') # -# # -- variables +# 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") +# +# 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 46bda2704..51d93ab63 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 49/84] 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 2ccad39c7..0971fefbb 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 50/84] 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 0971fefbb..a81f736d0 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 51/84] 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 a81f736d0..6de9c248b 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 52/84] 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 6de9c248b..bf97827a8 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 53/84] 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 bf97827a8..c1ce1dff8 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 54/84] 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 c1ce1dff8..3538f569e 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 55/84] 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 3538f569e..72e92413d 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 56/84] 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 72e92413d..836c063af 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 2fd51a88c..92f5e4c57 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. + +❗️ 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 `.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 `.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' ``` -### 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`. +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 -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 57/84] 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 836c063af..c1fa09c22 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 58/84] 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 c1fa09c22..64b6087b3 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 59/84] 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 64b6087b3..12e0ee9af 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 60/84] 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 12e0ee9af..3646eb7c9 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 61/84] 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 3646eb7c9..12a5841ae 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 62/84] 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 12a5841ae..ee021f5e9 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 63/84] 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 ee021f5e9..57dc334db 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 64/84] 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 57dc334db..97329b0fa 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 65/84] 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 51d93ab63..8b2fc7c99 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 66/84] 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 97329b0fa..cd065a4cd 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 67/84] 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 cd065a4cd..d141711e2 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 68/84] 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 d141711e2..ee20a9f90 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 8b2fc7c99..979a94d8b 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 69/84] 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 ee20a9f90..f7bd315da 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 979a94d8b..01fa27a8c 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 70/84] 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 f7bd315da..b29aa34c2 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 71/84] 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 b29aa34c2..05392c9ff 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 72/84] 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 05392c9ff..760cf968b 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 73/84] 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 760cf968b..ac651059e 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 74/84] 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 ac651059e..a61443965 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 75/84] 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 a61443965..921d5fc7d 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 76/84] fixed username detection on OpenBSD --- .tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tmux.conf b/.tmux.conf index 921d5fc7d..28477fba2 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 77/84] 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 28477fba2..5e4b49aa7 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 { From dd9502a09a9d5a4c97c271670e7ca7cb2171ab7f Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 18 Dec 2023 23:22:35 +0100 Subject: [PATCH 78/84] added support for urlscan, preferred over urlview which is now unmaintained, resolves #695 --- .tmux.conf | 5 ++++- README.md | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 5e4b49aa7..f283d9ba8 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1637,7 +1637,10 @@ 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_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'" +# command='false' +# command -v urlview > /dev/null 2>&1 && command='urlview' +# command -v urlscan > /dev/null 2>&1 && command='urlscan --compact --dedupe' +# tmux split-window "'$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} show-buffer -b 'urlview-$1' | $command || true; '$TMUX_PROGRAM' ${TMUX_SOCKET:+-S "$TMUX_SOCKET"} delete-buffer -b 'urlview-$1'" # } # # _fpp() { diff --git a/README.md b/README.md index 92f5e4c57..ea6843bc6 100644 --- a/README.md +++ b/README.md @@ -131,13 +131,14 @@ Features 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 + - [Urlscan][] (preferred) or [Urlview][] integration if available [Powerline]: https://github.com/Lokaltog/powerline [maximize-pane]: http://pempek.net/articles/2013/04/14/maximizing-tmux-pane-new-window/ [reattach-to-user-namespace]: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard [Facebook PathPicker]: https://facebook.github.io/PathPicker/ [Urlview]: https://packages.debian.org/stable/misc/urlview +[Urlscan]: https://github.com/firecat53/urlscan The "maximize any pane to a new window with ` +`" feature is different from builtin `resize-pane -Z` as it allows you to further split a maximized @@ -188,8 +189,8 @@ This configuration uses the following bindings: - ` m` toggles mouse mode on or off - - ` U` launches Urlview (if available) - - ` F` launches Facebook PathPicker (if available) + - ` U` launches Urlscan (preferred) or Urlview, if available + - ` F` launches Facebook PathPicker, if available - ` Enter` enters copy-mode - ` b` lists the paste-buffers From 1469d465f8ca754fc6bb0313a4886aa1c31535bc Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 12 Jan 2024 13:50:41 +0100 Subject: [PATCH 79/84] added support for defining TPM plugins with 'set -g @tpm_plugins', resolves #706 --- .tmux.conf | 32 ++++++++++++++++---------------- .tmux.conf.local | 3 +++ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index f283d9ba8..ca40bd8ef 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1469,10 +1469,11 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # } # # __apply_plugins() { -# 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="$1" +# window_active="$2" +# tmux_conf_update_plugins_on_launch="$3" +# tmux_conf_update_plugins_on_reload="$4" +# tmux_conf_uninstall_plugins_on_reload="$5" # # if [ -z "$TMUX_PLUGIN_MANAGER_PATH" ]; then # return 255 @@ -1483,15 +1484,18 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # 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...' +# tmux set-environment -gu TMUX_PLUGIN_MANAGER_PATH # rm -rf "$TMUX_PLUGIN_MANAGER_PATH" # tmux display 'Done uninstalling tpm and plugins...' # fi # else # if [ "$(command tmux display -p '#{pid} #{version} #{socket_path}')" = "$($TMUX_PROGRAM display -p '#{pid} #{version} #{socket_path}')" ]; then # tpm_plugins=$(cat << EOF | tr ' ' '\n' | awk '/^\s*$/ {next;}; !seen[$0]++ { gsub(/^[ \t]+/,"",$0); gsub(/[ \t]+$/,"",$0); print $0 }' +# "$tpm_plugins" # $(awk '/^[ \t]*set(-option)?.*[ \t]@plugin[ \t]/ { gsub(/'\''/, ""); gsub(/'\"'/, ""); print $NF }' "$TMUX_CONF_LOCAL" 2>/dev/null) # EOF # ) +# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" # 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 @@ -1539,9 +1543,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' +# 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' '' +# tmux set -g '@tpm-install' '' \; set -g '@tpm-update' '' \; set -g '@tpm-clean' '' \; set -g '@plugin' '' \; set-gu '@tpm_plugins' '' # fi # fi # } @@ -1551,18 +1555,14 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # 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} # -# 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" +# 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 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 +# tmux run -b "cut -c3- '$TMUX_CONF' | sh -s __apply_plugins '$TMUX_PLUGIN_MANAGER_PATH' '$window_active' '$tmux_conf_update_plugins_on_launch' '$tmux_conf_update_plugins_on_reload' '$tmux_conf_uninstall_plugins_on_reload'" # } # # _apply_important() { diff --git a/.tmux.conf.local b/.tmux.conf.local index 01fa27a8c..88daa2694 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -429,6 +429,8 @@ tmux_conf_uninstall_plugins_on_reload=true # 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 # @@ -445,3 +447,4 @@ tmux_conf_uninstall_plugins_on_reload=true # # "$@" # # /!\ do not remove the previous line +# # do not write below this line From 7e0023346565559f76d68f5f9934b7640fb98165 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Fri, 12 Jan 2024 10:21:38 +0100 Subject: [PATCH 80/84] fixed #{battery_bar} auto width, also resolves #447 --- .tmux.conf | 397 ++++++++++++++++++++++++++++++----------------------- README.md | 3 +- 2 files changed, 227 insertions(+), 173 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index ca40bd8ef..281199870 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -258,6 +258,143 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # esac # fi # +# _bar() { +# bar_palette=$1 +# bar_symbol_empty=$2 +# bar_symbol_full=$3 +# bar_length=$4 +# bar_value=$5 +# +# if [ "$bar_length" = "auto" ]; then +# columns=${6:-$(tmux -q display -p '#{client_width}' 2> /dev/null || echo 80)} +# if [ "$columns" -ge 160 ]; then +# bar_length=12 +# elif [ "$columns" -ge 130 ]; then +# bar_length=10 +# elif [ "$columns" -ge 120 ]; then +# bar_length=8 +# elif [ "$columns" -ge 100 ]; then +# bar_length=6 +# else +# bar_length=4 +# fi +# fi +# +# if echo "$bar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $bar_palette; unset IFS; set +f; } +# palette_style=$1 +# bg=${2:-none} +# [ "$palette_style" = "gradient" ] && \ +# palette="196 202 208 214 220 226 190 154 118 82 46" +# [ "$palette_style" = "heat" ] && \ +# palette="243 245 247 144 143 142 184 214 208 202 196" +# +# palette=$(echo "$palette" | awk -v n="$bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') +# eval set -- "$palette" +# +# full=$(awk "BEGIN { printf \"%.0f\", ($bar_value) * $bar_length }") +# bar="#[bg=$bg]" +# # shellcheck disable=SC2046 +# [ "$full" -gt 0 ] && \ +# bar="$bar$(printf "#[fg=colour%s]$bar_symbol_full" $(echo "$palette" | cut -d' ' -f1-"$full"))" +# # shellcheck disable=SC2046 +# empty=$((bar_length - full)) +# # shellcheck disable=SC2046 +# [ "$empty" -gt 0 ] && \ +# bar="$bar$(printf "#[fg=colour%s]$bar_symbol_empty" $(echo "$palette" | cut -d' ' -f$((full + 1))-$((full + empty))))" +# eval bar="$bar#[fg=colour\${$((full == 0 ? 1 : full))}]" +# elif echo "$bar_palette" | grep -q -E '^(([#a-z0-9]{7,9}|none),?){3}$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $bar_palette; unset IFS; set +f; } +# full_fg=$1 +# empty_fg=$2 +# bg=$3 +# +# full=$(awk "BEGIN { printf \"%.0f\", ($bar_value) * $bar_length }") +# [ "$bg" != "none" ] && \ +# bar="#[bg=$bg]" +# #shellcheck disable=SC2046 +# [ "$full" -gt 0 ] && \ +# bar="$bar#[fg=$full_fg]$(printf "%0.s$bar_symbol_full" $(seq 1 "$full"))" +# empty=$((bar_length - full)) +# #shellcheck disable=SC2046 +# [ "$empty" -gt 0 ] && \ +# bar="$bar#[fg=$empty_fg]$(printf "%0.s$bar_symbol_empty" $(seq 1 "$empty"))" && \ +# bar="$bar#[fg=$empty_fg]" +# fi +# +# printf '%s' "$bar" +# } +# +# _hbar() { +# hbar_palette=$1 +# hbar_value=$2 +# +# if echo "$hbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $hbar_palette; unset IFS; set +f; } +# palette_style=$1 +# [ "$palette_style" = "gradient" ] && \ +# palette="196 202 208 214 220 226 190 154 118 82 46" +# [ "$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=8 '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') +# eval set -- "$palette" +# +# full=$(awk "BEGIN { printf \"%.0f\", ($hbar_value) * 8 }") +# eval hbar_fg="colour\${$((full == 0 ? 1 : full))}" +# elif echo "$hbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $hbar_palette; unset IFS; set +f; } +# +# # shellcheck disable=SC2046 +# eval $(awk "BEGIN { printf \"hbar_fg=$%d\", (($hbar_value) - 0.001) * $# + 1 }") +# fi +# +# eval set -- "▏ ▎ ▍ ▌ ▋ ▊ ▉ █" +# # shellcheck disable=SC2046 +# eval $(awk "BEGIN { printf \"hbar_symbol=$%d\", ($hbar_value) * ($# - 1) + 1 }") +# hbar="#[bg=none]#[fg=${hbar_fg?}]${hbar_symbol?}" +# +# printf '%s' "$hbar" +# } +# +# _vbar() { +# vbar_palette=$1 +# vbar_value=$2 +# +# if echo "$vbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $vbar_palette; unset IFS; set +f; } +# palette_style=$1 +# [ "$palette_style" = "gradient" ] && \ +# palette="196 202 208 214 220 226 190 154 118 82 46" +# [ "$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=8 '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') +# eval set -- "$palette" +# +# full=$(awk "BEGIN { printf \"%.0f\", ($vbar_value) * 8 }") +# eval vbar_fg="colour\${$((full == 0 ? 1 : full))}" +# elif echo "$vbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then +# # shellcheck disable=SC2086 +# { set -f; IFS=,; set -- $vbar_palette; unset IFS; set +f; } +# +# # shellcheck disable=SC2046 +# eval $(awk "BEGIN { printf \"vbar_fg=$%d\", (($vbar_value) - 0.001) * $# + 1 }") +# fi +# +# eval set -- "▁ ▂ ▃ ▄ ▅ ▆ ▇ █" +# # shellcheck disable=SC2046 +# eval $(awk "BEGIN { printf \"vbar_symbol=$%d\", ($vbar_value) * ($# - 1) + 1 }") +# vbar="#[bg=none]#[fg=${vbar_fg?}]${vbar_symbol?}" +# +# printf '%s' "$vbar" +# } +# # _maximize_pane() { # current_session=${1:-$(tmux display -p '#{session_name}')} # current_pane=${2:-$(tmux display -p '#{pane_id}')} @@ -301,16 +438,15 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # } # # _battery_info() { -# count=0 -# charge=0 +# battery_count=0 +# battery_charge=0 # 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]+%' || echo "0%") -# charge=$(awk -v charge="$charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') -# count=$((count + 1)) +# battery_charge=$(awk -v charge="$battery_charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') +# battery_count=$((battery_count + 1)) # done << EOF # $(pmset -g batt | grep 'InternalBattery') # EOF @@ -320,18 +456,17 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # [ -z "$batpath" ] && continue # grep -i -q device "$batpath/scope" 2> /dev/null && continue # -# 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 ? 100 : capacity) / 100 }') +# battery_charge=$(awk -v charge="$battery_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" # if [ -r "$bat_energy_full" ] && [ -r "$bat_energy_now" ]; then -# charge=$(awk -v charge="$charge" -v energy_now="$(cat "$bat_energy_now")" -v energy_full="$(cat "$bat_energy_full")" 'BEGIN { print charge + energy_now / energy_full }') +# battery_charge=$(awk -v charge="$battery_charge" -v energy_now="$(cat "$bat_energy_now")" -v energy_full="$(cat "$bat_energy_full")" 'BEGIN { print charge + energy_now / energy_full }') # fi # fi -# count=$((count + 1)) +# battery_count=$((battery_count + 1)) # done << EOF # $(find /sys/class/power_supply -maxdepth 1 -iname '*bat*') # EOF @@ -339,9 +474,8 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # *CYGWIN*|*MSYS*|*MINGW*) # while IFS= read -r line; do # [ -z "$line" ] && continue -# 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)) +# battery_charge=$(printf '%s' "$line" | awk -v charge="$battery_charge" '{ print charge + $2 / 100 }') +# battery_count=$((battery_count + 1)) # done << EOF # $(wmic path Win32_Battery get BatteryStatus, EstimatedChargeRemaining 2> /dev/null | tr -d '\r' | tail -n +2 || true) # EOF @@ -349,36 +483,81 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # *OpenBSD*) # for batid in 0 1 2; do # sysctl -n "hw.sensors.acpibat$batid.raw0" 2>&1 | grep -q 'not found' && continue -# 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 }') +# battery_charge=$(awk -v charge="$battery_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 -# charge=$(awk -v charge="$charge" -v remaining="$(sysctl -n hw.sensors.acpibat$batid.watthour3 | cut -d' ' -f1)" -v full="$(sysctl -n hw.sensors.acpibat$batid.watthour0 | cut -d' ' -f1)" 'BEGIN { print charge + remaining / full }') +# battery_charge=$(awk -v charge="$battery_charge" -v remaining="$(sysctl -n hw.sensors.acpibat$batid.watthour3 | cut -d' ' -f1)" -v full="$(sysctl -n hw.sensors.acpibat$batid.watthour0 | cut -d' ' -f1)" 'BEGIN { print charge + remaining / full }') # fi -# count=$((count + 1)) +# battery_count=$((battery_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 +# battery_charge=$(awk -v charge="$(sysctl -n 'hw.acpi.battery.life')" 'BEGIN { print charge / 100 }') +# battery_count=1 # ;; # esac -# if [ "$count" -ne 0 ]; then -# charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') +# if [ "$battery_count" -ne 0 ]; then +# battery_charge=$(awk -v charge="$battery_charge" -v count="$battery_count" 'BEGIN { print charge / count }') +# fi +# +# if [ "$battery_charge" = 0 ]; then +# tmux set -ug '@battery_percentage' \;\ +# set -ug '@battery_charge' +# else +# battery_percentage="$(awk "BEGIN { printf \"%.0f%%\", ($battery_charge) * 100 }")" +# +# tmux set -g '@battery_percentage' "$battery_percentage" \;\ +# set -g '@battery_charge' "$battery_charge" # fi # } # # _battery_status() { -# _battery_info -# if [ "$charge" = 0 ]; then +# battery_status_charging=$1 +# battery_status_discharging=$2 +# +# case "$_uname_s" in +# *Darwin*) +# while IFS= read -r line; do +# [ -z "$line" ] && continue +# battery_discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") +# done << EOF +# $(pmset -g batt | grep 'InternalBattery') +# EOF +# ;; +# *Linux*) +# while IFS= read -r batpath; do +# [ -z "$batpath" ] && continue +# grep -i -q device "$batpath/scope" 2> /dev/null && continue +# +# battery_discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") +# done << EOF +# $(find /sys/class/power_supply -maxdepth 1 -iname '*bat*') +# EOF +# ;; +# *CYGWIN*|*MSYS*|*MINGW*) +# while IFS= read -r line; do +# [ -z "$line" ] && continue +# battery_discharging=$(printf '%s' "$line" | awk '{ s = ($1 == 1) ? "true" : "false"; print s }') +# done << EOF +# $(wmic path Win32_Battery get BatteryStatus, EstimatedChargeRemaining 2> /dev/null | tr -d '\r' | tail -n +2 || true) +# EOF +# ;; +# *OpenBSD*) +# for batid in 0 1 2; do +# battery_discharging=$(sysctl -n "hw.sensors.acpibat$batid.raw0" | grep -q 1 && echo "true" || echo "false") +# done +# ;; +# *FreeBSD*) +# battery_discharging=$(sysctl -n 'hw.acpi.battery.state' | grep -q 1 && echo "true" || echo "false") +# ;; +# esac +# +# if [ -z "$battery_discharging" ]; then # tmux set -ug '@battery_status' # return # fi # -# battery_status_charging=$1 -# battery_status_discharging=$2 -# if [ "$discharging" = "true" ]; then +# if [ "$battery_discharging" = "true" ]; then # battery_status="$battery_status_discharging" # else # battery_status="$battery_status_charging" @@ -387,138 +566,6 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # 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' -# return -# fi -# -# 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 -# -# 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 -# else -# battery_bar_length=5 -# fi -# 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; } -# palette_style=$1 -# battery_bg=${2:-none} -# [ "$palette_style" = "gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ "$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))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# battery_bar="#[bg=$battery_bg]" -# # shellcheck disable=SC2046 -# [ "$full" -gt 0 ] && \ -# battery_bar="$battery_bar$(printf "#[fg=colour%s]$battery_bar_symbol_full" $(echo "$palette" | cut -d' ' -f1-"$full"))" -# # shellcheck disable=SC2046 -# empty=$((battery_bar_length - full)) -# # shellcheck disable=SC2046 -# [ "$empty" -gt 0 ] && \ -# battery_bar="$battery_bar$(printf "#[fg=colour%s]$battery_bar_symbol_empty" $(echo "$palette" | cut -d' ' -f$((full + 1))-$((full + empty))))" -# eval battery_bar="$battery_bar#[fg=colour\${$((full == 0 ? 1 : full))}]" -# elif echo "$battery_bar_palette" | grep -q -E '^(([#a-z0-9]{7,9}|none),?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_bar_palette; unset IFS; set +f; } -# battery_full_fg=$1 -# battery_empty_fg=$2 -# battery_bg=$3 -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# [ "$battery_bg" != "none" ] && \ -# battery_bar="#[bg=$battery_bg]" -# #shellcheck disable=SC2046 -# [ "$full" -gt 0 ] && \ -# battery_bar="$battery_bar#[fg=$battery_full_fg]$(printf "%0.s$battery_bar_symbol_full" $(seq 1 "$full"))" -# empty=$((battery_bar_length - full)) -# #shellcheck disable=SC2046 -# [ "$empty" -gt 0 ] && \ -# battery_bar="$battery_bar#[fg=$battery_empty_fg]$(printf "%0.s$battery_bar_symbol_empty" $(seq 1 "$empty"))" && \ -# battery_bar="$battery_bar#[fg=$battery_empty_fg]" -# fi -# -# if echo "$battery_hbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_hbar_palette; unset IFS; set +f; } -# palette_style=$1 -# [ "$palette_style" = "gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ "$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))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# eval battery_hbar_fg="colour\${$((full == 0 ? 1 : full))}" -# elif echo "$battery_hbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_hbar_palette; unset IFS; set +f; } -# -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_hbar_fg=$%d\", (($charge) - 0.001) * $# + 1 }") -# fi -# -# eval set -- "▏ ▎ ▍ ▌ ▋ ▊ ▉ █" -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_hbar_symbol=$%d\", ($charge) * ($# - 1) + 1 }") -# battery_hbar="#[fg=${battery_hbar_fg?}]${battery_hbar_symbol?}" -# -# if echo "$battery_vbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_vbar_palette; unset IFS; set +f; } -# palette_style=$1 -# [ "$palette_style" = "gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ "$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))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# eval battery_vbar_fg="colour\${$((full == 0 ? 1 : full))}" -# elif echo "$battery_vbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_vbar_palette; unset IFS; set +f; } -# -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_vbar_fg=$%d\", (($charge) - 0.001) * $# + 1 }") -# fi -# -# eval set -- "▁ ▂ ▃ ▄ ▅ ▆ ▇ █" -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_vbar_symbol=$%d\", ($charge) * ($# - 1) + 1 }") -# battery_vbar="#[fg=${battery_vbar_fg?}]${battery_vbar_symbol?}" -# -# battery_percentage="$(awk "BEGIN { printf \"%.0f%%\", ($charge) * 100 }")" -# -# 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" -# } -# # _pane_info() { # pane_pid="$1" # pane_tty="${2##/dev/}" @@ -1345,33 +1392,39 @@ 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" # _battery_info -# if [ "$charge" != 0 ]; then +# if [ "$battery_charge" != 0 ]; then # case "$status_left $status_right" in # *'#{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' \ -# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ +# -e 's%#\{\?battery_bar%#\{?@battery_percentage%g' \ +# -e 's%#\{\?battery_hbar%#\{?@battery_percentage%g' \ +# -e 's%#\{\?battery_vbar%#\{?@battery_percentage%g' \ +# -e "s%#{battery_bar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ +# -e "s%#{battery_hbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ +# -e "s%#{battery_vbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%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') +# -e 's%#\{\?battery_bar%#\{?@battery_percentage%g' \ +# -e 's%#\{\?battery_hbar%#\{?@battery_percentage%g' \ +# -e 's%#\{\?battery_vbar%#\{?@battery_percentage%g' \ +# -e "s%#{battery_bar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ +# -e "s%#{battery_hbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ +# -e "s%#{battery_vbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%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" # 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_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" +# 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_info; 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" +# 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_info; 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" +# status_right="#(echo; while :; do nice cut -c3- '$TMUX_CONF' | sh -s _battery_info; 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_info)$status_right" # fi # ;; # esac diff --git a/README.md b/README.md index ea6843bc6..95744d1ad 100644 --- a/README.md +++ b/README.md @@ -271,9 +271,10 @@ your own preferences. This configuration supports the following builtin variables: - `#{battery_bar}`: horizontal battery charge bar + - `#{battery_hbar}`: 1 character wide, horizontal battery charge bar + - `#{battery_vbar}`: 1 character wide, vertical battery charge bar - `#{battery_percentage}`: battery percentage - `#{battery_status}`: is battery charging or discharging? - - `#{battery_vbar}`: vertical battery charge bar - `#{circled_session_name}`: circled session number, up to 20 - `#{hostname}`: SSH/Mosh aware hostname information - `#{hostname_ssh}`: SSH/Mosh aware hostname information, blank when not From eca5fb621b2ddbbad53f96c2edc0d3a0b82faf18 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 21 Jan 2024 21:09:12 +0100 Subject: [PATCH 81/84] removed support for tmux < 2.6, resolves #698 --- .tmux.conf | 19 ++----------------- .tmux.conf.local | 2 +- README.md | 28 ++-------------------------- 3 files changed, 5 insertions(+), 44 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 281199870..e4028dddf 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -129,7 +129,6 @@ if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 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_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_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"' @@ -946,7 +945,6 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # ! 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' # [ -c /dev/clipboard ] && command='cat > \/dev\/clipboard' # @@ -1649,25 +1647,12 @@ 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 -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.4+" \; set -u display-time \; run "sleep 3" \; kill-server' +# if [ "$_tmux_version" -lt 260 ]; then +# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.6+" \; set -u display-time \; run "sleep 3" \; kill-server' # return # fi # fi # -# # see https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard -# if command -v reattach-to-user-namespace > /dev/null 2>&1; then -# default_shell="$(tmux show -gv default-shell)" -# case "$default_shell" in -# *fish) -# tmux set -g default-command "reattach-to-user-namespace -l $default_shell" -# ;; -# *sh) -# tmux set -g default-command "exec $default_shell... 2> /dev/null & reattach-to-user-namespace -l $default_shell" -# ;; -# esac -# fi -# # case "$_uname_s" in # *CYGWIN*|*MSYS*) # # prevent Cygwin and MSYS2 from cd-ing into home directory when evaluating /etc/profile diff --git a/.tmux.conf.local b/.tmux.conf.local index 88daa2694..52766a362 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -344,12 +344,12 @@ tmux_conf_theme_clock_style="24" # - true # - false (default) # - disabled -# on macOS, this requires installing reattach-to-user-namespace, see README.md # on Linux, this requires xsel, xclip or wl-copy tmux_conf_copy_to_os_clipboard=false # -- user customizations ------------------------------------------------------- + # this is the place to override or undo settings # increase history size diff --git a/README.md b/README.md index 95744d1ad..6ed622c74 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Installation Requirements: - - tmux **`>= 2.4`** running inside Linux, Mac, OpenBSD, Cygwin or WSL + - tmux **`>= 2.6`** running inside Linux, Mac, OpenBSD, Cygwin or WSL - awk, perl and sed - outside of tmux, `$TERM` must be set to `xterm-256color` @@ -120,22 +120,18 @@ Features - [maximize any pane to a new window with ` +`][maximize-pane] - SSH/Mosh aware username and hostname status line information - mouse mode toggle with ` m` - - automatic usage of [`reattach-to-user-namespace`][reattach-to-user-namespace] - if available - laptop battery status line information - uptime status line information - 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`, `xclip`, or `wl-copy` on Linux) + - copy to OS clipboard (needs `xsel`, `xclip`, or `wl-copy` on Linux) - support for 4-digit hexadecimal Unicode characters - [Facebook PathPicker][] integration if available - [Urlscan][] (preferred) or [Urlview][] integration if available [Powerline]: https://github.com/Lokaltog/powerline [maximize-pane]: http://pempek.net/articles/2013/04/14/maximizing-tmux-pane-new-window/ -[reattach-to-user-namespace]: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard [Facebook PathPicker]: https://facebook.github.io/PathPicker/ [Urlview]: https://packages.debian.org/stable/misc/urlview [Urlscan]: https://github.com/firecat53/urlscan @@ -338,26 +334,6 @@ See the sample `.local` customization file 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` -utility][reattach-to-user-namespace] that makes `pbcopy` and `pbpaste` work -again within tmux. - -To install `reattach-to-user-namespace`, use either [MacPorts][] or -[Homebrew][]: - - $ port install tmux-pasteboard - -or - - $ brew install reattach-to-user-namespace - -Once installed, `reattach-to-usernamespace` will be automatically detected. - -[MacPorts]: http://www.macports.org/ -[Homebrew]: http://brew.sh/ - ### Using the configuration under Cygwin within Mintty **I don't recommend running this configuration with Cygwin anymore. Forking From b70400e1ee7a75d6a1b463394da149967de0d491 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Sun, 21 Jan 2024 21:31:47 +0100 Subject: [PATCH 82/84] added the #{wan_ip_v4} and #{wan_ip_v6} custom variable examples, resolves #281 --- .tmux.conf.local | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.tmux.conf.local b/.tmux.conf.local index 52766a362..918f6b0a4 100644 --- a/.tmux.conf.local +++ b/.tmux.conf.local @@ -445,6 +445,16 @@ tmux_conf_uninstall_plugins_on_reload=true # ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' # } # +# wan_ip_v4() { +# curl -f -s -m 2 -4 ifconfig.me +# sleep 300 # sleep for 5 minutes, throttle network requests whatever the value of status-interval +# } +# +# wan_ip_v6() { +# curl -f -s -m 2 -6 ifconfig.me +# sleep 300 # sleep for 5 minutes, throttle network requests whatever the value of status-interval +# } +# # "$@" # # /!\ do not remove the previous line # # do not write below this line From 123ad5c10921f56993aa190beb280828cf4de6c7 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Mon, 22 Jan 2024 10:09:49 +0100 Subject: [PATCH 83/84] fixed #{battery_bar} auto width (2), fixes #712 --- .tmux.conf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index e4028dddf..152d87e1e 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -173,7 +173,7 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # if ! printf '' | sed -E 's///' 2>/dev/null; then # if printf '' | sed -r 's///' 2>/dev/null; then -# sed () { +# sed() { # n=$#; while [ "$n" -gt 0 ]; do arg=$1; shift; case $arg in -E*) arg=-r${arg#-E};; esac; set -- "$@" "$arg"; n=$(( n - 1 )); done # command sed "$@" # } @@ -1399,18 +1399,18 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # -e 's%#\{\?battery_bar%#\{?@battery_percentage%g' \ # -e 's%#\{\?battery_hbar%#\{?@battery_percentage%g' \ # -e 's%#\{\?battery_vbar%#\{?@battery_percentage%g' \ -# -e "s%#{battery_bar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ -# -e "s%#{battery_hbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ -# -e "s%#{battery_vbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ -# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ -# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') +# -e "s%#\{battery_bar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ +# -e "s%#\{battery_hbar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ +# -e "s%#\{battery_vbar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_vbar_palette' '#{@battery_charge}'')%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%#\{?@battery_percentage%g' \ # -e 's%#\{\?battery_hbar%#\{?@battery_percentage%g' \ # -e 's%#\{\?battery_vbar%#\{?@battery_percentage%g' \ -# -e "s%#{battery_bar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ -# -e "s%#{battery_hbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ -# -e "s%#{battery_vbar}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ +# -e "s%#\{battery_bar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _bar '$tmux_conf_battery_bar_palette' '$tmux_conf_battery_bar_symbol_empty' '$tmux_conf_battery_bar_symbol_full' '$tmux_conf_battery_bar_length' '#{@battery_charge}' '#{client_width}')%g" \ +# -e "s%#\{battery_hbar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _hbar '$tmux_conf_battery_hbar_palette' '#{@battery_charge}'')%g" \ +# -e "s%#\{battery_vbar\}%#(nice cut -c3- '$TMUX_CONF' | sh -s _vbar '$tmux_conf_battery_vbar_palette' '#{@battery_charge}'')%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" From c318d0834ffaa200ec959d812225da5aa191bee8 Mon Sep 17 00:00:00 2001 From: Gregory Pakosz Date: Thu, 25 Jan 2024 11:39:52 +0100 Subject: [PATCH 84/84] fixed _apply_bindings() not supporting - copy-end-of-line - copy-end-of-line-and-cancel - copy-pipe-no-clear - copy-selection-no-clear fixes #666 --- .tmux.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 152d87e1e..ab848b3c2 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -950,12 +950,12 @@ run 'cut -c3- "$TMUX_CONF" | sh -s _apply_configuration' # # if [ -n "$command" ]; 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" +# perl -p -i -e "s/(?!.*?$command)\bcopy-(?:selection|pipe)(-end-of-line|-and-cancel|-end-of-line-and-cancel|-no-clear)?\b/copy-pipe\1 '$command'/g" "$cfg" # else # if [ "$_tmux_version" -ge 320 ]; then -# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-pipe\1/g" "$cfg" +# perl -p -i -e "s/\bcopy-pipe(-end-of-line|-and-cancel|end-of-line-and-cancel|-no-clear)?\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" +# perl -p -i -e "s/\bcopy-pipe(-end-of-line|-and-cancel|end-of-line-and-cancel|-no-clear)?\b\s+(\"|')?$command\2?/copy-selection\1/g" "$cfg" # fi # fi # fi