-# on /connect init databases, log in new windows
-> /connect foo.bar.baz foo:bar baz:foobarbazquux
-| standard-clears-in
-| isupport-clear-in
+× isupport-clear
log 1 $.. isupport cleared
log 1 $.. isupport:CHANTYPES set to: [#&]
log 1 $.. isupport:PREFIX set to: [(ov)@+]
log 1 $.. isupport:USERLEN set to: [10]
-| isupport-clear-out
+
+× standard-clear
+insert isupport-clear : +1
log 1 $.. caps cleared
log 1 $.. users cleared
log 1 $.. channels cleared
log , $.. DISCONNECTED
-| standard-clears-out
-# connect with values set by /connect, init CAP negotation
-log 1 $.. hostname set to: [foo.bar.baz]
-log 1 $.. port set to: [-1]
-log 1 $.. nick_wanted set to: [foo]
-log 1 $.. user_wanted set to: [foobarbazquux]
-log 1 $.. realname set to: [baz]
-log 1 $.. password set to: [bar]
-| conn-in
+× conn_init_0
log 1 $.. port set to: [6697]
-| conn0-in
log 1 $.. connection_state set to: [connecting]
log 1 $.. connection_state set to: [connected]
-| conn0-out
log , $.. CONNECTED
-| conn1-in
log 1 >.. CAP LS :302
-| conn-out
log 1 >.. USER foobarbazquux 0 * :baz
log 1 >.. NICK :foo
+× conn_init_1
# expect some NOTICE and PING to process/reply during initiation
loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident...
log 2 <.. (server) *** Looking up your ident...
log 2 <.. (server) *** Found your hostname (baz.bar.foo)
loggedservermsg 0 1 <.. PING :?
log 1 >.. PONG :?
-
# handle 433
loggedservermsg 0 1 <.. :*.?.net 433 * foo :Nickname already in use
log 1 $!. nickname already in use, trying increment
loggedservermsg 0 1 <.. :*.?.net 433 * foo0 :Nickname already in use
log 1 $!. nickname already in use, trying increment
log 1 >.. NICK :foo1
-
# collect server capabilities
loggedservermsg 0 1 <.. :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify
log 1 >.. CAP REQ :sasl
log 1 $.. caps:sasl:data set to: []
log 1 $.. caps:sasl:data set to: [PLAIN,EXTERNAL]
log 1 $.. caps:sasl:enabled set to: [True]
-
# authenticate via SASL, collect items of user identity
log 1 $.. sasl_auth_state set to: [attempting]
log 1 >.. AUTHENTICATE :PLAIN
log 1 $.. sasl_account set to: [foo]
loggedservermsg 0 1 <.. :foo.bar.baz 903 foo1 :SASL authentication successful
log 1 $.. sasl_auth_state set to: [SASL authentication successful]
-
# finish CAP negotation, thus login procedure
log 1 >.. CAP :END
+× conn_init_2
# of all pre-MOTD greeting messages, only process isupports
loggedservermsg 0 1 <.. :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network
-| conn1-out
-| conn2-in
loggedservermsg 0 1 <.. :foo.bar.baz 002 foo1 :Your host is foo.bar.baz
loggedservermsg 0 1 <.. :foo.bar.baz 003 foo1 :This server was created Jan 1 2020
loggedservermsg 0 1 <.. :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi
loggedservermsg 0 1 <.. :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150
loggedservermsg 0 1 <.. :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050
loggedservermsg 0 1 <.. :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received)
-
# collect MOTD into a single output (rather than line-by-line)
loggedservermsg 0 1 <.. :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day -
loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Howdy! -
log 1 $.. - Howdy! -
log 1 $.. - Welcome! -
log 1 $.. - (to this server) -
-
# collect user mode
loggedservermsg 0 1 <.. :foo1 MODE foo1 :+Ziw
log 1 $.. users:me:modes set to: [+Ziw]
-
# handle bot query NOTICE
loggedservermsg 0 1 <.. :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
log 3 <.. (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
-| conn2-out
-
-# check difference in available commands when switching to client window
-> /join #test
-log 0 #!. invalid prompt command: /join unknown
-> /list
-log 0 #.. windows available via /window:
-log 0 #.. 0) :start
-log 0 #.. 1) foo.bar.baz:debug
-log 0 #.. 2) foo.bar.baz:server
-log 0 #.. 3) foo.bar.baz/SaslServ
-| conn3-in
-> /window 1
-> /help
-log 1 #.. commands available in this window:
-log 1 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
-log 1 #.. /disconnect [QUIT_MSG]
-log 1 #.. /help
-log 1 #.. /join CHANNEL
-log 1 #.. /list
-log 1 #.. /nick NEW_NICK
-log 1 #.. /privmsg TARGET MSG
-log 1 #.. /prompt_enter
-log 1 #.. /quit
-log 1 #.. /raw VERB [PARAMS_STR]
-log 1 #.. /reconnect
-log 1 #.. /window TOWARDS
-log 1 #.. /window.disconnect [QUIT_MSG]
-log 1 #.. /window.history.scroll DIRECTION
-log 1 #.. /window.join CHANNEL
-log 1 #.. /window.nick NEW_NICK
-log 1 #.. /window.paste
-log 1 #.. /window.privmsg TARGET MSG
-log 1 #.. /window.prompt.backspace
-log 1 #.. /window.prompt.move_cursor DIRECTION
-log 1 #.. /window.prompt.scroll DIRECTION
-log 1 #.. /window.raw VERB [PARAMS_STR]
-log 1 #.. /window.reconnect
+× during_conn
# test recoverable 432
> /nick @foo
log 1 >.. NICK :@foo
loggedservermsg 0 1 <.. :*.?.net 432 foo1 @foo :Erroneous nickname
log 1 $!. nickname refused for bad format, keeping current one
-
# join channel, collect topic, residents; update me:user from JOIN message; ensure topic.who not affecting users DB
> /join #test
log 1 >.. JOIN :#test
log 1 $.. 1
log 1 $.. me
log 4 $.. residents: bar, foo1
-
# deliver PRIVMSG to channel window, update sender's user+host from metadata
loggedservermsg 0 1 <.. :bar!~bar@bar.bar PRIVMSG #test :hi there
log 1 $.. users:1:user set to: [~bar]
log 1 $.. users:1:host set to: [bar.bar]
log 4 <.. [bar] hi there
-
# check _changing_ TOPIC message is communicated to channel window, as long as either content or who change
loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz
log 1 $.. channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))]
loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :abc def ghi
log 1 $.. channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))]
log 4 $.. bar!~bar@bar.bar set topic: abc def ghi
-
# process non-self channel JOIN
loggedservermsg 0 1 <.. :baz!~baz@baz.baz JOIN :#test
log 1 $.. users:2:nick set to: [?]
log 1 $.. 2
log 1 $.. me
log 4 $.. baz!~baz@baz.baz joins
-
# join second channel with partial residents identity to compare distribution of resident-specific messages
> /join #testtest
log 1 >.. JOIN :#testtest
log 1 $.. 2
log 1 $.. me
log 5 $.. residents: baz, foo1
-
# handle query window with known user
loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :hi there
log 6 <.. [baz] hi there
log 6 >.. [foo1] hello, how is it going
loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :fine!
log 6 <.. [baz] fine!
-
# handle failure to query absent user
> /privmsg barbar hello!
log 1 >.. PRIVMSG barbar :hello!
log 7 >.. [foo1] hello!
loggedservermsg 0 1 <.. :*.?.net 401 foo1 barbar :No such nick/channel
log 7 $!. barbar not online
-
# handle non-self renaming
loggedservermsg 0 1 <.. :baz!~baz@baz.baz NICK :bazbaz
log 1 $.. users:2:nick set to: [bazbaz]
log 4,5,6 $.. baz!~baz@baz.baz renames bazbaz
-
# handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN
loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz PART :#test
log 1 $.. channels:#test:exits:2 set to: [P]
log 1 $.. 2
log 1 $.. me
log 4 $.. bazbaz!~baz@baz.baz joins
-
# handle non-self PART in only inhabited channel, lose identity, re-join as new identity
loggedservermsg 0 1 <.. :bar!~bar@bar.bar PART :#test
log 1 $.. channels:#test:exits:1 set to: [P]
log 1 $.. 3
log 1 $.. me
log 4 $.. bar!~bar@bar.bar joins
-
# handle non-self QUIT
loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz QUIT :Client Quit
log 1 $.. users:2:exit_msg set to: [QClient Quit]
log 5 $.. bazbaz!~baz@baz.baz quits: Client Quit
log 1 $.. channels:#testtest:exits:2 cleared
log 1 $.. users:2 cleared
-
# handle self-PART: clear channel, and its squatters
loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo PART :#test
log 1 $.. channels:#test:exits:me set to: [P]
log 1 $.. channels:#test:exits:me cleared
log 1 $.. channels:#test cleared
log 1 $.. users:3 cleared
-
# handle lack of implementation
loggedservermsg 0 1 <.. foo bar baz
log 1 $!. No handler implemented for: foo bar baz
log 2,3,4,5,6,7 $!. No handler implemented for: foo bar baz
-
# handle /disconnect, clear all
> /disconnect
log 1 >.. QUIT :ircplom says bye
log 1 $.. channels:#testtest:exits:me cleared
loggedservermsg 0 1 <.. ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
log 1 $.. connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]]
-repeat isupport-clear
+insert isupport-clear : +1
log 1 $.. caps cleared
log 1 $.. channels cleared
log 1 $.. connection_state set to: []
log 1 $.. sasl_account set to: []
log 1 $.. sasl_auth_state set to: []
log 1 $.. users cleared
-
# fail to send in disconnect, check alert window is command prompt window
> /window 6
> /privmsg barbar test
log 1 $!. cannot send, connection seems closed
> /privmsg #test test
log 1 $!. not sending, since not in channel
-| conn3-out
+
+× disconnect
+insert isupport-clear : +8
+log 8 $.. connection_state set to: []
+log , $.. DISCONNECTED
+
+×
+
+# on /connect init databases, log in new windows
+> /connect foo.bar.baz foo:bar baz:foobarbazquux
+insert standard-clear : +1
+
+# connect with values set by /connect, init CAP negotation
+log 1 $.. hostname set to: [foo.bar.baz]
+log 1 $.. port set to: [-1]
+log 1 $.. nick_wanted set to: [foo]
+log 1 $.. user_wanted set to: [foobarbazquux]
+log 1 $.. realname set to: [baz]
+log 1 $.. password set to: [bar]
+insert conn_init_0 : +1
+
+insert conn_init_1 : +0
+insert conn_init_2 : +0
+
+# check difference in available commands when switching to client window
+> /join #test
+log 0 #!. invalid prompt command: /join unknown
+> /list
+log 0 #.. windows available via /window:
+log 0 #.. 0) :start
+log 0 #.. 1) foo.bar.baz:debug
+log 0 #.. 2) foo.bar.baz:server
+log 0 #.. 3) foo.bar.baz/SaslServ
+> /window 1
+> /help
+log 1 #.. commands available in this window:
+log 1 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
+log 1 #.. /disconnect [QUIT_MSG]
+log 1 #.. /help
+log 1 #.. /join CHANNEL
+log 1 #.. /list
+log 1 #.. /nick NEW_NICK
+log 1 #.. /privmsg TARGET MSG
+log 1 #.. /prompt_enter
+log 1 #.. /quit
+log 1 #.. /raw VERB [PARAMS_STR]
+log 1 #.. /reconnect
+log 1 #.. /window TOWARDS
+log 1 #.. /window.disconnect [QUIT_MSG]
+log 1 #.. /window.history.scroll DIRECTION
+log 1 #.. /window.join CHANNEL
+log 1 #.. /window.nick NEW_NICK
+log 1 #.. /window.paste
+log 1 #.. /window.privmsg TARGET MSG
+log 1 #.. /window.prompt.backspace
+log 1 #.. /window.prompt.move_cursor DIRECTION
+log 1 #.. /window.prompt.scroll DIRECTION
+log 1 #.. /window.raw VERB [PARAMS_STR]
+log 1 #.. /window.reconnect
+
+insert during_conn : +0
# test setting up second client, but 432 irrecoverably
> /connect baz.bar.foo ?foo foo:foo
-repeat standard-clears +8
+insert standard-clear : +8
log 8 $.. hostname set to: [baz.bar.foo]
log 8 $.. port set to: [-1]
log 8 $.. nick_wanted set to: [?foo]
log 8 $.. user_wanted set to: [foo]
log 8 $.. realname set to: [foo]
-repeat conn +8
+insert conn_init_0 :5 +8
log 8 >.. USER foo 0 * :foo
log 8 >.. NICK :?foo
loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname
-| disconnect-in
-repeat isupport-clear +8
-log 8 $.. connection_state set to: []
-log , $.. DISCONNECTED
-| disconnect-out
+insert disconnect : +8
log 8 $!. nickname refused for bad format, giving up
# test failing third connection
> /connect baz.baz.baz baz baz:baz
-repeat standard-clears +9
+insert standard-clear : +9
log 9 $.. hostname set to: [baz.baz.baz]
log 9 $.. port set to: [-1]
log 9 $.. nick_wanted set to: [baz]
log 9 $.. user_wanted set to: [baz]
log 9 $.. realname set to: [baz]
-repeat conn +9
+insert conn_init_0 :5 +9
log 9 >.. USER baz 0 * :baz
log 9 >.. NICK :baz
servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION
log 9 $.. connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION]
-repeat disconnect +9
+insert disconnect : +9
log 9 $!. will retry connecting in 1 seconds
# check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected
> /reconnect
-repeat conn0
+insert conn_init_0 1:3 +1
log 2,3,4,5,6,7 $.. CONNECTED
-repeat conn1
+insert conn_init_0 4: +1
+insert conn_init_1 : +0
+insert conn_init_2 :1 +0
log 1 >.. JOIN :#testtest
-repeat conn2
-repeat conn3
+insert conn_init_2 1: +0
+insert during_conn : +0
> /quit
log 0 <..
-| empty-init-in
-| lines-empty-16-in
-| lines-empty-8-in
-| lines-empty-4-in
-| lines-empty-2-in
-| lines-empty-1-in
+× lines-empty-1
line 0 on_black,bright_white §§
-| lines-empty-1-out
-repeat lines-empty-1 +1
-| lines-empty-2-out
-repeat lines-empty-1 +2
-repeat lines-empty-1 +3
-| lines-empty-4-out
-repeat lines-empty-2 +4
-repeat lines-empty-2 +6
-| lines-empty-8-out
-repeat lines-empty-4 +8
-repeat lines-empty-4 +12
-| lines-empty-16-out
-repeat lines-empty-4 +16
-repeat lines-empty-2 +20
-| status-[0]-prompt-in
-line 22 on_black,bright_white :start)=====================================================================([0]§§
-| prompt-empty-in
+
+× lines-empty
+insert lines-empty-1 : +0
+insert lines-empty-1 : +1
+insert lines-empty-1 : +2
+insert lines-empty-1 : +3
+insert lines-empty-1 : +4
+insert lines-empty-1 : +5
+insert lines-empty-1 : +6
+insert lines-empty-1 : +7
+insert lines-empty-1 : +8
+insert lines-empty-1 : +9
+insert lines-empty-1 : +10
+insert lines-empty-1 : +11
+insert lines-empty-1 : +12
+insert lines-empty-1 : +13
+insert lines-empty-1 : +14
+insert lines-empty-1 : +15
+insert lines-empty-1 : +16
+insert lines-empty-1 : +17
+insert lines-empty-1 : +18
+insert lines-empty-1 : +19
+insert lines-empty-1 : +20
+insert lines-empty-1 : +21
+
+× prompt-empty
line 23 on_black,bright_white > § §§
line 23 on_black,bright_white,reverse §§ §
-| prompt-empty-out
-| status-[0]-prompt-out
-| empty-init-out
+
+× bookmark
+line 0 on_black,bright_white --------------------------------------------------------------------------------§§
+
+× scrolldown-1
+line 21 on_black,bright_white,reverse vvv [1] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-2
+line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-3
+line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-4
+line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-6
+line 21 on_black,bright_white,reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-8
+line 21 on_black,bright_white,reverse vvv [8] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-10
+line 21 on_black,bright_white,reverse vvv [10] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-11
+line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-12
+line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-14
+line 21 on_black,bright_white,reverse vvv [14] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-22
+line 21 on_black,bright_white,reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+× scrolldown-25
+line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+
+× status-[0]-prompt
+line 22 on_black,bright_white :start)=====================================================================([0]§§
+insert prompt-empty : +23
+× status-[0]-1-prompt
+line 22 on_black,bright_white :start)===================================================================([0] 1§§
+insert prompt-empty : +23
+× status-[0]-1:2-prompt
+line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§
+insert prompt-empty : +23
+× status-0-[1:2]-prompt
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§
+insert prompt-empty : +23
+× status-[0]-1:4-prompt
+line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§
+insert prompt-empty : +23
+× status-0-[1:4]-prompt
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§
+insert prompt-empty : +23
+× status-[0]-1:6-prompt
+line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§
+insert prompt-empty : +23
+× status-0-[1:6]-prompt
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+insert prompt-empty : +23
+× status-0-[1]-prompt
+line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§
+insert prompt-empty : +23
+× status-[0:1]-prompt
+line 22 on_black,bright_white :start)=================================================================([(0:1)]§§
+insert prompt-empty : +23
+× status-[0:1]-1-prompt
+line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§
+insert prompt-empty : +23
+× status-0:1-[1]-prompt
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§
+insert prompt-empty : +23
+× status-[0:1]-1:19-prompt
+line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§
+insert prompt-empty : +23
+× status-[0:3]-prompt
+line 22 on_black,bright_white :start)=================================================================([(0:3)]§§
+insert prompt-empty : +23
+× status-[0:12]-prompt
+line 22 on_black,bright_white :start)================================================================([(0:12)]§§
+insert prompt-empty : +23
+
+× history_0
+line 0 on_black,bright_white 20§§-§§-§§ §§
+line 1 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§
+line 2 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§
+line 3 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§
+line 4 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
+line 5 on_black,bright_cyan #.. §§:§§:§§ /help§§
+line 6 on_black,bright_cyan #.. §§:§§:§§ /list§§
+line 7 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§
+line 8 on_black,bright_cyan #.. §§:§§:§§ /quit§§
+line 9 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§
+line 10 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§
+line 11 on_black,bright_cyan #.. §§:§§:§§ /window.paste
+line 12 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§
+line 13 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§
+line 14 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§
+line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§
+line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§
+line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§
+line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§
+line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§
+line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§
+line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§
+line 22 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§
+line 23 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§
+line 24 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§
+line 25 on_black,bright_red,bold unknown§§
+line 26 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
+line 27 on_black,bright_red,bold unknown§§
+line 28 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§
+line 29 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§
+line 30 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§
+
+× history_1
+line 0 on_black,bright_white 20§§-§§-§§ §§
+line 1 on_black,bright_yellow $.. §§:§§:§§ isupport cleared
+line 2 on_black,bright_yellow $.. §§:§§:§§ isupport:CHANTYPES set to: [#&]
+line 3 on_black,bright_yellow $.. §§:§§:§§ isupport:PREFIX set to: [(ov)@+]
+line 4 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10]
+line 5 on_black,bright_yellow $.. §§:§§:§§ caps cleared
+line 6 on_black,bright_yellow $.. §§:§§:§§ users cleared
+line 7 on_black,bright_yellow $.. §§:§§:§§ channels cleared
+line 8 on_black,bright_yellow $.. §§:§§:§§ hostname set to: [foo.bar.baz]
+line 9 on_black,bright_yellow $.. §§:§§:§§ port set to: [-1]
+line 10 on_black,bright_yellow $.. §§:§§:§§ nick_wanted set to: [foo]
+line 11 on_black,bright_yellow $.. §§:§§:§§ user_wanted set to: [baz]
+line 12 on_black,bright_yellow $.. §§:§§:§§ realname set to: [bar]
+line 13 on_black,bright_yellow $.. §§:§§:§§ port set to: [6697]
+line 14 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting]
+line 15 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected]
+line 16 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§
+line 17 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§
+line 18 on_black,bright_green >.. §§:§§:§§ NICK :foo§§
+line 19 on_black,bright_white <.. §§:§§:§§ PING :?
+line 20 on_black,bright_green >.. §§:§§:§§ PONG :?
+line 21 on_black,bright_white <.. §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§
+line 22 on_black,bright_white 123456789 123456789§§
+line 23 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§
+line 24 on_black,bright_green 123456789 123456789§§
+line 25 on_black,bright_white <.. §§:§§:§§ PING :foo
+line 26 on_black,bright_green >.. §§:§§:§§ PONG :foo
+line 27 on_black,bright_white <.. §§:§§:§§ PING :bar
+line 28 on_black,bright_green >.. §§:§§:§§ PONG :bar
+line 29 on_black,bright_white <.. §§:§§:§§ PING :baz
+line 30 on_black,bright_green >.. §§:§§:§§ PONG :baz
+
+×
+
+insert lines-empty : +0
+insert status-[0]-prompt : +22
# nothing happening on empty command input
>
-repeat empty-init
+insert lines-empty : +0
+insert status-[0]-prompt : +22
# check scrolling on empty history does nothing
> /window.history.scroll up
-repeat empty-init
+insert lines-empty : +0
+insert status-[0]-prompt : +22
> /window.history.scroll down
-repeat empty-init
+insert lines-empty : +0
+insert status-[0]-prompt : +22
# non-empty command input starts log at bottom, with date above it
> foo
log 0 #!. invalid prompt command: not prefixed by /
-| with-only-2-lines-history-in
-repeat lines-empty-16 +0
-repeat lines-empty-4 +16
-| history-lines-0:0:2-in
-| history-lines-0:0:1-in
-line 20 on_black,bright_white 20§§-§§-§§ §§
-| history-lines-0:0:1-out
-| history-lines-0:1:2-in
-line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§
-| history-lines-0:1:2-out
-| history-lines-0:0:2-out
-repeat status-[0]-prompt
-| with-only-2-lines-history-out
+insert lines-empty :20 +0
+insert history_0 :2 +20
+insert status-[0]-prompt : +22
# check scrolling on history merely 2 lines long won't do anything either
> /window.history.scroll up
-repeat with-only-2-lines-history
+insert lines-empty :20 +0
+insert history_0 :2 +20
+insert status-[0]-prompt : +22
> /window.history.scroll down
-repeat with-only-2-lines-history
+insert lines-empty :20 +0
+insert history_0 :2 +20
+insert status-[0]-prompt : +22
# further inputs grow log upwards
> /foo
log 0 #!. invalid prompt command: /foo unknown
-| before-first-scroll-in
-repeat lines-empty-16 +0
-repeat lines-empty-2 +16
-repeat lines-empty-1 +18
-repeat history-lines-0:0:2 +19
-| history-lines-0:2:3-in
-line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§
-| history-lines-0:2:3-out
-repeat status-[0]-prompt
-| before-first-scroll-out
+insert lines-empty :19 +0
+insert history_0 :3 +19
+insert status-[0]-prompt : +22
# check scrolling up does something on history 3 lines long
> /window.history.scroll up
-| topmost-scroll-in
-repeat lines-empty-16 +0
-repeat lines-empty-4 +16
-repeat history-lines-0:0:1 +20
-| topmost-scroll-out
-| scrolldown-2-in
-line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-2-out
-repeat status-[0]-prompt
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-2 : +21
+insert status-[0]-prompt : +22
# check scrolling down on 3-lines history
> /window.history.scroll down
-repeat before-first-scroll
-
-# > /bar
-# log 0 #!. invalid prompt command: /bar unknown
-# | history-lines-0:0:4-in
-# repeat history-lines-0:0:2 +18
-# | history-lines-0:2:4-in
-# repeat history-lines-0:2:3 +20
-# line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar unknown §§
-# | history-lines-0:2:4-out
-# | history-lines-0:0:4-out
+insert lines-empty :19 +0
+insert history_0 :3 +19
+insert status-[0]-prompt : +22
# check history growing below up-scroll
> /window.history.scroll up
-repeat topmost-scroll +0
-repeat scrolldown-2
-repeat status-[0]-prompt
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-2 : +21
+insert status-[0]-prompt : +22
> /help
log 0 #.. commands available in this window:
log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
log 0 #.. /window.prompt.backspace
log 0 #.. /window.prompt.move_cursor DIRECTION
log 0 #.. /window.prompt.scroll DIRECTION
-| before-scrolldown-not-to-bottom-in
-repeat topmost-scroll
-| scrolldown-14-in
-line 21 on_black,bright_white,reverse vvv [14] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-14-out
-| before-scrolldown-not-to-bottom-out
-line 22 on_black,bright_white :start)================================================================([(0:12)]§§
-repeat prompt-empty
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-14 : +21
+insert status-[0:12]-prompt : +22
# check scroll-down on newer history longer than half a screen width does not fully land at bottom
> /window.history.scroll down
-| after-scrolldown-not-to-bottom-in
-repeat lines-empty-8 +0
-repeat lines-empty-1 +8
-| history-lines-0:0:8-in
-repeat history-lines-0:0:2 +9
-| history-lines-0:2:4-in
-repeat history-lines-0:2:3 +11
-line 12 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§
-| history-lines-0:2:4-out
-| history-lines-0:4:8-in
-line 13 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
-| history-lines-0:5:6-in
-line 14 on_black,bright_cyan #.. §§:§§:§§ /help§§
-| history-lines-0:5:6-out
-| history-lines-0:6:8-in
-line 15 on_black,bright_cyan #.. §§:§§:§§ /list§§
-| history-lines-0:7:8-in
-line 16 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§
-| history-lines-0:7:8-out
-| history-lines-0:6:8-out
-| history-lines-0:4:8-out
-| history-lines-0:0:8-out
-| history-lines-0:8:12-in
-line 17 on_black,bright_cyan #.. §§:§§:§§ /quit§§
-line 18 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§
-| history-lines-0:10:12-in
-line 19 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§
-line 20 on_black,bright_cyan #.. §§:§§:§§ /window.paste
-| history-lines-0:10:12-out
-| history-lines-0:8:12-out
-| scrolldown-3-in
-line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-3-out
-| status-[0:3]-prompt-in
-line 22 on_black,bright_white :start)=================================================================([(0:3)]§§
-repeat prompt-empty
-| status-[0:3]-prompt-out
-| after-scrolldown-not-to-bottom-out
+insert lines-empty :9 +0
+insert history_0 :12 +9
+insert scrolldown-3 : +21
+insert status-[0:3]-prompt : +22
# check previous scroll-down not hitting bottom be fully reversible
> /window.history.scroll up
-repeat before-scrolldown-not-to-bottom
-repeat status-[0:3]-prompt
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-14 : +21
+insert status-[0:3]-prompt : +22
> /window.history.scroll down
-repeat after-scrolldown-not-to-bottom
+insert lines-empty :9 +0
+insert history_0 :12 +9
+insert scrolldown-3 : +21
+insert status-[0:3]-prompt : +22
# scroll to bottom, check history still growing up even beyond upper fold
> /window.history.scroll down
-repeat lines-empty-4 +0
-repeat lines-empty-2 +4
-repeat lines-empty-1 +6
-repeat history-lines-0:0:8 +7
-repeat history-lines-0:8:12 +15
-| history-lines-0:12:14-in
-line 19 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§
-line 20 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§
-| history-lines-0:12:14-out
-| history-lines-0:14:15-in
-line 21 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§
-| history-lines-0:14:15-out
-repeat status-[0]-prompt
+insert lines-empty :7 +0
+insert history_0 :15 +7
+insert status-[0]-prompt : +22
> /0
log 0 #!. invalid prompt command: /0 unknown
> /1
log 0 #!. invalid prompt command: /6 unknown
> /7
log 0 #!. invalid prompt command: /7 unknown
-| at-bottom-before-wrapped-in
-repeat history-lines-0:1:2 +0
-repeat history-lines-0:2:4 +1
-repeat history-lines-0:4:8 +3
-| history-lines-0:8:16-in
-repeat history-lines-0:8:12 +7
-| history-lines-0:12:16-in
-repeat history-lines-0:12:14 +11
-repeat history-lines-0:14:15 +13
-line 14 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§
-| history-lines-0:12:16-out
-| history-lines-0:8:16-out
-| history-lines-0:16:20-in
-| history-lines-0:16:18-in
-line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§
-line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§
-| history-lines-0:16:18-out
-line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§
-line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§
-| history-lines-0:16:20-out
-| history-lines-0:20:22-in
-line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§
-line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§
-| history-lines-0:20:22-out
-| history-lines-0:22:23-in
-line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§
-| history-lines-0:22:23-out
-repeat status-[0]-prompt
-| at-bottom-before-wrapped-out
+insert history_0 1:23 +0
+insert status-[0]-prompt : +22
# check scroll-down even with long history does nothing
> /window.history.scroll down
-repeat at-bottom-before-wrapped
+insert history_0 1:23 +0
+insert status-[0]-prompt : +22
# 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
-repeat lines-empty-8
-repeat lines-empty-1 +8
-repeat history-lines-0:0:8 +9
-repeat history-lines-0:8:12 +17
-| scrolldown-11-in
-line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-11-out
-repeat status-[0]-prompt
-> /window.history.scroll down
-repeat at-bottom-before-wrapped
+insert lines-empty :9 +0
+insert history_0 :12 +9
+insert scrolldown-11 : +21
+insert status-[0]-prompt : +22
# check wrapping
+> /window.history.scroll down
> /foo_0123456789_0123456789_01234567
log 0 #!. invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
> /foo_0123456789_0123456789_012345678
log 0 #!. invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
-| at-bottom-after-wrapped-in
-repeat history-lines-0:4:8 +0
-repeat history-lines-0:8:16 +4
-repeat history-lines-0:16:20 +12
-repeat history-lines-0:20:22 +16
-repeat history-lines-0:22:23 +18
-| history-lines-0:23:24-in
-line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§
-| history-lines-0:23:24-out
-| history-lines-0:24:26-in
-line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§
-line 21 on_black,bright_red,bold unknown§§
-| history-lines-0:24:26-out
-repeat status-[0]-prompt
-| at-bottom-after-wrapped-out
+insert history_0 4:26 +0
+insert status-[0]-prompt : +22
# check scroll-up over wrapped moves up less history lines than screen lines
> /window.history.scroll up
-| scrollup-after-wrapped-in
-repeat lines-empty-4 +0
-repeat lines-empty-2 +4
-repeat history-lines-0:0:8 +6
-repeat history-lines-0:8:12 +14
-repeat history-lines-0:12:14 +18
-repeat history-lines-0:14:15 +20
-| scrollup-after-wrapped-out
-| scrolldown-10-in
-line 21 on_black,bright_white,reverse vvv [10] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-10-out
-repeat status-[0]-prompt
+insert lines-empty :6 +0
+insert history_0 :15 +6
+insert scrolldown-10 : +21
+insert status-[0]-prompt : +22
# check scroll-down fully reversible even if over wrapped
> /window.history.scroll down
-repeat at-bottom-after-wrapped
+insert history_0 4:26 +0
+insert status-[0]-prompt : +22
> /window.history.scroll up
-repeat scrollup-after-wrapped
-repeat scrolldown-10
-repeat status-[0]-prompt
+insert lines-empty :6 +0
+insert history_0 :15 +6
+insert scrolldown-10 : +21
+insert status-[0]-prompt : +22
# check wrapped input only increases below-scroll count by one
> /bar_0123456789_0123456789_012345678
log 0 #!. invalid prompt command: /bar_0123456789_0123456789_012345678 unknown
-repeat scrollup-after-wrapped
-repeat scrolldown-11
-| status-[0:1]-prompt-in
-line 22 on_black,bright_white :start)=================================================================([(0:1)]§§
-repeat prompt-empty
-| status-[0:1]-prompt-out
+insert lines-empty :6 +0
+insert history_0 :15 +6
+insert scrolldown-11 : +21
+insert status-[0:1]-prompt : +22
# check scroll-down over wrapped will snap down to bottom of wrapped
> /window.history.scroll down
-repeat history-lines-0:5:6 +0
-repeat history-lines-0:6:8 +1
-repeat history-lines-0:8:16 +3
-| history-lines-0:16:24-in
-repeat history-lines-0:16:20 +11
-repeat history-lines-0:20:22 +15
-repeat history-lines-0:22:23 +17
-repeat history-lines-0:23:24 +18
-| history-lines-0:16:24-out
-repeat history-lines-0:24:26 +19
-line 21 on_black,bright_white,reverse vvv [1] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-repeat status-[0:1]-prompt
+insert history_0 5:26 +0
+insert scrolldown-1 : +21
+insert status-[0:1]-prompt : +22
# # check scrolls-up over longer history until top
> /window.history.scroll up
-repeat scrollup-after-wrapped
-repeat scrolldown-11
-repeat status-[0:1]-prompt
+insert lines-empty :6 +0
+insert history_0 :15 +6
+insert scrolldown-11 : +21
+insert status-[0:1]-prompt : +22
> /window.history.scroll up
-repeat lines-empty-16 +0
-repeat lines-empty-1 +16
-repeat history-lines-0:0:2 +17
-repeat history-lines-0:2:4 +19
-line 21 on_black,bright_white,reverse vvv [22] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-repeat status-[0:1]-prompt
+insert lines-empty :17 +0
+insert history_0 :3 +17
+insert scrolldown-22 : +21
+insert status-[0:1]-prompt : +22
> /window.history.scroll up
-repeat topmost-scroll
-| scrolldown-25-in
-line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| scrolldown-25-out
-repeat status-[0:1]-prompt
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-25 : +21
+insert status-[0:1]-prompt : +22
# check that triggering creation of new window with new lines adds it to status, with unread-lines count
> /connect foo.bar.baz foo bar:baz
log 1 >.. CAP LS :302
log 1 >.. USER baz 0 * :bar
log 1 >.. NICK :foo
-repeat topmost-scroll
-repeat scrolldown-25
-line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§
-repeat prompt-empty
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-25 : +21
+insert status-[0:1]-1:19-prompt : +22
# check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count)
> /window 1
-repeat lines-empty-2 +0
-repeat lines-empty-1 +2
-| history-lines-1:0:16-in
-| history-lines-1:0:8-in
-repeat history-lines-0:0:1 +3
-line 4 on_black,bright_yellow $.. §§:§§:§§ isupport cleared
-line 5 on_black,bright_yellow $.. §§:§§:§§ isupport:CHANTYPES set to: [#&]
-line 6 on_black,bright_yellow $.. §§:§§:§§ isupport:PREFIX set to: [(ov)@+]
-| history-lines-1:4:8-in
-line 7 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10]
-| history-lines-1:5:6-in
-line 8 on_black,bright_yellow $.. §§:§§:§§ caps cleared
-| history-lines-1:5:6-out
-| history-lines-1:6:8-in
-line 9 on_black,bright_yellow $.. §§:§§:§§ users cleared
-line 10 on_black,bright_yellow $.. §§:§§:§§ channels cleared
-| history-lines-1:6:8-out
-| history-lines-1:4:8-out
-| history-lines-1:0:8-out
-| history-lines-1:8:16-in
-| history-lines-1:8:12-in
-line 11 on_black,bright_yellow $.. §§:§§:§§ hostname set to: [foo.bar.baz]
-line 12 on_black,bright_yellow $.. §§:§§:§§ port set to: [-1]
-| history-lines-1:10:12-in
-line 13 on_black,bright_yellow $.. §§:§§:§§ nick_wanted set to: [foo]
-line 14 on_black,bright_yellow $.. §§:§§:§§ user_wanted set to: [baz]
-| history-lines-1:10:12-out
-| history-lines-1:8:12-out
-| history-lines-1:12:16-in
-| history-lines-1:12:14-in
-line 15 on_black,bright_yellow $.. §§:§§:§§ realname set to: [bar]
-line 16 on_black,bright_yellow $.. §§:§§:§§ port set to: [6697]
-| history-lines-1:12:14-out
-| history-lines-1:14:15-in
-line 17 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting]
-| history-lines-1:14:15-out
-line 18 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected]
-| history-lines-1:12:16-out
-| history-lines-1:8:16-out
-| history-lines-1:0:16-out
-| history-lines-1:16:18-in
-line 19 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§
-line 20 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§
-| history-lines-1:16:18-out
-| history-lines-1:18:19-in
-line 21 on_black,bright_green >.. §§:§§:§§ NICK :foo§§
-| history-lines-1:18:19-out
-line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§
-repeat prompt-empty
+insert lines-empty :3 +0
+insert history_1 :19 +3
+insert status-0:1-[1]-prompt : +22
# check switch-back to window 0, retaining clearing of window 1's unread-lines count
> /window 0
-repeat topmost-scroll
-line 21 on_black,bright_white,reverse vvv [25] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| status-[0:1]-1-prompt-in
-line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§
-repeat prompt-empty
-| status-[0:1]-1-prompt-out
+insert lines-empty :20 +0
+insert history_0 :1 +20
+insert scrolldown-25 : +21
+insert status-[0:1]-1-prompt : +22
# check that on full scroll-down, we now have a bookmark above the newest lines not previously scrolled into
> /window.history.scroll down
-repeat lines-empty-8 +0
-repeat lines-empty-1 +8
-repeat history-lines-0:0:8 +9
-repeat history-lines-0:8:12 +17
-repeat scrolldown-14
-repeat status-[0:1]-1-prompt
+insert lines-empty :9 +0
+insert history_0 :12 +9
+insert scrolldown-14 : +21
+insert status-[0:1]-1-prompt : +22
> /window.history.scroll down
-| before-first-sight-of-bookmark-in
-repeat history-lines-0:2:4 +0
-repeat history-lines-0:4:8 +2
-repeat history-lines-0:8:16 +6
-repeat history-lines-0:16:20 +14
-repeat history-lines-0:20:22 +18
-repeat history-lines-0:22:23 +20
-repeat scrolldown-3
-repeat status-[0:1]-1-prompt
-| before-first-sight-of-bookmark-out
+insert history_0 2:23 +0
+insert scrolldown-3 : +21
+insert status-[0:1]-1-prompt : +22
> /window.history.scroll down
-| first-sight-of-bookmark-in
-repeat history-lines-0:7:8 +0
-repeat history-lines-0:8:16 +1
-repeat history-lines-0:16:24 +9
-repeat history-lines-0:24:26 +17
-| bookmark-in
-line 19 on_black,bright_white --------------------------------------------------------------------------------§§
-| bookmark-out
-| history-lines-0:26:28-in
-line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
-line 21 on_black,bright_red,bold unknown§§
-| history-lines-0:26:28-out
-repeat status-[0]-1-prompt
-repeat status-[0]-1-prompt
-| first-sight-of-bookmark-out
+insert history_0 7:26 +0
+insert bookmark : +19
+insert history_0 26:28 +20
+insert status-[0]-1-prompt : +22
# 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
-repeat lines-empty-2 +0
-repeat lines-empty-1 +2
-repeat history-lines-0:0:8 +3
-repeat history-lines-0:8:16 +11
-repeat history-lines-0:16:18 +19
-line 21 on_black,bright_white,reverse vvv [8] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-repeat status-[0]-1-prompt
+insert lines-empty :3 +0
+insert history_0 :18 +3
+insert scrolldown-8 : +21
+insert status-[0]-1-prompt : +22
> /window.history.scroll down
-repeat first-sight-of-bookmark
+insert history_0 7:26 +0
+insert bookmark : +19
+insert history_0 26:28 +20
+insert status-[0]-1-prompt : +22
# check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log
> /window 1
-repeat lines-empty-2 +0
-repeat history-lines-1:0:16 +2
-repeat history-lines-1:16:18 +18
-repeat history-lines-1:18:19 +20
-repeat bookmark +21
-| status-0-[1]-prompt-in
-line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§
-repeat prompt-empty
-| status-0-[1]-prompt-out
+insert lines-empty :2 +0
+insert history_1 :19 +2
+insert bookmark : +21
+insert status-0-[1]-prompt : +22
# 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
-repeat history-lines-0:7:8 +0
-repeat history-lines-0:8:16 +1
-repeat history-lines-0:16:24 +9
-| history-lines-0:24:28-in
-repeat history-lines-0:24:26 +17
-repeat history-lines-0:26:28 +19
-| history-lines-0:24:28-out
-repeat bookmark +21
-| status-[0]-1-prompt-in
-line 22 on_black,bright_white :start)===================================================================([0] 1§§
-repeat prompt-empty
-| status-[0]-1-prompt-out
+insert history_0 7:28 +0
+insert bookmark : +21
+insert status-[0]-1-prompt : +22
# check new lines push bookmark up
> /list
log 0 #.. windows available via /window:
log 0 #.. 0) :start
log 0 #.. 1) foo.bar.baz:debug
-| before-first-server-responses-in
-repeat history-lines-0:10:12 +0
-repeat history-lines-0:12:16 +2
-repeat history-lines-0:16:24 +6
-repeat history-lines-0:24:28 +14
-repeat bookmark +18
-| history-lines-0:28:30-in
-line 19 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§
-line 20 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§
-| history-lines-0:28:30-out
-| history-lines-0:30:31-in
-line 21 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§
-| history-lines-0:30:31-out
-| before-first-server-responses-out
-repeat status-[0]-1-prompt
+insert history_0 10:28 +0
+insert bookmark : +18
+insert history_0 28:31 +19
+insert status-[0]-1-prompt : +22
# check new lines growing in other window, one of which long enough to wrap, to be re-start count in status (with wrapped only as single)
loggedservermsg 0 1 <.. PING :?
log 1 >.. PONG :?
loggedservermsg 0 1 <.. PING :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
log 1 >.. PONG :123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
-repeat before-first-server-responses
-line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§
-repeat prompt-empty
+insert history_0 10:28 +0
+insert bookmark : +18
+insert history_0 28:31 +19
+insert status-[0]-1:4-prompt : +22
# 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
-repeat history-lines-1:4:8 +0
-repeat history-lines-1:8:16 +4
-repeat history-lines-1:16:18 +12
-repeat history-lines-1:18:19 +14
-repeat bookmark +15
-| history-lines-1:19:20-in
-line 16 on_black,bright_white <.. §§:§§:§§ PING :?
-| history-lines-1:19:20-out
-| history-lines-1:20:24-in
-line 17 on_black,bright_green >.. §§:§§:§§ PONG :?
-line 18 on_black,bright_white <.. §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§
-line 19 on_black,bright_white 123456789 123456789§§
-line 20 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§
-| history-lines-1:20:24-out
-| history-lines-1:24:25-in
-line 21 on_black,bright_green 123456789 123456789§§
-| history-lines-1:24:25-out
-repeat status-0-[1]-prompt
-
-# check that growth below scroll does not by itself re-position bookmark in history
+insert history_1 4:19 +0
+insert bookmark : +15
+insert history_1 19:25 +16
+insert status-0-[1]-prompt : +22
+
+### # check that growth below scroll does not by itself re-position bookmark in history
> /window.history.scroll up
loggedservermsg 0 1 <.. PING :foo
log 1 >.. PONG :foo
-| early-win1-upscroll-in
-repeat lines-empty-4 +0
-repeat lines-empty-2 +4
-repeat history-lines-1:0:8 +6
-repeat history-lines-1:8:12 +14
-repeat history-lines-1:12:14 +18
-repeat history-lines-1:14:15 +20
-| early-win1-upscroll-out
-repeat scrolldown-10
-| status-0-[1:2]-prompt-in
-line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§
-repeat prompt-empty
-| status-0-[1:2]-prompt-out
+insert lines-empty :6 +0
+insert history_1 0:15 +6
+insert scrolldown-10 : +21
+insert status-0-[1:2]-prompt : +22
> /window.history.scroll down
-repeat history-lines-1:5:6 +0
-repeat history-lines-1:6:8 +1
-repeat history-lines-1:8:16 +3
-repeat history-lines-1:16:18 +11
-repeat history-lines-1:18:19 +13
-repeat bookmark +14
-repeat history-lines-1:19:20 +15
-repeat history-lines-1:20:24 +16
-repeat history-lines-1:24:25 +20
-repeat scrolldown-2
-repeat status-0-[1:2]-prompt
+insert history_1 5:19 +0
+insert bookmark : +14
+insert history_1 19:25 +15
+insert scrolldown-2 : +21
+insert status-0-[1:2]-prompt : +22
# 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
-| win-0-only-for-win-1-tests-in
-repeat history-lines-0:10:12 +0
-repeat history-lines-0:12:16 +2
-repeat history-lines-0:16:24 +6
-repeat history-lines-0:24:28 +14
-repeat history-lines-0:28:30 +18
-repeat history-lines-0:30:31 +20
-repeat bookmark +21
-| win-0-only-for-win-1-tests-out
-line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§
-repeat prompt-empty
+insert history_0 10:31 +0
+insert bookmark : +21
+insert status-[0]-1:2-prompt : +22
> /window 1
-| keep-bookmark-on-outside-growth-test-in
-repeat history-lines-1:5:6 +0
-repeat history-lines-1:6:8 +1
-repeat history-lines-1:8:16 +3
-| history-lines-1:16:24-in
-repeat history-lines-1:16:18 +11
-repeat history-lines-1:18:19 +13
-repeat history-lines-1:19:20 +14
-repeat history-lines-1:20:24 +15
-| history-lines-1:16:24-out
-repeat history-lines-1:24:25 +19
-repeat bookmark +20
-| keep-bookmark-on-outside-growth-test-out
-repeat scrolldown-2
-repeat status-0-[1:2]-prompt
+insert history_1 5:25 +0
+insert bookmark : +20
+insert scrolldown-2 : +21
+insert status-0-[1:2]-prompt : +22
# check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave)
> /window 0
loggedservermsg 0 1 <.. PING :bar
log 1 >.. PONG :bar
-repeat win-0-only-for-win-1-tests
-line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§
-repeat prompt-empty
+insert history_0 10:31 +0
+insert bookmark : +21
+insert status-[0]-1:4-prompt : +22
> /window 1
-repeat keep-bookmark-on-outside-growth-test
-line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-| status-0-[1:4]-prompt-in
-line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§
-repeat prompt-empty
-| status-0-[1:4]-prompt-out
+insert history_1 5:25 +0
+insert bookmark : +20
+insert scrolldown-4 : +21
+insert status-0-[1:4]-prompt : +22
# check same applies when leaving affected window with bookmark out-of-sight
> /window.history.scroll up
-repeat early-win1-upscroll
-line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-repeat status-0-[1:4]-prompt
+insert lines-empty :6 +0
+insert history_1 :15 +6
+insert scrolldown-12 : +21
+insert status-0-[1:4]-prompt : +22
> /window 0
loggedservermsg 0 1 <.. PING :baz
log 1 >.. PONG :baz
-repeat win-0-only-for-win-1-tests
-line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§
-repeat prompt-empty
+insert history_0 10:31 +0
+insert bookmark : +21
+insert status-[0]-1:6-prompt : +22
> /window 1
-repeat early-win1-upscroll
-repeat scrolldown-14
-| status-0-[1:6]-prompt-in
-line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§
-repeat prompt-empty
-| status-0-[1:6]-prompt-out
+insert lines-empty :6 +0
+insert history_1 :15 +6
+insert scrolldown-14 : +21
+insert status-0-[1:6]-prompt : +22
> /window.history.scroll down
-repeat history-lines-1:5:6 +0
-repeat history-lines-1:6:8 +1
-repeat history-lines-1:8:16 +3
-repeat history-lines-1:16:24 +11
-repeat history-lines-1:24:25 +19
-repeat bookmark +20
-line 21 on_black,bright_white,reverse vvv [6] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-repeat status-0-[1:6]-prompt
+insert history_1 5:25 +0
+insert bookmark : +20
+insert scrolldown-6 : +21
+insert status-0-[1:6]-prompt : +22
> /window.history.scroll down
-repeat history-lines-1:10:12 +0
-repeat history-lines-1:12:16 +2
-repeat history-lines-1:16:24 +6
-repeat history-lines-1:24:25 +14
-repeat bookmark +15
-line 16 on_black,bright_white <.. §§:§§:§§ PING :foo
-line 17 on_black,bright_green >.. §§:§§:§§ PONG :foo
-line 18 on_black,bright_white <.. §§:§§:§§ PING :bar
-line 19 on_black,bright_green >.. §§:§§:§§ PONG :bar
-line 20 on_black,bright_white <.. §§:§§:§§ PING :baz
-line 21 on_black,bright_green >.. §§:§§:§§ PONG :baz
-repeat status-0-[1]-prompt
+insert history_1 10:25 +0
+insert bookmark : +15
+insert history_1 25:31 +16
+insert status-0-[1]-prompt : +22
> /quit
log 0 <..