diff --git a/bindings/update_plugins b/bindings/update_plugins index ce3df46..8b3ca63 100755 --- a/bindings/update_plugins +++ b/bindings/update_plugins @@ -11,7 +11,7 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPTS_DIR="$CURRENT_DIR/../scripts" HELPERS_DIR="$SCRIPTS_DIR/helpers" -export TMUX_CMD_PATH=$(realpath "/proc/$(tmux display -p '#{pid}')/exe" 2> /dev/null || echo "tmux" | sed -z '$ s/\n$//') +source "$SCRIPTS_DIR/tmux_cmd_path.sh" source "$HELPERS_DIR/plugin_functions.sh" source "$HELPERS_DIR/tmux_echo_functions.sh" diff --git a/scripts/check_tmux_version.sh b/scripts/check_tmux_version.sh index 77901b4..0774d7f 100755 --- a/scripts/check_tmux_version.sh +++ b/scripts/check_tmux_version.sh @@ -3,7 +3,8 @@ VERSION="$1" UNSUPPORTED_MSG="$2" -export TMUX_CMD_PATH=$(realpath "/proc/$(tmux display -p '#{pid}')/exe" 2> /dev/null || echo "tmux" | sed -z '$ s/\n$//') +source "$SCRIPTS_DIR/tmux_cmd_path.sh" + get_tmux_option() { local option=$1 diff --git a/scripts/helpers/tmux_echo_functions.sh b/scripts/helpers/tmux_echo_functions.sh index 7a6ef0a..989b876 100644 --- a/scripts/helpers/tmux_echo_functions.sh +++ b/scripts/helpers/tmux_echo_functions.sh @@ -1,10 +1,12 @@ +source "$SCRIPTS_DIR/tmux_cmd_path.sh" + _has_emacs_mode_keys() { - $(tmux show -gw mode-keys | grep -q emacs) + $($TMUX_CMD_PATH show -gw mode-keys | grep -q emacs) } tmux_echo() { local message="$1" - tmux run-shell "echo '$message'" + $TMUX_CMD_PATH run-shell "echo '$message'" } echo_ok() { diff --git a/scripts/tmux_cmd_path.sh b/scripts/tmux_cmd_path.sh new file mode 100755 index 0000000..60fd2e4 --- /dev/null +++ b/scripts/tmux_cmd_path.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Written by michaellee8 in Nov 2020 for +# https://github.com/tmux-plugins/tpm/issues/189 to prevent problems caused by +# tmux version mismatch between client and server. This script is +# licensed in public domain. + +# Try to get the process ID of the running tmux server, +# would be empty if not found +TMUX_SERVER_PID=$(ps -eo pid=,comm= | grep 'tmux: server' | awk '{ print $1; }') + +if [[ -n "$TMUX_SERVER_PID" ]]; then + TMUX_CMD_PATH=$(realpath "/proc/$TMUX_SERVER_PID/exe" 2> /dev/null || echo "tmux" | sed -z '$ s/\n$//') +else + TMUX_CMD_PATH='tmux' +fi + +export TMUX_CMD_PATH diff --git a/tpm b/tpm index a96b4b0..e8d79d5 100755 --- a/tpm +++ b/tpm @@ -4,11 +4,7 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" BINDINGS_DIR="$CURRENT_DIR/bindings" SCRIPTS_DIR="$CURRENT_DIR/scripts" -# Try to find the executable path of the currently running -# tmux server, fallback to just "tmux" if not found or no -# procfs aviliable (non-linux). -export TMUX_CMD_PATH=$(realpath "/proc/$(tmux display -p '#{pid}')/exe" 2> /dev/null || echo "tmux" | sed -z '$ s/\n$//') -echo "tmux executable used: $TMUX_CMD_PATH" +source "$SCRIPTS_DIR/tmux_cmd_path.sh" source "$SCRIPTS_DIR/variables.sh"