diff --git a/CHANGELOG.md b/CHANGELOG.md index 31e9eb0..63676e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### master - saving a new session does not remove the previous one - make the directory where sessions are stored configurable +- support only Tmux v1.9 or greater ### v0.0.1, 2014-08-26 - started a project diff --git a/scripts/check_tmux_version.sh b/scripts/check_tmux_version.sh new file mode 100755 index 0000000..b0aedec --- /dev/null +++ b/scripts/check_tmux_version.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +VERSION="$1" +UNSUPPORTED_MSG="$2" + +get_tmux_option() { + local option=$1 + local default_value=$2 + local option_value=$(tmux show-option -gqv "$option") + if [ -z "$option_value" ]; then + echo "$default_value" + else + echo "$option_value" + fi +} + +# Ensures a message is displayed for 5 seconds in tmux prompt. +# Does not override the 'display-time' tmux option. +display_message() { + local message="$1" + + # display_duration defaults to 5 seconds, if not passed as an argument + if [ "$#" -eq 2 ]; then + local display_duration="$2" + else + local display_duration="5000" + fi + + # saves user-set 'display-time' option + local saved_display_time=$(get_tmux_option "display-time" "750") + + # sets message display time to 5 seconds + tmux set-option -gq display-time "$display_duration" + + # displays message + tmux display-message "$message" + + # restores original 'display-time' value + tmux set-option -gq display-time "$saved_display_time" +} + +# this is used to get "clean" integer version number. Examples: +# `tmux 1.9` => `19` +# `1.9a` => `19` +get_digits_from_string() { + local string="$1" + local only_digits="$(echo "$string" | tr -dC '[:digit:]')" + echo "$only_digits" +} + +tmux_version_int() { + local tmux_version_string=$(tmux -V) + echo "$(get_digits_from_string "$tmux_version_string")" +} + +unsupported_version_message() { + if [ -n "$UNSUPPORTED_MSG" ]; then + echo "$UNSUPPORTED_MSG" + else + echo "Error, Tmux version unsupported! Please install Tmux version $VERSION or greater!" + fi +} + +exit_if_unsupported_version() { + local current_version="$1" + local supported_version="$2" + if [ "$current_version" -lt "$supported_version" ]; then + display_message "$(unsupported_version_message)" + exit 1 + fi +} + +main() { + local supported_version_int="$(get_digits_from_string "$VERSION")" + local current_version_int="$(tmux_version_int)" + exit_if_unsupported_version "$current_version_int" "$supported_version_int" +} +main diff --git a/scripts/helpers.sh b/scripts/helpers.sh index 9875a3f..e546b3b 100644 --- a/scripts/helpers.sh +++ b/scripts/helpers.sh @@ -2,6 +2,8 @@ default_sessions_dir="$HOME/.tmux/sessions" sessions_dir_option="@sessions-dir" +SUPPORTED_VERSION="1.9" + # helper functions get_tmux_option() { local option="$1" @@ -39,6 +41,13 @@ display_message() { tmux set-option -gq display-time "$saved_display_time" } + +supported_tmux_version_ok() { + $CURRENT_DIR/check_tmux_version.sh "$SUPPORTED_VERSION" +} + +# path helpers + sessions_dir() { echo $(get_tmux_option "$sessions_dir_option" "$default_sessions_dir") } diff --git a/scripts/session_restorer.sh b/scripts/session_restorer.sh index bb594f1..8be4ffe 100755 --- a/scripts/session_restorer.sh +++ b/scripts/session_restorer.sh @@ -75,6 +75,8 @@ restore_all_sessions() { } main() { - restore_all_sessions + if supported_tmux_version_ok; then + restore_all_sessions + fi } main diff --git a/scripts/session_saver.sh b/scripts/session_saver.sh index 0a6c299..c3fa865 100755 --- a/scripts/session_saver.sh +++ b/scripts/session_saver.sh @@ -30,6 +30,8 @@ save_all_sessions() { } main() { - save_all_sessions + if supported_tmux_version_ok; then + save_all_sessions + fi } main