From 40f73953f661bec0e70d38d6e11f6d39c92504f8 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 15 Nov 2017 18:13:34 +0100 Subject: [PATCH] Fix `org-string-display' * lisp/org-macs.el (org-string-display): Preserve original string's display property when computing displayed width. * testing/lisp/test-org-macs.el (test-org/string-display): Add test. Reported-by: Ruy Exel --- lisp/org-macs.el | 19 +++++++++---------- testing/lisp/test-org-macs.el | 8 +++++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/lisp/org-macs.el b/lisp/org-macs.el index 1118214c4..a39c50649 100644 --- a/lisp/org-macs.el +++ b/lisp/org-macs.el @@ -108,16 +108,15 @@ text properties." (value (if (stringp display) display (cl-some #'stringp display)))) (when value - (apply - #'propertize - ;; Displayed string could contain - ;; invisible parts, but no nested display. - (funcall prune-invisible value) - (plist-put props - 'display - (and (not (stringp display)) - (cl-remove-if #'stringp - display))))))))))) + (apply #'propertize + ;; Displayed string could contain + ;; invisible parts, but no nested + ;; display. + (funcall prune-invisible value) + 'display + (and (not (stringp display)) + (cl-remove-if #'stringp display)) + props)))))))) ;; `display' property overrides `invisible' one. So we first ;; replace characters with `display' property. Then we remove ;; invisible characters. diff --git a/testing/lisp/test-org-macs.el b/testing/lisp/test-org-macs.el index 7c54761d6..79a39f1f4 100644 --- a/testing/lisp/test-org-macs.el +++ b/testing/lisp/test-org-macs.el @@ -68,7 +68,13 @@ (eq 'foo (get-text-property 1 'face (org-string-display - #("123" 1 2 (display "abc" face foo))))))) + #("123" 1 2 (display "abc" face foo)))))) + ;; Also preserve `display' property in original string. + (should + (equal "abc" + (let ((s #("123" 1 2 (display "abc" face foo)))) + (org-string-display s) + (get-text-property 1 'display s))))) (provide 'test-org-macs)