From: Lars Ingebrigtsen Date: Fri, 13 Apr 2018 18:24:04 +0000 (+0200) Subject: Compute erc line lengths correctly for utf-8 (etc.) X-Git-Tag: emacs-27.0.90~5240 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cad2b8d109d4fd2b78d4e064af729336f348a2bb;p=emacs.git Compute erc line lengths correctly for utf-8 (etc.) * lisp/erc/erc-backend.el (erc-split-line): Fold the lines according to octet length, not the number of characters (bug#23047). --- diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 7eec56e363b..814ecfae85a 100644 --- a/lisp/erc/erc-backend.el +++ b/lisp/erc/erc-backend.el @@ -466,14 +466,18 @@ If this is set to nil, never try to reconnect." The length is specified in `erc-split-line-length'. Currently this is called by `erc-send-input'." - (if (< (length longline) - erc-split-line-length) - (list longline) + (let ((charset (car (erc-coding-system-for-target nil)))) (with-temp-buffer (insert longline) + ;; The line lengths are in octets, not characters (because these + ;; are server protocol limits), so we have to first make the + ;; text into bytes, then fold the bytes on "word" boundaries, + ;; and then make the bytes into text again. + (encode-coding-region (point-min) (point-max) charset) (let ((fill-column erc-split-line-length)) (fill-region (point-min) (point-max) nil t)) + (decode-coding-region (point-min) (point-max) charset) (split-string (buffer-string) "\n")))) (defun erc-forward-word ()