From: Christian Heller Date: Tue, 2 Dec 2025 00:44:07 +0000 (+0100) Subject: Extend TUI line testing grammar to easen handling of new bold highlight in status... X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bprefix%7D%7D/static/bar%20baz.html?a=commitdiff_plain;h=3d64f2aea9d8567d2559c0104fbf902de15bb202;p=ircplom Extend TUI line testing grammar to easen handling of new bold highlight in status lines. --- diff --git a/src/ircplom/testing.py b/src/ircplom/testing.py index a701699..2ec7080 100644 --- a/src/ircplom/testing.py +++ b/src/ircplom/testing.py @@ -38,7 +38,7 @@ _SIGNATURE_FOR_CMD = { _MARK_INSERT: (4, 2), _MARK_LOG: (2, 0), _MARK_PROMPT: (1, None), - _MARK_SCREENLINE: (3, 0), + _MARK_SCREENLINE: (4, 0), _MARK_SERVERMSG: (2, 0), _MARK_WAIT: (1, 0), } @@ -95,15 +95,19 @@ class TestTerminal(QueueMixin, TerminalInterface): yield TuiEvent.affector('handle_keyboard_event' ).kw(typed_in=to_yield) - def assert_screen_line(self, y: int, attrs_str: str, text: str) -> None: + def assert_screen_line(self, y: int, x: int, attrs_str: str, text: str + ) -> None: 'Assert test screen at line y shows text, attrs of attrs_str set.' assert 0 <= y < self.size.y + assert 0 <= x < self.size.x + text = _SCREENLINE_IGNORE_CHAR * x + text if text.endswith(_SCREENLINE_PADDING_SUFFIX): text = text[:-len(_SCREENLINE_PADDING_SUFFIX)] text += ' ' * (self.size.x - self.len_to_term(text)) jumped_nones = 0 for idx, cell_expected in enumerate( (tuple(attrs_str.split(_SEP_1)), c) for c in text): + cell_found = self._screen[y][idx+jumped_nones] if cell_found is None: jumped_nones += 1 @@ -440,7 +444,7 @@ class _Playbook: assert self.assert_screen_line is not None assert self.redraw_affected is not None self.redraw_affected() - self.assert_screen_line(int(args[0]), *args[1:]) + self.assert_screen_line(int(args[0]), int(args[1]), *args[2:]) elif cmd_name == _MARK_WAIT: sleep(int(args[0])) self._idx += 1 diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index 3daece1..a3e80d4 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -5,7 +5,7 @@ insert ./lib/enter_misc insert ./lib/pingpong × lines-empty-1 -line 0 on_black,bright_white §§ +line 0 0 on_black,bright_white §§ × lines-empty insert lines-empty-1 : +0 @@ -32,17 +32,18 @@ insert lines-empty-1 : +20 insert lines-empty-1 : +21 × lines-prompt-empty -line 23 on_black,bright_white > § §§ -line 23 on_black,bright_white,reverse §§ § +line 23 0 on_black,bright_white > § §§ +line 23 0 on_black,bright_white,reverse §§ § × line-bookmark -line 0 on_black,bright_white --------------------------------------------------------------------------------§§ +line 0 0 on_black,bright_white --------------------------------------------------------------------------------§§ × line-scrolldown -line 21 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ +line 21 0 on_black,bright_white,reverse vvv XXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv§§ × lines-status-prompt -line 22 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§ +line 22 0 on_black,bright_white x123456789x1234567=========================================X123456789X123456789X§§ +line 22 FOCUS_X on_black,bright_white,bold [FOCUS_STR] insert lines-prompt-empty × lines-status-prompt-start @@ -52,41 +53,41 @@ insert lines-status-prompt : +22 x123456789x1234567 ::start)=========== insert lines-status-prompt : +22 x123456789x1234567 :foo.bar.baz:debug) × line-invalid-prompt-command -line 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§ +line 0 0 on_black,bright_red,bold # §§:§§:§§ invalid prompt command: MSG§§ × line-invalid-prompt-command-unknown insert line-invalid-prompt-command : +0 MSG :/CMD unknown × line-ping -line 0 on_black,bright_white < §§:§§:§§ PING :? +line 0 0 on_black,bright_white < §§:§§:§§ PING :? × line-pong -line 0 on_black,bright_green > §§:§§:§§ PONG :? +line 0 0 on_black,bright_green > §§:§§:§§ PONG :? × lines-ping-pong insert line-ping : +0 ? :?? insert line-pong : +1 ? :?? × line-tui-log -line 0 on_black,bright_cyan # §§:§§:§§ ?§§ +line 0 0 on_black,bright_cyan # §§:§§:§§ ?§§ × line-bright-red-bold -line 0 on_black,bright_red,bold ?§§ +line 0 0 on_black,bright_red,bold ?§§ × line-bright-white -line 0 on_black,bright_white ?§§ +line 0 0 on_black,bright_white ?§§ × line-bright-green -line 0 on_black,bright_green ?§§ +line 0 0 on_black,bright_green ?§§ × line-server-log -line 0 on_black,bright_yellow $ §§:§§:§§ ?§§§ +line 0 0 on_black,bright_yellow $ §§:§§:§§ ?§§§ × line-client-msg -line 0 on_black,bright_green > §§:§§:§§ ?§§ +line 0 0 on_black,bright_green > §§:§§:§§ ?§§ × line-cal -line 0 on_black,bright_white 20§§-§§-§§ §§ +line 0 0 on_black,bright_white 20§§-§§-§§ §§ × history_0 insert line-cal : +0 @@ -176,93 +177,93 @@ insert lines-ping-pong : +78 ?? :30 × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # nothing happening on empty command input > insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scrolling on empty history does nothing > /window.history.scroll up insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ > /window.history.scroll down insert lines-empty -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # non-empty command input starts log at bottom, with date above it insert enter-unprefixed : +0 ? :foo insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scrolling on history merely 2 lines long won't do anything either > /window.history.scroll up insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ > /window.history.scroll down insert lines-empty :20 insert history_0 :2 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # further inputs grow log upwards > /foo log 0 # invalid prompt command: /foo unknown insert lines-empty :19 insert history_0 :3 +19 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scrolling up does something on history 3 lines long > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scrolling down on 3-lines history > /window.history.scroll down insert lines-empty :19 insert history_0 :3 +19 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check history growing below up-scroll > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ insert enter-help-win0 insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[14] v -insert lines-status-prompt-start : +22 X123456789X123456789X :============([(0:12)] +insert lines-status-prompt-start : +22 FOCUS_X=72 FOCUS_STR=(0:12) X123456789X123456789X :============(§§§§§§§§ # check scroll-down on newer history longer than half a screen width does not fully land at bottom > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 insert line-scrolldown : +21 XXXXXX :[3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ # check previous scroll-down not hitting bottom be fully reversible > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[14] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 insert line-scrolldown : +21 XXXXXX :[3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:3)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:3) X123456789X123456789X :=============(§§§§§§§ # scroll to bottom, check history still growing up even beyond upper fold > /window.history.scroll down insert lines-empty :7 insert history_0 :15 +7 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ insert enter-unknown : +0 ? :0 insert enter-unknown : +0 ? :1 insert enter-unknown : +0 ? :2 @@ -272,19 +273,19 @@ insert enter-unknown : +0 ? :5 insert enter-unknown : +0 ? :6 insert enter-unknown : +0 ? :7 insert history_0 1:23 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scroll-down even with long history does nothing > /window.history.scroll down insert history_0 1:23 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # quick look one scroll up to check single-scroll increase of below-scroll count (when up-scroll not limited, and all lines un-wrapped) > /window.history.scroll up insert lines-empty :9 insert history_0 :12 +9 insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check wrapping > /window.history.scroll down @@ -293,24 +294,24 @@ log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789 unknown > /foo_0123456789_0123456789_0123456789_ log 0 # invalid prompt command: /foo_0123456789_0123456789_0123456789_ unknown insert history_0 4:26 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scroll-up over wrapped moves up less history lines than screen lines > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 insert line-scrolldown : +21 XXXXXX :[10] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check scroll-down fully reversible even if over wrapped > /window.history.scroll down insert history_0 4:26 +0 -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 insert line-scrolldown : +21 XXXXXX :[10] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=================([0] +insert lines-status-prompt-start : +22 FOCUS_X=77 FOCUS_STR=0 X123456789X123456789X :=================(§§§ # check wrapped input only increases below-scroll count by one > /bar_0123456789_0123456789_0123456789_ @@ -318,98 +319,98 @@ log 0 # invalid prompt command: /bar_0123456789_0123456789_0123456789_ unknown insert lines-empty :6 insert history_0 :15 +6 insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ # check scroll-down over wrapped will snap down to bottom of wrapped > /window.history.scroll down insert history_0 5:26 +0 insert line-scrolldown : +21 XXXXXX :[1] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ # # check scrolls-up over longer history until top > /window.history.scroll up insert lines-empty :6 insert history_0 :15 +6 insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ > /window.history.scroll up insert lines-empty :17 insert history_0 :3 +17 insert line-scrolldown : +21 XXXXXX :[22] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ > /window.history.scroll up insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[25] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=============([(0:1)] +insert lines-status-prompt-start : +22 FOCUS_X=73 FOCUS_STR=(0:1) X123456789X123456789X :=============(§§§§§§§ # check that triggering creation of new window with new lines adds it to status, with unread-lines count insert connect-to-connected insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[25] v -insert lines-status-prompt-start : +22 X123456789X123456789X :([(0:1)] (1:14) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=60 FOCUS_STR=(0:1) X123456789X123456789X :(§§§§§§§ (1:14) (2:7) # check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count) > /window 1 insert lines-empty :8 insert history_1 :14 +8 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====((0:1) [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=====((0:1) §§§ (2:7) # check switch-back to window 0, retaining clearing of window 1's unread-lines count > /window 0 insert lines-empty :20 insert history_0 :1 +20 insert line-scrolldown : +21 XXXXXX :[25] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) # check that on full scroll-down, we now have a bookmark above the newest lines not previously scrolled into > /window.history.scroll down insert lines-empty :9 insert history_0 :12 +9 insert line-scrolldown : +21 XXXXXX :[14] v -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) > /window.history.scroll down insert history_0 2:23 +0 insert line-scrolldown : +21 XXXXXX :[3] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([(0:1)] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=(0:1) X123456789X123456789X :=====(§§§§§§§ 1 (2:7) > /window.history.scroll down insert history_0 7:26 +0 insert line-bookmark : +19 insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) # check SIGWINCH does not re-set bookmark > raise_sigwinch insert history_0 7:26 +0 insert line-bookmark : +19 insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) # check that scrolling non-bottom bookmark out of sight, then scrolling it back into view again does not by itself move its position in the log history > /window.history.scroll up insert lines-empty :3 insert history_0 :18 +3 insert line-scrolldown : +21 XXXXXX :[8] vv -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) > /window.history.scroll down insert history_0 7:26 +0 insert line-bookmark : +19 insert history_0 26:28 +20 -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) # check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log > /window 1 insert lines-empty :7 insert history_1 :14 +7 insert line-bookmark : +21 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check second switch-back places bookmark at bottom there too, since the newest lines previously succeeding it have now been read by us > /window 0 insert history_0 7:28 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) # check new lines push bookmark up insert enter-list-start @@ -418,7 +419,7 @@ log 0 # 2) foo.bar.baz:server insert history_0 11:28 +0 insert line-bookmark : +17 insert history_0 28:32 +18 -insert lines-status-prompt-start : +22 X123456789X123456789X :=========([0] 1 (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=69 FOCUS_STR=0 X123456789X123456789X :=========(§§§ 1 (2:7) # check new lines growing in other window, one of which long enough to wrap, to re-start count in status (with wrapped only as single) insert ping-pong : +0 ? :0 @@ -428,14 +429,14 @@ insert ping-pong : +0 ? :9 123456789 123456789 123456789 123456789 123456789 123 insert history_0 11:28 +0 insert line-bookmark : +17 insert history_0 28:32 +18 -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:8) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:8) (2:7) # check that switching to window with new lines, but left scroll-to-bottom, keeps the scroll-to-bottom, keeps bookmark after last line previously seen there > /window 1 insert history_1 3:14 +0 insert line-bookmark : +11 insert history_1 14:24 +12 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check that growth below scroll does not by itself re-position bookmark in history > /window.history.scroll up @@ -443,97 +444,97 @@ insert ping-pong : +0 ? :3 insert lines-empty :7 insert history_1 0:14 +7 insert line-scrolldown : +21 XXXXXX :[10] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 4:14 +0 insert line-bookmark : +10 insert history_1 14:24 +11 insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) # check that with new lines left unread, switch away and back into window moves bookmark below newest read line, counts unread lines in status > /window 0 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2:7) > /window 1 insert history_1 4:24 +0 insert line-bookmark : +20 insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) # check that growing lines below scroll in other preserves non-bottom bookmark (left in sight on previous window leave) > /window 0 insert ping-pong : +0 ? :4 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:4) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:4) (2:7) > /window 1 insert history_1 4:24 +0 insert line-bookmark : +20 insert line-scrolldown : +21 XXXXXX :[4] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7) # check same applies when leaving affected window with bookmark out-of-sight > /window.history.scroll up insert lines-empty :7 insert history_1 :14 +7 insert line-scrolldown : +21 XXXXXX :[12] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:4)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:4) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window 0 insert ping-pong : +0 ? :5 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:6) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:6) (2:7) > /window 1 insert lines-empty :7 insert history_1 :14 +7 insert line-scrolldown : +21 XXXXXX :[14] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 4:24 +0 insert line-bookmark : +20 insert line-scrolldown : +21 XXXXXX :[6] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:6)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:6) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 9:24 +0 insert line-bookmark : +15 insert history_1 24:30 +16 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check log growth beyond max depth only remarkable after scrolling up to limit insert ping-pong : +0 ? :6 insert history_1 11:24 +0 insert line-bookmark : +13 insert history_1 24:32 +14 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) > /window.history.scroll up insert history_1 1:22 +0 insert line-scrolldown : +21 XXXXXX :[9] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) > /window.history.scroll up insert lines-empty :10 insert history_1 :11 +10 insert line-scrolldown : +21 XXXXXX :[19] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) > /window.history.scroll up insert lines-empty :20 insert history_1 :1 +20 insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status insert ping-pong : +0 ? :7 insert lines-empty :20 insert history_1 2:3 +20 insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) # check unread-lines count potentially growing above max log depth if in other window > /window 0 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :=====([0] (1:2) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=65 FOCUS_STR=0 X123456789X123456789X :=====(§§§ (1:2) (2:7) insert ping-pong : +0 ? :8 insert ping-pong : +0 ? :9 insert ping-pong : +0 ? :10 @@ -551,57 +552,57 @@ insert ping-pong : +0 ? :21 insert ping-pong : +0 ? :22 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:32) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:32) (2:7) # check switching into window scrolled-top with more unread lines than max log depth shrinks former to latter, and scrolling down no bookmark is to be found > /window 1 insert lines-empty :20 insert history_1 34:35 +20 insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) > /window.history.scroll down insert lines-empty :9 insert history_1 34:46 +9 insert line-scrolldown : +21 XXXXXX :[18] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7) > /window.history.scroll down insert history_1 36:57 +0 insert line-scrolldown : +21 XXXXXX :[7] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:7)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:7) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 42:62 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check bookmark remains absent with log growing while scrolled to bottom, … insert ping-pong : +0 ? :23 insert history_1 44:64 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # … as well as if further growth happens below scroll > /window.history.scroll up insert lines-empty :2 insert history_1 36:55 +2 insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) insert ping-pong : +0 ? :24 insert lines-empty :4 insert history_1 38:55 +4 insert line-scrolldown : +21 XXXXXX :[13] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 45:66 +0 insert line-scrolldown : +21 XXXXXX :[2] vv -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=====(0 [(1:2)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=67 FOCUS_STR=(1:2) X123456789X123456789X :=====(0 §§§§§§§ (2:7) > /window.history.scroll down insert history_1 46:68 +0 -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) # check unread-lines status not growing beyond max log if within active window, and … > /window.history.scroll up insert lines-empty :2 insert history_1 38:55 +2 insert line-scrolldown : +21 XXXXXX :[11] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :=========(0 [1] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=71 FOCUS_STR=1 X123456789X123456789X :=========(0 §§§ (2:7) insert ping-pong : +0 ? :25 insert ping-pong : +0 ? :26 insert ping-pong : +0 ? :27 @@ -620,23 +621,23 @@ insert ping-pong : +0 ? :39 insert lines-empty :20 insert history_1 68:69 +20 insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) # … setting bookmark visible after switching back-and-forth > /window 0 insert history_0 11:32 +0 insert line-bookmark : +21 -insert lines-status-prompt-start : +22 X123456789X123456789X :====([0] (1:29) (2:7) +insert lines-status-prompt-start : +22 FOCUS_X=64 FOCUS_STR=0 X123456789X123456789X :====(§§§ (1:29) (2:7) > /window 1 insert lines-empty :19 insert history_1 68:69 +19 insert line-bookmark : +20 insert line-scrolldown : +21 XXXXXX :[29] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:29)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:29) X123456789X123456789X :====(0 §§§§§§§§ (2:7) > /window.history.scroll down insert lines-empty :8 insert history_1 68:69 +8 insert line-bookmark : +9 insert history_1 69:80 +10 insert line-scrolldown : +21 XXXXXX :[18] v -insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X :====(0 [(1:18)] (2:7) +insert lines-status-prompt-foobarbaz : +22 FOCUS_X=66 FOCUS_STR=(1:18) X123456789X123456789X :====(0 §§§§§§§§ (2:7) diff --git a/src/tests/tui_line_formattings.test b/src/tests/tui_line_formattings.test index 43240d1..80dd83c 100644 --- a/src/tests/tui_line_formattings.test +++ b/src/tests/tui_line_formattings.test @@ -5,7 +5,7 @@ insert ./lib/servernotice × servermsglogged-and-line-unwrapped insert servermsglogged : +0 MSG :XXX -line 21 on_black,bright_white < §§:§§:§§ XXX§§ +line 21 0 on_black,bright_white < §§:§§:§§ XXX§§ × ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× @@ -18,44 +18,44 @@ insert servermsglogged-and-line-unwrapped : +0 XXX ::foo.bar.baz 001 foo :6789 1 # check wrap if last space-separated item one char too long insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 01 -line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ -line 21 on_black,bright_white 01§§ +line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ +line 21 0 on_black,bright_white 01§§ # check wrap if item starts right after width-final space insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789 1 -line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§ -line 21 on_black,bright_white 1§§ +line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§ +line 21 0 on_black,bright_white 1§§ # check wrap if item starts right after space after item extending to end of width insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 2 -line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ -line 21 on_black,bright_white 2§§ +line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ +line 21 0 on_black,bright_white 2§§ # check wrap if item starts right after double-space after item extending to end of width insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 3 -line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ -line 21 on_black,bright_white 3§§ +line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§ +line 21 0 on_black,bright_white 3§§ # check wrap on item too large to fit into screen width minus indent insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678 -line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ -line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§ -line 21 on_black,bright_white 8 +line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ +line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§ +line 21 0 on_black,bright_white 8 # check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term) insert servermsglogged-and-line-unwrapped : +0 XXX ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567 💓 insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 💓 -line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ -line 21 on_black,bright_white 💓§§ +line 20 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§ +line 21 0 on_black,bright_white 💓§§ insert servermsglogged : +0 MSG ::foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓 -line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ -line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§ -line 21 on_black,bright_white 💓§§ +line 19 0 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§ +line 20 0 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§ +line 21 0 on_black,bright_white 💓§§ # check interpretation and escape of formatting characters insert servernotice : +0 XXX :*** check that {esc|ape}s, formatting not counting into wrap -line 20 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§ -line 21 on_black,bright_white into wrap§§ +line 20 0 on_black,bright_white < §§:§§:§§ :*.?.net NOTICE * :*** check that {esc|ape}s, formatting not counting§§ +line 21 0 on_black,bright_white into wrap§§ > /window 2 -line 21 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§ -line 21 on_black,bright_white,bold §§§§§§§§§§§§server§ +line 21 0 on_black,bright_white < §§:§§:§§ (§§§§§§) *** check that {esc|ape}s, formatting not counting into wrap§§ +line 21 0 on_black,bright_white,bold §§§§§§§§§§§§server§ diff --git a/src/tests/tui_status_line_scrolling.test b/src/tests/tui_status_line_scrolling.test index 96064e6..3402d58 100644 --- a/src/tests/tui_status_line_scrolling.test +++ b/src/tests/tui_status_line_scrolling.test @@ -6,6 +6,10 @@ insert ./lib/001-to-usermode insert servermsglogged : +0 MSG ::winWIN_ID!~winWIN_ID@bar.bar PRIVMSG foo :hi there log WIN_ID < [winWIN_ID] hi there +× status-line +line 22 0 on_black,bright_white LINE +line 22 FOCUS_X on_black,bright_white,bold [FOCUS_STR] + × ×--------------------------------- insert connect-to-connected @@ -19,44 +23,44 @@ insert new-hi : + WIN_ID :7 insert new-hi : + WIN_ID :8 insert new-hi : + WIN_ID :9 insert new-hi : + WIN_ID :10 -line 22 on_black,bright_white :start)=======([0] (1:32) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2)§§ +insert status-line : + FOCUS_X=15 FOCUS_STR=0 LINE ::start)=======(§§§ (1:32) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2)§§ # grow windows list to maximum before ellipsis necessary insert new-hi : + WIN_ID :11 -line 22 on_black,bright_white :start)([0] (1:33) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2)§§ +insert status-line : + FOCUS_X=8 FOCUS_STR=0 LINE ::start)(§§§ (1:33) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2)§§ # grow list beyond, with focus on left force ellipsis to the right insert new-hi : + WIN_ID :12 -line 22 on_black,bright_white :start)([0] (1:34) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:…>§§ +insert status-line : + FOCUS_X=8 FOCUS_STR=0 LINE ::start)(§§§ (1:34) (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:…>§§ # shrink (uncut) listing but grow title to the left more, forcing ellipsis still to cut earlier > /window 1 -line 22 on_black,bright_white foo.bar.baz:debug)(0 [1] (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2…>§§ +insert status-line : + FOCUS_X=21 FOCUS_STR=1 LINE :foo.bar.baz:debug)(0 §§§ (2:7) (3:2) (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2…>§§ # further shrink uncut listing until ellipsis gone again; with focus not moving beyond left half, don't scroll yet > /window 3 -line 22 on_black,bright_white foo.bar.baz/win3)(0 1 (2:7) [3] (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11…>§§ +insert status-line : + FOCUS_X=28 FOCUS_STR=3 LINE :foo.bar.baz/win3)(0 1 (2:7) §§§ (4:2) (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11…>§§ > /window 4 -line 22 on_black,bright_white foo.bar.baz/win4)(0 1 (2:7) 3 [4] (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ +insert status-line : + FOCUS_X=30 FOCUS_STR=4 LINE :foo.bar.baz/win4)(0 1 (2:7) 3 §§§ (5:2) (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ > /window 5 -line 22 on_black,bright_white foo.bar.baz/win5)(0 1 (2:7) 3 4 [5] (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) (12:2)§§ +insert status-line : + FOCUS_X=32 FOCUS_STR=5 LINE :foo.bar.baz/win5)(0 1 (2:7) 3 4 §§§ (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) (12:2)§§ # grow uncut listing again, re-establishing ellipsis to the right insert new-hi : + WIN_ID :13 -line 22 on_black,bright_white foo.bar.baz/win5)(0 (1:1) (2:7) 3 4 [5] (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ +insert status-line : + FOCUS_X=36 FOCUS_STR=5 LINE :foo.bar.baz/win5)(0 (1:1) (2:7) 3 4 §§§ (6:2) (7:2) (8:2) (9:2) (10:2) (11:2) …>§§ # move focus into middle of listing, scrolling so that ellipsis on both side > /window 8 -line 22 on_black,bright_white foo.bar.baz/win8)<…:1) (2:7) 3 4 5 (6:2) (7:2) [8] (9:2) (10:2) (11:2) (12:2) …>§§ +insert status-line : + FOCUS_X=47 FOCUS_STR=8 LINE :foo.bar.baz/win8)<…:1) (2:7) 3 4 5 (6:2) (7:2) §§§ (9:2) (10:2) (11:2) (12:2) …>§§ # move focus further to the right, so that only ellipsis on the left > /window 9 -line 22 on_black,bright_white foo.bar.baz/win9)<…:1) (2:7) 3 4 5 (6:2) (7:2) 8 [9] (10:2) (11:2) (12:2) (13:2)§§ +insert status-line : + FOCUS_X=49 FOCUS_STR=9 LINE :foo.bar.baz/win9)<…:1) (2:7) 3 4 5 (6:2) (7:2) 8 §§§ (10:2) (11:2) (12:2) (13:2)§§ # shrink uncut listing to return to full view again (no ellipses) > /window 13 -line 22 on_black,bright_white foo.bar.baz/win13)(0 (1:1) (2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) [13]§§ +insert status-line : + FOCUS_X=76 FOCUS_STR=13 LINE :foo.bar.baz/win13)(0 (1:1) (2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) §§§§§§ # add new window, re-establishing ellipsis to the left, with focus remaining quite to the right insert new-hi : + WIN_ID :14 -line 22 on_black,bright_white foo.bar.baz/win13)<…(2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) [13] (14:2)§§ +insert status-line : + FOCUS_X=69 FOCUS_STR=13 LINE :foo.bar.baz/win13)<…(2:7) 3 4 5 (6:2) (7:2) 8 9 (10:2) (11:2) (12:2) §§§§ (14:2)§§