]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix breaking of rfc2047 headers with long words
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 12 Jul 2019 13:59:27 +0000 (15:59 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 12 Jul 2019 13:59:27 +0000 (15:59 +0200)
* lisp/mail/rfc2047.el (rfc2047-fold-region): Don't break lines
right after the Header: field, but wait until the next
whitespace.  (This only makes a difference for words that are very
long (i.e., longer than, say, 60 characters, depending on the
header name length.)

lisp/mail/rfc2047.el
test/lisp/mail/rfc2047-tests.el

index 9de6f02edfb3cf33c21812f96a5772e061497e4f..e3315120d82a0bc9238c8ae05a64317629523e1f 100644 (file)
@@ -765,7 +765,9 @@ Point moves to the end of the region."
          ;; Whitespace -- possible break point.
         ((memq (char-after) '(?  ?\t))
          (skip-chars-forward " \t")
-         (unless first ;; Don't break just after the header name.
+          ;; Don't break just after the header name.
+         (if first
+              (setq first nil)
            (setq break (point))))
          ;; If the header has been encoded (with RFC2047 encoding,
          ;; which looks like "=?utf-8?Q?F=C3=B3?=".
@@ -780,8 +782,7 @@ Point moves to the end of the region."
            (skip-chars-forward "^ \t\n\r")))
          ;; Look for the next LWSP (i.e., whitespace character).
         (t
-         (skip-chars-forward "^ \t\n\r")))
-       (setq first nil))
+         (skip-chars-forward "^ \t\n\r"))))
       (when (and (or break qword-break)
                 (> (- (point) bol) 76))
         ;; Finally, after the loop, we have a line longer than 76
index 8f7b345e71e53a758ad576ed454052b7d688f4b7..bfaf9958917780571e2c987abb1065addbaf5144 100644 (file)
 (require 'ert)
 (require 'rfc2047)
 
-(ert-deftest test-rfc2047-fold-short ()
+(defun test-rfc2047 (before after)
   (with-temp-buffer
-    (insert "Organization: Lots Of Short Words Here Lots Of Short Words Here Lots Of Short Words Here\n")
+    (insert before)
     (goto-char (point-min))
     (rfc2047-fold-field)
-    (should (equal (buffer-string)
-                   "Organization: Lots Of Short Words Here Lots Of Short Words Here Lots Of
+    (should (equal (buffer-string) after))))
+
+(ert-deftest test-rfc2047-fold-short ()
+  (test-rfc2047
+   "Organization: Lots Of Short Words Here Lots Of Short Words Here Lots Of Short Words Here\n"
+
+   "Organization: Lots Of Short Words Here Lots Of Short Words Here Lots Of
  Short Words Here
-"))))
+"))
 
 (ert-deftest test-rfc2047-fold-encoded ()
-  (with-temp-buffer
-    (insert "Subject: This is =?utf-8?Q?=C3=A1?= long subject that's =?utf-8?Q?v=C3=A9ry?= long and =?utf-8?Q?ver=C3=BD?= encoded yes indeed it =?utf-8?Q?=C3=ADs?=\n")
-    (goto-char (point-min))
-    (rfc2047-fold-field)
-    (should (equal (buffer-string)
-                   "Subject: This is =?utf-8?Q?=C3=A1?= long subject that's
+  (test-rfc2047
+   "Subject: This is =?utf-8?Q?=C3=A1?= long subject that's =?utf-8?Q?v=C3=A9ry?= long and =?utf-8?Q?ver=C3=BD?= encoded yes indeed it =?utf-8?Q?=C3=ADs?=\n"
+   "Subject: This is =?utf-8?Q?=C3=A1?= long subject that's
  =?utf-8?Q?v=C3=A9ry?= long and =?utf-8?Q?ver=C3=BD?= encoded yes indeed it
  =?utf-8?Q?=C3=ADs?=
-"))))
+"))
+
+(ert-deftest test-rfc2047-fold-long ()
+  (test-rfc2047
+   "Organization: verylongverylongverylongverylongverylongverylongverylongverylongverylongword and then\n"
+   "Organization: verylongverylongverylongverylongverylongverylongverylongverylongverylongword
+ and then
+"))
+
+(ert-deftest test-rfc2047-fold-long-short ()
+  (test-rfc2047
+   "Organization: verylongverylongverylongverylongverylongverylongverylongverylongverylongword\n"
+   "Organization: verylongverylongverylongverylongverylongverylongverylongverylongverylongword\n"))
 
 ;;; rfc2047-tests.el ends here