Имя буфера в мод-лайне у меня дополняется пробелами до фиксированной ширины, чтобы всё, что идёт после него, стояло ровно, и это долго работало (точнее, работало во всех буферах, которые мне попадались).
(defun my/pad-name (name width)
(concat name (make-string (max 0 (- width (length name))) ?\s)))
Потом открылся 회의록.org, и всё справа от него съехало на три колонки. length считает символы, три слога хангыля - это три символа, но на экране каждый занимает две колонки. (string-width "회의록") даёт 6, (length "회의록") даёт 3. (Наберите оба через M-:, и всё сразу видно.)
Лечится функцией, которая с самого начала считает колонки.
(defun my/pad-name (name width)
(truncate-string-to-width name width nil ?\s))
Короткие имена она дополняет, длинные обрезает, и ширина выходит одна. (В руководстве честно сказано, что string-width даёт приближение, составные символы и шрифты могут его обмануть, но слоги хангыля он считает верно.) Грубое правило теперь такое, всё, что идёт на экран, меряем через string-width, а не через length.