insert ./lib/pingpong
× lines-empty-1
-line 0 on_black,bright_white §§
+line 0 0 on_black,bright_white §§
× lines-empty
insert lines-empty-1 : +0
insert lines-empty-1 : +21
× lines-prompt-empty
-line 23 on_black,bright_white > § §§
-line 23 on_black,bright_white,reverse §§ §
+line 23 0 on_black,bright_white > § §§
+line 23 0 on_black,bright_white,reverse §§ §
× line-bookmark
-line 0 on_black,bright_white --------------------------------------------------------------------------------§§
+line 0 0 on_black,bright_white --------------------------------------------------------------------------------§§
× line-scrolldown
-line 21 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 0 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
× lines-status-prompt
-line 22 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§
+line 22 0 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§
+line 22 FOCUS_X on_black,bright_white,bold [FOCUS_STR]
insert lines-prompt-empty
× lines-status-prompt-start
insert lines-status-prompt : +22 x123456789x1234567 :foo.bar.baz:debug)
× line-invalid-prompt-command
-line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§
+line 0 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§
× line-invalid-prompt-command-unknown
insert line-invalid-prompt-command : +0 MSG :/CMD unknown
× line-ping
-line 0 on_black,bright_white < §§:§§:§§ PING :?
+line 0 0 on_black,bright_white < §§:§§:§§ PING :?
× line-pong
-line 0 on_black,bright_green > §§:§§:§§ PONG :?
+line 0 0 on_black,bright_green > §§:§§:§§ PONG :?
× lines-ping-pong
insert line-ping : +0 ? :??
insert line-pong : +1 ? :??
× line-tui-log
-line 0 on_black,bright_cyan # §§:§§:§§ ?§§
+line 0 0 on_black,bright_cyan # §§:§§:§§ ?§§
× line-bright-red-bold
-line 0 on_black,bright_red,bold ?§§
+line 0 0 on_black,bright_red,bold ?§§
× line-bright-white
-line 0 on_black,bright_white ?§§
+line 0 0 on_black,bright_white ?§§
× line-bright-green
-line 0 on_black,bright_green ?§§
+line 0 0 on_black,bright_green ?§§
× line-server-log
-line 0 on_black,bright_yellow $ §§:§§:§§ ?§§§
+line 0 0 on_black,bright_yellow $ §§:§§:§§ ?§§§
× line-client-msg
-line 0 on_black,bright_green > §§:§§:§§ ?§§
+line 0 0 on_black,bright_green > §§:§§:§§ ?§§
× line-cal
-line 0 on_black,bright_white 20§§-§§-§§ §§
+line 0 0 on_black,bright_white 20§§-§§-§§ §§
× history_0
insert line-cal : +0
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
insert lines-empty
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# nothing happening on empty command input
>
insert lines-empty
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scrolling on empty history does nothing
> /window.history.scroll up
insert lines-empty
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
> /window.history.scroll down
insert lines-empty
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# non-empty command input starts log at bottom, with date above it
insert enter-unprefixed : +0 ? :foo
insert lines-empty :20
insert history_0 :2 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scrolling on history merely 2 lines long won't do anything either
> /window.history.scroll up
insert lines-empty :20
insert history_0 :2 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
> /window.history.scroll down
insert lines-empty :20
insert history_0 :2 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# further inputs grow log upwards
> /foo
log 0 # invalid prompt command: /foo unknown
insert lines-empty :19
insert history_0 :3 +19
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scrolling up does something on history 3 lines long
> /window.history.scroll up
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[2] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scrolling down on 3-lines history
> /window.history.scroll down
insert lines-empty :19
insert history_0 :3 +19
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check history growing below up-scroll
> /window.history.scroll up
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[2] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
insert enter-help-win0
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[14] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :============([(0:12)]
+insert lines-status-prompt-start : +22 FOCUS_X=72 FOCUS_STR=(0:12) X123456789X123456789X :============(§§§§§§§§
# check scroll-down on newer history longer than half a screen width does not fully land at bottom
> /window.history.scroll down
insert lines-empty :9
insert history_0 :12 +9
insert line-scrolldown : +21 XXXXXX :[3] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§
# check previous scroll-down not hitting bottom be fully reversible
> /window.history.scroll up
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[14] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§
> /window.history.scroll down
insert lines-empty :9
insert history_0 :12 +9
insert line-scrolldown : +21 XXXXXX :[3] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§
# scroll to bottom, check history still growing up even beyond upper fold
> /window.history.scroll down
insert lines-empty :7
insert history_0 :15 +7
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
insert enter-unknown : +0 ? :0
insert enter-unknown : +0 ? :1
insert enter-unknown : +0 ? :2
insert enter-unknown : +0 ? :6
insert enter-unknown : +0 ? :7
insert history_0 1:23 +0
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scroll-down even with long history does nothing
> /window.history.scroll down
insert history_0 1:23 +0
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# quick look one scroll up to check single-scroll increase of below-scroll count (when up-scroll not limited, and all lines un-wrapped)
> /window.history.scroll up
insert lines-empty :9
insert history_0 :12 +9
insert line-scrolldown : +21 XXXXXX :[11] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check wrapping
> /window.history.scroll down
> /foo_0123456789_0123456789_0123456789_
log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789_ unknown
insert history_0 4:26 +0
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scroll-up over wrapped moves up less history lines than screen lines
> /window.history.scroll up
insert lines-empty :6
insert history_0 :15 +6
insert line-scrolldown : +21 XXXXXX :[10] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check scroll-down fully reversible even if over wrapped
> /window.history.scroll down
insert history_0 4:26 +0
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
> /window.history.scroll up
insert lines-empty :6
insert history_0 :15 +6
insert line-scrolldown : +21 XXXXXX :[10] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0]
+insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§
# check wrapped input only increases below-scroll count by one
> /bar_0123456789_0123456789_0123456789_
insert lines-empty :6
insert history_0 :15 +6
insert line-scrolldown : +21 XXXXXX :[11] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§
# check scroll-down over wrapped will snap down to bottom of wrapped
> /window.history.scroll down
insert history_0 5:26 +0
insert line-scrolldown : +21 XXXXXX :[1] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§
# # check scrolls-up over longer history until top
> /window.history.scroll up
insert lines-empty :6
insert history_0 :15 +6
insert line-scrolldown : +21 XXXXXX :[11] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§
> /window.history.scroll up
insert lines-empty :17
insert history_0 :3 +17
insert line-scrolldown : +21 XXXXXX :[22] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§
> /window.history.scroll up
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[25] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)]
+insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§
# check that triggering creation of new window with new lines adds it to status, with unread-lines count
insert connect-to-connected
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[25] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :([(0:1)] (1:14) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=60 FOCUS_STR=(0:1) X123456789X123456789X :(§§§§§§§ (1:14) (2:7)
# check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count)
> /window 1
insert lines-empty :8
insert history_1 :14 +8
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====((0:1) [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=====((0:1) §§§ (2:7)
# check switch-back to window 0, retaining clearing of window 1's unread-lines count
> /window 0
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX :[25] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7)
# check that on full scroll-down, we now have a bookmark above the newest lines not previously scrolled into
> /window.history.scroll down
insert lines-empty :9
insert history_0 :12 +9
insert line-scrolldown : +21 XXXXXX :[14] v
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7)
> /window.history.scroll down
insert history_0 2:23 +0
insert line-scrolldown : +21 XXXXXX :[3] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7)
> /window.history.scroll down
insert history_0 7:26 +0
insert line-bookmark : +19
insert history_0 26:28 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
# check SIGWINCH does not re-set bookmark
> raise_sigwinch
insert history_0 7:26 +0
insert line-bookmark : +19
insert history_0 26:28 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
# check that scrolling non-bottom bookmark out of sight, then scrolling it back into view again does not by itself move its position in the log history
> /window.history.scroll up
insert lines-empty :3
insert history_0 :18 +3
insert line-scrolldown : +21 XXXXXX :[8] vv
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
> /window.history.scroll down
insert history_0 7:26 +0
insert line-bookmark : +19
insert history_0 26:28 +20
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
# check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log
> /window 1
insert lines-empty :7
insert history_1 :14 +7
insert line-bookmark : +21
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check second switch-back places bookmark at bottom there too, since the newest lines previously succeeding it have now been read by us
> /window 0
insert history_0 7:28 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
# check new lines push bookmark up
insert enter-list-start
insert history_0 11:28 +0
insert line-bookmark : +17
insert history_0 28:32 +18
-insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7)
# check new lines growing in other window, one of which long enough to wrap, to re-start count in status (with wrapped only as single)
insert ping-pong : +0 ? :0
insert history_0 11:28 +0
insert line-bookmark : +17
insert history_0 28:32 +18
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:8) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:8) (2:7)
# check that switching to window with new lines, but left scroll-to-bottom, keeps the scroll-to-bottom, keeps bookmark after last line previously seen there
> /window 1
insert history_1 3:14 +0
insert line-bookmark : +11
insert history_1 14:24 +12
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check that growth below scroll does not by itself re-position bookmark in history
> /window.history.scroll up
insert lines-empty :7
insert history_1 0:14 +7
insert line-scrolldown : +21 XXXXXX :[10] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 4:14 +0
insert line-bookmark : +10
insert history_1 14:24 +11
insert line-scrolldown : +21 XXXXXX :[2] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
# check that with new lines left unread, switch away and back into window moves bookmark below newest read line, counts unread lines in status
> /window 0
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2:7)
> /window 1
insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX :[2] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
# check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave)
> /window 0
insert ping-pong : +0 ? :4
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:4) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:4) (2:7)
> /window 1
insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX :[4] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
# check same applies when leaving affected window with bookmark out-of-sight
> /window.history.scroll up
insert lines-empty :7
insert history_1 :14 +7
insert line-scrolldown : +21 XXXXXX :[12] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window 0
insert ping-pong : +0 ? :5
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:6) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:6) (2:7)
> /window 1
insert lines-empty :7
insert history_1 :14 +7
insert line-scrolldown : +21 XXXXXX :[14] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX :[6] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 9:24 +0
insert line-bookmark : +15
insert history_1 24:30 +16
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check log growth beyond max depth only remarkable after scrolling up to limit
insert ping-pong : +0 ? :6
insert history_1 11:24 +0
insert line-bookmark : +13
insert history_1 24:32 +14
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
> /window.history.scroll up
insert history_1 1:22 +0
insert line-scrolldown : +21 XXXXXX :[9] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
> /window.history.scroll up
insert lines-empty :10
insert history_1 :11 +10
insert line-scrolldown : +21 XXXXXX :[19] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
> /window.history.scroll up
insert lines-empty :20
insert history_1 :1 +20
insert line-scrolldown : +21 XXXXXX :[29] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status
insert ping-pong : +0 ? :7
insert lines-empty :20
insert history_1 2:3 +20
insert line-scrolldown : +21 XXXXXX :[29] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
# check unread-lines count potentially growing above max log depth if in other window
> /window 0
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2:7)
insert ping-pong : +0 ? :8
insert ping-pong : +0 ? :9
insert ping-pong : +0 ? :10
insert ping-pong : +0 ? :22
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:32) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:32) (2:7)
# check switching into window scrolled-top with more unread lines than max log depth shrinks former to latter, and scrolling down no bookmark is to be found
> /window 1
insert lines-empty :20
insert history_1 34:35 +20
insert line-scrolldown : +21 XXXXXX :[29] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7)
> /window.history.scroll down
insert lines-empty :9
insert history_1 34:46 +9
insert line-scrolldown : +21 XXXXXX :[18] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 36:57 +0
insert line-scrolldown : +21 XXXXXX :[7] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:7)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:7) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 42:62 +0
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check bookmark remains absent with log growing while scrolled to bottom, …
insert ping-pong : +0 ? :23
insert history_1 44:64 +0
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# … as well as if further growth happens below scroll
> /window.history.scroll up
insert lines-empty :2
insert history_1 36:55 +2
insert line-scrolldown : +21 XXXXXX :[11] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
insert ping-pong : +0 ? :24
insert lines-empty :4
insert history_1 38:55 +4
insert line-scrolldown : +21 XXXXXX :[13] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 45:66 +0
insert line-scrolldown : +21 XXXXXX :[2] vv
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7)
> /window.history.scroll down
insert history_1 46:68 +0
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
# check unread-lines status not growing beyond max log if within active window, and …
> /window.history.scroll up
insert lines-empty :2
insert history_1 38:55 +2
insert line-scrolldown : +21 XXXXXX :[11] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7)
insert ping-pong : +0 ? :25
insert ping-pong : +0 ? :26
insert ping-pong : +0 ? :27
insert lines-empty :20
insert history_1 68:69 +20
insert line-scrolldown : +21 XXXXXX :[29] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7)
# … setting bookmark visible after switching back-and-forth
> /window 0
insert history_0 11:32 +0
insert line-bookmark : +21
-insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:29) (2:7)
+insert lines-status-prompt-start : +22 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:29) (2:7)
> /window 1
insert lines-empty :19
insert history_1 68:69 +19
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX :[29] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7)
> /window.history.scroll down
insert lines-empty :8
insert history_1 68:69 +8
insert line-bookmark : +9
insert history_1 69:80 +10
insert line-scrolldown : +21 XXXXXX :[18] v
-insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7)
+insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7)
× servermsglogged-and-line-unwrapped
insert servermsglogged : +0 MSG :XXX
-line 21 on_black,bright_white < §§:§§:§§ XXX§§
+line 21 0 on_black,bright_white < §§:§§:§§ XXX§§
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# check wrap if last space-separated item one char too long
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 01
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
-line 21 on_black,bright_white 01§§
+line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
+line 21 0 on_black,bright_white 01§§
# check wrap if item starts right after width-final space
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789 1
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§
-line 21 on_black,bright_white 1§§
+line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§
+line 21 0 on_black,bright_white 1§§
# check wrap if item starts right after space after item extending to end of width
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 2
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
-line 21 on_black,bright_white 2§§
+line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
+line 21 0 on_black,bright_white 2§§
# check wrap if item starts right after double-space after item extending to end of width
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 3
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
-line 21 on_black,bright_white 3§§
+line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
+line 21 0 on_black,bright_white 3§§
# check wrap on item too large to fit into screen width minus indent
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678
-line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
-line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§
-line 21 on_black,bright_white 8
+line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
+line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§
+line 21 0 on_black,bright_white 8
# check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term)
insert servermsglogged-and-line-unwrapped : +0 XXX ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567 💓
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 💓
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
-line 21 on_black,bright_white 💓§§
+line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
+line 21 0 on_black,bright_white 💓§§
insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓
-line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
-line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§
-line 21 on_black,bright_white 💓§§
+line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
+line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§
+line 21 0 on_black,bright_white 💓§§
# check interpretation and escape of formatting characters
insert servernotice : +0 XXX :*** check that {esc|ape}s, formatting not counting into wrap
-line 20 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§
-line 21 on_black,bright_white into wrap§§
+line 20 0 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§
+line 21 0 on_black,bright_white into wrap§§
> /window 2
-line 21 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§
-line 21 on_black,bright_white,bold §§§§§§§§§§§§server§
+line 21 0 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§
+line 21 0 on_black,bright_white,bold §§§§§§§§§§§§server§