super().__init__(**kwargs)
self._maxlen_log = maxlen_log
self._length_to_term = length_to_term
- self._formatted: list[tuple[int, str]] = []
+ self._wrapped: list[tuple[int, str]] = []
self._newest_read_history_idx_pos = self._UNSET_IDX_POS
self._history_offset = 0
self._history_idx_neg = self._UNSET_IDX_NEG
- def _add_formatted(self, history_idx_pos: int, line: str) -> int:
- attrs = []
- for c in line.split(LOG_FMT_SEP, maxsplit=1)[0]:
- attrs += list(LOG_FMT_ATTRS.get(c, tuple()))
- formatted_line = FormattingString(line).attrd(*attrs)
- formatted_lines = FormattingString(formatted_line
- ).wrap(self._sizes.x,
- self._length_to_term)
- self._formatted += [(self._history_offset + history_idx_pos, line)
- for line in formatted_lines]
- return len(formatted_lines)
+ def _add_wrapped(self, history_idx_pos: int, line: str) -> int:
+ lines = FormattingString(line).wrap(self._sizes.x,
+ self._length_to_term)
+ self._wrapped += [(self._history_offset + history_idx_pos, line)
+ for line in lines]
+ return len(lines)
@property
def _len_full_history(self) -> int:
super().set_geometry(sizes)
if self._drawable:
self._y_pgscroll = self._sizes.y // 2
- self._formatted.clear()
+ self._wrapped.clear()
for history_idx_pos, line in enumerate(self._history):
- self._add_formatted(history_idx_pos, line)
+ self._add_wrapped(history_idx_pos, line)
# ensure that of the full line identified by ._history_idx_neg,
# ._wrapped_idx_neg point to the lowest of its wrap parts
self._wrapped_idx_neg = (
- self._UNSET_IDX_NEG if (not self._formatted)
- else (-len(self._formatted)
+ self._UNSET_IDX_NEG if (not self._wrapped)
+ else (-len(self._wrapped)
+ self._last_wrapped_idx_pos_for_hist_idx_pos(
self._len_full_history + max(self._history_idx_neg,
- self._maxlen_log))))
if not self._UNSET_IDX_NEG != self._history_idx_neg >= -1:
self._history_idx_neg -= 1
if self._drawable:
- n_wrapped = self._add_formatted(len(self._history) - 1, to_append)
+ n_wrapped = self._add_wrapped(len(self._history) - 1, to_append)
if not self._UNSET_IDX_NEG != self._wrapped_idx_neg >= -1:
self._wrapped_idx_neg -= n_wrapped
if len(self._history) > self._maxlen_log:
self._history_idx_neg = max(self._history_idx_neg,
-self._maxlen_log)
wrap_offset = 0
- for wrap_idx_pos, t in enumerate(self._formatted):
+ for wrap_idx_pos, t in enumerate(self._wrapped):
if t[0] == self._history_offset:
wrap_offset = wrap_idx_pos
break
- self._formatted = self._formatted[wrap_offset:]
+ self._wrapped = self._wrapped[wrap_offset:]
self._wrapped_idx_neg = max(self._wrapped_idx_neg,
- -len(self._formatted))
+ -len(self._wrapped))
def _draw(self) -> None:
add_scroll_info = self._wrapped_idx_neg < -1
start_idx_neg = (self._wrapped_idx_neg
- self._sizes.y + 1 + bool(add_scroll_info))
end_idx_neg = (self._wrapped_idx_neg + 1) if add_scroll_info else None
- wrapped = self._formatted[start_idx_neg:end_idx_neg]
+ wrapped = self._wrapped[start_idx_neg:end_idx_neg]
while len(wrapped) < self._sizes.y - bool(add_scroll_info):
wrapped.insert(0, (self._PADDING_HISTORY_IDX_POS, ''))
for idx, line in enumerate([lt[1] for lt in wrapped]):
def bookmark(self) -> None:
'Store next idx to what most recent line we have (been) scrolled.'
bookmark = (self._BOOKMARK_HISTORY_IDX_POS, '-' * self._sizes.x)
- if bookmark in self._formatted:
+ if bookmark in self._wrapped:
bookmark_idx_neg\
- = self._formatted.index(bookmark) - len(self._formatted)
- del self._formatted[bookmark_idx_neg]
+ = self._wrapped.index(bookmark) - len(self._wrapped)
+ del self._wrapped[bookmark_idx_neg]
if bookmark_idx_neg > self._wrapped_idx_neg:
self._wrapped_idx_neg += 1
if self._newest_read_history_idx_pos < self._history_offset:
return
- if not self._formatted:
+ if not self._wrapped:
return
- self._formatted.insert(self._bookmark_wrapped_idx_pos, bookmark)
+ self._wrapped.insert(self._bookmark_wrapped_idx_pos, bookmark)
self._wrapped_idx_neg -= int(self._bookmark_wrapped_idx_neg
> self._wrapped_idx_neg)
@property
def _bookmark_wrapped_idx_neg(self) -> int:
- return self._bookmark_wrapped_idx_pos - len(self._formatted)
+ return self._bookmark_wrapped_idx_pos - len(self._wrapped)
def _last_wrapped_idx_pos_for_hist_idx_pos(self, hist_idx_pos: int) -> int:
- return [idx for idx, t in enumerate(self._formatted)
+ return [idx for idx, t in enumerate(self._wrapped)
if t[0] == hist_idx_pos][-1]
@property
def _scroll(self, up: bool = True) -> None:
super()._scroll(up)
- if self._drawable and self._formatted:
- if up and len(self._formatted) > 2:
+ if self._drawable and self._wrapped:
+ if up and len(self._wrapped) > 2:
self._wrapped_idx_neg = max(
- -len(self._formatted),
+ -len(self._wrapped),
self._wrapped_idx_neg - self._y_pgscroll)
else:
self._wrapped_idx_neg = min(
idx = self._wrapped_idx_neg - int(
self._wrapped_idx_neg == self._bookmark_wrapped_idx_neg)
self._history_idx_neg = (-self._len_full_history
- + max(0, self._formatted[idx][0]))
+ + max(0, self._wrapped[idx][0]))
class PromptWidget(_ScrollableWidget):
prefix = kwargs.get('prefix', _LOG_PREFIX_DEFAULT)
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
msg = f'{prefix}{LOG_FMT_SEP}{time} {msg}'
+ msg_attrs: list[str] = list(LOG_FMT_ATTRS.get(prefix[0], tuple()))
+ for t in (('alert', LOG_FMT_ALERT), ('highlight', LOG_FMT_HIGHLIGHT)):
+ if kwargs.get(t[0], False):
+ msg_attrs += list(LOG_FMT_ATTRS.get(t[1], tuple()))
+ msg = FormattingString(msg).attrd(*msg_attrs)
affected_win_indices = []
for win in self._log_target_wins(**kwargs):
affected_win_indices += [win.idx]
× 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]
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
× clientwin-init
insert isupport-clear : +1
-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
× conn-retry
-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 $ connection_state set to: [connecting]
+log 1 $ port set to: [10002]
+log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
× conn-init-retries
-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]
insert conn-retry : +1
-log 1 $!. will retry connecting in 1 seconds
+log 1 $ will retry connecting in 1 seconds
insert conn-retry :1 +1
-log 1 $.. port set to: [10001]
+log 1 $ port set to: [10001]
insert conn-retry 2: +1
-log 1 $!. will retry connecting in 2 seconds
+log 1 $ will retry connecting in 2 seconds
insert conn-retry :1 +1
-log 1 $.. port set to: [10000]
+log 1 $ port set to: [10000]
insert conn-retry 2: +1
-log 1 $!. will retry connecting in 4 seconds
+log 1 $ will retry connecting in 4 seconds
× conn
-log 1 $.. connection_state set to: [connecting]
-log 1 $.. connection_state set to: [connected]
-log , $.. CONNECTED
-log 1 >.. CAP LS :302
-log 1 >.. USER foobarbazquux 0 * :baz
-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 foobarbazquux 0 * :baz
+log 1 > NICK :foo
×
> /connect foo.bar.baz:10003 foo:bar baz:foobarbazquux
insert clientwin-init : +1
-log 1 $.. hostname set to: [foo.bar.baz]
+log 1 $ hostname set to: [foo.bar.baz]
insert conn-init-retries : +1
# with TestingClient finally having reduced port to 10000, connecting works now
# 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]
insert isupport-clear : +1
-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
insert conn : +1
# on second server, check timed auto-retries don't activate after manual intervention
> /connect baz.bar.foo:10003 foo:bar baz:foobarbazquux
insert clientwin-init : +2
-log 2 $.. hostname set to: [baz.bar.foo]
+log 2 $ hostname set to: [baz.bar.foo]
insert conn-init-retries : +2
> /window 2
> /reconnect
insert conn : +2
wait 4
> /disconnect
-log 2 >.. QUIT :ircplom says bye
+log 2 > QUIT :ircplom says bye
wait 4
-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
× 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]
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
× connecting
-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
×
# to prepare, initiate connection
> /connect foo.bar.baz foo bar:baz
insert isupport-clear : +1
-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]
insert connecting : +1
# 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]]
insert isupport-clear : +1
-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
× 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]
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
× connecting
-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
× disconnecting
insert isupport-clear : +1
-log 1 $.. connection_state set to: []
-log , $.. DISCONNECTED
+log 1 $ connection_state set to: []
+log , $ DISCONNECTED
×
# to prepare first test, initiate connected state
> /connect foo.bar.baz foo bar:baz
insert isupport-clear : +1
-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]
insert connecting : +1
# 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]
insert disconnecting : +1
# to prepare next test, get back to connected state
insert connecting : +1
# 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)]
insert disconnecting : +1
-log 1 $!. will retry connecting in 1 seconds
+log 1 $ will retry connecting in 1 seconds
× 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]
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
× conn
-log 1 $.. connection_state set to: [connecting]
-log 1 $.. connection_state set to: [connected]
-log , $.. CONNECTED
-log 1 >.. CAP LS :302
-log 1 >.. USER foobarbazquux 0 * :baz
-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 foobarbazquux 0 * :baz
+log 1 > NICK :foo
× full-timeout
# ping on timeout, go on as normal if PONG received
insert trigger-ping : +0
-loggedservermsg 0 1 <.. :*.?.net PONG *.?.net :what's up?
-loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your ident...
-log 2 <.. ({bold|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
insert trigger-ping : +0
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]
insert isupport-clear : +1
-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
× trigger-ping
servermsg 0 timeout
-log 1 >.. PING :what's up?
+log 1 > PING :what's up?
×
> /connect foo.bar.baz foo:bar baz:foobarbazquux
insert isupport-clear : +1
-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]
insert conn : +1
# ensure we PONG properly
-loggedservermsg 0 1 <.. PING :?
-log 1 >.. PONG :?
+loggedservermsg 0 1 < PING :?
+log 1 > PONG :?
insert full-timeout : +0
> /window 1
> /reconnect
insert conn :2 +1
-log 2 $.. CONNECTED
+log 2 $ CONNECTED
insert conn 3: +1
insert full-timeout : +0
× 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]
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
× standard-clear
insert isupport-clear : +1
-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
× conn_init_0
-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 foobarbazquux 0 * :baz
-log 1 >.. NICK :foo
+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 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 <.. ({bold|server}) *** Looking up your ident...
-loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Looking up your hostname...
-log 2 <.. ({bold|server}) *** Looking up your hostname...
-loggedservermsg 0 1 <.. :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo)
-log 2 <.. ({bold|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
× 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
-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 001 foo1 :Welcome to the foo.bar.baz network
+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 <.. ({bold|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.
× 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
+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 <.. [{bold|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 <.. [{bold|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 >.. [{bold|foo1}] hello, how is it going
-loggedservermsg 0 1 <.. :baz!~baz@baz.baz PRIVMSG foo1 :fine!
-log 6 <.. [{bold|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 >.. [{bold|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]]
insert isupport-clear : +1
-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
× disconnect
insert isupport-clear : +8
-log 8 $.. connection_state set to: []
-log , $.. DISCONNECTED
+log 8 $ connection_state set to: []
+log , $ DISCONNECTED
×
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]
+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
# 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
> /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
insert during_conn : +0
# test setting up second client, but 432 irrecoverably
> /connect baz.bar.foo ?foo foo:foo
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]
+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]
insert conn_init_0 :5 +8
-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
insert disconnect : +8
-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
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]
+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]
insert conn_init_0 :5 +9
-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]
insert disconnect : +9
-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
insert conn_init_0 1:3 +1
-log 2,3,4,5,6,7 $.. CONNECTED
+log 2,3,4,5,6,7 $ CONNECTED
insert conn_init_0 4: +1
insert conn_init_1 : +0
insert conn_init_2 :1 +0
-log 1 >.. JOIN :#testtest
+log 1 > JOIN :#testtest
insert conn_init_2 1: +0
insert during_conn : +0
× 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 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_0123456789 unknown§§
+line 24 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /foo_0123456789_0123456789_0123456789_§§
line 25 on_black,bright_red,bold unknown§§
-line 26 on_black,bright_red,bold #!. §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_012345678§§
+line 26 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: /bar_0123456789_0123456789_0123456789_§§
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§§
+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 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 :9 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 23 on_black,bright_green > §§:§§:§§ PONG :9 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
-line 31 on_black,bright_white <.. §§:§§:§§ PING :0
-line 32 on_black,bright_green >.. §§:§§:§§ PONG :0
-line 33 on_black,bright_white <.. §§:§§:§§ PING :1
-line 34 on_black,bright_green >.. §§:§§:§§ PONG :1
-line 35 on_black,bright_white <.. §§:§§:§§ PING :2
-line 36 on_black,bright_green >.. §§:§§:§§ PONG :2
-line 37 on_black,bright_white <.. §§:§§:§§ PING :3
-line 38 on_black,bright_green >.. §§:§§:§§ PONG :3
-line 39 on_black,bright_white <.. §§:§§:§§ PING :4
-line 40 on_black,bright_green >.. §§:§§:§§ PONG :4
-line 41 on_black,bright_white <.. §§:§§:§§ PING :5
-line 42 on_black,bright_green >.. §§:§§:§§ PONG :5
-line 43 on_black,bright_white <.. §§:§§:§§ PING :6
-line 44 on_black,bright_green >.. §§:§§:§§ PONG :6
-line 45 on_black,bright_white <.. §§:§§:§§ PING :7
-line 46 on_black,bright_green >.. §§:§§:§§ PONG :7
-line 47 on_black,bright_white <.. §§:§§:§§ PING :8
-line 48 on_black,bright_green >.. §§:§§:§§ PONG :8
-line 49 on_black,bright_white <.. §§:§§:§§ PING :9
-line 50 on_black,bright_green >.. §§:§§:§§ PONG :9
-line 51 on_black,bright_white <.. §§:§§:§§ PING :10
-line 52 on_black,bright_green >.. §§:§§:§§ PONG :10
-line 53 on_black,bright_white <.. §§:§§:§§ PING :11
-line 54 on_black,bright_green >.. §§:§§:§§ PONG :11
-line 55 on_black,bright_white <.. §§:§§:§§ PING :12
-line 56 on_black,bright_green >.. §§:§§:§§ PONG :12
-line 57 on_black,bright_white <.. §§:§§:§§ PING :13
-line 58 on_black,bright_green >.. §§:§§:§§ PONG :13
-line 59 on_black,bright_white <.. §§:§§:§§ PING :14
-line 60 on_black,bright_green >.. §§:§§:§§ PONG :14
-line 61 on_black,bright_white <.. §§:§§:§§ PING :15
-line 62 on_black,bright_green >.. §§:§§:§§ PONG :15
-line 63 on_black,bright_white <.. §§:§§:§§ PING :16
-line 64 on_black,bright_green >.. §§:§§:§§ PONG :16
-line 65 on_black,bright_white <.. §§:§§:§§ PING :17
-line 66 on_black,bright_green >.. §§:§§:§§ PONG :17
-line 67 on_black,bright_white <.. §§:§§:§§ PING :18
-line 68 on_black,bright_green >.. §§:§§:§§ PONG :18
-line 69 on_black,bright_white <.. §§:§§:§§ PING :19
-line 70 on_black,bright_green >.. §§:§§:§§ PONG :19
-line 71 on_black,bright_white <.. §§:§§:§§ PING :20
-line 72 on_black,bright_green >.. §§:§§:§§ PONG :20
-line 73 on_black,bright_white <.. §§:§§:§§ PING :21
-line 74 on_black,bright_green >.. §§:§§:§§ PONG :21
-line 75 on_black,bright_white <.. §§:§§:§§ PING :22
-line 76 on_black,bright_green >.. §§:§§:§§ PONG :22
-line 77 on_black,bright_white <.. §§:§§:§§ PING :23
-line 78 on_black,bright_green >.. §§:§§:§§ PONG :23
+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
+line 31 on_black,bright_white < §§:§§:§§ PING :0
+line 32 on_black,bright_green > §§:§§:§§ PONG :0
+line 33 on_black,bright_white < §§:§§:§§ PING :1
+line 34 on_black,bright_green > §§:§§:§§ PONG :1
+line 35 on_black,bright_white < §§:§§:§§ PING :2
+line 36 on_black,bright_green > §§:§§:§§ PONG :2
+line 37 on_black,bright_white < §§:§§:§§ PING :3
+line 38 on_black,bright_green > §§:§§:§§ PONG :3
+line 39 on_black,bright_white < §§:§§:§§ PING :4
+line 40 on_black,bright_green > §§:§§:§§ PONG :4
+line 41 on_black,bright_white < §§:§§:§§ PING :5
+line 42 on_black,bright_green > §§:§§:§§ PONG :5
+line 43 on_black,bright_white < §§:§§:§§ PING :6
+line 44 on_black,bright_green > §§:§§:§§ PONG :6
+line 45 on_black,bright_white < §§:§§:§§ PING :7
+line 46 on_black,bright_green > §§:§§:§§ PONG :7
+line 47 on_black,bright_white < §§:§§:§§ PING :8
+line 48 on_black,bright_green > §§:§§:§§ PONG :8
+line 49 on_black,bright_white < §§:§§:§§ PING :9
+line 50 on_black,bright_green > §§:§§:§§ PONG :9
+line 51 on_black,bright_white < §§:§§:§§ PING :10
+line 52 on_black,bright_green > §§:§§:§§ PONG :10
+line 53 on_black,bright_white < §§:§§:§§ PING :11
+line 54 on_black,bright_green > §§:§§:§§ PONG :11
+line 55 on_black,bright_white < §§:§§:§§ PING :12
+line 56 on_black,bright_green > §§:§§:§§ PONG :12
+line 57 on_black,bright_white < §§:§§:§§ PING :13
+line 58 on_black,bright_green > §§:§§:§§ PONG :13
+line 59 on_black,bright_white < §§:§§:§§ PING :14
+line 60 on_black,bright_green > §§:§§:§§ PONG :14
+line 61 on_black,bright_white < §§:§§:§§ PING :15
+line 62 on_black,bright_green > §§:§§:§§ PONG :15
+line 63 on_black,bright_white < §§:§§:§§ PING :16
+line 64 on_black,bright_green > §§:§§:§§ PONG :16
+line 65 on_black,bright_white < §§:§§:§§ PING :17
+line 66 on_black,bright_green > §§:§§:§§ PONG :17
+line 67 on_black,bright_white < §§:§§:§§ PING :18
+line 68 on_black,bright_green > §§:§§:§§ PONG :18
+line 69 on_black,bright_white < §§:§§:§§ PING :19
+line 70 on_black,bright_green > §§:§§:§§ PONG :19
+line 71 on_black,bright_white < §§:§§:§§ PING :20
+line 72 on_black,bright_green > §§:§§:§§ PONG :20
+line 73 on_black,bright_white < §§:§§:§§ PING :21
+line 74 on_black,bright_green > §§:§§:§§ PONG :21
+line 75 on_black,bright_white < §§:§§:§§ PING :22
+line 76 on_black,bright_green > §§:§§:§§ PONG :22
+line 77 on_black,bright_white < §§:§§:§§ PING :23
+line 78 on_black,bright_green > §§:§§:§§ PONG :23
×
# 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 /
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
+log 0 # invalid prompt command: /foo unknown
insert lines-empty :19 +0
insert history_0 :3 +19
insert status-[0]-prompt : +22
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 #.. /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
insert lines-empty :20 +0
insert history_0 :1 +20
insert scrolldown-14 : +21
insert history_0 :15 +7
insert status-[0]-prompt : +22
> /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
insert history_0 1:23 +0
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
+> /foo_0123456789_0123456789_0123456789
+log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789 unknown
+> /foo_0123456789_0123456789_0123456789_
+log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789_ unknown
insert history_0 4:26 +0
insert status-[0]-prompt : +22
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
+# check wrapped input only increases below-scroll count by one
+> /bar_0123456789_0123456789_0123456789_
+log 0 # invalid prompt command: /bar_0123456789_0123456789_0123456789_ unknown
insert lines-empty :6 +0
insert history_0 :15 +6
insert scrolldown-11 : +21
# 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
insert lines-empty :20 +0
insert history_0 :1 +20
insert scrolldown-25 : +21
# 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
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
+loggedservermsg 0 1 < PING :?
+log 1 > PONG :?
+loggedservermsg 0 1 < PING :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
+log 1 > PONG :9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789
insert history_0 10:28 +0
insert bookmark : +18
insert history_0 28:31 +19
### # 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
insert lines-empty :6 +0
insert history_1 0:15 +6
insert scrolldown-10 : +21
# 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
insert history_0 10:31 +0
insert bookmark : +21
insert status-[0]-1:4-prompt : +22
insert scrolldown-12 : +21
insert status-0-[1:4]-prompt : +22
> /window 0
-loggedservermsg 0 1 <.. PING :baz
-log 1 >.. PONG :baz
+loggedservermsg 0 1 < PING :baz
+log 1 > PONG :baz
insert history_0 10:31 +0
insert bookmark : +21
insert status-[0]-1:6-prompt : +22
insert status-0-[1]-prompt : +22
# check log growth beyond max depth only remarkable after scrolling up to limit
-loggedservermsg 0 1 <.. PING :0
-log 1 >.. PONG :0
+loggedservermsg 0 1 < PING :0
+log 1 > PONG :0
insert history_1 12:25 +0
insert bookmark : +13
insert history_1 25:33 +14
insert status-0-[1]-prompt : +22
# check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status
-loggedservermsg 0 1 <.. PING :0
-log 1 >.. PONG :0
+loggedservermsg 0 1 < PING :0
+log 1 > PONG :0
insert lines-empty :20 +0
insert history_1 3:4 +20
insert scrolldown-29 : +21
insert history_0 10:31 +0
insert bookmark : +21
insert status-[0]-1:2-prompt : +22
-loggedservermsg 0 1 <.. PING :1
-log 1 >.. PONG :1
-loggedservermsg 0 1 <.. PING :2
-log 1 >.. PONG :2
-loggedservermsg 0 1 <.. PING :3
-log 1 >.. PONG :3
-loggedservermsg 0 1 <.. PING :4
-log 1 >.. PONG :4
-loggedservermsg 0 1 <.. PING :5
-log 1 >.. PONG :5
-loggedservermsg 0 1 <.. PING :6
-log 1 >.. PONG :6
-loggedservermsg 0 1 <.. PING :7
-log 1 >.. PONG :7
-loggedservermsg 0 1 <.. PING :8
-log 1 >.. PONG :8
-loggedservermsg 0 1 <.. PING :9
-log 1 >.. PONG :9
-loggedservermsg 0 1 <.. PING :10
-log 1 >.. PONG :10
-loggedservermsg 0 1 <.. PING :11
-log 1 >.. PONG :11
-loggedservermsg 0 1 <.. PING :12
-log 1 >.. PONG :12
-loggedservermsg 0 1 <.. PING :13
-log 1 >.. PONG :13
-loggedservermsg 0 1 <.. PING :14
-log 1 >.. PONG :14
-loggedservermsg 0 1 <.. PING :15
-log 1 >.. PONG :15
+loggedservermsg 0 1 < PING :1
+log 1 > PONG :1
+loggedservermsg 0 1 < PING :2
+log 1 > PONG :2
+loggedservermsg 0 1 < PING :3
+log 1 > PONG :3
+loggedservermsg 0 1 < PING :4
+log 1 > PONG :4
+loggedservermsg 0 1 < PING :5
+log 1 > PONG :5
+loggedservermsg 0 1 < PING :6
+log 1 > PONG :6
+loggedservermsg 0 1 < PING :7
+log 1 > PONG :7
+loggedservermsg 0 1 < PING :8
+log 1 > PONG :8
+loggedservermsg 0 1 < PING :9
+log 1 > PONG :9
+loggedservermsg 0 1 < PING :10
+log 1 > PONG :10
+loggedservermsg 0 1 < PING :11
+log 1 > PONG :11
+loggedservermsg 0 1 < PING :12
+log 1 > PONG :12
+loggedservermsg 0 1 < PING :13
+log 1 > PONG :13
+loggedservermsg 0 1 < PING :14
+log 1 > PONG :14
+loggedservermsg 0 1 < PING :15
+log 1 > PONG :15
insert history_0 10:31 +0
insert bookmark : +21
insert status-[0]-1:32-prompt : +22
insert status-0-[1]-prompt : +22
# check bookmark remains absent with log growing while scrolled to bottom, …
-loggedservermsg 0 1 <.. PING :16
-log 1 >.. PONG :16
+loggedservermsg 0 1 < PING :16
+log 1 > PONG :16
insert history_1 43:63 +0
insert status-0-[1]-prompt : +22
insert history_1 35:54 +2
insert scrolldown-11 : +21
insert status-0-[1]-prompt : +22
-loggedservermsg 0 1 <.. PING :17
-log 1 >.. PONG :17
+loggedservermsg 0 1 < PING :17
+log 1 > PONG :17
insert lines-empty :4 +0
insert history_1 37:54 +4
insert scrolldown-13 : +21
insert history_1 37:54 +2
insert scrolldown-11 : +21
insert status-0-[1]-prompt : +22
-loggedservermsg 0 1 <.. PING :18
-log 1 >.. PONG :18
-loggedservermsg 0 1 <.. PING :19
-log 1 >.. PONG :19
-loggedservermsg 0 1 <.. PING :20
-log 1 >.. PONG :20
-loggedservermsg 0 1 <.. PING :21
-log 1 >.. PONG :21
-loggedservermsg 0 1 <.. PING :22
-log 1 >.. PONG :22
-loggedservermsg 0 1 <.. PING :23
-log 1 >.. PONG :23
-loggedservermsg 0 1 <.. PING :24
-log 1 >.. PONG :24
-loggedservermsg 0 1 <.. PING :25
-log 1 >.. PONG :25
-loggedservermsg 0 1 <.. PING :26
-log 1 >.. PONG :26
-loggedservermsg 0 1 <.. PING :27
-log 1 >.. PONG :27
-loggedservermsg 0 1 <.. PING :28
-log 1 >.. PONG :28
-loggedservermsg 0 1 <.. PING :29
-log 1 >.. PONG :29
-loggedservermsg 0 1 <.. PING :30
-log 1 >.. PONG :30
-loggedservermsg 0 1 <.. PING :31
-log 1 >.. PONG :31
-loggedservermsg 0 1 <.. PING :32
-log 1 >.. PONG :32
+loggedservermsg 0 1 < PING :18
+log 1 > PONG :18
+loggedservermsg 0 1 < PING :19
+log 1 > PONG :19
+loggedservermsg 0 1 < PING :20
+log 1 > PONG :20
+loggedservermsg 0 1 < PING :21
+log 1 > PONG :21
+loggedservermsg 0 1 < PING :22
+log 1 > PONG :22
+loggedservermsg 0 1 < PING :23
+log 1 > PONG :23
+loggedservermsg 0 1 < PING :24
+log 1 > PONG :24
+loggedservermsg 0 1 < PING :25
+log 1 > PONG :25
+loggedservermsg 0 1 < PING :26
+log 1 > PONG :26
+loggedservermsg 0 1 < PING :27
+log 1 > PONG :27
+loggedservermsg 0 1 < PING :28
+log 1 > PONG :28
+loggedservermsg 0 1 < PING :29
+log 1 > PONG :29
+loggedservermsg 0 1 < PING :30
+log 1 > PONG :30
+loggedservermsg 0 1 < PING :31
+log 1 > PONG :31
+loggedservermsg 0 1 < PING :32
+log 1 > PONG :32
insert lines-empty :20 +0
insert history_1 67:68 +20
insert scrolldown-29 : +21
> /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
> /window 1
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
-log 1 $.. users:me:nick set to: [?]
-log 1 $.. users:me:nick set to: [foo]
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
+log 1 $ users:me:nick set to: [?]
+log 1 $ users:me:nick set to: [foo]
# check full line not wrapped
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0
-line 21 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0
+line 21 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0§§
# check wrap if last space-separated item one char too long
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 01
-line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 01
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§
line 21 on_black,bright_white 01§§
# check wrap if item starts right after width-final space
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 123456789 1
-line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 123456789§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789 1
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789§§
line 21 on_black,bright_white 1§§
# check wrap if item starts right after space after item extending to end of width
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890 2
-line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 2
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§
line 21 on_black,bright_white 2§§
# check wrap if item starts right after double-space after item extending to end of width
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890 3
-line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567890§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 3
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§
line 21 on_black,bright_white 3§§
# check wrap on item too large to fit into screen width minus indent
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678
-line 19 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678
+line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§
line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§
line 21 on_black,bright_white 8
# check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term)
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567 💓
-line 21 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 1234567 💓§§
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 💓
-line 20 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567 💓
+line 21 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567 💓§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 💓
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§
line 21 on_black,bright_white 💓§§
-loggedservermsg 0 1 <.. :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓
-line 19 on_black,bright_white <.. §§:§§:§§ :foo.bar.baz 001 foo§§
+loggedservermsg 0 1 < :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓
+line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§
line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§
line 21 on_black,bright_white 💓§§
# check interpretation and escape of formatting characters
-servermsg 0 :*.?.net NOTICE * :*** checking {esc|ape}s, formatting not counting into wrap
-log 1 <.. :*.?.net NOTICE * :*** checking {{esc|ape{}s, formatting not counting into wrap
-log 2 <.. ({bold|server}) *** checking {{esc|ape{}s, formatting not counting into wrap
-line 20 on_black,bright_white <.. §§:§§:§§ :*.?.net NOTICE * :*** checking {esc|ape}s, formatting not counting§§
+servermsg 0 :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting into wrap
+log 1 < :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting into wrap
+log 2 < (server) *** check that {esc|ape}s, formatting not counting into wrap
+line 20 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§
line 21 on_black,bright_white into wrap§§
> /window 2
-line 21 on_black,bright_white <.. §§:§§:§§ (§§§§§§) *** checking {esc|ape}s, formatting not counting into wrap§§
-line 21 on_black,bright_white,bold §§§§§§§§§§§§§§server§
+line 21 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§
+line 21 on_black,bright_white,bold §§§§§§§§§§§§server§
# 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