# Invalid UTF-8 must RENDER, never panic. Two sources, both ordinary use: # a file pane holds whatever bytes are on disk (latin-1, a truncated sequence, # an ELF opened by mistake). Undecodable bytes come out as U+FFFD, while # horizontal scrolling must start at a complete grapheme boundary. file bad.txt hello \xff\xfe world\nlatin-1 caf\xe9 tail\ntruncated \xe6\x97 here\nend\n file wide.txt \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e tail\nsecond line\n start 31 100 bad.txt wait 8000 Newcol Joincol stable 700 20000 snap badbytes # 50 columns, not 100: a FILE boots alone and fills the window, and at 100 the # whole line fits, so `$` scrolls nowhere. This is # the width the left column used to be, i.e. the pane this case was written for start 31 50 wide.txt wait 8000 Newcol Joincol stable 700 20000 # SPC t w turns soft wrap OFF: hscroll is the other half of this case and a # wrapped body has nothing to scroll sideways. The unwrapped view must keep the # first visible CJK glyph intact instead of starting inside its UTF-8 bytes. key space t w stable 400 5000 key g l stable 700 10000 snap hscroll-midglyph