text = text[:-len(_SCREENLINE_PADDING_SUFFIX)]
text += ' ' * (self.size.x - len(text))
for idx, cell_expected in enumerate(
- (self._attrs_tuple_from_str(attrs_str), c) for c in text):
+ (tuple(attrs_str.split(_SEP_1)), c) for c in text):
if _SCREENLINE_IGNORE_CHAR == cell_expected[1]:
continue
cell_found = self._screen[y][idx]
fmt, msg_no_fmt = args[2].split(LOG_FMT_SEP, maxsplit=1)
for c in fmt[:-1]:
assert c in LOG_FMT_ATTRS
- assert fmt[-1] == LOG_PREFIX_IN
+ assert fmt[0] == LOG_PREFIX_IN
return [(f'{index_str}:s:0',
_SEP_0.join((_MARK_SERVERMSG, args[0], msg_no_fmt))),
(f'{index_str}:s:1',
while len(wrapped) < self._sizes.y - bool(add_scroll_info):
wrapped.insert(0, (self._PADDING_HISTORY_IDX_POS, ''))
- to_write_w_attrs: list[tuple[Optional[str], str]] = []
+ to_write_w_attrs: list[tuple[list[str], str]] = []
prev_history_idx_pos = self._COMPARAND_HISTORY_IDX_POS
attrs: list[str]
for history_idx_pos, line in wrapped:
if history_idx_pos != prev_history_idx_pos:
- attrs = ['on_black']
+ attrs = []
for c in line.split(LOG_FMT_SEP, maxsplit=1)[0]:
attrs += list(LOG_FMT_ATTRS.get(c, tuple()))
prev_history_idx_pos = history_idx_pos
- to_write_w_attrs += [(','.join(attrs), line)]
+ to_write_w_attrs += [(attrs, line)]
if add_scroll_info:
scroll_info = f'vvv [{(-1) * self._history_idx_neg}] '
scroll_info += 'v' * (self._sizes.x - len(scroll_info))
- to_write_w_attrs += [('reverse', scroll_info)]
+ to_write_w_attrs += [(['reverse'], scroll_info)]
for idx, line_t in enumerate(to_write_w_attrs):
- self._write(start_y=idx, attributes=line_t[0], msg=line_t[1])
+ self._write(start_y=idx, attrs=line_t[0], msg=line_t[1])
self._newest_read_history_idx_pos\
= max(self._newest_read_history_idx_pos, wrapped[-1][0])
+ _PROMPT_ELL_OUT)
self._write(to_write[:cursor_x_to_write], self._sizes.y,
padding=False)
- self._write(to_write[cursor_x_to_write], attributes='reverse',
+ self._write(to_write[cursor_x_to_write], attrs=['reverse'],
padding=False)
self._write(to_write[cursor_x_to_write + 1:])
def wrap(self, line: str) -> list[str]:
'Wrap line to list of lines fitting into terminal width.'
- @staticmethod
- def _attrs_tuple_from_str(attrs_str: str) -> tuple[str, ...]:
- return tuple(attr for attr in attrs_str.split(',') if attr)
-
@abstractmethod
def _length_to_terminal(self, text: str) -> int:
pass
def write(self,
msg: str = '',
start_y: Optional[int] = None,
- attributes: str = '',
+ attrs: Optional[list[str]] = None,
padding: bool = True
) -> None:
'Print to terminal, with position, padding to line end, attributes.'
if (len_padding := self.size.x - end_x) and padding:
msg += ' ' * len_padding
end_x = self.size.x
- self._write_w_attrs(msg, self._attrs_tuple_from_str(attributes))
+ attrs_to_pass = ['on_black', 'bright_white']
+ for attr in attrs or []:
+ if attr.startswith('bright_'):
+ attrs_to_pass[1] = attr
+ else:
+ attrs_to_pass += [attr]
+ self._write_w_attrs(msg, tuple(attrs_to_pass))
self._cursor_yx = _YX(self._cursor_yx.y, end_x)
@abstractmethod
now = str(datetime.now())
today, time = now[:10], now[11:19]
for t in (('alert', LOG_FMT_ALERT), ('highlight', LOG_FMT_HIGHLIGHT)):
- prefix = (t[1] if kwargs.get(t[0], False) else LOG_FMT_NONE
- ) + prefix
+ prefix += t[1] if kwargs.get(t[0], False) else LOG_FMT_NONE
msg = f'{prefix}{LOG_FMT_SEP}{time} {msg}'
affected_win_indices = []
for win in self._log_target_wins(**kwargs):
| clientwin-init-in
| isupport-clear-in
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
+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
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
| clientwin-init-out
-log , ..$ DISCONNECTED
-log 1 ..$ hostname set to: [foo.bar.baz]
+log , $.. DISCONNECTED
+log 1 $.. hostname set to: [foo.bar.baz]
| conn-init-retries-in
-log 1 ..$ port set to: [10003]
-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]
+log 1 $.. port set to: [10003]
+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]
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ port set to: [10002]
-log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log 1 .!$ will retry connecting in 1 seconds
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. port set to: [10002]
+log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 $!. will retry connecting in 1 seconds
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ port set to: [10001]
-log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log 1 .!$ will retry connecting in 2 seconds
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. port set to: [10001]
+log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 $!. will retry connecting in 2 seconds
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ port set to: [10000]
-log 1 ..$ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
-log 1 .!$ will retry connecting in 4 seconds
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. port set to: [10000]
+log 1 $.. connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
+log 1 $!. will retry connecting in 4 seconds
| conn-init-retries-out
# with TestingClient finally having reduced port to 10000, connecting works now
| conn-full-in
| conn0-in
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
| conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
| conn1-in
-log 1 ..> CAP LS :302
-log 1 ..> USER foobarbazquux 0 * :baz
-log 1 ..> NICK :foo
+log 1 >.. CAP LS :302
+log 1 >.. USER foobarbazquux 0 * :baz
+log 1 >.. NICK :foo
| conn1-out
| conn-full-out
# test retry chain also started by in-connection timeout
servermsg 0 timeout
-log 1 ..> PING :what's up?
+log 1 >.. PING :what's up?
servermsg 0 timeout
servermsg 0 no timely PONG from server
-log 1 ..$ connection_state set to: [broken: no timely PONG from server]
+log 1 $.. connection_state set to: [broken: no timely PONG from server]
repeat isupport-clear-in isupport-clear-out
-log 1 ..$ connection_state set to: []
-log , ..$ DISCONNECTED
-log 1 .!$ will retry connecting in 1 seconds
+log 1 $.. connection_state set to: []
+log , $.. DISCONNECTED
+log 1 $!. will retry connecting in 1 seconds
repeat conn-full-in conn-full-out
# on second server, check timed auto-retries don't activate after manual intervention
> /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux
repeat clientwin-init-in clientwin-init-out 2
-log , ..$ DISCONNECTED
-log 2 ..$ hostname set to: [baz.bar.foo]
+log , $.. DISCONNECTED
+log 2 $.. hostname set to: [baz.bar.foo]
repeat conn-init-retries-in conn-init-retries-out 2
> /window 2
> /reconnect
repeat conn0-in conn0-out 2
-log , ..$ CONNECTED
+log , $.. CONNECTED
repeat conn1-in conn1-out 2
wait 4
> /disconnect
-log 2 ..> QUIT :ircplom says bye
+log 2 >.. QUIT :ircplom says bye
wait 4
> /quit
-log 0 ..<
+log 0 <..
-log 0 ..# Found config at tests/config.toml, reading …
-log 0 ..# Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']}
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
-log 1 ..$ hostname set to: [irc.test0.net]
-log 1 ..$ port set to: [1234]
-log 1 ..$ nick_wanted set to: [foo]
-log 1 ..$ user_wanted set to: [baz]
-log 1 *.$ realname set to: [quux]
-log 1 ..$ password set to: [bar]
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
-log , ..$ CONNECTED
-log 1 ..> CAP LS :302
-log 1 *.> USER baz 0 * :quux
-log 1 ..> NICK :foo
+log 0 #.. Found config at tests/config.toml, reading …
+log 0 #.. Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']}
+log 1 $.. isupport cleared
+log 1 $.. isupport:CHANTYPES set to: [#&]
+log 1 $.. isupport:PREFIX set to: [(ov)@+]
+log 1 $.. isupport:USERLEN set to: [10]
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
+log , $.. DISCONNECTED
+log 1 $.. hostname set to: [irc.test0.net]
+log 1 $.. port set to: [1234]
+log 1 $.. nick_wanted set to: [foo]
+log 1 $.. user_wanted set to: [baz]
+log 1 $.* realname set to: [quux]
+log 1 $.. password set to: [bar]
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
+log , $.. CONNECTED
+log 1 >.. CAP LS :302
+log 1 >.* USER baz 0 * :quux
+log 1 >.. NICK :foo
> /quit
log 0 .<
# to prepare, initiate connection
> /connect foo.bar.baz foo bar:baz
| isupport-clear-in
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
+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
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
-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: [baz]
-log 1 ..$ realname set to: [bar]
-log 1 ..$ port set to: [6697]
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
+log , $.. DISCONNECTED
+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: [baz]
+log 1 $.. realname set to: [bar]
+log 1 $.. port set to: [6697]
| connecting-in
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
-log , ..$ CONNECTED
-log 1 ..> CAP LS :302
-log 1 ..> USER baz 0 * :bar
-log 1 ..> NICK :foo
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
+log , $.. CONNECTED
+log 1 >.. CAP LS :302
+log 1 >.. USER baz 0 * :bar
+log 1 >.. NICK :foo
| connecting-out
# fail to reconnect while connected
> /window 1
> /reconnect
-log 1 .!$ not re-connecting since already connected
+log 1 $!. not re-connecting since already connected
# handle /disconnect on being connected
> /disconnect
-log 1 ..> QUIT :ircplom says bye
-loggedservermsg 0 1 ..< ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye]
-log 1 ..$ connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]]
+log 1 >.. QUIT :ircplom says bye
+loggedservermsg 0 1 <.. ERROR :Closing link: (whatever@whatever.com) [Quit: ircplom says bye]
+log 1 $.. connection_state set to: [Closing link: (whatever@whatever.com) [Quit: ircplom says bye]]
repeat isupport-clear-in isupport-clear-out
-log 1 ..$ connection_state set to: []
-log , ..$ DISCONNECTED
+log 1 $.. connection_state set to: []
+log , $.. DISCONNECTED
# fail to disconnect when already disconnected
> /disconnect
-log 1 .!$ cannot send, connection seems closed
+log 1 $!. cannot send, connection seems closed
# succeed to re-connect after disconnect
> /reconnect
repeat connecting-in connecting-out
> /quit
-log 0 ..<
+log 0 <..
# to prepare first test, initiate connected state
> /connect foo.bar.baz foo bar:baz
| isupport-clear-in
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
+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
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
-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: [baz]
-log 1 ..$ realname set to: [bar]
-log 1 ..$ port set to: [6697]
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
+log , $.. DISCONNECTED
+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: [baz]
+log 1 $.. realname set to: [bar]
+log 1 $.. port set to: [6697]
| connecting-in
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
-log , ..$ CONNECTED
-log 1 ..> CAP LS :302
-log 1 ..> USER baz 0 * :bar
-log 1 ..> NICK :foo
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
+log , $.. CONNECTED
+log 1 >.. CAP LS :302
+log 1 >.. USER baz 0 * :bar
+log 1 >.. NICK :foo
| connecting-out
# test default ERROR handling
-loggedservermsg 0 1 ..< ERROR :abc def ghi
-log 1 ..$ connection_state set to: [abc def ghi]
+loggedservermsg 0 1 <.. ERROR :abc def ghi
+log 1 $.. connection_state set to: [abc def ghi]
| disconnecting-in
repeat isupport-clear-in isupport-clear-out
-log 1 ..$ connection_state set to: []
-log , ..$ DISCONNECTED
+log 1 $.. connection_state set to: []
+log , $.. DISCONNECTED
| disconnecting-out
# to prepare next test, get back to connected state
repeat connecting-in connecting-out
# test "timed out)" ERROR handling
-loggedservermsg 0 1 ..< ERROR :Closing link: (Connection timed out)
-log 1 ..$ connection_state set to: [Closing link: (Connection timed out)]
+loggedservermsg 0 1 <.. ERROR :Closing link: (Connection timed out)
+log 1 $.. connection_state set to: [Closing link: (Connection timed out)]
repeat disconnecting-in disconnecting-out
-log 1 .!$ will retry connecting in 1 seconds
+log 1 $!. will retry connecting in 1 seconds
# over and out
> /quit
-log 0 ..<
+log 0 <..
> /connect foo.bar.baz foo:bar baz:foobarbazquux
| isupport-clear-in
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
+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
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
-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]
-log 1 ..$ port set to: [6697]
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
+log , $.. DISCONNECTED
+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]
+log 1 $.. port set to: [6697]
| conn0-in
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
| conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
| conn1-in
-log 1 ..> CAP LS :302
-log 1 ..> USER foobarbazquux 0 * :baz
-log 1 ..> NICK :foo
+log 1 >.. CAP LS :302
+log 1 >.. USER foobarbazquux 0 * :baz
+log 1 >.. NICK :foo
| conn1-out
# ensure we PONG properly
-loggedservermsg 0 1 ..< PING :?
-log 1 ..> PONG :?
+loggedservermsg 0 1 <.. PING :?
+log 1 >.. PONG :?
# ping on timeout, go on as normal if PONG received
| full-timeout-in
| trigger-ping-in
servermsg 0 timeout
-log 1 ..> PING :what's up?
+log 1 >.. PING :what's up?
| trigger-ping-out
-loggedservermsg 0 1 ..< :*.?.net PONG *.?.net :what's up?
-loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your ident...
-log 2 ..< (server) *** Looking up your ident...
+loggedservermsg 0 1 <.. :*.?.net PONG *.?.net :what's up?
+loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident...
+log 2 <.. (server) *** Looking up your ident...
# another timeout instead of pong? disconnect
repeat trigger-ping-in trigger-ping-out
servermsg 0 timeout
servermsg 0 no timely PONG from server
-log 1 ..$ connection_state set to: [broken: no timely PONG from server]
+log 1 $.. connection_state set to: [broken: no timely PONG from server]
repeat isupport-clear-in isupport-clear-out
-log 1 ..$ connection_state set to: []
-log 2 ..$ DISCONNECTED
-log 1 .!$ will retry connecting in 1 seconds
+log 1 $.. connection_state set to: []
+log 2 $.. DISCONNECTED
+log 1 $!. will retry connecting in 1 seconds
| full-timeout-out
# on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect
> /window 1
> /reconnect
repeat conn0-in conn0-out
-log 2 ..$ CONNECTED
+log 2 $.. CONNECTED
repeat conn1-in conn1-out
repeat full-timeout-in full-timeout-out
> /quit
-log 0 ..<
+log 0 <..
> /connect foo.bar.baz foo:bar baz:foobarbazquux
| standard-clears-in
| isupport-clear-in
-log 1 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
+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
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
+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]
+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
-log 1 ..$ port set to: [6697]
+log 1 $.. port set to: [6697]
| conn0-in
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
| conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
| conn1-in
-log 1 ..> CAP LS :302
+log 1 >.. CAP LS :302
| conn-out
-log 1 ..> USER foobarbazquux 0 * :baz
-log 1 ..> NICK :foo
+log 1 >.. USER foobarbazquux 0 * :baz
+log 1 >.. NICK :foo
# 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...
-loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Looking up your hostname...
-log 2 ..< (server) *** Looking up your hostname...
-loggedservermsg 0 1 ..< :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo)
-log 2 ..< (server) *** Found your hostname (baz.bar.foo)
-loggedservermsg 0 1 ..< PING :?
-log 1 ..> PONG :?
+loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident...
+log 2 <.. (server) *** Looking up your ident...
+loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your hostname...
+log 2 <.. (server) *** Looking up your hostname...
+loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo)
+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
-log 1 ..> NICK :foo0
-loggedservermsg 0 1 ..< :*.?.net 433 * foo0 :Nickname already in use
-log 1 .!$ nickname already in use, trying increment
-log 1 ..> NICK :foo1
+loggedservermsg 0 1 <.. :*.?.net 433 * foo :Nickname already in use
+log 1 $!. nickname already in use, trying increment
+log 1 >.. NICK :foo0
+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 ..> CAP :LIST
-loggedservermsg 0 1 ..< :*.?.net CAP * ACK :sasl
-loggedservermsg 0 1 ..< :*.?.net CAP * LIST :cap-notify sasl
-log 1 ..$ caps:bar:data set to: []
-log 1 ..$ caps:baz:data set to: []
-log 1 ..$ caps:cap-notify:data set to: []
-log 1 ..$ caps:cap-notify:enabled set to: [True]
-log 1 ..$ caps:foo:data set to: []
-log 1 ..$ caps:sasl:data set to: []
-log 1 ..$ caps:sasl:data set to: [PLAIN,EXTERNAL]
-log 1 ..$ caps:sasl:enabled set to: [True]
+loggedservermsg 0 1 <.. :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify
+log 1 >.. CAP REQ :sasl
+log 1 >.. CAP :LIST
+loggedservermsg 0 1 <.. :*.?.net CAP * ACK :sasl
+loggedservermsg 0 1 <.. :*.?.net CAP * LIST :cap-notify sasl
+log 1 $.. caps:bar:data set to: []
+log 1 $.. caps:baz:data set to: []
+log 1 $.. caps:cap-notify:data set to: []
+log 1 $.. caps:cap-notify:enabled set to: [True]
+log 1 $.. caps:foo:data set to: []
+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
-loggedservermsg 0 1 ..< AUTHENTICATE +
-log 1 ..> AUTHENTICATE :Zm9vAGZvbwBiYXI=
-loggedservermsg 0 1 ..< :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo
-log 1 ..$ users:me:nick set to: [?]
-log 1 ..$ users:me:nick set to: [foo1]
-log 1 ..$ users:me:user set to: [foobarbazq]
-log 1 ..$ users:me:host set to: [baz.bar.foo]
-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]
+log 1 $.. sasl_auth_state set to: [attempting]
+log 1 >.. AUTHENTICATE :PLAIN
+loggedservermsg 0 1 <.. AUTHENTICATE +
+log 1 >.. AUTHENTICATE :Zm9vAGZvbwBiYXI=
+loggedservermsg 0 1 <.. :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo
+log 1 $.. users:me:nick set to: [?]
+log 1 $.. users:me:nick set to: [foo1]
+log 1 $.. users:me:user set to: [foobarbazq]
+log 1 $.. users:me:host set to: [baz.bar.foo]
+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
+log 1 >.. CAP :END
# of all pre-MOTD greeting messages, only process isupports
-loggedservermsg 0 1 ..< :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network
+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 005 foo1 ABC=DEF GHI=JKL :are supported by this server
-log 1 ..$ isupport:ABC set to: [DEF]
-log 1 ..$ isupport:GHI set to: [JKL]
-loggedservermsg 0 1 ..< :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server
-log 1 ..$ isupport:MNO set to: [PQR]
-log 1 ..$ isupport:STU set to: [VWX]
-log 1 ..$ isupport:Y set to: [Z]
-loggedservermsg 0 1 ..< :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers
-loggedservermsg 0 1 ..< :foo.bar.baz 252 foo1 7 :IRC Operators online
-loggedservermsg 0 1 ..< :foo.bar.baz 253 foo1 4 :unknown connection(s)
-loggedservermsg 0 1 ..< :foo.bar.baz 254 foo1 800 :channels formed
-loggedservermsg 0 1 ..< :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres
-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)
+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 005 foo1 ABC=DEF GHI=JKL :are supported by this server
+log 1 $.. isupport:ABC set to: [DEF]
+log 1 $.. isupport:GHI set to: [JKL]
+loggedservermsg 0 1 <.. :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server
+log 1 $.. isupport:MNO set to: [PQR]
+log 1 $.. isupport:STU set to: [VWX]
+log 1 $.. isupport:Y set to: [Z]
+loggedservermsg 0 1 <.. :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers
+loggedservermsg 0 1 <.. :foo.bar.baz 252 foo1 7 :IRC Operators online
+loggedservermsg 0 1 <.. :foo.bar.baz 253 foo1 4 :unknown connection(s)
+loggedservermsg 0 1 <.. :foo.bar.baz 254 foo1 800 :channels formed
+loggedservermsg 0 1 <.. :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres
+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! -
-loggedservermsg 0 1 ..< :foo.bar.baz 372 foo1 :- Welcome! -
-loggedservermsg 0 1 ..< :foo.bar.baz 372 foo1 :- (to this server) -
-loggedservermsg 0 1 ..< :foo.bar.baz 376 foo1 :End of /MOTD command
-log 1 ..$ motd set to:
-log 1 ..$ - Howdy! -
-log 1 ..$ - Welcome! -
-log 1 ..$ - (to this server) -
+loggedservermsg 0 1 <.. :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day -
+loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Howdy! -
+loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- Welcome! -
+loggedservermsg 0 1 <.. :foo.bar.baz 372 foo1 :- (to this server) -
+loggedservermsg 0 1 <.. :foo.bar.baz 376 foo1 :End of /MOTD command
+log 1 $.. motd set to:
+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]
+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.
+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
+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
+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
+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
# 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
+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
-loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo JOIN #test
-log 1 ..$ users:me:user set to: [~foobarbaz]
-loggedservermsg 0 1 ..< :foo.bar.baz 332 foo1 #test :foo bar baz
-log 1 ..$ channels:#test:exits cleared
-loggedservermsg 0 1 ..< :foo.bar.baz 333 foo1 #test bar!~bar@OLD.bar.bar 1234567890
-log 1 ..$ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))]
-log 4 ..$ bar!~bar@OLD.bar.bar set topic: foo bar baz
-loggedservermsg 0 1 ..< :foo.bar.baz 353 foo1 @ #test :foo1 @bar
-log 1 ..$ users:1:nick set to: [?]
-log 1 ..$ users:1:nick set to: [bar]
-loggedservermsg 0 1 ..< :foo.bar.baz 366 foo1 #test :End of /NAMES list.
-log 1 ..$ channels:#test:user_ids set to:
-log 1 ..$ 1
-log 1 ..$ me
-log 4 ..$ residents: bar, foo1
+log 1 >.. JOIN :#test
+loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo JOIN #test
+log 1 $.. users:me:user set to: [~foobarbaz]
+loggedservermsg 0 1 <.. :foo.bar.baz 332 foo1 #test :foo bar baz
+log 1 $.. channels:#test:exits cleared
+loggedservermsg 0 1 <.. :foo.bar.baz 333 foo1 #test bar!~bar@OLD.bar.bar 1234567890
+log 1 $.. channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))]
+log 4 $.. bar!~bar@OLD.bar.bar set topic: foo bar baz
+loggedservermsg 0 1 <.. :foo.bar.baz 353 foo1 @ #test :foo1 @bar
+log 1 $.. users:1:nick set to: [?]
+log 1 $.. users:1:nick set to: [bar]
+loggedservermsg 0 1 <.. :foo.bar.baz 366 foo1 #test :End of /NAMES list.
+log 1 $.. channels:#test:user_ids set to:
+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
+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'))]
-log 4 ..$ bar!~bar@bar.bar set topic: foo bar baz
-loggedservermsg 0 1 ..< :bar!~bar@bar.bar TOPIC #test :foo bar baz
-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
+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'))]
+log 4 $.. bar!~bar@bar.bar set topic: foo bar baz
+loggedservermsg 0 1 <.. :bar!~bar@bar.bar TOPIC #test :foo bar baz
+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 ..$ users:2:nick set to: [baz]
-log 1 ..$ users:2:user set to: [~baz]
-log 1 ..$ users:2:host set to: [baz.baz]
-log 1 ..$ channels:#test:user_ids set to:
-log 1 ..$ 1
-log 1 ..$ 2
-log 1 ..$ me
-log 4 ..$ baz!~baz@baz.baz joins
+loggedservermsg 0 1 <.. :baz!~baz@baz.baz JOIN :#test
+log 1 $.. users:2:nick set to: [?]
+log 1 $.. users:2:nick set to: [baz]
+log 1 $.. users:2:user set to: [~baz]
+log 1 $.. users:2:host set to: [baz.baz]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 1
+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
-loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo JOIN #testtest
-loggedservermsg 0 1 ..< :foo.bar.baz 332 foo1 #testtest :baz bar foo
-log 1 ..$ channels:#testtest:exits cleared
-loggedservermsg 0 1 ..< :foo.bar.baz 333 foo1 #testtest bar!~bar@OLD.bar.bar 1234567890
-log 1 ..$ channels:#testtest:topic set to: [Topic(what='baz bar foo', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))]
-log 5 ..$ bar!~bar@OLD.bar.bar set topic: baz bar foo
-loggedservermsg 0 1 ..< :foo.bar.baz 353 foo1 @ #testtest :foo1 baz
-loggedservermsg 0 1 ..< :foo.bar.baz 366 foo1 #testtest :End of /NAMES list.
-log 1 ..$ channels:#testtest:user_ids set to:
-log 1 ..$ 2
-log 1 ..$ me
-log 5 ..$ residents: baz, foo1
+log 1 >.. JOIN :#testtest
+loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo JOIN #testtest
+loggedservermsg 0 1 <.. :foo.bar.baz 332 foo1 #testtest :baz bar foo
+log 1 $.. channels:#testtest:exits cleared
+loggedservermsg 0 1 <.. :foo.bar.baz 333 foo1 #testtest bar!~bar@OLD.bar.bar 1234567890
+log 1 $.. channels:#testtest:topic set to: [Topic(what='baz bar foo', who=NickUserHost(nick='bar', user='~bar', host='OLD.bar.bar'))]
+log 5 $.. bar!~bar@OLD.bar.bar set topic: baz bar foo
+loggedservermsg 0 1 <.. :foo.bar.baz 353 foo1 @ #testtest :foo1 baz
+loggedservermsg 0 1 <.. :foo.bar.baz 366 foo1 #testtest :End of /NAMES list.
+log 1 $.. channels:#testtest:user_ids set to:
+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
+loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :hi there
+log 6 <.. [baz] hi there
> /privmsg baz hello, how is it going
-log 1 ..> PRIVMSG baz :hello, how is it going
-log 6 ..> [foo1] hello, how is it going
-loggedservermsg 0 1 ..< :baz!~baz@baz.baz PRIVMSG foo1 :fine!
-log 6 ..< [baz] fine!
+log 1 >.. PRIVMSG baz :hello, how is it going
+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
+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
+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 ..$ channels:#test:user_ids set to:
-log 1 ..$ 1
-log 1 ..$ me
-log 4 ..$ bazbaz!~baz@baz.baz parts
-log 1 ..$ channels:#test:exits:2 cleared
-loggedservermsg 0 1 ..< :bazbaz!~baz@baz.baz JOIN :#test
-log 1 ..$ channels:#test:user_ids set to:
-log 1 ..$ 1
-log 1 ..$ 2
-log 1 ..$ me
-log 4 ..$ bazbaz!~baz@baz.baz joins
+loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz PART :#test
+log 1 $.. channels:#test:exits:2 set to: [P]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 1
+log 1 $.. me
+log 4 $.. bazbaz!~baz@baz.baz parts
+log 1 $.. channels:#test:exits:2 cleared
+loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz JOIN :#test
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 1
+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 ..$ channels:#test:user_ids set to:
-log 1 ..$ 2
-log 1 ..$ me
-log 4 ..$ bar!~bar@bar.bar parts
-log 1 ..$ channels:#test:exits:1 cleared
-log 1 ..$ users:1 cleared
-loggedservermsg 0 1 ..< :bar!~bar@bar.bar JOIN :#test
-log 1 ..$ users:3:nick set to: [?]
-log 1 ..$ users:3:nick set to: [bar]
-log 1 ..$ users:3:user set to: [~bar]
-log 1 ..$ users:3:host set to: [bar.bar]
-log 1 ..$ channels:#test:user_ids set to:
-log 1 ..$ 2
-log 1 ..$ 3
-log 1 ..$ me
-log 4 ..$ bar!~bar@bar.bar joins
+loggedservermsg 0 1 <.. :bar!~bar@bar.bar PART :#test
+log 1 $.. channels:#test:exits:1 set to: [P]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 2
+log 1 $.. me
+log 4 $.. bar!~bar@bar.bar parts
+log 1 $.. channels:#test:exits:1 cleared
+log 1 $.. users:1 cleared
+loggedservermsg 0 1 <.. :bar!~bar@bar.bar JOIN :#test
+log 1 $.. users:3:nick set to: [?]
+log 1 $.. users:3:nick set to: [bar]
+log 1 $.. users:3:user set to: [~bar]
+log 1 $.. users:3:host set to: [bar.bar]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 2
+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 6 ..$ bazbaz!~baz@baz.baz quits: Client Quit
-log 1 ..$ channels:#test:exits:2 set to: [QClient Quit]
-log 1 ..$ channels:#test:user_ids set to:
-log 1 ..$ 3
-log 1 ..$ me
-log 4 ..$ bazbaz!~baz@baz.baz quits: Client Quit
-log 1 ..$ channels:#test:exits:2 cleared
-log 1 ..$ channels:#testtest:exits:2 set to: [QClient Quit]
-log 1 ..$ channels:#testtest:user_ids set to:
-log 1 ..$ me
-log 5 ..$ bazbaz!~baz@baz.baz quits: Client Quit
-log 1 ..$ channels:#testtest:exits:2 cleared
-log 1 ..$ users:2 cleared
+loggedservermsg 0 1 <.. :bazbaz!~baz@baz.baz QUIT :Client Quit
+log 1 $.. users:2:exit_msg set to: [QClient Quit]
+log 6 $.. bazbaz!~baz@baz.baz quits: Client Quit
+log 1 $.. channels:#test:exits:2 set to: [QClient Quit]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 3
+log 1 $.. me
+log 4 $.. bazbaz!~baz@baz.baz quits: Client Quit
+log 1 $.. channels:#test:exits:2 cleared
+log 1 $.. channels:#testtest:exits:2 set to: [QClient Quit]
+log 1 $.. channels:#testtest:user_ids set to:
+log 1 $.. me
+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:user_ids set to:
-log 1 ..$ 3
-log 4 ..$ foo1!~foobarbaz@baz.bar.foo parts
-log 1 ..$ channels:#test:exits:me cleared
-log 1 ..$ channels:#test cleared
-log 1 ..$ users:3 cleared
+loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo PART :#test
+log 1 $.. channels:#test:exits:me set to: [P]
+log 1 $.. channels:#test:user_ids set to:
+log 1 $.. 3
+log 4 $.. foo1!~foobarbaz@baz.bar.foo parts
+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
+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
-loggedservermsg 0 1 ..< :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit
-log 1 ..$ users:me:exit_msg set to: [QClient Quit]
-log 3,6,7 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
-log 1 ..$ channels:#testtest:exits:me set to: [QClient Quit]
-log 1 ..$ channels:#testtest:user_ids set to:
-log 5 ..$ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
-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]]
+log 1 >.. QUIT :ircplom says bye
+loggedservermsg 0 1 <.. :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit
+log 1 $.. users:me:exit_msg set to: [QClient Quit]
+log 3,6,7 $.. foo1!~foobarbaz@baz.bar.foo quits: Client Quit
+log 1 $.. channels:#testtest:exits:me set to: [QClient Quit]
+log 1 $.. channels:#testtest:user_ids set to:
+log 5 $.. foo1!~foobarbaz@baz.bar.foo quits: Client Quit
+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-in isupport-clear-out
-log 1 ..$ caps cleared
-log 1 ..$ channels cleared
-log 1 ..$ connection_state set to: []
-log 2,3,4,5,6,7 ..$ DISCONNECTED
-log 1 ..$ motd set to:
-log 1 ..$ sasl_account set to: []
-log 1 ..$ sasl_auth_state set to: []
-log 1 ..$ users cleared
+log 1 $.. caps cleared
+log 1 $.. channels cleared
+log 1 $.. connection_state set to: []
+log 2,3,4,5,6,7 $.. DISCONNECTED
+log 1 $.. motd 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 6 .!$ cannot send, connection seems closed
+log 6 $!. cannot send, connection seems closed
> /window 1
> /privmsg barbar test
-log 1 .!$ cannot send, connection seems closed
+log 1 $!. cannot send, connection seems closed
> /privmsg #test test
-log 1 .!$ not sending, since not in channel
+log 1 $!. not sending, since not in channel
| conn3-out
# test setting up second client, but 432 irrecoverably
> /connect baz.bar.foo ?foo foo:foo
repeat standard-clears-in standard-clears-out +7
-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]
+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-in conn-out +7
-log 8 ..> USER foo 0 * :foo
-log 8 ..> NICK :?foo
-loggedservermsg 1 8 ..< :*.?.net 432 * ?foo :Erroneous nickname
+log 8 >.. USER foo 0 * :foo
+log 8 >.. NICK :?foo
+loggedservermsg 1 8 <.. :*.?.net 432 * ?foo :Erroneous nickname
| disconnect-in
repeat isupport-clear-in isupport-clear-out 8
-log 8 ..$ connection_state set to: []
-log , ..$ DISCONNECTED
+log 8 $.. connection_state set to: []
+log , $.. DISCONNECTED
| disconnect-out
-log 8 .!$ nickname refused for bad format, giving up
+log 8 $!. nickname refused for bad format, giving up
# test failing third connection
> /connect baz.baz.baz baz baz:baz
repeat standard-clears-in standard-clears-out +8
-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]
+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-in conn-out +8
-log 9 ..> USER baz 0 * :baz
-log 9 ..> NICK :baz
+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]
+log 9 $.. connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION]
repeat disconnect-in disconnect-out +1
-log 9 .!$ will retry connecting in 1 seconds
+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-in conn0-out
-log 2,3,4,5,6,7 ..$ CONNECTED
+log 2,3,4,5,6,7 $.. CONNECTED
repeat conn1-in conn1-out
-log 1 ..> JOIN :#testtest
+log 1 >.. JOIN :#testtest
repeat conn2-in conn2-out
repeat conn3-in conn3-out
> /quit
-log 0 ..<
+log 0 <..
| lines-empty-4-in
| lines-empty-2-in
| lines-empty-1-in
-line 0 on_black §§
+line 0 on_black,bright_white §§
| lines-empty-1-out
repeat lines-empty-1-in lines-empty-1-out 1
| lines-empty-2-out
repeat lines-empty-4-in lines-empty-4-out +16
repeat lines-empty-2-in lines-empty-2-out +20
| status-prompt-empty-in
-line 22 , :start)=====================================================================([0]§§
+line 22 on_black,bright_white :start)=====================================================================([0]§§
| prompt-empty-in
-line 23 , > § §§
-line 23 reverse §§ §
+line 23 on_black,bright_white > § §§
+line 23 on_black,bright_white,reverse §§ §
| prompt-empty-out
| status-prompt-empty-out
| empty-init-out
# non-empty command input starts log at bottom, with date above it
> foo
-log 0 .!# invalid prompt command: not prefixed by /
+log 0 #!. invalid prompt command: not prefixed by /
repeat lines-empty-16-in lines-empty-16-out
repeat lines-empty-4-in lines-empty-4-out +16
| history-lines-0:0:2-at-20-in
| history-lines-0:0:1-at-20-in
-line 20 on_black 20§§-§§-§§ §§
+line 20 on_black,bright_white 20§§-§§-§§ §§
| history-lines-0:0:1-at-20-out
-line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: not prefixed by / §§
+line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: not prefixed by / §§
| history-lines-0:0:2-at-20-out
repeat status-prompt-empty-in status-prompt-empty-out
# further inputs grow log upwards
> /foo
-log 0 .!# invalid prompt command: /foo unknown
+log 0 #!. invalid prompt command: /foo unknown
> /bar
-log 0 .!# invalid prompt command: /bar unknown
+log 0 #!. invalid prompt command: /bar unknown
| before-1st-scroll-in
repeat lines-empty-16-in lines-empty-16-out
repeat lines-empty-2-in lines-empty-2-out +16
| history-lines-0:0:4-at-18-in
repeat history-lines-0:0:2-at-20-in history-lines-0:0:2-at-20-out -2
| history-lines-0:2:4-at-20-in
-line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo unknown §§
-line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar unknown §§
+line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo unknown §§
+line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar unknown §§
| history-lines-0:2:4-at-20-out
| history-lines-0:0:4-at-18-out
repeat status-prompt-empty-in status-prompt-empty-out
repeat lines-empty-4-in lines-empty-4-out +16
repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out
| topmost-scroll-out
-line 21 reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [4] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
| after-1st-scroll-out
> /window.history.scroll up
repeat after-1st-scroll-in after-1st-scroll-out
> /help
-log 0 ..# commands available in this window:
-log 0 ..# /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
-log 0 ..# /help
-log 0 ..# /list
-log 0 ..# /prompt_enter
-log 0 ..# /quit
-log 0 ..# /window TOWARDS
-log 0 ..# /window.history.scroll DIRECTION
-log 0 ..# /window.paste
-log 0 ..# /window.prompt.backspace
-log 0 ..# /window.prompt.move_cursor DIRECTION
-log 0 ..# /window.prompt.scroll DIRECTION
+log 0 #.. commands available in this window:
+log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
+log 0 #.. /help
+log 0 #.. /list
+log 0 #.. /prompt_enter
+log 0 #.. /quit
+log 0 #.. /window TOWARDS
+log 0 #.. /window.history.scroll DIRECTION
+log 0 #.. /window.paste
+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-in topmost-scroll-out
-line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
| before-scrolldown-not-to-bottom-out
repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -9
| history-lines-0:4:8-at-13-in
| history-lines-0:4:5-at-13-in
-line 13 on_black,bright_cyan ..# §§:§§:§§ commands available in this window:§§
+line 13 on_black,bright_cyan #.. §§:§§:§§ commands available in this window:§§
| history-lines-0:4:5-at-13-out
| history-lines-0:5:6-at-14-in
-line 14 on_black,bright_cyan ..# §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
+line 14 on_black,bright_cyan #.. §§:§§:§§ /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]§§
| history-lines-0:5:6-at-14-out
| history-lines-0:6:8-at-15-in
-line 15 on_black,bright_cyan ..# §§:§§:§§ /help§§
-line 16 on_black,bright_cyan ..# §§:§§:§§ /list§§
+line 15 on_black,bright_cyan #.. §§:§§:§§ /help§§
+line 16 on_black,bright_cyan #.. §§:§§:§§ /list§§
| history-lines-0:6:8-at-15-out
| history-lines-0:4:8-at-13-out
| history-lines-0:0:8-at-9-out
| history-lines-0:8:12-at-17-in
-line 17 on_black,bright_cyan ..# §§:§§:§§ /prompt_enter§§
-line 18 on_black,bright_cyan ..# §§:§§:§§ /quit§§
-line 19 on_black,bright_cyan ..# §§:§§:§§ /window TOWARDS§§
+line 17 on_black,bright_cyan #.. §§:§§:§§ /prompt_enter§§
+line 18 on_black,bright_cyan #.. §§:§§:§§ /quit§§
+line 19 on_black,bright_cyan #.. §§:§§:§§ /window TOWARDS§§
| history-lines-0:11:12-at-20-in
-line 20 on_black,bright_cyan ..# §§:§§:§§ /window.history.scroll DIRECTION§§
+line 20 on_black,bright_cyan #.. §§:§§:§§ /window.history.scroll DIRECTION§§
| history-lines-0:11:12-at-20-out
| history-lines-0:8:12-at-17-out
-line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
| after-scrolldown-not-to-bottom-out
repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -3
| history-lines-0:12:16-at-18-in
| history-lines-0:12:13-at-18-in
-line 18 on_black,bright_cyan ..# §§:§§:§§ /window.paste§§
+line 18 on_black,bright_cyan #.. §§:§§:§§ /window.paste§§
| history-lines-0:12:13-at-18-out
-line 19 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.backspace§§
-line 20 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.move_cursor DIRECTION§§
-line 21 on_black,bright_cyan ..# §§:§§:§§ /window.prompt.scroll DIRECTION§§
+line 19 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.backspace§§
+line 20 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.move_cursor DIRECTION§§
+line 21 on_black,bright_cyan #.. §§:§§:§§ /window.prompt.scroll DIRECTION§§
| history-lines-0:12:16-at-18-out
| history-lines-0:0:16-at-6-out
repeat status-prompt-empty-in status-prompt-empty-out
> /0
-log 0 .!# invalid prompt command: /0 unknown
+log 0 #!. invalid prompt command: /0 unknown
> /1
-log 0 .!# invalid prompt command: /1 unknown
+log 0 #!. invalid prompt command: /1 unknown
> /2
-log 0 .!# invalid prompt command: /2 unknown
+log 0 #!. invalid prompt command: /2 unknown
> /3
-log 0 .!# invalid prompt command: /3 unknown
+log 0 #!. invalid prompt command: /3 unknown
> /4
-log 0 .!# invalid prompt command: /4 unknown
+log 0 #!. invalid prompt command: /4 unknown
> /5
-log 0 .!# invalid prompt command: /5 unknown
+log 0 #!. invalid prompt command: /5 unknown
> /6
-log 0 .!# invalid prompt command: /6 unknown
+log 0 #!. invalid prompt command: /6 unknown
> /7
-log 0 .!# invalid prompt command: /7 unknown
+log 0 #!. invalid prompt command: /7 unknown
| at-bottom-before-wrapped-in
repeat history-lines-0:2:4-at-20-in history-lines-0:2:4-at-20-out -20
repeat history-lines-0:4:8-at-13-in history-lines-0:4:8-at-13-out -11
| history-lines-0:16:24-at-14-in
| history-lines-0:16:20-at-14-in
| history-lines-0:16:18-at-14-in
-line 14 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /0 unknown§§
-line 15 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /1 unknown§§
+line 14 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /0 unknown§§
+line 15 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /1 unknown§§
| history-lines-0:16:18-at-14-out
| history-lines-0:18:19-at-16-in
-line 16 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /2 unknown§§
+line 16 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /2 unknown§§
| history-lines-0:18:19-at-16-out
-line 17 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /3 unknown§§
+line 17 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /3 unknown§§
| history-lines-0:16:20-at-14-out
| history-lines-0:20:22-at-18-in
-line 18 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /4 unknown§§
-line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /5 unknown§§
+line 18 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /4 unknown§§
+line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /5 unknown§§
| history-lines-0:20:22-at-18-out
| history-lines-0:22:23-at-20-in
-line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /6 unknown§§
+line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /6 unknown§§
| history-lines-0:22:23-at-20-out
-line 21 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /7 unknown§§
+line 21 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /7 unknown§§
| history-lines-0:16:24-at-14-out
repeat status-prompt-empty-in status-prompt-empty-out
| at-bottom-before-wrapped-out
repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -1
repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out -1
repeat history-lines-0:12:13-at-18-in history-lines-0:12:13-at-18-out +2
-line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
> /window.history.scroll down
repeat at-bottom-before-wrapped-in at-bottom-before-wrapped-out
# # check wrapping
> /foo_0123456789_0123456789_01234567
-log 0 .!# invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
+log 0 #!. invalid prompt command: /foo_0123456789_0123456789_01234567 unknown
> /foo_0123456789_0123456789_012345678
-log 0 .!# invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
+log 0 #!. invalid prompt command: /foo_0123456789_0123456789_012345678 unknown
| at-bottom-after-wrapped-in
repeat history-lines-0:5:6-at-14-in history-lines-0:5:6-at-14-out -14
repeat history-lines-0:6:8-at-15-in history-lines-0:6:8-at-15-out -14
| history-lines-0:8:16-at-3-out
repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -3
| history-lines-0:24:26-at-19-in
-line 19 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§
-line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§
+line 19 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_01234567 unknown§§
+line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_012345678§§
| history-lines-0:24:26-at-19-out
| history-lines-0:26:27-at-21-in
-line 21 on_black,bold,bright_red,bright_cyan unknown§§
+line 21 on_black,bright_red,bold unknown§§
| history-lines-0:26:27-at-21-out
repeat status-prompt-empty-in status-prompt-empty-out
| at-bottom-after-wrapped-out
repeat lines-empty-1-in lines-empty-1-out +4
repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -1
| scrollup-after-wrapped-out
-line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
# check scroll-down fully reversible even if over wrapped
repeat at-bottom-after-wrapped-in at-bottom-after-wrapped-out
> /window.history.scroll up
repeat scrollup-after-wrapped-in scrollup-after-wrapped-out
-line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
# check wrapped input only increases below-scroll count by one
> /bar_0123456789_0123456789_012345678
-log 0 .!# invalid prompt command: /bar_0123456789_0123456789_012345678 unknown
+log 0 #!. invalid prompt command: /bar_0123456789_0123456789_012345678 unknown
repeat scrollup-after-wrapped-in scrollup-after-wrapped-out
-line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
# check scroll-down over wrapped will snap down to bottom of wrapped
repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -4
repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -1
repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -1
-line 21 reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [2] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
# # check scrolls-up over longer history until top
> /window.history.scroll up
repeat scrollup-after-wrapped-in scrollup-after-wrapped-out
-line 21 reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [12] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
> /window.history.scroll up
repeat lines-empty-16-in lines-empty-16-out
repeat history-lines-0:0:4-at-18-in history-lines-0:0:4-at-18-out -2
repeat history-lines-0:4:5-at-13-in history-lines-0:4:5-at-13-out +7
-line 21 reverse vvv [23] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [23] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
> /window.history.scroll up
repeat topmost-scroll-in topmost-scroll-out
-line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-empty-in status-prompt-empty-out
# 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 ..$ isupport cleared
-log 1 ..$ isupport:CHANTYPES set to: [#&]
-log 1 ..$ isupport:PREFIX set to: [(ov)@+]
-log 1 ..$ isupport:USERLEN set to: [10]
-log 1 ..$ caps cleared
-log 1 ..$ users cleared
-log 1 ..$ channels cleared
-log , ..$ DISCONNECTED
-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: [baz]
-log 1 ..$ realname set to: [bar]
-log 1 ..$ port set to: [6697]
-log 1 ..$ connection_state set to: [connecting]
-log 1 ..$ connection_state set to: [connected]
-log , ..$ CONNECTED
-log 1 ..> CAP LS :302
-log 1 ..> USER baz 0 * :bar
-log 1 ..> NICK :foo
+log 1 $.. isupport cleared
+log 1 $.. isupport:CHANTYPES set to: [#&]
+log 1 $.. isupport:PREFIX set to: [(ov)@+]
+log 1 $.. isupport:USERLEN set to: [10]
+log 1 $.. caps cleared
+log 1 $.. users cleared
+log 1 $.. channels cleared
+log , $.. DISCONNECTED
+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: [baz]
+log 1 $.. realname set to: [bar]
+log 1 $.. port set to: [6697]
+log 1 $.. connection_state set to: [connecting]
+log 1 $.. connection_state set to: [connected]
+log , $.. CONNECTED
+log 1 >.. CAP LS :302
+log 1 >.. USER baz 0 * :bar
+log 1 >.. NICK :foo
repeat topmost-scroll-in topmost-scroll-out
-line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-line 22 , :start)==========================================================([(0:1)] (1:19)§§
+line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 on_black,bright_white :start)==========================================================([(0:1)] (1:19)§§
repeat prompt-empty-in prompt-empty-out
# check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count)
| history-lines-1:0:16-at-3-in
| history-lines-1:0:8-at-3-in
repeat history-lines-0:0:1-at-20-in history-lines-0:0:1-at-20-out -17
-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)@+]
+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-at-7-in
-line 7 on_black,bright_yellow ..$ §§:§§:§§ isupport:USERLEN set to: [10]
+line 7 on_black,bright_yellow $.. §§:§§:§§ isupport:USERLEN set to: [10]
| history-lines-1:5:6-at-8-in
-line 8 on_black,bright_yellow ..$ §§:§§:§§ caps cleared
+line 8 on_black,bright_yellow $.. §§:§§:§§ caps cleared
| history-lines-1:5:6-at-8-out
| history-lines-1:6:8-at-9-in
-line 9 on_black,bright_yellow ..$ §§:§§:§§ users cleared
-line 10 on_black,bright_yellow ..$ §§:§§:§§ channels cleared
+line 9 on_black,bright_yellow $.. §§:§§:§§ users cleared
+line 10 on_black,bright_yellow $.. §§:§§:§§ channels cleared
| history-lines-1:6:8-at-9-out
| history-lines-1:4:8-at-7-out
| history-lines-1:0:8-at-3-out
| history-lines-1:8:16-at-11-in
| history-lines-1:8:12-at-11-in
-line 11 on_black,bright_yellow ..$ §§:§§:§§ hostname set to: [foo.bar.baz]
-line 12 on_black,bright_yellow ..$ §§:§§:§§ port set to: [-1]
+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-at-13-in
-line 13 on_black,bright_yellow ..$ §§:§§:§§ nick_wanted set to: [foo]
-line 14 on_black,bright_yellow ..$ §§:§§:§§ user_wanted set to: [baz]
+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-at-13-out
| history-lines-1:8:12-at-11-out
| history-lines-1:12:16-at-15-in
| history-lines-1:12:14-at-15-in
-line 15 on_black,bright_yellow ..$ §§:§§:§§ realname set to: [bar]
-line 16 on_black,bright_yellow ..$ §§:§§:§§ port set to: [6697]
+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-at-15-out
| history-lines-1:14:15-at-17-in
-line 17 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connecting]
+line 17 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connecting]
| history-lines-1:14:15-at-17-out
-line 18 on_black,bright_yellow ..$ §§:§§:§§ connection_state set to: [connected]
+line 18 on_black,bright_yellow $.. §§:§§:§§ connection_state set to: [connected]
| history-lines-1:12:16-at-15-out
| history-lines-1:8:16-at-11-out
| history-lines-1:0:16-at-3-out
| history-lines-1:16:18-at-19-in
-line 19 on_black,bright_green ..> §§:§§:§§ CAP LS :302
-line 20 on_black,bright_green ..> §§:§§:§§ USER baz 0 * :bar
+line 19 on_black,bright_green >.. §§:§§:§§ CAP LS :302§§
+line 20 on_black,bright_green >.. §§:§§:§§ USER baz 0 * :bar§§
| history-lines-1:16:18-at-19-out
| history-lines-1:18:19-at-21-in
-line 21 on_black,bright_green ..> §§:§§:§§ NICK :foo
+line 21 on_black,bright_green >.. §§:§§:§§ NICK :foo§§
| history-lines-1:18:19-at-21-out
-line 22 , foo.bar.baz:debug)====================================================((0:1) [1]§§
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================((0:1) [1]§§
repeat prompt-empty-in prompt-empty-out
# check switch-back to window 0, retaining clearing of window 1's unread-lines count
> /window 0
repeat topmost-scroll-in topmost-scroll-out
-line 21 reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [27] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
| status-prompt-after-first-return-in
-line 22 , :start)===============================================================([(0:1)] 1§§
+line 22 on_black,bright_white :start)===============================================================([(0:1)] 1§§
repeat prompt-empty-in prompt-empty-out
| status-prompt-after-first-return-out
repeat lines-empty-1-in lines-empty-1-out +8
repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out
repeat history-lines-0:8:12-at-17-in history-lines-0:8:12-at-17-out
-line 21 reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [16] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
> /window.history.scroll down
| before-first-sight-of-bookmark-in
repeat history-lines-0:16:20-at-14-in history-lines-0:16:20-at-14-out
repeat history-lines-0:20:22-at-18-in history-lines-0:20:22-at-18-out
repeat history-lines-0:22:23-at-20-in history-lines-0:22:23-at-20-out
-line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
| before-first-sight-of-bookmark-out
> /window.history.scroll down
repeat history-lines-0:24:26-at-19-in history-lines-0:24:26-at-19-out -3
repeat history-lines-0:26:27-at-21-in history-lines-0:26:27-at-21-out -3
| bookmark-at-19-in
-line 19 on_black --------------------------------------------------------------------------------§§
+line 19 on_black,bright_white --------------------------------------------------------------------------------§§
| bookmark-at-19-out
| history-lines-0:27:28-at-20-in
-line 20 on_black,bold,bright_red,bright_cyan .!# §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
+line 20 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
| history-lines-0:27:28-at-20-out
| history-lines-0:28:29-at-21-in
-line 21 on_black,bold,bright_red,bright_cyan unknown§§
+line 21 on_black,bright_red,bold unknown§§
| history-lines-0:28:29-at-21-out
repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
| first-sight-of-bookmark-out
repeat history-lines-0:0:16-at-6-in history-lines-0:0:16-at-6-out -4
repeat history-lines-0:16:18-at-14-in history-lines-0:16:18-at-14-out +4
repeat history-lines-0:18:19-at-16-in history-lines-0:18:19-at-16-out +4
-line 21 reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [9] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-after-first-return-in status-prompt-after-first-return-out
> /window.history.scroll down
repeat first-sight-of-bookmark-in first-sight-of-bookmark-out
repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -1
repeat bookmark-at-19-in bookmark-at-19-out +2
| status-prompt-both-empty-in
-line 22 , foo.bar.baz:debug)========================================================(0 [1]§§
+line 22 on_black,bright_white foo.bar.baz:debug)========================================================(0 [1]§§
repeat prompt-empty-in prompt-empty-out
| status-prompt-both-empty-out
| history-lines-0:24:28-at-16-out
repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -1
repeat bookmark-at-19-in bookmark-at-19-out +2
-line 22 , :start)===================================================================([0] 1§§
+line 22 on_black,bright_white :start)===================================================================([0] 1§§
repeat prompt-empty-in prompt-empty-out
# check new lines push bookmark up
> /list
-log 0 ..# windows available via /window:
-log 0 ..# 0) :start
-log 0 ..# 1) foo.bar.baz:debug
+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:11:12-at-20-in history-lines-0:11:12-at-20-out -20
repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -17
repeat history-lines-0:28:29-at-21-in history-lines-0:28:29-at-21-out -4
repeat bookmark-at-19-in bookmark-at-19-out -1
| history-lines-0:29:30-at-19-in
-line 19 on_black,bright_cyan ..# §§:§§:§§ windows available via /window:§§
+line 19 on_black,bright_cyan #.. §§:§§:§§ windows available via /window:§§
| history-lines-0:29:30-at-19-out
| history-lines-0:30:32-at-20-in
-line 20 on_black,bright_cyan ..# §§:§§:§§ 0) :start§§
-line 21 on_black,bright_cyan ..# §§:§§:§§ 1) foo.bar.baz:debug§§
+line 20 on_black,bright_cyan #.. §§:§§:§§ 0) :start§§
+line 21 on_black,bright_cyan #.. §§:§§:§§ 1) foo.bar.baz:debug§§
| history-lines-0:30:32-at-20-out
| before-first-server-responses-out
-line 22 , :start)===================================================================([0] 1§§
+line 22 on_black,bright_white :start)===================================================================([0] 1§§
repeat prompt-empty-in prompt-empty-out
# 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
+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-in before-first-server-responses-out
-line 22 , :start)===============================================================([0] (1:4)§§
+line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§
repeat prompt-empty-in prompt-empty-out
# 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
repeat history-lines-1:18:19-at-21-in history-lines-1:18:19-at-21-out -7
repeat bookmark-at-19-in bookmark-at-19-out -4
| history-lines-1:19:20-at-16-in
-line 16 on_black,bright_white ..< §§:§§:§§ PING :?
+line 16 on_black,bright_white <.. §§:§§:§§ PING :?
| history-lines-1:19:20-at-16-out
| history-lines-1:20:24-at-17-in
-line 17 on_black,bright_green ..> §§:§§:§§ PONG :?
-line 18 on_black,bright_white ..< §§:§§:§§ PING :123456789 123456789 123456789 123456789 123456789 123456789§§
+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§§
+line 20 on_black,bright_green >.. §§:§§:§§ PONG :123456789 123456789 123456789 123456789 123456789 123456789§§
| history-lines-1:20:24-at-17-out
| history-lines-1:24:25-at-21-in
line 21 on_black,bright_green 123456789 123456789§§
# 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
+loggedservermsg 0 1 <.. PING :foo
+log 1 >.. PONG :foo
| early-win1-upscroll-in
repeat lines-empty-4-in lines-empty-4-out
repeat lines-empty-2-in lines-empty-2-out +4
repeat history-lines-1:12:14-at-15-in history-lines-1:12:14-at-15-out +3
repeat history-lines-1:14:15-at-17-in history-lines-1:14:15-at-17-out +3
| early-win1-upscroll-out
-line 21 reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [11] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-both-empty-in status-prompt-both-empty-out
> /window.history.scroll down
repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8
repeat history-lines-1:19:20-at-16-in history-lines-1:19:20-at-16-out -1
repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -1
repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -1
-line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-both-empty-in status-prompt-both-empty-out
# check that with new lines left unread, switch away and back into window moves bookmark below newest read line, counts unread lines in status
repeat history-lines-0:30:32-at-20-in history-lines-0:30:32-at-20-out -1
repeat bookmark-at-19-in bookmark-at-19-out +2
| win-0-only-for-win-1-tests-out
-line 22 , :start)===============================================================([0] (1:2)§§
+line 22 on_black,bright_white :start)===============================================================([0] (1:2)§§
repeat prompt-empty-in prompt-empty-out
> /window 1
| keep-bookmark-on-outside-growth-test-in
repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2
repeat bookmark-at-19-in bookmark-at-19-out +1
| keep-bookmark-on-outside-growth-test-out
-line 21 reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-line 22 , foo.bar.baz:debug)====================================================(0 [(1:2)]§§
+line 21 on_black,bright_white,reverse vvv [3] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:2)]§§
repeat prompt-empty-in prompt-empty-out
# 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
+loggedservermsg 0 1 <.. PING :bar
+log 1 >.. PONG :bar
repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out
-line 22 , :start)===============================================================([0] (1:4)§§
+line 22 on_black,bright_white :start)===============================================================([0] (1:4)§§
repeat prompt-empty-in prompt-empty-out
> /window 1
repeat keep-bookmark-on-outside-growth-test-in keep-bookmark-on-outside-growth-test-out
-line 21 reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [5] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
| status-prompt-on-win1-4-unread-in
-line 22 , foo.bar.baz:debug)====================================================(0 [(1:4)]§§
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:4)]§§
repeat prompt-empty-in prompt-empty-out
| status-prompt-on-win1-4-unread-out
# check same applies when leaving affected window with bookmark out-of-sight
> /window.history.scroll up
repeat early-win1-upscroll-in early-win1-upscroll-out
-line 21 reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 21 on_black,bright_white,reverse vvv [13] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
repeat status-prompt-on-win1-4-unread-in status-prompt-on-win1-4-unread-out
> /window 0
-loggedservermsg 0 1 ..< PING :baz
-log 1 ..> PONG :baz
+loggedservermsg 0 1 <.. PING :baz
+log 1 >.. PONG :baz
repeat win-0-only-for-win-1-tests-in win-0-only-for-win-1-tests-out
-line 22 , :start)===============================================================([0] (1:6)§§
+line 22 on_black,bright_white :start)===============================================================([0] (1:6)§§
repeat prompt-empty-in prompt-empty-out
> /window 1
repeat early-win1-upscroll-in early-win1-upscroll-out
-line 21 reverse vvv [15] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+line 21 on_black,bright_white,reverse vvv [15] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§
repeat prompt-empty-in prompt-empty-out
> /window.history.scroll down
repeat history-lines-1:5:6-at-8-in history-lines-1:5:6-at-8-out -8
repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out
repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -2
repeat bookmark-at-19-in bookmark-at-19-out +1
-line 21 reverse vvv [7] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
-line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+line 21 on_black,bright_white,reverse vvv [7] vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§
repeat prompt-empty-in prompt-empty-out
> /window.history.scroll down
repeat history-lines-1:10:12-at-13-in history-lines-1:10:12-at-13-out -13
repeat history-lines-1:16:24-at-11-in history-lines-1:16:24-at-11-out -5
repeat history-lines-1:24:25-at-21-in history-lines-1:24:25-at-21-out -7
repeat bookmark-at-19-in bookmark-at-19-out -4
-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
-line 22 , foo.bar.baz:debug)====================================================(0 [(1:6)]§§
+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
+line 22 on_black,bright_white foo.bar.baz:debug)====================================================(0 [(1:6)]§§
repeat prompt-empty-in prompt-empty-out
> /quit
-log 0 ..<
+log 0 <..
# expected complaints on wrong command inputs
> foo
-log 0 .!# invalid prompt command: not prefixed by /
+log 0 #!. invalid prompt command: not prefixed by /
> /foo
-log 0 .!# invalid prompt command: /foo unknown
+log 0 #!. invalid prompt command: /foo unknown
> /help foo
-log 0 .!# invalid prompt command: /help given argument(s) while none expected
+log 0 #!. invalid prompt command: /help given argument(s) while none expected
> /window
-log 0 .!# invalid prompt command: /window too few arguments (given 0, need 1)
+log 0 #!. invalid prompt command: /window too few arguments (given 0, need 1)
# some simple expected command successes
> /help
-log 0 ..# commands available in this window:
-log 0 ..# /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
-log 0 ..# /help
-log 0 ..# /list
-log 0 ..# /prompt_enter
-log 0 ..# /quit
-log 0 ..# /window TOWARDS
-log 0 ..# /window.history.scroll DIRECTION
-log 0 ..# /window.paste
-log 0 ..# /window.prompt.backspace
-log 0 ..# /window.prompt.move_cursor DIRECTION
-log 0 ..# /window.prompt.scroll DIRECTION
+log 0 #.. commands available in this window:
+log 0 #.. /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
+log 0 #.. /help
+log 0 #.. /list
+log 0 #.. /prompt_enter
+log 0 #.. /quit
+log 0 #.. /window TOWARDS
+log 0 #.. /window.history.scroll DIRECTION
+log 0 #.. /window.paste
+log 0 #.. /window.prompt.backspace
+log 0 #.. /window.prompt.move_cursor DIRECTION
+log 0 #.. /window.prompt.scroll DIRECTION
> /list
-log 0 ..# windows available via /window:
-log 0 ..# 0) :start
+log 0 #.. windows available via /window:
+log 0 #.. 0) :start
# should probably not be available at all by explicit prompt writing, but for now this be the expected behavior …
> /prompt_enter
-log 0 .!# invalid prompt command: /prompt_enter would loop into ourselves
+log 0 #!. invalid prompt command: /prompt_enter would loop into ourselves
> /window.history.scroll foo
> /window.prompt.backspace
> /window.prompt.move_cursor foo
> /window.paste
> /quit
-log 0 ..<
+log 0 <..