home · contact · privacy
Restructure color formatting. master
authorChristian Heller <c.heller@plomlompom.de>
Sun, 19 Oct 2025 08:12:50 +0000 (10:12 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 19 Oct 2025 08:12:50 +0000 (10:12 +0200)
src/ircplom/testing.py
src/ircplom/tui_base.py
src/tests/_timeout_retries.test
src/tests/config.test
src/tests/connect_disconnect_legalities.test
src/tests/error_disconnects.test
src/tests/pingpong.test
src/tests/test.test
src/tests/tui_draw.test
src/tests/tui_prompt_basics.test

index 0c1d8ea240c7bda6159b8e38e8c0bfe1e20e5468..888322377d012c033bbf6db4475c8b409329fbb1 100644 (file)
@@ -96,7 +96,7 @@ class TestTerminal(QueueMixin, TerminalInterface):
             text = text[:-len(_SCREENLINE_PADDING_SUFFIX)]
             text += ' ' * (self.size.x - len(text))
         for idx, cell_expected in enumerate(
             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]
             if _SCREENLINE_IGNORE_CHAR == cell_expected[1]:
                 continue
             cell_found = self._screen[y][idx]
@@ -210,7 +210,7 @@ class _Playbook:
             fmt, msg_no_fmt = args[2].split(LOG_FMT_SEP, maxsplit=1)
             for c in fmt[:-1]:
                 assert c in LOG_FMT_ATTRS
             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',
             return [(f'{index_str}:s:0',
                      _SEP_0.join((_MARK_SERVERMSG, args[0], msg_no_fmt))),
                     (f'{index_str}:s:1',
index 3ebf6735d78cc64c48052822e9ed7b54a62e8f01..fca16f01632c63bb72839a99401e05ae0bcbefc0 100644 (file)
@@ -189,24 +189,24 @@ class _HistoryWidget(_ScrollableWidget):
         while len(wrapped) < self._sizes.y - bool(add_scroll_info):
             wrapped.insert(0, (self._PADDING_HISTORY_IDX_POS, ''))
 
         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:
         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
                 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))
 
         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):
 
         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])
 
         self._newest_read_history_idx_pos\
             = max(self._newest_read_history_idx_pos, wrapped[-1][0])
@@ -313,7 +313,7 @@ class PromptWidget(_ScrollableWidget):
                         + _PROMPT_ELL_OUT)
         self._write(to_write[:cursor_x_to_write], self._sizes.y,
                     padding=False)
                         + _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:])
 
                     padding=False)
         self._write(to_write[cursor_x_to_write + 1:])
 
@@ -511,10 +511,6 @@ class TerminalInterface(ABC):
     def wrap(self, line: str) -> list[str]:
         'Wrap line to list of lines fitting into terminal width.'
 
     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
     @abstractmethod
     def _length_to_terminal(self, text: str) -> int:
         pass
@@ -526,7 +522,7 @@ class TerminalInterface(ABC):
     def write(self,
               msg: str = '',
               start_y: Optional[int] = None,
     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.'
               padding: bool = True
               ) -> None:
         'Print to terminal, with position, padding to line end, attributes.'
@@ -538,7 +534,13 @@ class TerminalInterface(ABC):
         if (len_padding := self.size.x - end_x) and padding:
             msg += ' ' * len_padding
             end_x = self.size.x
         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
         self._cursor_yx = _YX(self._cursor_yx.y, end_x)
 
     @abstractmethod
@@ -570,8 +572,7 @@ class BaseTui(QueueMixin):
         now = str(datetime.now())
         today, time = now[:10], now[11:19]
         for t in (('alert', LOG_FMT_ALERT), ('highlight', LOG_FMT_HIGHLIGHT)):
         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):
         msg = f'{prefix}{LOG_FMT_SEP}{time} {msg}'
         affected_win_indices = []
         for win in self._log_target_wins(**kwargs):
index 232ccdb39bdbebe9fc025ed44bd1a29a1d13a076..22f4be6586382baed7656ce8827a086721137b85 100644 (file)
@@ -5,81 +5,81 @@
 
 | clientwin-init-in
 | isupport-clear-in
 
 | 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
 | 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
 | 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
 | 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
 | 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
 | conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
 | conn1-in
 | 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
 | 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
 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
 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
 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
 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
 repeat conn1-in conn1-out 2
 wait 4
 > /disconnect
