diff --git a/continuum.tmux b/continuum.tmux index e8d60e3..91ef2ba 100755 --- a/continuum.tmux +++ b/continuum.tmux @@ -1,6 +1,6 @@ #!/usr/bin/env bash -set -x +set +x CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" diff --git a/scripts/continuum_save.sh b/scripts/continuum_save.sh index c85f68a..2b27498 100755 --- a/scripts/continuum_save.sh +++ b/scripts/continuum_save.sh @@ -1,11 +1,25 @@ #!/usr/bin/env bash - +set +x CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "$CURRENT_DIR/helpers.sh" source "$CURRENT_DIR/variables.sh" source "$CURRENT_DIR/shared.sh" +DEBUG=$(get_tmux_option "$debug") + +get_log_path() { + get_tmux_option "$log_path" "$log_path_default" +} + +log_message() { + log_path=$(get_log_path) + if [ "$DEBUG" == "1" ] && [ -n "$log_path" ]; then + message="$@" + echo "$message" >> $log_path + fi +} + supported_tmux_version_ok() { "$CURRENT_DIR/check_tmux_version.sh" "$SUPPORTED_VERSION" } @@ -18,6 +32,14 @@ auto_save_not_disabled() { [ "$(get_interval)" -gt 0 ] } +get_next_run() { + local last_saved_timestamp="$(get_tmux_option "$last_auto_save_option" "0")" + local interval_minutes="$(get_interval)" + local interval_seconds="$((interval_minutes * 60))" + local next_run="$((last_saved_timestamp + $interval_seconds))" + echo $next_run +} + enough_time_since_last_run_passed() { local last_saved_timestamp="$(get_tmux_option "$last_auto_save_option" "0")" local interval_minutes="$(get_interval)" @@ -29,13 +51,29 @@ enough_time_since_last_run_passed() { fetch_and_run_tmux_resurrect_save_script() { local resurrect_save_script_path="$(get_tmux_option "$resurrect_save_path_option" "")" if [ -n "$resurrect_save_script_path" ]; then - "$resurrect_save_script_path" "quiet" >/dev/null 2>&1 & + if [ "$DEBUG" == "2" ]; then + local log_path=$(get_log_path) + log_message "Calling $resurrect_save_script_path" + "$resurrect_save_script_path" >> $log_path 2>&1 & + else + "$resurrect_save_script_path" "quiet" >/dev/null 2>&1 & + fi set_last_save_timestamp fi } main() { + if [ -n "$DEBUG" ]; then + TS_NEXT=$(get_next_run) + TIME_NEXT=$(date -d \@"$TS_NEXT" +"%Y-%m-%d at %H:%M:%S") + MSG="Next save on $TIME_NEXT" + log_message "$(date +'%Y-%m-%d %H:%M:%S'): $MSG" + fi if supported_tmux_version_ok && auto_save_not_disabled && enough_time_since_last_run_passed; then + if [ -n "$DEBUG" ]; then + log_message "Actual run on $(date)" + echo "Saved on $(date +'%Y-%m-%d@%H:%M:%S')" + fi fetch_and_run_tmux_resurrect_save_script fi } diff --git a/scripts/helpers.sh b/scripts/helpers.sh index b64fb36..ad808d2 100644 --- a/scripts/helpers.sh +++ b/scripts/helpers.sh @@ -23,15 +23,18 @@ current_tmux_server_pid() { } all_tmux_processes() { - # ignores `tmux source-file .tmux.conf` command used to reload tmux.conf - ps -Ao "command pid" | - \grep "^tmux" | - \grep -v "^tmux source" + # finds all tmux processes for the current user ignoring the following: + # 1) `tmux source-file .tmux.conf` (used to reload tmux.conf) + # 2) `tmux a` (which shows an additional process) + + ps -u $UID -o "command pid uid" |\ + grep -E '^tmux' |\ + grep -vE '^tmux\s+(a|source)' } number_tmux_processes_except_current_server() { all_tmux_processes | - \grep -v " $(current_tmux_server_pid)$" | + \grep -v " $(current_tmux_server_pid) " | wc -l | sed "s/ //g" } diff --git a/scripts/variables.sh b/scripts/variables.sh index 8d0a057..9eb0d46 100644 --- a/scripts/variables.sh +++ b/scripts/variables.sh @@ -1,5 +1,9 @@ SUPPORTED_VERSION="1.9" +log_path="@continuum-log-path" +log_path_default="${HOME}/tmux-continuum.log" +debug="@continuum-debug" + # these tmux options contain paths to tmux resurrect save and restore scripts resurrect_save_path_option="@resurrect-save-script-path" resurrect_restore_path_option="@resurrect-restore-script-path"