From 994a2196745637fd0805132711b1ed9354b75426 Mon Sep 17 00:00:00 2001 From: salmonik Date: Fri, 31 Jul 2026 17:28:31 +0200 Subject: vt: decode UTF-8, render box-drawing/arrow glyphs procedurally MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The editor's gutter '│' (U+2502) appeared as '???' — write_bytes fed each UTF-8 byte to the state machine, which mapped every byte >= 0x80 to '?', and the Latin-1 font has no box-drawing glyphs anyway. - vt.write_bytes now decodes UTF-8 sequences; printable non-ASCII dispatches to the glyph path instead of the byte parser. - gop: unicode_glyph_bits() procedurally rasterises box-drawing (U+2500-257F light/heavy/double), arrows (U+2190-2193) and the em dash (U+2014) — pure geometry, no font data needed; blit_glyph falls back to it for ch >= 256. Verified via framebuffer dumps: editor gutter │ renders as a vertical line, help screen ═ separators and ←→↑↓ all render as lines (no '?'). Shell banner em dash renders too. --- rsnix/src/ps2.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'rsnix/src/ps2.rs') diff --git a/rsnix/src/ps2.rs b/rsnix/src/ps2.rs index 8dd58a0..4747813 100644 --- a/rsnix/src/ps2.rs +++ b/rsnix/src/ps2.rs @@ -337,10 +337,26 @@ fn process_e0(byte: u8) -> Option { update_modifiers(byte, true, true); match byte { - 0x48 => Some(if ctrl_held() { KeyEvent::CtrlArrow(0) } else { KeyEvent::ArrowUp }), - 0x50 => Some(if ctrl_held() { KeyEvent::CtrlArrow(1) } else { KeyEvent::ArrowDown }), - 0x4B => Some(if ctrl_held() { KeyEvent::CtrlArrow(2) } else { KeyEvent::ArrowLeft }), - 0x4D => Some(if ctrl_held() { KeyEvent::CtrlArrow(3) } else { KeyEvent::ArrowRight }), + 0x48 => Some(if ctrl_held() { + KeyEvent::CtrlArrow(0) + } else { + KeyEvent::ArrowUp + }), + 0x50 => Some(if ctrl_held() { + KeyEvent::CtrlArrow(1) + } else { + KeyEvent::ArrowDown + }), + 0x4B => Some(if ctrl_held() { + KeyEvent::CtrlArrow(2) + } else { + KeyEvent::ArrowLeft + }), + 0x4D => Some(if ctrl_held() { + KeyEvent::CtrlArrow(3) + } else { + KeyEvent::ArrowRight + }), 0x47 => Some(KeyEvent::Home), 0x4F => Some(KeyEvent::End), 0x49 => Some(KeyEvent::PageUp), -- cgit v1.2.3