-log 2 ..> QUIT :ircplom says bye
+log 2 >.. QUIT :ircplom says bye
 wait 4
 
 > /quit
 wait 4
 
 > /quit
-log 0 ..<
+log 0 <..
index 179a5dc4561b6df4189eb4efcac03569da8fdc24..45e2635965dbaf8a684b37d25efd431c10e70e13 100644 (file)
@@ -1,25 +1,25 @@
-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 .< 
 
 > /quit
 log 0 .< 
index c5dd1cbaa874410f8b0b8f653a3ea5f7c1f2a7f8..be8eadcda3dae10bef8ee7dd897af1c37516ee0c 100644 (file)
@@ -1,51 +1,51 @@
 # to prepare, initiate connection
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
 # 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
 | 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
 | 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
 | 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
 
 # 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
 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
 
 # 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
 
 # succeed to re-connect after disconnect
 > /reconnect
 repeat connecting-in connecting-out
 
 > /quit
-log 0 ..< 
+log 0 <.. 
index 4d96ff9f6f3ad97ca3a49128e747eb0703511c4e..1ec55ba3ddb1867ac794419869079aeac83be953 100644 (file)
@@ -1,37 +1,37 @@
 # to prepare first test, initiate connected state
 > /connect foo.bar.baz foo bar:baz
 | isupport-clear-in
 # 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
 | 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
 | 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
 | 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
 | 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
 | disconnecting-out
 
 # to prepare next test, get back to connected state
@@ -40,11 +40,11 @@ log , ..$ DISCONNECTED
 repeat connecting-in connecting-out
 
 # test "timed out)" ERROR handling
 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
 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
 
 # over and out
 > /quit
-log 0 ..<
+log 0 <..
index 33466a29464d8ed0d8a652eef5cae875dfce0da9..d6b98a74eb2c0120a98de1c66ed207abcbd6d6a7 100644 (file)
@@ -1,64 +1,64 @@
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | isupport-clear-in
 > /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
 | 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
 | 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
 | conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
 | conn1-in
 | 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
 | 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
 
 # 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
 | 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
 
 # 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
 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
 | 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
 repeat conn1-in conn1-out
 repeat full-timeout-in full-timeout-out
 
 > /quit
-log 0 ..< 
+log 0 <.. 
index c80cd1a1b8ac73f558ff73cfcabbe5bea7b955f2..a6c2cee7eb03e92bac8c2b812258b3f33bc5ebdc 100644 (file)
 > /connect foo.bar.baz foo:bar baz:foobarbazquux
 | standard-clears-in
 | isupport-clear-in
 > /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
 | 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
 | 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
 | conn-in
-log 1 ..$ port set to: [6697]
+log 1 $.. port set to: [6697]
 | conn0-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
 | conn0-out
-log , ..$ CONNECTED
+log , $.. CONNECTED
 | conn1-in
 | conn1-in
-log 1 ..> CAP LS :302
+log 1 >.. CAP LS :302
 | conn-out
 | 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # finish CAP negotation, thus login procedure
-log 1 ..> CAP :END
+log 1 >.. CAP :END
 
 # of all pre-MOTD greeting messages, only process isupports
 
 # 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
 | 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)
 
 # 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
 
 # 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
 
 # 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
 | 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
 > /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
 | 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 > /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!
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 
 # 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
 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
 
 # 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
 > /window 1
 > /privmsg barbar test
-log 1 .!$ cannot send, connection seems closed
+log 1 $!. cannot send, connection seems closed
 > /privmsg #test test
 > /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
 | 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
 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
 | 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
 | 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
 
 # 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
 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
 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
 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
 
 # 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
 repeat conn1-in conn1-out
-log 1 ..> JOIN :#testtest
+log 1 >.. JOIN :#testtest
 repeat conn2-in conn2-out
 repeat conn3-in conn3-out
 
 > /quit
 repeat conn2-in conn2-out
 repeat conn3-in conn3-out
 
 > /quit
-log 0 ..< 
+log 0 <.. 
index f0dda65b74e042ea891f6241069f62cbf2e3dff5..cb8e5474fb37ab32cf0d7742905f9c761580cafd 100644 (file)
@@ -4,7 +4,7 @@
 | lines-empty-4-in
 | lines-empty-2-in
 | lines-empty-1-in
 | 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
 | lines-empty-1-out
 repeat lines-empty-1-in lines-empty-1-out 1
 | lines-empty-2-out
