From 9dc1d18241be1c496980b30c2b3eb943dd9aaccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 14 Jul 2020 10:58:57 +0200 Subject: [PATCH] term: print: force line-wrap if a multi-column character does not fit on current line --- CHANGELOG.md | 3 +++ terminal.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01df8b1e..d0abae72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,6 +102,9 @@ the cursor was **not** at the bottom of the scrolling region. * `IND` and `RI` now clears `LCF`. * `DECAWM` not clears `LCF`. +* A multi-column character that does not fit on the current line is + now printed on the next line, instead of only printing half the + character. ### Security diff --git a/terminal.c b/terminal.c index 78f64510..76318d90 100644 --- a/terminal.c +++ b/terminal.c @@ -2388,6 +2388,12 @@ term_print(struct terminal *term, wchar_t wc, int width) if (unlikely(width <= 0)) return; + if (term->grid->cursor.point.col + width > term->cols) { + /* Multi-column character that doesn't fit on current line - + * force a line wrap */ + term->grid->cursor.lcf = 1; + } + print_linewrap(term); print_insert(term, width);