]> git.eshelyaron.com Git - emacs.git/commitdiff
Compute erc line lengths correctly for utf-8 (etc.)
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 13 Apr 2018 18:24:04 +0000 (20:24 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 13 Apr 2018 18:24:04 +0000 (20:24 +0200)
* lisp/erc/erc-backend.el (erc-split-line): Fold the lines
according to octet length, not the number of characters (bug#23047).

lisp/erc/erc-backend.el

index 7eec56e363b0ff5af0dc45102978f31b56470eaa..814ecfae85ab43ad00622cfebd2979011652e68a 100644 (file)
@@ -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 ()