@@ -20,10 +20,10 @@ repeat lines-empty-4-in lines-empty-4-out +12
 repeat lines-empty-4-in lines-empty-4-out +16
 repeat lines-empty-2-in lines-empty-2-out +20
 | status-prompt-empty-in
 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
 | 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
 | prompt-empty-out
 | status-prompt-empty-out
 | empty-init-out
@@ -34,30 +34,30 @@ repeat empty-init-in empty-init-out
 
 # non-empty command input starts log at bottom, with date above it
 > foo
 
 # 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
 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
 | 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
 | 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
 > /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
 | 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
 | 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
@@ -71,7 +71,7 @@ repeat lines-empty-16-in lines-empty-16-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
 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
 
 repeat status-prompt-empty-in status-prompt-empty-out
 | after-1st-scroll-out
 
@@ -83,21 +83,21 @@ repeat before-1st-scroll-in before-1st-scroll-out
 > /window.history.scroll up
 repeat after-1st-scroll-in after-1st-scroll-out
 > /help
 > /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
 | 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 status-prompt-empty-in status-prompt-empty-out
 | before-scrolldown-not-to-bottom-out
 
@@ -110,26 +110,26 @@ repeat lines-empty-1-in lines-empty-1-out +8
 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
 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
 | 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
 | 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
 | 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
 | 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
 | 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 status-prompt-empty-in status-prompt-empty-out
 | after-scrolldown-not-to-bottom-out
 
@@ -148,30 +148,30 @@ repeat history-lines-0:0:8-at-9-in history-lines-0:0:8-at-9-out -3
 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
 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
 | 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
 | 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
 > /1
-log 0 .!# invalid prompt command: /1 unknown
+log 0 #!. invalid prompt command: /1 unknown
 > /2
 > /2
-log 0 .!# invalid prompt command: /2 unknown
+log 0 #!. invalid prompt command: /2 unknown
 > /3
 > /3
-log 0 .!# invalid prompt command: /3 unknown
+log 0 #!. invalid prompt command: /3 unknown
 > /4
 > /4
-log 0 .!# invalid prompt command: /4 unknown
+log 0 #!. invalid prompt command: /4 unknown
 > /5
 > /5
-log 0 .!# invalid prompt command: /5 unknown
+log 0 #!. invalid prompt command: /5 unknown
 > /6
 > /6
-log 0 .!# invalid prompt command: /6 unknown
+log 0 #!. invalid prompt command: /6 unknown
 > /7
 > /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
 | 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
@@ -180,22 +180,22 @@ repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -8
 | history-lines-0:16:24-at-14-in
 | history-lines-0:16:20-at-14-in
 | history-lines-0:16:18-at-14-in
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | history-lines-0:16:24-at-14-out
 repeat status-prompt-empty-in status-prompt-empty-out
 | at-bottom-before-wrapped-out
@@ -206,16 +206,16 @@ repeat lines-empty-8-in lines-empty-8-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
 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
 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
 > /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
 | 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
@@ -225,11 +225,11 @@ repeat history-lines-0:12:16-at-18-in history-lines-0:12:16-at-18-out -11
 | 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
 | 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
 | 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
 | history-lines-0:26:27-at-21-out
 repeat status-prompt-empty-in status-prompt-empty-out
 | at-bottom-after-wrapped-out
@@ -241,7 +241,7 @@ repeat lines-empty-4-in lines-empty-4-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
 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 status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-down fully reversible even if over wrapped
@@ -249,14 +249,14 @@ repeat status-prompt-empty-in status-prompt-empty-out
 repeat at-bottom-after-wrapped-in at-bottom-after-wrapped-out
 > /window.history.scroll up
 repeat scrollup-after-wrapped-in scrollup-after-wrapped-out
 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
 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
 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 status-prompt-empty-in status-prompt-empty-out
 
 # check scroll-down over wrapped will snap down to bottom of wrapped
@@ -266,50 +266,50 @@ repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out -1
 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
 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
 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
 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
 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
 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
 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)
 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)
@@ -319,58 +319,58 @@ repeat lines-empty-1-in lines-empty-1-out +2
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 | 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
 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
 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 prompt-empty-in prompt-empty-out
 | status-prompt-after-first-return-out
 
