mirror of
https://github.com/tmux/tmux.git
synced 2026-08-24 07:31:36 +00:00
Tests for modal panes on top.
This commit is contained in:
@@ -145,12 +145,16 @@ case "$(fmt "$modal" '#{pane_flags}')" in
|
||||
*O*) ;;
|
||||
*) fail "modal pane flags do not include O" ;;
|
||||
esac
|
||||
case "$(fmt "$modal" '#{pane_flags}')" in
|
||||
*A*) ;;
|
||||
*) fail "modal pane flags do not include A" ;;
|
||||
esac
|
||||
case "$(fmt modal:0 '#{window_flags}')" in
|
||||
*O*) ;;
|
||||
*) fail "modal window flags do not include O" ;;
|
||||
esac
|
||||
must_equal "$(fmt modal:0 '#{window_modal_pane}')" "$modal"
|
||||
must_equal "$(fmt modal:0 '#{window_zoomed_flag}')" 0
|
||||
must_equal "$(fmt modal:0 '#{window_zoomed_flag}')" 1
|
||||
|
||||
check_fail "window already has a modal pane" \
|
||||
new-pane -O -x 10 -y 4 'cat'
|
||||
@@ -177,12 +181,14 @@ under=$($TMUX split-window -PF '#{pane_id}' -t "$p0" 'cat') ||
|
||||
sleep 1
|
||||
must_equal "$(fmt modal:0 '#{pane_id}')" "$modal"
|
||||
must_equal "$(fmt "$under" '#{pane_active}')" 0
|
||||
must_equal "$(fmt modal:0 '#{window_zoomed_flag}')" 1
|
||||
|
||||
float=$($TMUX new-pane -PF '#{pane_id}' -x 10 -y 4 -X 5 -Y 3 'cat') ||
|
||||
fail "new floating pane under modal failed"
|
||||
sleep 1
|
||||
must_equal "$(fmt modal:0 '#{pane_id}')" "$modal"
|
||||
must_equal "$(fmt "$float" '#{pane_active}')" 0
|
||||
must_equal "$(fmt modal:0 '#{window_zoomed_flag}')" 1
|
||||
|
||||
check_ok new-window -d -t modal: -n other 'cat'
|
||||
check_ok select-window -t modal:other
|
||||
@@ -321,6 +327,7 @@ check_ok kill-pane -t "$modal"
|
||||
sleep 1
|
||||
must_equal "$(fmt modal:0 '#{window_modal_pane}')" ''
|
||||
must_equal "$(fmt modal:0 '#{pane_id}')" "$p0"
|
||||
must_equal "$(fmt "$p0" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 0:0
|
||||
|
||||
ignored=$($TMUX new-pane -KdPF '#{pane_id}' -t "$p0" 'cat') ||
|
||||
fail "new-pane -K without -O failed"
|
||||
@@ -352,5 +359,132 @@ new_top=$(fmt "$modal" '#{pane_top}')
|
||||
check_ok kill-pane -t "$modal"
|
||||
sleep 1
|
||||
|
||||
# A nonmodal floating pane may remain above zoom, and switching between it and
|
||||
# the zoomed tiled pane must not unzoom the window.
|
||||
check_ok new-window -d -t modal: -n float-over-zoom 'cat'
|
||||
base=$(fmt modal:float-over-zoom '#{pane_id}')
|
||||
check_ok split-window -dh -t "$base" 'cat'
|
||||
check_ok resize-pane -Z -t "$base"
|
||||
over=$($TMUX new-pane -APF '#{pane_id}' -t "$base" \
|
||||
-x 20 -y 5 -X 20 -Y 10 'cat') ||
|
||||
fail "new-pane -A failed"
|
||||
must_equal "$(fmt "$over" '#{pane_floating_flag}:#{pane_active}')" 1:1
|
||||
case "$(fmt "$over" '#{pane_flags}')" in
|
||||
*A*) ;;
|
||||
*) fail "float-over-zoom pane flags do not include A" ;;
|
||||
esac
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 1:1
|
||||
check_ok select-pane -t "$base"
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_active}')" 1:1
|
||||
check_ok select-pane -t "$over"
|
||||
must_equal "$(fmt "$over" '#{window_zoomed_flag}:#{pane_active}')" 1:1
|
||||
client=$($TMUX list-clients -F '#{client_name}' | head -1)
|
||||
[ -n "$client" ] || fail "no client for switch-client test"
|
||||
check_ok switch-client -c "$client" -t "$base"
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_active}')" 1:1
|
||||
check_ok switch-client -c "$client" -t "$over"
|
||||
must_equal "$(fmt "$over" '#{window_zoomed_flag}:#{pane_active}')" 1:1
|
||||
check_ok kill-pane -t "$over"
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 1:1
|
||||
check_ok resize-pane -Z -t "$base"
|
||||
|
||||
ignored=$($TMUX new-pane -ALdPF '#{pane_id}' -t "$base" 'cat') ||
|
||||
fail "new-pane -A -L failed"
|
||||
case "$(fmt "$ignored" '#{pane_flags}')" in
|
||||
*A*) fail "tiled pane flags include A" ;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
# Existing floating panes are filtered when zoom begins: -A panes remain in the
|
||||
# visible layout and ordinary floating panes do not.
|
||||
check_ok new-window -d -t modal: -n existing-over-zoom 'cat'
|
||||
base=$(fmt modal:existing-over-zoom '#{pane_id}')
|
||||
check_ok split-window -dh -t "$base" 'cat'
|
||||
over=$($TMUX new-pane -AdPF '#{pane_id}' -t "$base" \
|
||||
-x 20 -y 5 -X 20 -Y 10 'cat') ||
|
||||
fail "pre-existing new-pane -A failed"
|
||||
under=$($TMUX new-pane -dPF '#{pane_id}' -t "$base" \
|
||||
-x 15 -y 4 -X 2 -Y 2 'cat') ||
|
||||
fail "pre-existing ordinary new-pane failed"
|
||||
check_ok select-window -t modal:existing-over-zoom
|
||||
check_ok select-pane -t "$base"
|
||||
check_ok resize-pane -Z -t "$base"
|
||||
must_equal "$(fmt "$over" '#{pane_floating_flag}')" 1
|
||||
must_equal "$(fmt "$under" '#{pane_floating_flag}')" 0
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 1:1
|
||||
|
||||
# Geometry changed in the visible zoom layout is copied back when unzooming.
|
||||
check_ok select-pane -t "$over"
|
||||
left=$(fmt "$over" '#{pane_left}')
|
||||
top=$(fmt "$over" '#{pane_top}')
|
||||
meta_drag $((left + 2)) $((top + 2)) $((left + 7)) $((top + 4))
|
||||
new_left=$(fmt "$over" '#{pane_left}')
|
||||
new_top=$(fmt "$over" '#{pane_top}')
|
||||
[ "$new_left" -gt "$left" ] || [ "$new_top" -gt "$top" ] ||
|
||||
fail "float-over-zoom pane did not move"
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 1:1
|
||||
check_ok resize-pane -Z -t "$base"
|
||||
must_equal "$(fmt "$over" '#{pane_left}:#{pane_top}')" \
|
||||
"$new_left:$new_top"
|
||||
must_equal "$(fmt "$under" '#{pane_floating_flag}')" 1
|
||||
|
||||
# Resizing with the over-zoom pane active restores the original zoom target.
|
||||
check_ok resize-pane -Z -t "$base"
|
||||
check_ok select-pane -t "$over"
|
||||
check_ok resize-window -t modal:existing-over-zoom -x 90 -y 30
|
||||
must_equal "$(fmt "$base" \
|
||||
'#{window_width}x#{window_height}:#{window_zoomed_flag}:#{pane_zoomed_flag}')" \
|
||||
90x30:1:1
|
||||
must_equal "$(fmt "$over" '#{pane_floating_flag}:#{pane_active}')" 1:1
|
||||
|
||||
# Natural pane exit uses a different removal path from kill-pane and must also
|
||||
# preserve zoom.
|
||||
dying=$($TMUX new-pane -AdPF '#{pane_id}' -t "$base" \
|
||||
-x 12 -y 4 -X 4 -Y 3 'true') ||
|
||||
fail "short-lived new-pane -A failed"
|
||||
i=0
|
||||
while $TMUX list-panes -a -F '#{pane_id}' | grep -qx "$dying"; do
|
||||
i=$((i + 1))
|
||||
[ $i -gt 50 ] && fail "short-lived float-over-zoom pane did not exit"
|
||||
sleep 0.1
|
||||
done
|
||||
must_equal "$(fmt "$base" '#{window_zoomed_flag}:#{pane_zoomed_flag}')" 1:1
|
||||
|
||||
# A pane with -A is also above a zoom target which was itself floating. The
|
||||
# temporary tiled target must sit behind retained floating panes, then return
|
||||
# to the normal floating z order when unzoomed.
|
||||
check_ok new-window -d -t modal: -n floating-zoom-target 'cat'
|
||||
base=$(fmt modal:floating-zoom-target '#{pane_id}')
|
||||
check_ok split-window -dh -t "$base" 'cat'
|
||||
target=$($TMUX new-pane -dPF '#{pane_id}' -t "$base" \
|
||||
-x 30 -y 10 -X 10 -Y 5 'cat') ||
|
||||
fail "floating zoom target creation failed"
|
||||
over=$($TMUX new-pane -AdPF '#{pane_id}' -t "$base" \
|
||||
-x 15 -y 5 -X 15 -Y 8 'cat') ||
|
||||
fail "float-over-zoom pane creation failed"
|
||||
check_ok select-window -t modal:floating-zoom-target
|
||||
check_ok select-pane -t "$target"
|
||||
must_equal "$(fmt "$target" '#{pane_z}')" 0
|
||||
must_equal "$(fmt "$over" '#{pane_z}')" 1
|
||||
|
||||
check_ok resize-pane -Z -t "$target"
|
||||
must_equal "$(fmt "$target" \
|
||||
'#{window_zoomed_flag}:#{pane_zoomed_flag}:#{pane_floating_flag}:#{pane_z}')" \
|
||||
1:1:0:2
|
||||
must_equal "$(fmt "$over" '#{pane_floating_flag}:#{pane_z}')" 1:0
|
||||
check_ok select-pane -t "$over"
|
||||
must_equal "$(fmt "$over" '#{window_zoomed_flag}:#{pane_active}')" 1:1
|
||||
check_ok resize-pane -Z -t "$target"
|
||||
must_equal "$(fmt "$over" '#{pane_active}:#{pane_z}')" 1:0
|
||||
must_equal "$(fmt "$target" '#{pane_floating_flag}:#{pane_z}')" 1:1
|
||||
|
||||
# If the target remains active, it returns to the front on unzoom.
|
||||
check_ok select-pane -t "$target"
|
||||
check_ok resize-pane -Z -t "$target"
|
||||
must_equal "$(fmt "$over" '#{pane_floating_flag}:#{pane_z}')" 1:0
|
||||
check_ok resize-pane -Z -t "$target"
|
||||
must_equal "$(fmt "$target" '#{pane_active}:#{pane_z}')" 1:0
|
||||
must_equal "$(fmt "$over" '#{pane_z}')" 1
|
||||
|
||||
cleanup
|
||||
exit 0
|
||||
|
||||
Reference in New Issue
Block a user