From e0a5636ea2792a347f7cea436ff1e5acd7a3f1dd Mon Sep 17 00:00:00 2001 From: maybeetree Date: Sun, 7 Aug 2022 21:58:20 +0200 Subject: [PATCH 1/2] Added ability to save a single session --- README.md | 3 ++- docs/custom_key_bindings.md | 4 +++- resurrect.tmux | 9 +++++++++ scripts/save.sh | 31 +++++++++++++++++++++++++++---- scripts/variables.sh | 3 +++ 5 files changed, 44 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f137ad8..3c0ff09 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,8 @@ Automatic restoring and continuous saving of tmux env is also possible with ### Key bindings -- `prefix + Ctrl-s` - save +- `prefix + Ctrl-s` - save all sessions +- `prefix + Ctrl-t` - save current session - `prefix + Ctrl-r` - restore ### About diff --git a/docs/custom_key_bindings.md b/docs/custom_key_bindings.md index 99bfc2c..92d9e31 100644 --- a/docs/custom_key_bindings.md +++ b/docs/custom_key_bindings.md @@ -2,10 +2,12 @@ The default key bindings are: -- `prefix + Ctrl-s` - save +- `prefix + Ctrl-s` - save all sessions +- `prefix + Ctrl-t` - save current session - `prefix + Ctrl-r` - restore To change these, add to `.tmux.conf`: set -g @resurrect-save 'S' + set -g @resurrect-save-current 'T' set -g @resurrect-restore 'R' diff --git a/resurrect.tmux b/resurrect.tmux index 21fed7e..b8aa90d 100755 --- a/resurrect.tmux +++ b/resurrect.tmux @@ -13,6 +13,14 @@ set_save_bindings() { done } +set_save_current_bindings() { + local key_bindings=$(get_tmux_option "$save_current_option" "$default_save_current_key") + local key + for key in $key_bindings; do + tmux bind-key "$key" run-shell "$CURRENT_DIR/scripts/save.sh -t #S" + done +} + set_restore_bindings() { local key_bindings=$(get_tmux_option "$restore_option" "$default_restore_key") local key @@ -33,6 +41,7 @@ set_script_path_options() { main() { set_save_bindings + set_save_current_bindings set_restore_bindings set_default_strategies set_script_path_options diff --git a/scripts/save.sh b/scripts/save.sh index 01edcde..8728d19 100755 --- a/scripts/save.sh +++ b/scripts/save.sh @@ -10,8 +10,18 @@ source "$CURRENT_DIR/spinner_helpers.sh" d=$'\t' delimiter=$'\t' -# if "quiet" script produces no output -SCRIPT_OUTPUT="$1" +while getopts "t:q" opt; do + case "$opt" in + t) + TARGET_SESSION="$OPTARG" + tmux has-session -t "$TARGET_SESSION" || + exit 1 + ;; + q) + SCRIPT_OUTPUT="quiet" + ;; + esac +done grouped_sessions_format() { local format @@ -81,12 +91,24 @@ state_format() { echo "$format" } +session_selector_windows() { + [ -z "$TARGET_SESSION" ] && + echo "-a" || + echo "-t $TARGET_SESSION" +} + +session_selector_panes() { + [ -z "$TARGET_SESSION" ] && + echo "-a" || + echo "-s -t $TARGET_SESSION" +} + dump_panes_raw() { - tmux list-panes -a -F "$(pane_format)" + tmux list-panes $(session_selector_panes) -F "$(pane_format)" } dump_windows_raw(){ - tmux list-windows -a -F "$(window_format)" + tmux list-windows $(session_selector_windows) -F "$(window_format)" } toggle_window_zoom() { @@ -215,6 +237,7 @@ dump_windows() { } dump_state() { + [[ -z "$TARGET_SESSION" ]] || return tmux display-message -p "$(state_format)" } diff --git a/scripts/variables.sh b/scripts/variables.sh index 9d42e02..9cc8311 100644 --- a/scripts/variables.sh +++ b/scripts/variables.sh @@ -3,6 +3,9 @@ default_save_key="C-s" save_option="@resurrect-save" save_path_option="@resurrect-save-script-path" +default_save_current_key="C-t" +save_current_option="@resurrect-save-current" + default_restore_key="C-r" restore_option="@resurrect-restore" restore_path_option="@resurrect-restore-script-path" From 0938a75c0508f52723b4e1e817c09422022d645d Mon Sep 17 00:00:00 2001 From: maybeetree Date: Sun, 7 Aug 2022 22:14:08 +0200 Subject: [PATCH 2/2] save-current: support session with space in name --- scripts/save.sh | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/scripts/save.sh b/scripts/save.sh index 8728d19..87b0b5d 100755 --- a/scripts/save.sh +++ b/scripts/save.sh @@ -91,24 +91,16 @@ state_format() { echo "$format" } -session_selector_windows() { - [ -z "$TARGET_SESSION" ] && - echo "-a" || - echo "-t $TARGET_SESSION" -} - -session_selector_panes() { - [ -z "$TARGET_SESSION" ] && - echo "-a" || - echo "-s -t $TARGET_SESSION" -} - dump_panes_raw() { - tmux list-panes $(session_selector_panes) -F "$(pane_format)" + [ -z "$TARGET_SESSION" ] && + tmux list-panes -a -F "$(pane_format)" || + tmux list-panes -s -t "$TARGET_SESSION" -F "$(pane_format)" } dump_windows_raw(){ - tmux list-windows $(session_selector_windows) -F "$(window_format)" + [ -z "$TARGET_SESSION" ] && + tmux list-windows -a -F "$(window_format)" || + tmux list-windows -t "$TARGET_SESSION" -F "$(window_format)" } toggle_window_zoom() {