From b9837e2d99bddff368c4b5e2721479093c1f8858 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 12 Nov 2021 12:19:01 +0100 Subject: util.human.io: Trim any broken UTF-8 from ellipsis This should fix basic problems with multi-byte UTF-8 sequences getting cut in the middle. Down the rabbit hole we go... --- util/human/io.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'util/human/io.lua') diff --git a/util/human/io.lua b/util/human/io.lua index 2e59ea85..09ed2807 100644 --- a/util/human/io.lua +++ b/util/human/io.lua @@ -1,4 +1,5 @@ local array = require "util.array"; +local utf8 = rawget(_G,"utf8") or require"util.encodings".utf8; local function getchar(n) local stty_ret = os.execute("stty raw -echo 2>/dev/null"); @@ -96,7 +97,10 @@ local function padleft(s, width) end local function ellipsis(s, width) - return s:sub(1, width-1) .. "…"; + if #s <= width then return s; end + s = s:sub(1, width - 1) + while not utf8.len(s) do s = s:sub(1, -2); end + return s .. "…"; end local function new_table(col_specs, max_width) -- cgit v1.2.3