Merge pull request #401 from Farzat07/automatic-rename2

Maintain the value of automatic-rename
pull/328/merge
Bruno Sutic 2021-08-30 14:07:33 +02:00 committed by GitHub
commit 4234ba99aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 38 deletions

View File

@ -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

View File

@ -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
} }