util.human.io: Trim any broken UTF-8 from ellipsis
authorKim Alvefur <zash@zash.se>
Fri, 12 Nov 2021 12:19:01 +0100
changeset 11899 d278a4c6da7f
parent 11898 57106c61d104
child 11900 93e9f7ae2f9b
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
--- a/util/human/io.lua	Fri Nov 12 12:14:27 2021 +0100
+++ b/util/human/io.lua	Fri Nov 12 12:19:01 2021 +0100
@@ -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 @@
 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)