From bd095e739d3706ce98f074b776ff80efbb0493f4 Mon Sep 17 00:00:00 2001 From: Bruno Sutic Date: Fri, 29 Aug 2014 18:59:14 +0200 Subject: [PATCH] Change plugin name and all the variables --- CHANGELOG.md | 1 + CONTRIBUTING.md | 2 +- README.md | 35 +++++++++++---------- session_saver.tmux => resurrect.tmux | 4 +-- scripts/helpers.sh | 17 +++++----- scripts/{session_restorer.sh => restore.sh} | 24 +++++++------- scripts/{session_saver.sh => save.sh} | 19 +++++------ scripts/spinner_helpers.sh | 2 +- scripts/variables.sh | 12 +++---- strategies/vim_session.sh | 4 +-- 10 files changed, 61 insertions(+), 59 deletions(-) rename session_saver.tmux => resurrect.tmux (81%) rename scripts/{session_restorer.sh => restore.sh} (91%) rename scripts/{session_saver.sh => save.sh} (85%) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff44c7a..bb45d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ### master +- change plugin name to `tmux-resurrect`. Change all the variable names. ### v0.3.0, 2014-08-29 - bugfix: when top is running the pane `$PWD` can't be saved. This was causing diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0fb7042..444098c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Code contributions are welcome! If you find a bug please report it in the issues. When reporting a bug please attach: -- a file symlinked to `~/.tmux/sessions/last`. +- a file symlinked to `~/.tmux/resurrect/last`. - your `.tmux.conf` - if you're getting an error paste it to a [gist](https://gist.github.com/) and link it in the issue diff --git a/README.md b/README.md index b015939..817c3ea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Tmux Session Saver +# Tmux Resurrect -Persists `tmux` environment across system restarts. +Restore `tmux` environment after a system restart. Tmux is great, except when you have to restart the computer. You loose all the running programs, working directories, pane layouts etc. @@ -8,8 +8,9 @@ There are helpful management tools out there, but they require initial configuration and continuous updates as your workflow evolves or you start new projects. -`tmux-session-saver` saves all the little details from tmux environment so it -can be easily restored after system restart. No configuration is required. +`tmux-resurrect` saves all the little details from tmux environment so it +can be completely restored after a system restart. No configuration is required. +You should feel like you never quit tmux. It even (optionally) [restores vim sessions](#restoring-vim-sessions)! @@ -41,9 +42,9 @@ Requirements / dependencies: `tmux 1.9` or higher, `pgrep` Add plugin to the list of TPM plugins in `.tmux.conf`: - set -g @tpm_plugins " \ - tmux-plugins/tpm \ - tmux-plugins/tmux-session-saver \ + set -g @tpm_plugins " \ + tmux-plugins/tpm \ + tmux-plugins/tmux-resurrect \ " Hit `prefix + I` to fetch the plugin and source it. You should now be able to @@ -53,11 +54,11 @@ use the plugin. Clone the repo: - $ git clone https://github.com/tmux-plugins/tmux-session-saver ~/clone/path + $ git clone https://github.com/tmux-plugins/tmux-resurrect ~/clone/path Add this line to the bottom of `.tmux.conf`: - run-shell ~/clone/path/session_saver.tmux + run-shell ~/clone/path/resurrect.tmux Reload TMUX environment: @@ -76,32 +77,32 @@ Open a github issue if you think some other program should be on the default lis - Restore additional programs with the setting in `.tmux.conf`: - set -g @session-saver-processes 'ssh psql mysql sqlite3' + set -g @resurrect-processes 'ssh psql mysql sqlite3' - Programs with arguments should be double quoted: - set -g @session-saver-processes 'some_program "git log"' + set -g @resurrect-processes 'some_program "git log"' - Start with tilde to restore a program whose process contains target name: - set -g @session-saver-processes 'some_program "~rails server"' + set -g @resurrect-processes 'some_program "~rails server"' - Don't restore any programs: - set -g @session-saver-processes 'false' + set -g @resurrect-processes 'false' - Restore **all** programs (be careful with this!): - set -g @session-saver-processes ':all:' + set -g @resurrect-processes ':all:' #### Restoring vim sessions -- save vim sessions - I recommend [tpope/vim-obsession](tpope/vim-obsession) +- save vim sessions. I recommend [tpope/vim-obsession](tpope/vim-obsession). - in `.tmux.conf`: - set -g @session-saver-strategy-vim "session" + set -g @resurrect-strategy-vim "session" -`tmux-session-saver` will now restore vim sessions if `Sessions.vim` file is +`tmux-resurrect` will now restore vim sessions if `Sessions.vim` file is present. ### Reporting bugs and contributing diff --git a/session_saver.tmux b/resurrect.tmux similarity index 81% rename from session_saver.tmux rename to resurrect.tmux index f583701..7bbb38b 100755 --- a/session_saver.tmux +++ b/resurrect.tmux @@ -9,7 +9,7 @@ set_save_bindings() { local key_bindings=$(get_tmux_option "$save_option" "$default_save_key") local key for key in $key_bindings; do - tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/session_saver.sh" + tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/save.sh" done } @@ -17,7 +17,7 @@ set_restore_bindings() { local key_bindings=$(get_tmux_option "$restore_option" "$default_restore_key") local key for key in $key_bindings; do - tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/session_restorer.sh" + tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/restore.sh" done } diff --git a/scripts/helpers.sh b/scripts/helpers.sh index 94ad539..d4e0e24 100644 --- a/scripts/helpers.sh +++ b/scripts/helpers.sh @@ -1,6 +1,5 @@ -# configurable constants -default_sessions_dir="$HOME/.tmux/sessions" -sessions_dir_option="@session-saver-dir" +default_resurrect_dir="$HOME/.tmux/resurrect" +resurrect_dir_option="@resurrect-dir" SUPPORTED_VERSION="1.9" @@ -52,15 +51,15 @@ remove_first_char() { # path helpers -sessions_dir() { - echo $(get_tmux_option "$sessions_dir_option" "$default_sessions_dir") +resurrect_dir() { + echo $(get_tmux_option "$resurrect_dir_option" "$default_resurrect_dir") } -session_path() { +resurrect_file_path() { local timestamp="$(date +"%Y-%m-%dT%H:%M:%S")" - echo "$(sessions_dir)/tmux_session_${timestamp}.txt" + echo "$(resurrect_dir)/tmux_resurrect_${timestamp}.txt" } -last_session_path() { - echo "$(sessions_dir)/last" +last_resurrect_file() { + echo "$(resurrect_dir)/last" } diff --git a/scripts/session_restorer.sh b/scripts/restore.sh similarity index 91% rename from scripts/session_restorer.sh rename to scripts/restore.sh index 6f75e68..8d24181 100755 --- a/scripts/session_restorer.sh +++ b/scripts/restore.sh @@ -8,7 +8,7 @@ source "$CURRENT_DIR/process_restore_helpers.sh" source "$CURRENT_DIR/spinner_helpers.sh" # Global variable. -# Used during the restoration: if a pane already exists from before, it is +# Used during the restore: if a pane already exists from before, it is # saved in the array in this variable. Later, process running in existing pane # is also not restored. That makes the restoration process more idempotent. EXISTING_PANES_VAR="" @@ -21,9 +21,9 @@ is_line_type() { } check_saved_session_exists() { - local saved_session="$(last_session_path)" - if [ ! -f $saved_session ]; then - display_message "Saved tmux session not found!" + local resurrect_file="$(last_resurrect_file)" + if [ ! -f $resurrect_file ]; then + display_message "Tmux resurrect file not found!" return 1 fi } @@ -137,13 +137,13 @@ restore_all_panes() { if is_line_type "pane" "$line"; then restore_pane "$line" fi - done < $(last_session_path) + done < $(last_resurrect_file) } restore_all_pane_processes() { if restore_pane_processes_enabled; then local pane_full_command - awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $11 !~ "^:$" { print $2, $3, $7, $8, $11; }' $(last_session_path) | + awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $11 !~ "^:$" { print $2, $3, $7, $8, $11; }' $(last_resurrect_file) | while IFS=$'\t' read session_name window_number pane_index dir pane_full_command; do dir="$(remove_first_char "$dir")" pane_full_command="$(remove_first_char "$pane_full_command")" @@ -153,14 +153,14 @@ restore_all_pane_processes() { } restore_pane_layout_for_each_window() { - \grep '^window' $(last_session_path) | + \grep '^window' $(last_resurrect_file) | while IFS=$'\t' read line_type session_name window_number window_active window_flags window_layout; do tmux select-layout -t "${session_name}:${window_number}" "$window_layout" done } restore_active_pane_for_each_window() { - awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $9 == 1 { print $2, $3, $7; }' $(last_session_path) | + awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $9 == 1 { print $2, $3, $7; }' $(last_resurrect_file) | while IFS=$'\t' read session_name window_number active_pane; do tmux switch-client -t "${session_name}:${window_number}" tmux select-pane -t "$active_pane" @@ -168,14 +168,14 @@ restore_active_pane_for_each_window() { } restore_zoomed_windows() { - awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $5 ~ /Z/ { print $2, $3; }' $(last_session_path) | + awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $5 ~ /Z/ { print $2, $3; }' $(last_resurrect_file) | while IFS=$'\t' read session_name window_number; do tmux resize-pane -t "${session_name}:${window_number}" -Z done } restore_active_and_alternate_windows() { - awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $5 ~ /[*-]/ { print $2, $4, $3; }' $(last_session_path) | + awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $5 ~ /[*-]/ { print $2, $4, $3; }' $(last_resurrect_file) | sort -u | while IFS=$'\t' read session_name active_window window_number; do tmux switch-client -t "${session_name}:${window_number}" @@ -187,7 +187,7 @@ restore_active_and_alternate_sessions() { if is_line_type "state" "$line"; then restore_state "$line" fi - done < $(last_session_path) + done < $(last_resurrect_file) } main() { @@ -202,7 +202,7 @@ main() { restore_active_and_alternate_windows restore_active_and_alternate_sessions stop_spinner - display_message "Restored all Tmux sessions!" + display_message "Tmux restore complete!" fi } main diff --git a/scripts/session_saver.sh b/scripts/save.sh similarity index 85% rename from scripts/session_saver.sh rename to scripts/save.sh index 5bb06a7..8be8082 100755 --- a/scripts/session_saver.sh +++ b/scripts/save.sh @@ -2,6 +2,7 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "$CURRENT_DIR/scripts/variables.sh" source "$CURRENT_DIR/helpers.sh" pane_format() { @@ -88,19 +89,19 @@ dump_state() { tmux display-message -p "$(state_format)" } -save_all_sessions() { - local session_path="$(session_path)" - mkdir -p "$(sessions_dir)" - dump_panes > $session_path - dump_windows >> $session_path - dump_state >> $session_path - ln -fs "$session_path" "$(last_session_path)" - display_message "Saved all Tmux sessions!" +save_all() { + local resurrect_file_path="$(resurrect_file_path)" + mkdir -p "$(resurrect_dir)" + dump_panes > $resurrect_file_path + dump_windows >> $resurrect_file_path + dump_state >> $resurrect_file_path + ln -fs "$resurrect_file_path" "$(last_resurrect_file)" + display_message "Tmux environment saved!" } main() { if supported_tmux_version_ok; then - save_all_sessions + save_all fi } main diff --git a/scripts/spinner_helpers.sh b/scripts/spinner_helpers.sh index e3a429e..2c04cf9 100644 --- a/scripts/spinner_helpers.sh +++ b/scripts/spinner_helpers.sh @@ -1,5 +1,5 @@ start_spinner() { - $CURRENT_DIR/tmux_spinner.sh "Restoring sessions..." "Restored all Tmux sessions!" & + $CURRENT_DIR/tmux_spinner.sh "Restoring tmux..." "Tmux restore complete!" & export SPINNER_PID=$! } diff --git a/scripts/variables.sh b/scripts/variables.sh index 2df2b1e..c4f4561 100644 --- a/scripts/variables.sh +++ b/scripts/variables.sh @@ -1,12 +1,12 @@ # key bindings default_save_key="M-s" -save_option="@session-saver-save" +save_option="@resurrect-save" default_restore_key="M-r" -restore_option="@session-saver-restore" +restore_option="@resurrect-restore" # default processes that are restored -default_proc_list_option="@session-saver-default-processes" +default_proc_list_option="@resurrect-default-processes" default_proc_list='vi vim emacs man less more tail top htop irssi irb pry "~rails console"' # User defined processes that are restored @@ -15,9 +15,9 @@ default_proc_list='vi vim emacs man less more tail top htop irssi irb pry "~rail # # user defined list of programs that are restored: # 'my_program foo another_program' -restore_processes_option="@session-saver-processes" +restore_processes_option="@resurrect-processes" restore_processes="" # Defines part of the user variable. Example usage: -# set -g @session-saver-strategy-vim "session" -restore_process_strategy_option="@session-saver-strategy-" +# set -g @resurrect-strategy-vim "session" +restore_process_strategy_option="@resurrect-strategy-" diff --git a/strategies/vim_session.sh b/strategies/vim_session.sh index 26bff51..8121344 100755 --- a/strategies/vim_session.sh +++ b/strategies/vim_session.sh @@ -4,7 +4,7 @@ # # Restores a vim session from 'Session.vim' file, if it exists. # If 'Session.vim' does not exist, it falls back to invoking the original -# command (withouth the `-S` flag). +# command (without the `-S` flag). ORIGINAL_COMMAND="$1" DIRECTORY="$2" @@ -21,7 +21,7 @@ main() { if vim_session_file_exists; then echo "vim -S" elif original_command_contains_session_flag; then - # Session file does not exist, yet the orignal vim command contains + # Session file does not exist, yet the original vim command contains # session flag `-S`. This will cause an error, so we're falling back to # starting plain vim. echo "vim"