Tests for screen-redraw.c (not all passing right now).

This commit is contained in:
Nicholas Marriott
2026-06-22 12:09:44 +01:00
parent 06ee890db3
commit ffe48f00e3
115 changed files with 2742 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
#!/bin/sh
# Exercise screen-redraw.c bidirectional-isolate handling. When the client is
# UTF-8 and its terminal has the Bidi capability, each drawn span is wrapped in
# directional isolate characters (U+2066 .. U+2069) so a bidi terminal does not
# reorder pane contents across borders (the REDRAW_ISOLATES path).
#
# The Bidi capability is added with terminal-overrides before the client
# attaches, so the attached client picks it up. The isolate characters appear in
# the captured output around each span.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
compare() {
sleep 1
$TMUX capturep -p >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
new_scene() {
$TMUX2 neww -d "sh -c 'printf \"BIDI-LEFT 12345\nBIDI-RIGHT 67890\"; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x40 -y12 || exit 1
}
C="sh -c 'printf \"BIDI-PANE 12345\nBIDI-PANE 67890\"; exec sleep 100'"
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y12 "sh -c 'printf \"BIDI-BASE 12345\nBIDI-BASE 67890\"; exec sleep 100'" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
# Add the Bidi capability before the client attaches.
$TMUX2 set -ag terminal-overrides ",*:Bidi=\\E[8h" || exit 1
$TMUX new -d -x40 -y12 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
# Single pane: content is wrapped in isolates.
new_scene
compare bidi-single
# Two panes: borders and both panes are isolated.
new_scene
$TMUX2 splitw -h "$C" || exit 1
compare bidi-split
exit 0

View File

@@ -0,0 +1,162 @@
#!/bin/sh
# Exercise the scene caching in screen-redraw.c. A scene is built once and reused
# until it is invalidated; redraw_get_scene rebuilds it when the window changes,
# the generation number is bumped (panes moved/resized/swapped), or the offset
# changes. These tests make such a change in place and capture afterwards: if the
# matching invalidation did not fire, the stale cached scene would be drawn and
# the capture would not match the golden.
#
# Each scene is rendered in an inner tmux attached inside an outer tmux pane. The
# outer pane is captured and compared with a golden in screen-redraw-results/.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
compare() {
sleep 1
$TMUX capturep -p >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
new_scene() {
$TMUX2 neww -d "sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"BASE%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x40 -y14 || exit 1
}
C="sh -c 'i=0; while [ \$i -lt 5 ]; do printf \"PANE%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'"
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y14 "sh -c 'exec sleep 100'" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
$TMUX new -d -x40 -y14 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
# --- Generation change: a pane is resized in place. ---
# Two columns; first capture pins the initial divider position. The scene is
# built here and cached.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare cache-resize-before
# Move the divider left. resize-pane bumps the generation, so the cached scene
# must be rebuilt and the divider must appear in its new position.
$TMUX2 resize-pane -t0 -L 6 || exit 1
compare cache-resize-after
# --- Generation change: panes are swapped/rotated in place. ---
# Three columns, each pane titled so the order is visible. The pane status line
# makes a swap show up in the captured scene.
new_scene
$TMUX2 setw pane-border-format " #{pane_title} " || exit 1
$TMUX2 setw pane-border-status top || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t:.0 -T AAA || exit 1
$TMUX2 selectp -t:.1 -T BBB || exit 1
$TMUX2 selectp -t:.2 -T CCC || exit 1
$TMUX2 selectp -t:.0 || exit 1
compare cache-rotate-before
# Rotate the panes; the titles must move with them in the rebuilt scene.
# rotate-window keeps the cell geometry, so only its scene invalidation makes
# this differ from cache-rotate-before.
$TMUX2 rotate-window || exit 1
$TMUX2 selectp -t:.0 || exit 1
compare cache-rotate-after
# --- Generation change: two panes swapped in place. ---
# swap-pane likewise moves panes between cells without changing geometry; the
# swapped titles must appear in the rebuilt scene.
new_scene
$TMUX2 setw pane-border-format " #{pane_title} " || exit 1
$TMUX2 setw pane-border-status top || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t:.0 -T LEFT || exit 1
$TMUX2 selectp -t:.1 -T RIGHT || exit 1
$TMUX2 selectp -t:.0 || exit 1
compare cache-swap-before
$TMUX2 swap-pane -d -s:.0 -t:.1 || exit 1
$TMUX2 selectp -t:.0 || exit 1
compare cache-swap-after
# --- Window change: the client switches between two differently laid out
# windows and back. The scene is keyed on the window, so each must show its own
# layout and switching back must not show the other window's cached scene. ---
# Window A: a single pane (no internal border).
$TMUX2 neww -d "sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"WINA%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x40 -y14 || exit 1
A=$($TMUX2 display -p '#{window_id}') || exit 1
# Window B: a top/bottom split (a horizontal border).
$TMUX2 neww -d "sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"WINB%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x40 -y14 || exit 1
$TMUX2 splitw -v "$C" || exit 1
B=$($TMUX2 display -p '#{window_id}') || exit 1
$TMUX2 selectw -t$A || exit 1
compare cache-window-a
$TMUX2 selectw -t$B || exit 1
compare cache-window-b
$TMUX2 selectw -t$A || exit 1
compare cache-window-a-again
# --- Size change: the client (and so the scene) is resized. ---
# With window-size latest the inner window tracks the client size, so resizing
# the outer window resizes the inner client and the scene. The cached scene must
# be rebuilt at the new size (the scene->sx/sy mismatch path in
# redraw_get_scene), not drawn at the old size.
$TMUX2 set -g window-size latest || exit 1
$TMUX2 neww -d "sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"SIZE%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 splitw -v "$C" || exit 1
compare cache-resizeclient-before
$TMUX resizew -x30 -y10 || exit 1
compare cache-resizeclient-after
exit 0

View File

@@ -0,0 +1,221 @@
#!/bin/sh
# Exercise screen-redraw.c drawing of floating panes: their borders and titles,
# clipping at the window edge, and the interaction with the area outside the
# window (when the window is smaller than the attached client).
#
# Each scene is rendered in an inner tmux attached inside an outer tmux pane.
# The outer pane is captured (the full client scene drawn by screen-redraw.c)
# and compared with a golden file in screen_redraw_results/.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
compare() {
sleep 1
$TMUX capturep -p $2 >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
# new_scene <width> <height>: fresh inner window of the given window size.
new_scene() {
$TMUX2 neww -d "sh -c 'printf base; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x$1 -y$2 || exit 1
}
# tile_2x2: split the current window into a 2x2 grid of tiled panes.
tile_2x2() {
C="sh -c 'exec sleep 100'"
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 select-layout tiled || exit 1
}
# fill_base_pattern: make clipped floating panes visibly cover every column.
fill_base_pattern() {
$TMUX2 respawnp -k "sh -c 'i=0; while [ \$i -lt 12 ]; do printf \"%02d:abcdefghijklmnopqrstuvwxyz0123456789\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
}
# fill_all_panes: make each pane visibly nonblank.
fill_all_panes() {
for pane in $($TMUX2 list-panes -F '#{pane_id}'); do
$TMUX2 respawnp -k -t "$pane" "sh -c 'i=0; while [ \$i -lt 5 ]; do printf \"TILE%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
done
}
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y12 "sh -c 'printf base; exec sleep 100'" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
$TMUX2 set -g pane-border-format " #{pane_title} " || exit 1
$TMUX new -d -x40 -y12 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
# Basic floating pane, well inside the window.
new_scene 40 12
$TMUX2 new-pane -x20 -y6 -X8 -Y3 "sh -c 'printf FLOAT; exec sleep 100'" || exit 1
compare floating-basic
# Floating pane with a title on its border. pane-border-status also draws the
# base pane's title, so set it explicitly (the default is the hostname, which is
# not stable).
new_scene 40 12
$TMUX2 setw pane-border-status top || exit 1
$TMUX2 selectp -t:.0 -T base || exit 1
$TMUX2 new-pane -x20 -y6 -X8 -Y2 -T title \
"sh -c 'printf FLOAT; exec sleep 100'" || exit 1
compare floating-title
# Larger floating pane with double border lines.
new_scene 40 12
$TMUX2 new-pane -x28 -y8 -X4 -Y1 -B double \
"sh -c 'printf FLOAT; exec sleep 100'" || exit 1
compare floating-border-double
# Floating pane with no border lines: redraw_mark_pane_borders returns early so
# the float has no border at all, only its (clipped) content over the base pane.
new_scene 40 12
$TMUX2 new-pane -x20 -y6 -X10 -Y3 -B none \
"sh -c 'printf NOBORDER; exec sleep 100'" || exit 1
compare floating-noborder
# Floating pane positioned past the right and bottom edges: must clip.
new_scene 40 12
$TMUX2 new-pane -x20 -y6 -X30 -Y8 "sh -c 'printf CLIP; exec sleep 100'" || exit 1
compare floating-clip-edge
# Window smaller than the client (outside area filled), with a floating pane
# that overlaps the boundary into the outside region.
new_scene 28 8
$TMUX2 new-pane -x16 -y5 -X18 -Y4 "sh -c 'printf OUT; exec sleep 100'" || exit 1
compare floating-outside
# Floating pane clipped at the top-left corner (negative offsets).
new_scene 40 12
$TMUX2 new-pane -x18 -y6 -X-4 -Y-2 "sh -c 'printf TL; exec sleep 100'" || exit 1
compare floating-clip-topleft
# Floating panes clipped at each edge. The patterned base pane makes sure the
# clipped edge still obscures both content and borders underneath.
new_scene 40 12
fill_base_pattern
$TMUX2 new-pane -x20 -y6 -X-10 -Y3 "sh -c 'printf LEFT; exec sleep 100'" || exit 1
compare floating-clip-left
new_scene 40 12
fill_base_pattern
$TMUX2 new-pane -x20 -y6 -X30 -Y3 "sh -c 'printf RIGHT; exec sleep 100'" || exit 1
compare floating-clip-right
new_scene 40 12
fill_base_pattern
$TMUX2 new-pane -x20 -y6 -X10 -Y-3 "sh -c 'printf TOP; exec sleep 100'" || exit 1
compare floating-clip-top
new_scene 40 12
fill_base_pattern
$TMUX2 new-pane -x20 -y6 -X10 -Y9 "sh -c 'printf BOTTOM; exec sleep 100'" || exit 1
compare floating-clip-bottom
# Floating pane over a tiled 2x2 grid: the float draws a complete box and must
# NOT merge its borders with the tiled pane borders underneath.
new_scene 40 12
tile_2x2
fill_all_panes
$TMUX2 new-pane -x16 -y6 -X11 -Y3 "sh -c 'printf FLT; exec sleep 100'" || exit 1
compare floating-over-tiled
# Same, but the float uses double border lines while the tiled panes use single:
# the two border styles must coexist without merging.
new_scene 40 12
tile_2x2
fill_all_panes
$TMUX2 new-pane -x16 -y6 -X11 -Y3 -B double \
"sh -c 'printf FLT; exec sleep 100'" || exit 1
compare floating-over-tiled-double
# Two overlapping floating panes: the later (top) float draws over the earlier.
new_scene 40 12
$TMUX2 new-pane -x16 -y6 -X4 -Y2 "sh -c 'printf AAA; exec sleep 100'" || exit 1
$TMUX2 new-pane -x16 -y6 -X14 -Y6 "sh -c 'printf BBB; exec sleep 100'" || exit 1
compare floating-overlap
# Two floating panes with different per-pane configuration: one has its status on
# top with single borders, the other has its status on the bottom with heavy
# borders (pane-border-status and pane-border-lines are per-pane options).
new_scene 40 12
$TMUX2 setw pane-border-format " #{pane_title} " || exit 1
$TMUX2 new-pane -x16 -y4 -X3 -Y1 -T one \
"sh -c 'printf ONE; exec sleep 100'" || exit 1
$TMUX2 set -p pane-border-status top || exit 1
$TMUX2 set -p pane-border-lines single || exit 1
$TMUX2 new-pane -x16 -y4 -X18 -Y6 -T two \
"sh -c 'printf TWO; exec sleep 100'" || exit 1
$TMUX2 set -p pane-border-status bottom || exit 1
$TMUX2 set -p pane-border-lines heavy || exit 1
compare floating-mixed-config
# Floating pane over a pane that has a scrollbar: the float must draw over the
# scrollbar. Captured with -e since the scrollbar is drawn with styles.
new_scene 40 12
$TMUX2 setw pane-scrollbars on || exit 1
$TMUX2 setw pane-scrollbars-style "bg=black,fg=white,width=1,pad=0" || exit 1
$TMUX2 new-pane -x16 -y6 -X22 -Y3 "sh -c 'printf OVERSB; exec sleep 100'" || exit 1
compare floating-over-scrollbar -e
# Floating pane overlapping the client status line: the status line is not part
# of the window scene, so the float is clipped at the window's bottom edge.
new_scene 40 11
$TMUX2 set status on || exit 1
$TMUX2 set status-position bottom || exit 1
$TMUX2 set status-format[0] "" || exit 1
$TMUX2 new-pane -x20 -y6 -X8 -Y7 "sh -c 'printf OVERST; exec sleep 100'" || exit 1
compare floating-over-status
# A window left with only a floating pane: killing the single tiled pane removes
# it from the layout, so the area it occupied is no longer owned by any pane and
# is drawn as EMPTY cells (middle dots) around the float. This is the only way to
# produce a REDRAW_SPAN_EMPTY span.
new_scene 40 12
$TMUX2 new-pane -x20 -y6 -X8 -Y3 "sh -c 'printf FLOAT; exec sleep 100'" || exit 1
tiled=$($TMUX2 list-panes -F '#{pane_floating_flag} #{pane_id}' | \
awk '$1==0{print $2; exit}') || exit 1
$TMUX2 kill-pane -t "$tiled" || exit 1
compare floating-empty
exit 0

View File

@@ -0,0 +1,212 @@
#!/bin/sh
# Exercise screen-redraw.c pane-border-indicators: the arrow indicators that
# point at the active pane, and the two-pane border colour split.
#
# Arrows are drawn as glyphs (captured plain). The two-pane colour split is
# drawn with styles, so that scene is captured with escapes (-e) and uses
# distinct active/inactive border styles so the split is visible.
#
# Each scene is rendered in an inner tmux attached inside an outer tmux pane.
# The outer pane is captured and compared with a golden in screen-redraw-results/.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
# compare <name> [-e]: capture the outer pane and compare (or generate).
compare() {
sleep 1
$TMUX capturep -p $2 >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
new_scene() {
$TMUX2 neww -d "sh -c 'exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x40 -y12 || exit 1
}
C="sh -c 'exec sleep 100'"
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y12 "sh -c 'exec sleep 100'" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
$TMUX new -d -x40 -y12 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
# --- Arrows: must appear for whichever pane is active (GitHub #4780). ---
$TMUX2 set -g pane-border-indicators arrows || exit 1
# Two panes, left active: arrow points left.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare arrows-2pane-left
# Two panes, right active: arrow points right (the case that regressed).
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t1 || exit 1
compare arrows-2pane-right
# Three columns, middle active.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t1 || exit 1
compare arrows-3pane
# Four panes (2x2), one active.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 select-layout tiled || exit 1
$TMUX2 selectp -t0 || exit 1
compare arrows-4pane
# --- Two-pane border colour split. ---
# Distinct active/inactive styles so the coloured halves are visible; captured
# with -e to record the SGR.
$TMUX2 set -g pane-border-indicators colour || exit 1
# Left/right split: the border is vertical and is split into a top half (active
# pane colour) and a bottom half (the LAYOUT_LEFTRIGHT case).
new_scene
$TMUX2 setw pane-active-border-style fg=red || exit 1
$TMUX2 setw pane-border-style fg=green || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare two-pane-colour-vertical -e
# Top/bottom split: the border is horizontal and is split into a left half and a
# right half instead (the LAYOUT_TOPBOTTOM case).
new_scene
$TMUX2 setw pane-active-border-style fg=red || exit 1
$TMUX2 setw pane-border-style fg=green || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare two-pane-colour-horizontal -e
# The colour split only applies with exactly two tiled panes. With three panes
# the split is suppressed: the whole border uses the active pane's colour and
# there is no coloured half (redraw_check_two_pane_colours returns 0).
new_scene
$TMUX2 setw pane-active-border-style fg=red || exit 1
$TMUX2 setw pane-border-style fg=green || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare colour-three-suppressed -e
# A floating pane is ignored by the two-pane count, so two tiled panes plus a
# float still split. The float itself is never coloured by the indicator.
new_scene
$TMUX2 setw pane-active-border-style fg=red || exit 1
$TMUX2 setw pane-border-style fg=green || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 new-pane -x16 -y6 -X10 -Y2 "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare colour-two-plus-float -e
# --- Both indicators together. ---
# pane-border-indicators both enables the arrow and the colour split at once
# (it satisfies both the arrow and the colour branches). Two panes so the colour
# split also applies.
$TMUX2 set -g pane-border-indicators both || exit 1
new_scene
$TMUX2 setw pane-active-border-style fg=red || exit 1
$TMUX2 setw pane-border-style fg=green || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
compare indicators-both -e
# --- Marked pane. ---
# A marked pane (select-pane -m) has its border drawn reversed. Captured with -e
# to record the reverse attribute. The marked pane is made non-active so its
# reversed border is distinct from the active pane.
$TMUX2 set -g pane-border-indicators off || exit 1
# Left/right split, right pane marked.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 selectp -t1 -m || exit 1
compare marked-pane-lr -e
# Top/bottom split, bottom pane marked.
new_scene
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 selectp -t1 -m || exit 1
compare marked-pane-tb -e
# Three columns, middle pane marked (reversed border on both sides).
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 selectp -t1 -m || exit 1
compare marked-pane-three -e
# Floating pane marked: the whole floating box border is reversed.
new_scene
$TMUX2 new-pane -x20 -y6 -X8 -Y3 "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 selectp -t1 -m || exit 1
compare marked-pane-float -e
# Marked pane together with a pane status line: the title border is reversed too.
new_scene
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 setw pane-border-format " #{pane_index}:#{pane_title} " || exit 1
$TMUX2 setw pane-border-status top || exit 1
$TMUX2 selectp -t:.0 -T left || exit 1
$TMUX2 selectp -t:.1 -T right || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 selectp -t1 -m || exit 1
compare marked-pane-status -e
exit 0

View File

@@ -0,0 +1,116 @@
#!/bin/sh
# Exercise screen-redraw.c when the window is smaller than the attached client,
# so part of the client is outside the window. screen-redraw.c fills the outside
# area and draws a real border along the window's right and/or bottom edge (not
# just where panes meet). This checks redraw_get_window_offset and the OUTSIDE
# span handling, including how the window-edge border joins the pane borders.
#
# Each scene is rendered in an inner tmux attached inside an outer tmux pane.
# The outer client is 40x14; the inner window is made smaller with resizew. The
# outer pane is captured and compared with a golden in screen-redraw-results/.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
compare() {
sleep 1
$TMUX capturep -p >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
# new_scene <width> <height>: fresh inner window smaller than the 40x14 client.
new_scene() {
$TMUX2 neww -d "sh -c 'i=0; while [ \$i -lt $(($2 - 1)) ]; do printf \"OUT%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 selectw -t:\$ || exit 1
$TMUX2 resizew -x$1 -y$2 || exit 1
}
C="sh -c 'i=0; while [ \$i -lt 8 ]; do printf \"PAN%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'"
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y14 "sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"OUT%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
$TMUX new -d -x40 -y14 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
# Single pane, narrower than the client: a border along the right edge.
new_scene 28 14
compare outside-right-single
# Narrower than the client with a left/right split: the inter-pane border plus a
# real border on the window's right edge, then the outside area.
new_scene 28 14
$TMUX2 splitw -h "$C" || exit 1
compare outside-right-split
# Shorter than the client with a top/bottom split: a real border on the window's
# bottom edge.
new_scene 40 9
$TMUX2 splitw -v "$C" || exit 1
compare outside-bottom-split
# Smaller in both dimensions with a 2x2 grid: borders on the right and bottom
# edges meeting the internal pane borders at the corner.
new_scene 28 9
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 select-layout tiled || exit 1
compare outside-both-2x2
# Window BIGGER than the client: only part of the window is viewed and the view
# can be panned (refresh-client). This exercises a non-zero scene offset.
# A 2x2 grid in a 60x20 window viewed through the 40x14 client.
new_scene 60 20
$TMUX2 splitw -h "$C" || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 selectp -t0 || exit 1
$TMUX2 splitw -v "$C" || exit 1
$TMUX2 select-layout tiled || exit 1
# Default view: the top-left of the window.
$TMUX2 refresh-client -U 100 || exit 1
$TMUX2 refresh-client -L 100 || exit 1
compare bigger-topleft
# Panned to the bottom-right of the window (down and right to the limit).
$TMUX2 refresh-client -D 100 || exit 1
$TMUX2 refresh-client -R 100 || exit 1
compare bigger-bottomright
exit 0

View File

@@ -0,0 +1,92 @@
#!/bin/sh
# Exercise drawing of popups (display-popup) over the window scene. A popup is an
# overlay drawn on top of the redraw scene (the overlay_draw path in
# screen-redraw.c), so this guards against regressions in how popups appear.
#
# A popup is modal and stays open until its command exits, so each scene fully
# re-creates the servers and re-attaches; the popup is opened in the background
# (display-popup blocks the client that runs it) and the outer pane is captured
# while it is open.
#
# Run with GENERATE=1 to (re)create the golden files.
PATH=/bin:/usr/bin
TERM=screen
LC_ALL=C.UTF-8
export TERM LC_ALL
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest -f/dev/null"
TMUX2="$TEST_TMUX -Ltest2 -f/dev/null"
RESULTS=screen-redraw-results
TMP=$(mktemp)
trap "rm -f $TMP; $TMUX kill-server 2>/dev/null; $TMUX2 kill-server 2>/dev/null" \
0 1 15
fail() {
echo "$*" >&2
exit 1
}
compare() {
sleep 1
$TMUX capturep -p >$TMP || exit 1
if [ -n "$GENERATE" ]; then
cp $TMP "$RESULTS/$1.result" || exit 1
echo "generated $1"
else
cmp -s $TMP "$RESULTS/$1.result" || \
fail "scene $1 differs from $RESULTS/$1.result"
fi
}
C="sh -c 'i=0; while [ \$i -lt 13 ]; do printf \"POP%02d abcdefghij\n\" \$i; i=\$((i + 1)); done; exec sleep 100'"
# setup: fresh inner window attached inside a fresh outer pane, 40x14.
setup() {
$TMUX kill-server 2>/dev/null
$TMUX2 kill-server 2>/dev/null
$TMUX2 new -d -x40 -y14 "$C" || exit 1
$TMUX2 set -g status off || exit 1
$TMUX2 set -g window-size manual || exit 1
$TMUX2 resizew -x40 -y14 || exit 1
$TMUX new -d -x40 -y14 || exit 1
$TMUX set -g status off || exit 1
$TMUX set -g window-size manual || exit 1
$TMUX set -g default-terminal "tmux-256color" || exit 1
$TMUX send -l "$TMUX2 attach" || exit 1
$TMUX send Enter || exit 1
sleep 1
}
# popup <args>: open a popup running a fixed command, in the background (it stays
# open because the command sleeps; the servers are killed at the next setup).
popup() {
$TMUX2 display-popup "$@" -E "sh -c 'printf POPUP; exec sleep 100'" &
sleep 1
}
# Basic popup over a single pane.
setup
popup -w20 -h6 -x6 -y3
compare popup-basic
# Popup over a split: drawn on top of the pane border.
setup
$TMUX2 splitw -h "$C" || exit 1
popup -w24 -h8 -x8 -y3
compare popup-over-split
# Popup with no border lines (-B).
setup
popup -B -w20 -h6 -x6 -y3
compare popup-noborder
# Popup with double border lines.
setup
popup -b double -w20 -h6 -x6 -y3
compare popup-double
exit 0

View File

@@ -0,0 +1,12 @@

View File

@@ -0,0 +1,12 @@

View File

@@ -0,0 +1,12 @@
│ │
→ ←
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,12 @@
─↑─────────────────┼────────────────────

View File

@@ -0,0 +1,12 @@
BIDI-LEFT 12345
BIDI-RIGHT 67890

View File

@@ -0,0 +1,12 @@
BIDI-LEFT 12345 BIDI-PANE 12345
BIDI-RIGHT 67890 BIDI-PANE 67890
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦
⁩│⁦

View File

@@ -0,0 +1,14 @@
│PAN06 abcdefghij
│PAN07 abcdefghij
─────────┼──────────────────────────────
│PAN00 abcdefghij
│PAN01 abcdefghij
│PAN02 abcdefghij
│PAN03 abcdefghij
│PAN04 abcdefghij
│PAN05 abcdefghij
│PAN06 abcdefghij
│PAN07 abcdefghij

View File

@@ -0,0 +1,14 @@
OUT11 abcdefghij │PAN00 abcd
OUT12 abcdefghij │PAN01 abcd
OUT13 abcdefghij │PAN02 abcd
OUT14 abcdefghij │PAN03 abcd
OUT15 abcdefghij │PAN04 abcd
OUT16 abcdefghij │PAN05 abcd
OUT17 abcdefghij │PAN06 abcd
OUT18 abcdefghij │PAN07 abcd
─────────────────────────────┼──────────
PAN00 abcdefghij │PAN00 abcd
PAN01 abcdefghij │PAN01 abcd
PAN02 abcdefghij │PAN02 abcd
PAN03 abcdefghij │PAN03 abcd

View File

@@ -0,0 +1,14 @@
hij │PANE00 abcdefghij
BASE07 abcdefg│PANE01 abcdefghij
hij │PANE02 abcdefghij
BASE08 abcdefg│PANE03 abcdefghij
hij │PANE04 abcdefghij
BASE09 abcdefg│
hij │
BASE10 abcdefg│
hij │
BASE11 abcdefg│
hij │
BASE12 abcdefg│
hij │

View File

@@ -0,0 +1,14 @@
BASE00 abcdefghij │PANE00 abcdefghij
BASE01 abcdefghij │PANE01 abcdefghij
BASE02 abcdefghij │PANE02 abcdefghij
BASE03 abcdefghij │PANE03 abcdefghij
BASE04 abcdefghij │PANE04 abcdefghij
BASE05 abcdefghij │
BASE06 abcdefghij │
BASE07 abcdefghij │
BASE08 abcdefghij │
BASE09 abcdefghij │
BASE10 abcdefghij │
BASE11 abcdefghij │
BASE12 abcdefghij │

View File

@@ -0,0 +1,10 @@
SIZE09 abcdefghij
SIZE10 abcdefghij
SIZE11 abcdefghij
SIZE12 abcdefghij
──────────────────────────────
PANE02 abcdefghij
PANE03 abcdefghij
PANE04 abcdefghij

View File

@@ -0,0 +1,14 @@
SIZE07 abcdefghij
SIZE08 abcdefghij
SIZE09 abcdefghij
SIZE10 abcdefghij
SIZE11 abcdefghij
SIZE12 abcdefghij
────────────────────────────────────────
PANE00 abcdefghij
PANE01 abcdefghij
PANE02 abcdefghij
PANE03 abcdefghij
PANE04 abcdefghij

View File

@@ -0,0 +1,14 @@
── BBB ───┬── CCC ──┬── AAA ────────────
PANE00 abc│cdefghij │BASE01 abcdefghij
defghij │PANE03 ab│BASE02 abcdefghij
PANE01 abc│cdefghij │BASE03 abcdefghij
defghij │PANE04 ab│BASE04 abcdefghij
PANE02 abc│cdefghij │BASE05 abcdefghij
defghij │ │BASE06 abcdefghij
PANE03 abc│ │BASE07 abcdefghij
defghij │ │BASE08 abcdefghij
PANE04 abc│ │BASE09 abcdefghij
defghij │ │BASE10 abcdefghij
│ │BASE11 abcdefghij
│ │BASE12 abcdefghij
│ │

View File

@@ -0,0 +1,14 @@
── AAA ───┬── BBB ──┬── CCC ────────────
BASE07 abc│PANE00 ab│PANE00 abcdefghij
defghij │cdefghij │PANE01 abcdefghij
BASE08 abc│PANE01 ab│PANE02 abcdefghij
defghij │cdefghij │PANE03 abcdefghij
BASE09 abc│PANE02 ab│PANE04 abcdefghij
defghij │cdefghij │
BASE10 abc│PANE03 ab│
defghij │cdefghij │
BASE11 abc│PANE04 ab│
defghij │cdefghij │
BASE12 abc│ │
defghij │ │
│ │

View File

@@ -0,0 +1,14 @@
── RIGHT ───────────┬── LEFT ───────────
PANE00 abcdefghij │BASE01 abcdefghij
PANE01 abcdefghij │BASE02 abcdefghij
PANE02 abcdefghij │BASE03 abcdefghij
PANE03 abcdefghij │BASE04 abcdefghij
PANE04 abcdefghij │BASE05 abcdefghij
│BASE06 abcdefghij
│BASE07 abcdefghij
│BASE08 abcdefghij
│BASE09 abcdefghij
│BASE10 abcdefghij
│BASE11 abcdefghij
│BASE12 abcdefghij

View File

@@ -0,0 +1,14 @@
── LEFT ────────────┬── RIGHT ──────────
BASE01 abcdefghij │PANE00 abcdefghij
BASE02 abcdefghij │PANE01 abcdefghij
BASE03 abcdefghij │PANE02 abcdefghij
BASE04 abcdefghij │PANE03 abcdefghij
BASE05 abcdefghij │PANE04 abcdefghij
BASE06 abcdefghij │
BASE07 abcdefghij │
BASE08 abcdefghij │
BASE09 abcdefghij │
BASE10 abcdefghij │
BASE11 abcdefghij │
BASE12 abcdefghij │

View File

@@ -0,0 +1,14 @@
WINA00 abcdefghij
WINA01 abcdefghij
WINA02 abcdefghij
WINA03 abcdefghij
WINA04 abcdefghij
WINA05 abcdefghij
WINA06 abcdefghij
WINA07 abcdefghij
WINA08 abcdefghij
WINA09 abcdefghij
WINA10 abcdefghij
WINA11 abcdefghij
WINA12 abcdefghij

View File

@@ -0,0 +1,14 @@
WINA00 abcdefghij
WINA01 abcdefghij
WINA02 abcdefghij
WINA03 abcdefghij
WINA04 abcdefghij
WINA05 abcdefghij
WINA06 abcdefghij
WINA07 abcdefghij
WINA08 abcdefghij
WINA09 abcdefghij
WINA10 abcdefghij
WINA11 abcdefghij
WINA12 abcdefghij

View File

@@ -0,0 +1,14 @@
WINB07 abcdefghij
WINB08 abcdefghij
WINB09 abcdefghij
WINB10 abcdefghij
WINB11 abcdefghij
WINB12 abcdefghij
────────────────────────────────────────
PANE00 abcdefghij
PANE01 abcdefghij
PANE02 abcdefghij
PANE03 abcdefghij
PANE04 abcdefghij

View File

@@ -0,0 +1,12 @@
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,12 @@
│
┌────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
└────────────────┘
│
│
│

View File

@@ -0,0 +1,14 @@
═══════════════════╬════════════════════

View File

@@ -0,0 +1,14 @@
━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,14 @@
1
1
1
1
1
1
0000000000000000000011111111111111111111
2
2
2
2
2
2
2

View File

@@ -0,0 +1,14 @@
|
|
|
|
|
|
-------------------+--------------------
|
|
|
|
|
|
|

View File

@@ -0,0 +1,14 @@
───────────────────┼────────────────────

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,12 @@
base
┌────────────────────┐
│FLOAT │
│ │
│ │
│ │
│ │
│ │
└────────────────────┘

View File

@@ -0,0 +1,12 @@
bas╔════════════════════════════╗
║FLOAT ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╚════════════════════════════╝

View File

@@ -0,0 +1,12 @@
01:abcdefghijklmnopqrstuvwxyz0123456789
02:abcdefghijklmnopqrstuvwxyz0123456789
03:abcdefghijklmnopqrstuvwxyz0123456789
04:abcdefghijklmnopqrstuvwxyz0123456789
05:abcdefghijklmnopqrstuvwxyz0123456789
06:abcdefghijklmnopqrstuvwxyz0123456789
07:abcdefghijklmnopqrstuvwxyz0123456789
08:abcdefghijklmnopqrstuvwxyz0123456789
09:abcdef┌────────────────────┐23456789
10:abcdef│BOTTOM │23456789
11:abcdef│ │23456789
│ │

View File

@@ -0,0 +1,12 @@
base
┌──────────
│CLIP

View File

@@ -0,0 +1,12 @@
01:abcdefghijklmnopqrstuvwxyz0123456789
02:abcdefghijklmnopqrstuvwxyz0123456789
──────────┐ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
│ijklmnopqrstuvwxyz0123456789
──────────┘ijklmnopqrstuvwxyz0123456789
11:abcdefghijklmnopqrstuvwxyz0123456789

View File

@@ -0,0 +1,12 @@
01:abcdefghijklmnopqrstuvwxyz0123456789
02:abcdefghijklmnopqrstuvwxyz0123456789
03:abcdefghijklmnopqrstuvwxyz┌──────────
04:abcdefghijklmnopqrstuvwxyz│RIGHT
05:abcdefghijklmnopqrstuvwxyz│
06:abcdefghijklmnopqrstuvwxyz│
07:abcdefghijklmnopqrstuvwxyz│
08:abcdefghijklmnopqrstuvwxyz│
09:abcdefghijklmnopqrstuvwxyz│
10:abcdefghijklmnopqrstuvwxyz└──────────
11:abcdefghijklmnopqrstuvwxyz0123456789

View File

@@ -0,0 +1,12 @@
01:abcdef│ │23456789
02:abcdef│ │23456789
03:abcdef│ │23456789
04:abcdef└────────────────────┘23456789
05:abcdefghijklmnopqrstuvwxyz0123456789
06:abcdefghijklmnopqrstuvwxyz0123456789
07:abcdefghijklmnopqrstuvwxyz0123456789
08:abcdefghijklmnopqrstuvwxyz0123456789
09:abcdefghijklmnopqrstuvwxyz0123456789
10:abcdefghijklmnopqrstuvwxyz0123456789
11:abcdefghijklmnopqrstuvwxyz0123456789

View File

@@ -0,0 +1,12 @@
──────────────┘

View File

@@ -0,0 +1,12 @@
········································
········································
·······┌────────────────────┐···········
·······│FLOAT │···········
·······│ │···········
·······│ │···········
·······│ │···········
·······│ │···········
·······│ │···········
·······└────────────────────┘···········
········································

View File

@@ -0,0 +1,12 @@
ba┌── one ─────────┐
│ONE │
│ │
│ │
│ │
└──────────────┏━━━━━━━━━━━━━━━━┓
┃TWO ┃
┃ ┃
┃ ┃
┃ ┃
┗━━ two ━━━━━━━━━┛

View File

@@ -0,0 +1,12 @@
base
NOBORDER

View File

@@ -0,0 +1,12 @@
base │···········
│···········
│···········
┌──────────│···········
│OUT │···········
│ │···········
│ │···········
│ │···········
────────────────────────────┘···········
········································
········································
········································

View File

@@ -0,0 +1,12 @@
base 
 
 ┌────────────────┐
 │OVERSB  │
 │  │
 │  │
 │  │
 │  │
 │  │
 └────────────────┘
 
 

View File

@@ -0,0 +1,12 @@
base
┌────────────────────┐
│OVERST │
│ │
│ │
│ │

View File

@@ -0,0 +1,12 @@
TILE01 abcdefghij │TILE01 abcdefghij
TILE02 abcdefghij │TILE02 abcdefghij
TILE03 abc╔════════════════╗bcdefghij
TILE04 abc║FLT ║bcdefghij
║ ║
──────────║ ║────────────
TILE00 abc║ ║bcdefghij
TILE01 abc║ ║bcdefghij
TILE02 abc║ ║bcdefghij
TILE03 abc╚════════════════╝bcdefghij
TILE04 abcdefghij │TILE04 abcdefghij

View File

@@ -0,0 +1,12 @@
TILE01 abcdefghij │TILE01 abcdefghij
TILE02 abcdefghij │TILE02 abcdefghij
TILE03 abc┌────────────────┐bcdefghij
TILE04 abc│FLT │bcdefghij
│ │
──────────│ │────────────
TILE00 abc│ │bcdefghij
TILE01 abc│ │bcdefghij
TILE02 abc│ │bcdefghij
TILE03 abc└────────────────┘bcdefghij
TILE04 abcdefghij │TILE04 abcdefghij

View File

@@ -0,0 +1,12 @@
base
┌────────────────┐
│AAA │
│ │
│ │
│ ┌────────────────┐
│ │BBB │
│ │ │
└─────────│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,12 @@
── base ────────────────────────────────
base ┌── title ───────────┐
│FLOAT │
│ │
│ │
│ │
│ │
│ │
└────────────────────┘

View File

@@ -0,0 +1,12 @@
│
←
│
│
│
│
│
│
│
│
│
│

View File

@@ -0,0 +1,12 @@
┌────────────────────┐
│ │
│ │
│ │
│ │
│ │
│ │
└────────────────────┘

View File

@@ -0,0 +1,12 @@
│
│
│
│
│
│
│
│
│
│
│
│

View File

@@ -0,0 +1,12 @@
── 0:left ──────────┬── 1:right ────────
│
│
│
│
│
│
│
│
│
│
│

View File

@@ -0,0 +1,12 @@
────────────────────────────────────────

View File

@@ -0,0 +1,12 @@
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,14 @@
hij │ij │···········
OUT07 abcdefg│PAN07 abcdefgh│···········
hij │ij │···········
│ │···········
─────────────┼──────────────┤···········
hij │ij │···········
PAN07 abcdefg│PAN07 abcdefgh│···········
hij │ij │···········
│ │···········
─────────────┴──────────────┘···········
········································
········································
········································
········································

View File

@@ -0,0 +1,14 @@
OUT05 abcdefghij
OUT06 abcdefghij
OUT07 abcdefghij
────────────────────────────────────────
PAN05 abcdefghij
PAN06 abcdefghij
PAN07 abcdefghij
────────────────────────────────────────
········································
········································
········································
········································

View File

@@ -0,0 +1,14 @@
OUT00 abcdefghij │···········
OUT01 abcdefghij │···········
OUT02 abcdefghij │···········
OUT03 abcdefghij │···········
OUT04 abcdefghij │···········
OUT05 abcdefghij │···········
OUT06 abcdefghij │···········
OUT07 abcdefghij │···········
OUT08 abcdefghij │···········
OUT09 abcdefghij │···········
OUT10 abcdefghij │···········
OUT11 abcdefghij │···········
OUT12 abcdefghij │···········
│···········

View File

@@ -0,0 +1,14 @@
ij │hij │···········
OUT07 abcdefgh│PAN02 abcdefg│···········
ij │hij │···········
OUT08 abcdefgh│PAN03 abcdefg│···········
ij │hij │···········
OUT09 abcdefgh│PAN04 abcdefg│···········
ij │hij │···········
OUT10 abcdefgh│PAN05 abcdefg│···········
ij │hij │···········
OUT11 abcdefgh│PAN06 abcdefg│···········
ij │hij │···········
OUT12 abcdefgh│PAN07 abcdefg│···········
ij │hij │···········
│ │···········

View File

@@ -0,0 +1,14 @@
── p0 ─────────────┬── p1 ──────────────
── p2 ─────────────┼── p3 ──────────────

View File

@@ -0,0 +1,14 @@
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
── p0 ────┴── p1 ───┴── p2 ─────────────

View File

@@ -0,0 +1,14 @@
── p0 ────┬── p1 ───┬── p2 ─────────────
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,14 @@
── 0:left ──────────┴── 1:right ────────

View File

@@ -0,0 +1,14 @@
── 0:left ──────────┬── 1:right ────────

View File

@@ -0,0 +1,14 @@
POP00 ┌──────────────────┐
POP01 │POPUP │
POP02 │ │
POP03 │ │
POP04 │ │
POP05 └──────────────────┘
POP06 abcdefghij
POP07 abcdefghij
POP08 abcdefghij
POP09 abcdefghij
POP10 abcdefghij
POP11 abcdefghij
POP12 abcdefghij

View File

@@ -0,0 +1,14 @@
POP00 ╔══════════════════╗
POP01 ║POPUP ║
POP02 ║ ║
POP03 ║ ║
POP04 ║ ║
POP05 ╚══════════════════╝
POP06 abcdefghij
POP07 abcdefghij
POP08 abcdefghij
POP09 abcdefghij
POP10 abcdefghij
POP11 abcdefghij
POP12 abcdefghij

View File

@@ -0,0 +1,14 @@
POP00 POPUP
POP01
POP02
POP03
POP04
POP05
POP06 abcdefghij
POP07 abcdefghij
POP08 abcdefghij
POP09 abcdefghij
POP10 abcdefghij
POP11 abcdefghij
POP12 abcdefghij

View File

@@ -0,0 +1,14 @@
POP00 ab┌──────────────────────┐fghij
POP01 ab│POPUP │fghij
POP02 ab│ │fghij
POP03 ab│ │fghij
POP04 ab│ │fghij
POP05 ab│ │fghij
POP06 ab│ │fghij
POP07 ab└──────────────────────┘fghij
POP08 abcdefghij │POP08 abcdefghij
POP09 abcdefghij │POP09 abcdefghij
POP10 abcdefghij │POP10 abcdefghij
POP11 abcdefghij │POP11 abcdefghij
POP12 abcdefghij │POP12 abcdefghij

View File

@@ -0,0 +1,12 @@
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 

View File

@@ -0,0 +1,12 @@
SB00 abcdefghij 
SB01 abcdefghij 
SB02 ab┌────────────────────┐ 
SB03 ab│FLOAT00 abcdef  │ 
SB04 ab│FLOAT01 abcdef  │ 
SB05 ab│FLOAT02 abcdef  │ 
SB06 ab│FLOAT03 abcdef  │ 
SB07 ab│FLOAT04 abcdef  │ 
SB08 ab│  │ 
SB09 ab└────────────────────┘ 
SB10 abcdefghij 
 

View File

@@ -0,0 +1,12 @@
  SB00 abcdefghij
  SB01 abcdefghij
  SB02 abcdefghij
  SB03 abcdefghij
  SB04 abcdefghij
  SB05 abcdefghij
  SB06 abcdefghij
  SB07 abcdefghij
  SB08 abcdefghij
  SB09 abcdefghij
  SB10 abcdefghij
 

View File

@@ -0,0 +1,12 @@
 SB00 abcdefghij
 SB01 abcdefghij
 SB02 abcdefghij
 SB03 abcdefghij
 SB04 abcdefghij
 SB05 abcdefghij
 SB06 abcdefghij
 SB07 abcdefghij
 SB08 abcdefghij
 SB09 abcdefghij
 SB10 abcdefghij
 

View File

@@ -0,0 +1,12 @@
SB00 abcdefghij 
SB01 abcdefghij 
SB02 abcdefghij 
SB03 abcdefghij 
SB04 abcdefghij 
SB05 abcdefghij 
SB06 abcdefghij 
SB07 abcdefghij 
SB08 abcdefghij 
SB09 abcdefghij 
SB10 abcdefghij 
 

View File

@@ -0,0 +1,12 @@
SB00 abcdefghij 
SB01 abcdefghij 
SB02 abcdefghij 
SB03 abcdefghij 
SB04 abcdefghij 
SB05 abcdefghij 
SB06 abcdefghij 
SB07 abcdefghij 
SB08 abcdefghij 
SB09 abcdefghij 
SB10 abcdefghij 
 

View File

@@ -0,0 +1,12 @@
SB00 abcdefghij 
SB01 abcdefghij 
SB02 abcdefghij 
SB03 abcdefghij 
SB04 abcdefghij 
SB05 abcdefghij 
SB06 abcdefghij 
SB07 abcdefghij 
SB08 abcdefghij 
SB09 abcdefghij 
SB10 abcdefghij 
 

View File

@@ -0,0 +1,12 @@
 SB00 abcdefghij │ SBL00 abcdefghij
 SB01 abcdefghij │ SBL01 abcdefghij
 SB02 abcdefghij │ SBL02 abcdefghij
 SB03 abcdefghij │ SBL03 abcdefghij
 SB04 abcdefghij │ SBL04 abcdefghij
 SB05 abcdefghij │ SBL05 abcdefghij
 SB06 abcdefghij │ SBL06 abcdefghij
 SB07 abcdefghij │ SBL07 abcdefghij
 SB08 abcdefghij │ SBL08 abcdefghij
 SB09 abcdefghij │ SBL09 abcdefghij
 SB10 abcdefghij │ SBL10 abcdefghij
  │ 

View File

@@ -0,0 +1,12 @@
SB00 abcdefghij  │SBR00 abcdefghij 
SB01 abcdefghij  │SBR01 abcdefghij 
SB02 abcdefghij  │SBR02 abcdefghij 
SB03 abcdefghij  │SBR03 abcdefghij 
SB04 abcdefghij  │SBR04 abcdefghij 
SB05 abcdefghij  │SBR05 abcdefghij 
SB06 abcdefghij  │SBR06 abcdefghij 
SB07 abcdefghij  │SBR07 abcdefghij 
SB08 abcdefghij  │SBR08 abcdefghij 
SB09 abcdefghij  │SBR09 abcdefghij 
SB10 abcdefghij  │SBR10 abcdefghij 
  │ 

View File

@@ -0,0 +1,12 @@
TOP
──────────────────────────────
BOT

View File

@@ -0,0 +1,12 @@
TOP
──────────────────────────────
BOT

View File

@@ -0,0 +1,12 @@
TOP
──────────────────────────────
BOT

View File

@@ -0,0 +1,12 @@
TOP
──────────────────────────────
BOT

View File

@@ -0,0 +1,12 @@
TOP
──────────────────────────────
BOT

View File

@@ -0,0 +1,14 @@
════════════════════╦═══════════════════

View File

@@ -0,0 +1,14 @@
━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,14 @@
0000000000000000000022222222222222222222
2
2
2
2
2
2

View File

@@ -0,0 +1,14 @@
--------------------+-------------------
|
|
|
|
|
|

View File

@@ -0,0 +1,14 @@
────────────────────┬───────────────────

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,14 @@
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╠═════════╣
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║

View File

@@ -0,0 +1,14 @@
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┣━━━━━━━━━┫
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,14 @@
0 1
0 1
0 1
0 1
0 1
0 1
0 1
22222222222
2 2
2 2
2 2
2 2
2 2
2 2

View File

@@ -0,0 +1,14 @@
| |
| |
| |
| |
| |
| |
| |
+---------+
| |
| |
| |
| |
| |
| |

View File

@@ -0,0 +1,14 @@
│ │
│ │
│ │
│ │
│ │
│ │
│ │
├─────────┤
│ │
│ │
│ │
│ │
│ │
│ │

View File

@@ -0,0 +1,14 @@

View File

@@ -0,0 +1,14 @@
════════════════════╩═══════════════════

Some files were not shown because too many files have changed in this diff Show More