@@ -380,7 +380,7 @@ repeat lines-empty-8-in lines-empty-8-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
 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 status-prompt-after-first-return-in status-prompt-after-first-return-out
 > /window.history.scroll down
 | before-first-sight-of-bookmark-in
@@ -390,7 +390,7 @@ repeat history-lines-0:8:16-at-3-in history-lines-0:8:16-at-3-out +3
 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
 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 status-prompt-after-first-return-in status-prompt-after-first-return-out
 | before-first-sight-of-bookmark-out
 > /window.history.scroll down
@@ -400,13 +400,13 @@ repeat history-lines-0:16:24-at-14-in history-lines-0:16:24-at-14-out -6
 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
 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
 | 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
 | 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
 | 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
@@ -417,7 +417,7 @@ repeat lines-empty-2-in lines-empty-2-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
 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 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
@@ -430,7 +430,7 @@ repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -1
 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
 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
 
 repeat prompt-empty-in prompt-empty-out
 | status-prompt-both-empty-out
 
@@ -445,14 +445,14 @@ repeat history-lines-0:27:28-at-20-in history-lines-0:27:28-at-20-out -1
 | 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
 | 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
 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
 | 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
@@ -461,23 +461,23 @@ repeat history-lines-0:24:28-at-16-in history-lines-0:24:28-at-16-out -3
 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
 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
 | 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
 | 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) 
 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
 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 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
@@ -488,13 +488,13 @@ repeat history-lines-1:16:18-at-19-in history-lines-1:16:18-at-19-out -7
 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
 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
 | 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 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§§
 | history-lines-1:20:24-at-17-out
 | history-lines-1:24:25-at-21-in
 line 21 on_black,bright_green     123456789 123456789§§
@@ -503,8 +503,8 @@ repeat status-prompt-both-empty-in status-prompt-both-empty-out
 
 # check that growth below scroll does not by itself re-position bookmark in history
 > /window.history.scroll up
 
 # 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
 | early-win1-upscroll-in
 repeat lines-empty-4-in lines-empty-4-out
 repeat lines-empty-2-in lines-empty-2-out +4
@@ -513,7 +513,7 @@ repeat history-lines-1:8:12-at-11-in history-lines-1:8:12-at-11-out +3
 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
 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 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
@@ -525,7 +525,7 @@ repeat bookmark-at-19-in bookmark-at-19-out -5
 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
 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 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
@@ -540,7 +540,7 @@ repeat history-lines-0:29:30-at-19-in history-lines-0:29:30-at-19-out -1
 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
 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 prompt-empty-in prompt-empty-out
 > /window 1
 | keep-bookmark-on-outside-growth-test-in
@@ -556,40 +556,40 @@ repeat history-lines-1:20:24-at-17-in history-lines-1:20:24-at-17-out -2
 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
 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
 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
 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
 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
 | 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
 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
 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
 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
 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 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
@@ -598,8 +598,8 @@ repeat history-lines-1:8:16-at-11-in history-lines-1:8:16-at-11-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
 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 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
@@ -607,14 +607,14 @@ repeat history-lines-1:12:16-at-15-in history-lines-1:12:16-at-15-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
 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
 repeat prompt-empty-in prompt-empty-out
 
 > /quit
-log 0 ..< 
+log 0 <..
index cd6a05d8aa99b9a4c76cbc7d2483b6b279d1434a..c4649b707f9e37a7c6f4f97dced9dfb47de982de 100644 (file)
@@ -5,35 +5,35 @@
 
 # expected complaints on wrong command inputs
 > foo
 
 # expected complaints on wrong command inputs
 > foo
-log 0 .!# invalid prompt command: not prefixed by /
+log 0 #!. invalid prompt command: not prefixed by /
 > /foo
 > /foo
-log 0 .!# invalid prompt command: /foo unknown
+log 0 #!. invalid prompt command: /foo unknown
 > /help foo
 > /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
 > /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
 
 # 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
 > /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
 
 # 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.history.scroll foo
 > /window.prompt.backspace
 > /window.prompt.move_cursor foo
@@ -41,4 +41,4 @@ log 0 .!# invalid prompt command: /prompt_enter would loop into ourselves
 > /window.paste
 
 > /quit
 > /window.paste
 
 > /quit
-log 0 ..< 
+log 0 <..