From 1e945c2caca4fae24b25cb94f5557695d27869a4 Mon Sep 17 00:00:00 2001 From: Bruno Sutic Date: Wed, 27 Aug 2014 16:15:07 +0200 Subject: [PATCH] Enable selectively restoring processes - user can restore all processes with ':all:' - user can selectively restore wanted processes Closes #13 --- CHANGELOG.md | 1 + scripts/helpers.sh | 3 -- scripts/process_restore_helpers.sh | 76 ++++++++++++++++++++++++++++++ scripts/session_restorer.sh | 19 +------- 4 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 scripts/process_restore_helpers.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 57c050a..4a6d1d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### master - restore pane processes - user option for disabling pane process restoring +- enable whitelisting processes that will be restored ### v0.0.4, 2014-08-26 - restore pane layout for each window diff --git a/scripts/helpers.sh b/scripts/helpers.sh index 538b216..092ef6a 100644 --- a/scripts/helpers.sh +++ b/scripts/helpers.sh @@ -2,9 +2,6 @@ default_sessions_dir="$HOME/.tmux/sessions" sessions_dir_option="@session-saver-dir" -restore_processes_option="@session-saver-restore-processes" -default_restore_processes="true" - SUPPORTED_VERSION="1.9" # helper functions diff --git a/scripts/process_restore_helpers.sh b/scripts/process_restore_helpers.sh new file mode 100644 index 0000000..ac9f8c2 --- /dev/null +++ b/scripts/process_restore_helpers.sh @@ -0,0 +1,76 @@ +# default processes that are restored +default_proc_list_option="@session-saver-default-processes" +default_proc_list="vim emacs man less more tail top htop irssi" + +# User defined processes that are restored +# 'false' - nothing is restored +# ':all:' - all processes are restored +# +# user defined list of programs that are restored: +# 'my_program foo another_program' +restore_processes_option="@session-saver-processes" +restore_processes="" + +restore_pane_processes_enabled() { + local restore_processes="$(get_tmux_option "$restore_processes_option" "$restore_processes")" + if [ $restore_processes == "false" ]; then + return 1 + else + return 0 + fi +} + +restore_pane_process() { + local pane_full_command="$1" + local session_name="$2" + local window_number="$3" + local pane_index="$4" + if _process_should_be_restored "$pane_full_command"; then + tmux switch-client -t "${session_name}:${window_number}" + tmux select-pane -t "$pane_index" + tmux send-keys "$pane_full_command" "C-m" + fi +} + +_process_should_be_restored() { + local pane_full_command="$1" + if _restore_all_processes; then + return 0 + elif _process_on_the_restore_list "$pane_full_command"; then + return 0 + else + return 1 + fi +} + +_restore_all_processes() { + local restore_processes="$(get_tmux_option "$restore_processes_option" "$restore_processes")" + if [ $restore_processes == ":all:" ]; then + return 0 + else + return 1 + fi +} + +_process_on_the_restore_list() { + local pane_full_command="$1" + local restore_list="$(_restore_list)" + local proc + for proc in $restore_list; do + if [[ "$pane_full_command" =~ (^$proc) ]]; then + return 0 + fi + done + return 1 +} + +_restore_list() { + local user_processes="$(get_tmux_option "$restore_processes_option" "$restore_processes")" + local default_processes="$(get_tmux_option "$default_proc_list_option" "$default_proc_list")" + if [ -z $user_processes ]; then + # user didn't define any processes + echo "$default_processes" + else + echo "$default_processes $user_processes" + fi +} diff --git a/scripts/session_restorer.sh b/scripts/session_restorer.sh index 9a47586..502f1ee 100755 --- a/scripts/session_restorer.sh +++ b/scripts/session_restorer.sh @@ -3,6 +3,7 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" source "$CURRENT_DIR/helpers.sh" +source "$CURRENT_DIR/process_restore_helpers.sh" is_line_type() { local line_type="$1" @@ -105,24 +106,6 @@ restore_all_sessions() { done < $(last_session_path) } -restore_pane_processes_enabled() { - local restore_processes="$(get_tmux_option "$restore_processes_option" "$default_restore_processes")" - if [ $restore_processes == "false" ]; then - return 1 - else - return 0 - fi -} - -restore_pane_process() { - local pane_full_command="$1" - local session_name="$2" - local window_number="$3" - local pane_index="$4" - tmux switch-client -t "${session_name}:${window_number}" - tmux send-keys -t "$pane_index" "$pane_full_command" "C-m" -} - restore_all_pane_processes() { if restore_pane_processes_enabled; then local pane_full_command