Unverified Commit bd095e73 authored by Bruno Sutic's avatar Bruno Sutic
Browse files

Change plugin name and all the variables

parent e2e55c6f
# 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
......
......@@ -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
# 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
......
......@@ -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
}
......
# 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"
}
......@@ -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
......@@ -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
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=$!
}
......
# 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-"
......@@ -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"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment