mirror of
				https://github.com/tmux-plugins/tmux-resurrect.git
				synced 2025-11-04 00:46:04 +00:00 
			
		
		
		
	Enable selectively restoring processes
- user can restore all processes with ':all:' - user can selectively restore wanted processes Closes #13
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										76
									
								
								scripts/process_restore_helpers.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								scripts/process_restore_helpers.sh
									
									
									
									
									
										Normal file
									
								
							@@ -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
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user