diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-07-12 15:59:27 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-07-12 15:59:27 +0200 |
commit | 4c4ff9d90aa040ef3e1e474b3aa6a29f54c88e2e (patch) | |
tree | 7e6582f588f85620bc579be4a3e001d56996f208 | |
parent | 4438459eaa6cccdac2cfcc8f7d5f248bfe8d1edf (diff) | |
download | emacs-4c4ff9d90aa040ef3e1e474b3aa6a29f54c88e2e.tar.gz |
Fix breaking of rfc2047 headers with long words
* 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.)
-rw-r--r-- | lisp/mail/rfc2047.el | 7 | ||||
-rw-r--r-- | test/lisp/mail/rfc2047-tests.el | 38 |
2 files changed, 30 insertions, 15 deletions
diff --git a/lisp/mail/rfc2047.el b/lisp/mail/rfc2047.el index 9de6f02edfb..e3315120d82 100644 --- a/lisp/mail/rfc2047.el +++ b/lisp/mail/rfc2047.el @@ -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 diff --git a/test/lisp/mail/rfc2047-tests.el b/test/lisp/mail/rfc2047-tests.el index 8f7b345e71e..bfaf9958917 100644 --- a/test/lisp/mail/rfc2047-tests.el +++ b/test/lisp/mail/rfc2047-tests.el @@ -22,25 +22,39 @@ (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 |