From b8b87a6e29067a8d12a68fa0b52f939be502ac4f Mon Sep 17 00:00:00 2001 From: Bruno Sutic Date: Fri, 29 Aug 2014 00:17:02 +0200 Subject: [PATCH] Improve `irb` restore strategy Fixes #21 --- CHANGELOG.md | 1 + scripts/process_restore_helpers.sh | 17 ----------------- scripts/session_restorer.sh | 1 + scripts/variables.sh | 23 +++++++++++++++++++++++ session_saver.tmux | 12 ++++++------ strategies/irb_default_strategy.sh | 23 +++++++++++++++++++++++ 6 files changed, 54 insertions(+), 23 deletions(-) create mode 100644 scripts/variables.sh create mode 100755 strategies/irb_default_strategy.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index a571af0..f61d33c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ sure vim does not contain `-S` flag - enable restoring programs with arguments (e.g. "rails console") and also processes that contain program name +- improve `irb` restore strategy ### v0.1.0, 2014-08-28 - refactor checking if saved tmux session exists diff --git a/scripts/process_restore_helpers.sh b/scripts/process_restore_helpers.sh index 4facfb3..39eae4c 100644 --- a/scripts/process_restore_helpers.sh +++ b/scripts/process_restore_helpers.sh @@ -1,20 +1,3 @@ -# default processes that are restored -default_proc_list_option="@session-saver-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 -# '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="" - -# Defines part of the user variable. Example usage: -# set -g @session-saver-strategy-vim "session" -restore_process_strategy_option="@session-saver-strategy-" - restore_pane_processes_enabled() { local restore_processes="$(get_tmux_option "$restore_processes_option" "$restore_processes")" if [ "$restore_processes" == "false" ]; then diff --git a/scripts/session_restorer.sh b/scripts/session_restorer.sh index d9409b3..e58b081 100755 --- a/scripts/session_restorer.sh +++ b/scripts/session_restorer.sh @@ -2,6 +2,7 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "$CURRENT_DIR/variables.sh" source "$CURRENT_DIR/helpers.sh" source "$CURRENT_DIR/process_restore_helpers.sh" source "$CURRENT_DIR/spinner_helpers.sh" diff --git a/scripts/variables.sh b/scripts/variables.sh new file mode 100644 index 0000000..2df2b1e --- /dev/null +++ b/scripts/variables.sh @@ -0,0 +1,23 @@ +# key bindings +default_save_key="M-s" +save_option="@session-saver-save" + +default_restore_key="M-r" +restore_option="@session-saver-restore" + +# default processes that are restored +default_proc_list_option="@session-saver-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 +# '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="" + +# Defines part of the user variable. Example usage: +# set -g @session-saver-strategy-vim "session" +restore_process_strategy_option="@session-saver-strategy-" diff --git a/session_saver.tmux b/session_saver.tmux index 1f47d07..f583701 100755 --- a/session_saver.tmux +++ b/session_saver.tmux @@ -2,14 +2,9 @@ CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "$CURRENT_DIR/scripts/variables.sh" source "$CURRENT_DIR/scripts/helpers.sh" -default_save_key="M-s" -save_option="@session-saver-save" - -default_restore_key="M-r" -restore_option="@session-saver-restore" - set_save_bindings() { local key_bindings=$(get_tmux_option "$save_option" "$default_save_key") local key @@ -26,8 +21,13 @@ set_restore_bindings() { done } +set_default_strategies() { + tmux set-option -g "${restore_process_strategy_option}irb" "default_strategy" +} + main() { set_save_bindings set_restore_bindings + set_default_strategies } main diff --git a/strategies/irb_default_strategy.sh b/strategies/irb_default_strategy.sh new file mode 100755 index 0000000..897f5bb --- /dev/null +++ b/strategies/irb_default_strategy.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# "irb default strategy" +# +# Example irb process with junk variables: +# irb RBENV_VERSION=1.9.3-p429 GREP_COLOR=34;47 TERM_PROGRAM=Apple_Terminal +# +# When executed, the above will fail. This strategy handles that. + +ORIGINAL_COMMAND="$1" +DIRECTORY="$2" + +original_command_wo_junk_vars() { + echo "$ORIGINAL_COMMAND" | + sed 's/RBENV_VERSION[^ ]*//' | + sed 's/GREP_COLOR[^ ]*//' | + sed 's/TERM_PROGRAM[^ ]*//' +} + +main() { + echo "$(original_command_wo_junk_vars)" +} +main