mirror of
https://github.com/tmux-plugins/tmux-resurrect.git
synced 2024-11-24 22:08:46 +00:00
Merge pull request #401 from Farzat07/automatic-rename2
Maintain the value of automatic-rename
This commit is contained in:
commit
4234ba99aa
@ -126,31 +126,29 @@ pane_creation_command() {
|
|||||||
new_window() {
|
new_window() {
|
||||||
local session_name="$1"
|
local session_name="$1"
|
||||||
local window_number="$2"
|
local window_number="$2"
|
||||||
local window_name="$3"
|
local dir="$3"
|
||||||
local dir="$4"
|
local pane_index="$4"
|
||||||
local pane_index="$5"
|
|
||||||
local pane_id="${session_name}:${window_number}.${pane_index}"
|
local pane_id="${session_name}:${window_number}.${pane_index}"
|
||||||
dir="${dir/#\~/$HOME}"
|
dir="${dir/#\~/$HOME}"
|
||||||
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
||||||
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
||||||
tmux new-window -d -t "${session_name}:${window_number}" -n "$window_name" -c "$dir" "$pane_creation_command"
|
tmux new-window -d -t "${session_name}:${window_number}" -c "$dir" "$pane_creation_command"
|
||||||
else
|
else
|
||||||
tmux new-window -d -t "${session_name}:${window_number}" -n "$window_name" -c "$dir"
|
tmux new-window -d -t "${session_name}:${window_number}" -c "$dir"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
new_session() {
|
new_session() {
|
||||||
local session_name="$1"
|
local session_name="$1"
|
||||||
local window_number="$2"
|
local window_number="$2"
|
||||||
local window_name="$3"
|
local dir="$3"
|
||||||
local dir="$4"
|
local pane_index="$4"
|
||||||
local pane_index="$5"
|
|
||||||
local pane_id="${session_name}:${window_number}.${pane_index}"
|
local pane_id="${session_name}:${window_number}.${pane_index}"
|
||||||
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
||||||
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
||||||
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -n "$window_name" -c "$dir" "$pane_creation_command"
|
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -c "$dir" "$pane_creation_command"
|
||||||
else
|
else
|
||||||
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -n "$window_name" -c "$dir"
|
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -c "$dir"
|
||||||
fi
|
fi
|
||||||
# change first window number if necessary
|
# change first window number if necessary
|
||||||
local created_window_num="$(first_window_num)"
|
local created_window_num="$(first_window_num)"
|
||||||
@ -162,9 +160,8 @@ new_session() {
|
|||||||
new_pane() {
|
new_pane() {
|
||||||
local session_name="$1"
|
local session_name="$1"
|
||||||
local window_number="$2"
|
local window_number="$2"
|
||||||
local window_name="$3"
|
local dir="$3"
|
||||||
local dir="$4"
|
local pane_index="$4"
|
||||||
local pane_index="$5"
|
|
||||||
local pane_id="${session_name}:${window_number}.${pane_index}"
|
local pane_id="${session_name}:${window_number}.${pane_index}"
|
||||||
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
|
||||||
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
|
||||||
@ -172,27 +169,24 @@ new_pane() {
|
|||||||
else
|
else
|
||||||
tmux split-window -t "${session_name}:${window_number}" -c "$dir"
|
tmux split-window -t "${session_name}:${window_number}" -c "$dir"
|
||||||
fi
|
fi
|
||||||
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
|
|
||||||
# minimize window so more panes can fit
|
# minimize window so more panes can fit
|
||||||
tmux resize-pane -t "${session_name}:${window_number}" -U "999"
|
tmux resize-pane -t "${session_name}:${window_number}" -U "999"
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_pane() {
|
restore_pane() {
|
||||||
local pane="$1"
|
local pane="$1"
|
||||||
while IFS=$d read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command pane_full_command; do
|
while IFS=$d read line_type session_name window_number window_active window_flags pane_index dir pane_active pane_command pane_full_command; do
|
||||||
dir="$(remove_first_char "$dir")"
|
dir="$(remove_first_char "$dir")"
|
||||||
window_name="$(remove_first_char "$window_name")"
|
|
||||||
pane_full_command="$(remove_first_char "$pane_full_command")"
|
pane_full_command="$(remove_first_char "$pane_full_command")"
|
||||||
if [ "$session_name" == "0" ]; then
|
if [ "$session_name" == "0" ]; then
|
||||||
restored_session_0_true
|
restored_session_0_true
|
||||||
fi
|
fi
|
||||||
if pane_exists "$session_name" "$window_number" "$pane_index"; then
|
if pane_exists "$session_name" "$window_number" "$pane_index"; then
|
||||||
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
|
|
||||||
if is_restoring_from_scratch; then
|
if is_restoring_from_scratch; then
|
||||||
# overwrite the pane
|
# overwrite the pane
|
||||||
# happens only for the first pane if it's the only registered pane for the whole tmux server
|
# happens only for the first pane if it's the only registered pane for the whole tmux server
|
||||||
local pane_id="$(tmux display-message -p -F "#{pane_id}" -t "$session_name:$window_number")"
|
local pane_id="$(tmux display-message -p -F "#{pane_id}" -t "$session_name:$window_number")"
|
||||||
new_pane "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
|
new_pane "$session_name" "$window_number" "$dir" "$pane_index"
|
||||||
tmux kill-pane -t "$pane_id"
|
tmux kill-pane -t "$pane_id"
|
||||||
else
|
else
|
||||||
# Pane exists, no need to create it!
|
# Pane exists, no need to create it!
|
||||||
@ -200,12 +194,11 @@ restore_pane() {
|
|||||||
register_existing_pane "$session_name" "$window_number" "$pane_index"
|
register_existing_pane "$session_name" "$window_number" "$pane_index"
|
||||||
fi
|
fi
|
||||||
elif window_exists "$session_name" "$window_number"; then
|
elif window_exists "$session_name" "$window_number"; then
|
||||||
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
|
new_pane "$session_name" "$window_number" "$dir" "$pane_index"
|
||||||
new_pane "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
|
|
||||||
elif session_exists "$session_name"; then
|
elif session_exists "$session_name"; then
|
||||||
new_window "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
|
new_window "$session_name" "$window_number" "$dir" "$pane_index"
|
||||||
else
|
else
|
||||||
new_session "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
|
new_session "$session_name" "$window_number" "$dir" "$pane_index"
|
||||||
fi
|
fi
|
||||||
done < <(echo "$pane")
|
done < <(echo "$pane")
|
||||||
}
|
}
|
||||||
@ -292,15 +285,23 @@ handle_session_0() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_pane_layout_for_each_window() {
|
restore_window_properties() {
|
||||||
|
local window_name
|
||||||
\grep '^window' $(last_resurrect_file) |
|
\grep '^window' $(last_resurrect_file) |
|
||||||
while IFS=$d read line_type session_name window_number window_active window_flags window_layout; do
|
while IFS=$d read line_type session_name window_number window_name window_active window_flags window_layout automatic_rename; do
|
||||||
|
window_name="$(remove_first_char "$window_name")"
|
||||||
|
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
|
||||||
tmux select-layout -t "${session_name}:${window_number}" "$window_layout"
|
tmux select-layout -t "${session_name}:${window_number}" "$window_layout"
|
||||||
|
if [ "${automatic_rename}" = ":" ]; then
|
||||||
|
tmux set-option -u -t "${session_name}:${window_number}" automatic-rename
|
||||||
|
else
|
||||||
|
tmux set-option -t "${session_name}:${window_number}" automatic-rename "$automatic_rename"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
restore_shell_history() {
|
restore_shell_history() {
|
||||||
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ { print $2, $3, $7, $10; }' $(last_resurrect_file) |
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ { print $2, $3, $6, $9; }' $(last_resurrect_file) |
|
||||||
while IFS=$d read session_name window_number pane_index pane_command; do
|
while IFS=$d read session_name window_number pane_index pane_command; do
|
||||||
if ! is_pane_registered_as_existing "$session_name" "$window_number" "$pane_index"; then
|
if ! is_pane_registered_as_existing "$session_name" "$window_number" "$pane_index"; then
|
||||||
local pane_id="$session_name:$window_number.$pane_index"
|
local pane_id="$session_name:$window_number.$pane_index"
|
||||||
@ -321,7 +322,7 @@ restore_shell_history() {
|
|||||||
restore_all_pane_processes() {
|
restore_all_pane_processes() {
|
||||||
if restore_pane_processes_enabled; then
|
if restore_pane_processes_enabled; then
|
||||||
local pane_full_command
|
local pane_full_command
|
||||||
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $11 !~ "^:$" { print $2, $3, $7, $8, $11; }' $(last_resurrect_file) |
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $10 !~ "^:$" { print $2, $3, $6, $7, $10; }' $(last_resurrect_file) |
|
||||||
while IFS=$d read -r session_name window_number pane_index dir pane_full_command; do
|
while IFS=$d read -r session_name window_number pane_index dir pane_full_command; do
|
||||||
dir="$(remove_first_char "$dir")"
|
dir="$(remove_first_char "$dir")"
|
||||||
pane_full_command="$(remove_first_char "$pane_full_command")"
|
pane_full_command="$(remove_first_char "$pane_full_command")"
|
||||||
@ -331,7 +332,7 @@ restore_all_pane_processes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore_active_pane_for_each_window() {
|
restore_active_pane_for_each_window() {
|
||||||
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $9 == 1 { print $2, $3, $7; }' $(last_resurrect_file) |
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $8 == 1 { print $2, $3, $6; }' $(last_resurrect_file) |
|
||||||
while IFS=$d read session_name window_number active_pane; do
|
while IFS=$d read session_name window_number active_pane; do
|
||||||
tmux switch-client -t "${session_name}:${window_number}"
|
tmux switch-client -t "${session_name}:${window_number}"
|
||||||
tmux select-pane -t "$active_pane"
|
tmux select-pane -t "$active_pane"
|
||||||
@ -339,7 +340,7 @@ restore_active_pane_for_each_window() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore_zoomed_windows() {
|
restore_zoomed_windows() {
|
||||||
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $6 ~ /Z/ && $9 == 1 { print $2, $3; }' $(last_resurrect_file) |
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^pane/ && $5 ~ /Z/ && $8 == 1 { print $2, $3; }' $(last_resurrect_file) |
|
||||||
while IFS=$d read session_name window_number; do
|
while IFS=$d read session_name window_number; do
|
||||||
tmux resize-pane -t "${session_name}:${window_number}" -Z
|
tmux resize-pane -t "${session_name}:${window_number}" -Z
|
||||||
done
|
done
|
||||||
@ -355,7 +356,7 @@ restore_grouped_sessions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restore_active_and_alternate_windows() {
|
restore_active_and_alternate_windows() {
|
||||||
awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $5 ~ /[*-]/ { print $2, $4, $3; }' $(last_resurrect_file) |
|
awk 'BEGIN { FS="\t"; OFS="\t" } /^window/ && $6 ~ /[*-]/ { print $2, $4, $3; }' $(last_resurrect_file) |
|
||||||
sort -u |
|
sort -u |
|
||||||
while IFS=$d read session_name active_window window_number; do
|
while IFS=$d read session_name active_window window_number; do
|
||||||
tmux switch-client -t "${session_name}:${window_number}"
|
tmux switch-client -t "${session_name}:${window_number}"
|
||||||
@ -376,7 +377,7 @@ main() {
|
|||||||
execute_hook "pre-restore-all"
|
execute_hook "pre-restore-all"
|
||||||
restore_all_panes
|
restore_all_panes
|
||||||
handle_session_0
|
handle_session_0
|
||||||
restore_pane_layout_for_each_window >/dev/null 2>&1
|
restore_window_properties >/dev/null 2>&1
|
||||||
execute_hook "pre-restore-history"
|
execute_hook "pre-restore-history"
|
||||||
if save_shell_history_option_on; then
|
if save_shell_history_option_on; then
|
||||||
restore_shell_history
|
restore_shell_history
|
||||||
|
@ -33,8 +33,6 @@ pane_format() {
|
|||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+="#{window_index}"
|
format+="#{window_index}"
|
||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+=":#{window_name}"
|
|
||||||
format+="${delimiter}"
|
|
||||||
format+="#{window_active}"
|
format+="#{window_active}"
|
||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+=":#{window_flags}"
|
format+=":#{window_flags}"
|
||||||
@ -61,6 +59,8 @@ window_format() {
|
|||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+="#{window_index}"
|
format+="#{window_index}"
|
||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
|
format+=":#{window_name}"
|
||||||
|
format+="${delimiter}"
|
||||||
format+="#{window_active}"
|
format+="#{window_active}"
|
||||||
format+="${delimiter}"
|
format+="${delimiter}"
|
||||||
format+=":#{window_flags}"
|
format+=":#{window_flags}"
|
||||||
@ -227,25 +227,28 @@ fetch_and_dump_grouped_sessions(){
|
|||||||
dump_panes() {
|
dump_panes() {
|
||||||
local full_command
|
local full_command
|
||||||
dump_panes_raw |
|
dump_panes_raw |
|
||||||
while IFS=$d read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command pane_pid history_size; do
|
while IFS=$d read line_type session_name window_number window_active window_flags pane_index dir pane_active pane_command pane_pid history_size; do
|
||||||
# not saving panes from grouped sessions
|
# not saving panes from grouped sessions
|
||||||
if is_session_grouped "$session_name"; then
|
if is_session_grouped "$session_name"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
full_command="$(pane_full_command $pane_pid)"
|
full_command="$(pane_full_command $pane_pid)"
|
||||||
dir=$(echo $dir | sed 's/ /\\ /') # escape all spaces in directory path
|
dir=$(echo $dir | sed 's/ /\\ /') # escape all spaces in directory path
|
||||||
echo "${line_type}${d}${session_name}${d}${window_number}${d}${window_name}${d}${window_active}${d}${window_flags}${d}${pane_index}${d}${dir}${d}${pane_active}${d}${pane_command}${d}:${full_command}"
|
echo "${line_type}${d}${session_name}${d}${window_number}${d}${window_active}${d}${window_flags}${d}${pane_index}${d}${dir}${d}${pane_active}${d}${pane_command}${d}:${full_command}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_windows() {
|
dump_windows() {
|
||||||
dump_windows_raw |
|
dump_windows_raw |
|
||||||
while IFS=$d read line_type session_name window_index window_active window_flags window_layout; do
|
while IFS=$d read line_type session_name window_index window_name window_active window_flags window_layout; do
|
||||||
# not saving windows from grouped sessions
|
# not saving windows from grouped sessions
|
||||||
if is_session_grouped "$session_name"; then
|
if is_session_grouped "$session_name"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
echo "${line_type}${d}${session_name}${d}${window_index}${d}${window_active}${d}${window_flags}${d}${window_layout}"
|
automatic_rename="$(tmux show-window-options -vt "${session_name}:${window_index}" automatic-rename)"
|
||||||
|
# If the option was unset, place the ":" placeholder instead.
|
||||||
|
[ -z "${automatic_rename}" ] && automatic_rename=":"
|
||||||
|
echo "${line_type}${d}${session_name}${d}${window_index}${d}${window_name}${d}${window_active}${d}${window_flags}${d}${window_layout}${d}${automatic_rename}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,14 +259,14 @@ dump_state() {
|
|||||||
dump_pane_contents() {
|
dump_pane_contents() {
|
||||||
local pane_contents_area="$(get_tmux_option "$pane_contents_area_option" "$default_pane_contents_area")"
|
local pane_contents_area="$(get_tmux_option "$pane_contents_area_option" "$default_pane_contents_area")"
|
||||||
dump_panes_raw |
|
dump_panes_raw |
|
||||||
while IFS=$d read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command pane_pid history_size; do
|
while IFS=$d read line_type session_name window_number window_active window_flags pane_index dir pane_active pane_command pane_pid history_size; do
|
||||||
capture_pane_contents "${session_name}:${window_number}.${pane_index}" "$history_size" "$pane_contents_area"
|
capture_pane_contents "${session_name}:${window_number}.${pane_index}" "$history_size" "$pane_contents_area"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_shell_history() {
|
dump_shell_history() {
|
||||||
dump_panes |
|
dump_panes |
|
||||||
while IFS=$d read line_type session_name window_number window_name window_active window_flags pane_index dir pane_active pane_command full_command; do
|
while IFS=$d read line_type session_name window_number window_active window_flags pane_index dir pane_active pane_command full_command; do
|
||||||
save_shell_history "$session_name:$window_number.$pane_index" "$pane_command" "$full_command"
|
save_shell_history "$session_name:$window_number.$pane_index" "$pane_command" "$full_command"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user