Skip to content

Commit 6c9322a

Browse files
committed
Leave window name handling to windows
Previously, window names were set when creating panes and were therefore saved with pane data. However, saving the names with window data is more intuitive and easier to manage. In addition, one can set the name and automatic-rename options in the same function, so one can make sure that renaming the windows will not overwrite the automatic-rename option.
1 parent 80adb91 commit 6c9322a

File tree

2 files changed

+26
-31
lines changed

2 files changed

+26
-31
lines changed

scripts/restore.sh

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -126,31 +126,29 @@ pane_creation_command() {
126126
new_window() {
127127
local session_name="$1"
128128
local window_number="$2"
129-
local window_name="$3"
130-
local dir="$4"
131-
local pane_index="$5"
129+
local dir="$3"
130+
local pane_index="$4"
132131
local pane_id="${session_name}:${window_number}.${pane_index}"
133132
dir="${dir/#\~/$HOME}"
134133
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
135134
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
136-
tmux new-window -d -t "${session_name}:${window_number}" -n "$window_name" -c "$dir" "$pane_creation_command"
135+
tmux new-window -d -t "${session_name}:${window_number}" -c "$dir" "$pane_creation_command"
137136
else
138-
tmux new-window -d -t "${session_name}:${window_number}" -n "$window_name" -c "$dir"
137+
tmux new-window -d -t "${session_name}:${window_number}" -c "$dir"
139138
fi
140139
}
141140

142141
new_session() {
143142
local session_name="$1"
144143
local window_number="$2"
145-
local window_name="$3"
146-
local dir="$4"
147-
local pane_index="$5"
144+
local dir="$3"
145+
local pane_index="$4"
148146
local pane_id="${session_name}:${window_number}.${pane_index}"
149147
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
150148
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
151-
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -n "$window_name" -c "$dir" "$pane_creation_command"
149+
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -c "$dir" "$pane_creation_command"
152150
else
153-
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -n "$window_name" -c "$dir"
151+
TMUX="" tmux -S "$(tmux_socket)" new-session -d -s "$session_name" -c "$dir"
154152
fi
155153
# change first window number if necessary
156154
local created_window_num="$(first_window_num)"
@@ -162,50 +160,45 @@ new_session() {
162160
new_pane() {
163161
local session_name="$1"
164162
local window_number="$2"
165-
local window_name="$3"
166-
local dir="$4"
167-
local pane_index="$5"
163+
local dir="$3"
164+
local pane_index="$4"
168165
local pane_id="${session_name}:${window_number}.${pane_index}"
169166
if is_restoring_pane_contents && pane_contents_file_exists "$pane_id"; then
170167
local pane_creation_command="$(pane_creation_command "$session_name" "$window_number" "$pane_index")"
171168
tmux split-window -t "${session_name}:${window_number}" -c "$dir" "$pane_creation_command"
172169
else
173170
tmux split-window -t "${session_name}:${window_number}" -c "$dir"
174171
fi
175-
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
176172
# minimize window so more panes can fit
177173
tmux resize-pane -t "${session_name}:${window_number}" -U "999"
178174
}
179175

180176
restore_pane() {
181177
local pane="$1"
182-
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
178+
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
183179
dir="$(remove_first_char "$dir")"
184-
window_name="$(remove_first_char "$window_name")"
185180
pane_full_command="$(remove_first_char "$pane_full_command")"
186181
if [ "$session_name" == "0" ]; then
187182
restored_session_0_true
188183
fi
189184
if pane_exists "$session_name" "$window_number" "$pane_index"; then
190-
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
191185
if is_restoring_from_scratch; then
192186
# overwrite the pane
193187
# happens only for the first pane if it's the only registered pane for the whole tmux server
194188
local pane_id="$(tmux display-message -p -F "#{pane_id}" -t "$session_name:$window_number")"
195-
new_pane "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
189+
new_pane "$session_name" "$window_number" "$dir" "$pane_index"
196190
tmux kill-pane -t "$pane_id"
197191
else
198192
# Pane exists, no need to create it!
199193
# Pane existence is registered. Later, its process also won't be restored.
200194
register_existing_pane "$session_name" "$window_number" "$pane_index"
201195
fi
202196
elif window_exists "$session_name" "$window_number"; then
203-
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
204-
new_pane "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
197+
new_pane "$session_name" "$window_number" "$dir" "$pane_index"
205198
elif session_exists "$session_name"; then
206-
new_window "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
199+
new_window "$session_name" "$window_number" "$dir" "$pane_index"
207200
else
208-
new_session "$session_name" "$window_number" "$window_name" "$dir" "$pane_index"
201+
new_session "$session_name" "$window_number" "$dir" "$pane_index"
209202
fi
210203
done < <(echo "$pane")
211204
}
@@ -292,9 +285,11 @@ handle_session_0() {
292285
fi
293286
}
294287

295-
restore_pane_layout_and_autonaming_for_each_window() {
288+
restore_window_properties() {
296289
\grep '^window' $(last_resurrect_file) |
297-
while IFS=$d read line_type session_name window_number window_active window_flags window_layout automatic_rename; do
290+
while IFS=$d read line_type session_name window_number window_name window_active window_flags window_layout automatic_rename; do
291+
window_name="$(remove_first_char "$window_name")"
292+
tmux rename-window -t "${session_name}:${window_number}" "$window_name"
298293
tmux select-layout -t "${session_name}:${window_number}" "$window_layout"
299294
if [ "${automatic_rename}" = ":" ]; then
300295
tmux set-option -u -t "${session_name}:${window_number}" automatic-rename
@@ -381,7 +376,7 @@ main() {
381376
execute_hook "pre-restore-all"
382377
restore_all_panes
383378
handle_session_0
384-
restore_pane_layout_and_autonaming_for_each_window >/dev/null 2>&1
379+
restore_window_properties >/dev/null 2>&1
385380
execute_hook "pre-restore-history"
386381
if save_shell_history_option_on; then
387382
restore_shell_history

scripts/save.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ pane_format() {
3333
format+="${delimiter}"
3434
format+="#{window_index}"
3535
format+="${delimiter}"
36-
format+=":#{window_name}"
37-
format+="${delimiter}"
3836
format+="#{window_active}"
3937
format+="${delimiter}"
4038
format+=":#{window_flags}"
@@ -61,6 +59,8 @@ window_format() {
6159
format+="${delimiter}"
6260
format+="#{window_index}"
6361
format+="${delimiter}"
62+
format+="#{window_name}"
63+
format+="${delimiter}"
6464
format+="#{window_active}"
6565
format+="${delimiter}"
6666
format+=":#{window_flags}"
@@ -227,28 +227,28 @@ fetch_and_dump_grouped_sessions(){
227227
dump_panes() {
228228
local full_command
229229
dump_panes_raw |
230-
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
230+
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
231231
# not saving panes from grouped sessions
232232
if is_session_grouped "$session_name"; then
233233
continue
234234
fi
235235
full_command="$(pane_full_command $pane_pid)"
236236
dir=$(echo $dir | sed 's/ /\\ /') # escape all spaces in directory path
237-
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}"
237+
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}"
238238
done
239239
}
240240

241241
dump_windows() {
242242
dump_windows_raw |
243-
while IFS=$d read line_type session_name window_index window_active window_flags window_layout; do
243+
while IFS=$d read line_type session_name window_index window_name window_active window_flags window_layout; do
244244
# not saving windows from grouped sessions
245245
if is_session_grouped "$session_name"; then
246246
continue
247247
fi
248248
automatic_rename="$(tmux show-window-options -vt "${session_name}:${window_index}" automatic-rename)"
249249
# If the option was unset, place the ":" placeholder instead.
250250
[ -z "${automatic_rename}" ] && automatic_rename=":"
251-
echo "${line_type}${d}${session_name}${d}${window_index}${d}${window_active}${d}${window_flags}${d}${window_layout}${d}${automatic_rename}"
251+
echo "${line_type}${d}${session_name}${d}${window_index}${d}${window_name}${d}${window_active}${d}${window_flags}${d}${window_layout}${d}${automatic_rename}"
252252
done
253253
}
254254

0 commit comments

Comments
 (0)