Add more hook points

And make the hook calling simpler at the call site.
This commit is contained in:
Ash Berlin-Taylor
2018-08-17 20:38:33 +01:00
parent 0133c7a96a
commit 8aa999c591
5 changed files with 53 additions and 24 deletions

View File

@ -149,13 +149,20 @@ resurrect_history_file() {
echo "$(resurrect_dir)/${shell_name}_history-${pane_id}"
}
# hook helpers
execute_hook() {
local kind="$1"
shift
local args="" hook=""
save_hook() {
get_tmux_option "$save_hook_option" "$save_hook_default"
hook=$(get_tmux_option "$hook_prefix$kind" "")
# If there are any args, pass them to the hook (in a way that preserves/copes
# with spaces and unusual characters.
if [ "$#" -gt 0 ]; then
printf -v args "%q " "$@"
fi
if [ -n "$hook" ]; then
eval "$hook $args"
fi
}
restore_hook() {
get_tmux_option "$restore_hook_option" "$restore_hook_default"
}

View File

@ -344,14 +344,14 @@ restore_active_and_alternate_sessions() {
main() {
if supported_tmux_version_ok && check_saved_session_exists; then
start_spinner "Restoring..." "Tmux restore complete!"
if [ -n "$(restore_hook)" ]; then
eval "$(restore_hook)"
fi
execute_hook "pre-restore-all"
restore_all_panes
restore_pane_layout_for_each_window >/dev/null 2>&1
execute_hook "pre-restore-history"
if save_shell_history_option_on; then
restore_shell_history
fi
execute_hook "pre-restore-pane-processes"
restore_all_pane_processes
# below functions restore exact cursor positions
restore_active_pane_for_each_window
@ -359,6 +359,7 @@ main() {
restore_grouped_sessions # also restores active and alt windows for grouped sessions
restore_active_and_alternate_windows
restore_active_and_alternate_sessions
execute_hook "post-restore-all"
stop_spinner
display_message "Tmux restore complete!"
fi

View File

@ -283,6 +283,7 @@ save_all() {
dump_panes >> "$resurrect_file_path"
dump_windows >> "$resurrect_file_path"
dump_state >> "$resurrect_file_path"
execute_hook "post-save-layout" "$resurrect_file_path"
if files_differ "$resurrect_file_path" "$last_resurrect_file"; then
ln -fs "$(basename "$resurrect_file_path")" "$last_resurrect_file"
else
@ -298,6 +299,7 @@ save_all() {
dump_shell_history
fi
remove_old_backups
execute_hook "post-save-all"
}
show_output() {
@ -314,9 +316,6 @@ main() {
stop_spinner
display_message "Tmux environment saved!"
fi
if [ -n "$(save_hook)" ]; then
eval "$(save_hook)"
fi
fi
}
main

View File

@ -43,8 +43,5 @@ shell_history_option="@resurrect-save-shell-history"
# set to 'on' to ensure panes are never ever overwritten
overwrite_option="@resurrect-never-overwrite"
# Hooks
restore_hook_default=""
restore_hook_option="@resurrect-restore-hook"
save_hook_default=""
save_hook_option="@resurrect-save-hook"
# Hooks are set via ${hook_prefix}${name}, i.e. "@resurrect-hook-post-save-all"
hook_prefix="@resurrect-hook-"