diff --git a/lisp/org-element-ast.el b/lisp/org-element-ast.el index 4c1391ec4..fba6b37e6 100644 --- a/lisp/org-element-ast.el +++ b/lisp/org-element-ast.el @@ -1131,8 +1131,11 @@ The function takes care of setting `:parent' property for NEW." (eq new-type 'plain-text)) ;; We cannot replace OLD with NEW since strings are not mutable. ;; We take the long path. - (progn (org-element-insert-before new old) - (org-element-extract old)) + (progn + (org-element-insert-before new old) + (org-element-extract old) + ;; We will return OLD. + (setq old new)) ;; Since OLD is going to be changed into NEW by side-effect, first ;; make sure that every element or object within NEW has OLD as ;; parent. diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 93754bae5..23d3d695c 100644 --- a/testing/lisp/test-org-element.el +++ b/testing/lisp/test-org-element.el @@ -755,6 +755,15 @@ Some other text (text (org-element-map tree 'plain-text 'identity nil t))) (org-element-set text "b") (org-element-map tree 'plain-text 'identity nil t))))) + ;; Replace string inside anonymous element with another string. + (let* ((parent (org-element-create 'anonymous nil "test")) + (str (car (org-element-contents parent)))) + (let ((return (org-element-set str "repl")) + (new (car (org-element-contents parent)))) + ;; Return the modified value. + (should (eq return new)) + (should (equal new "repl")) + (should (eq (org-element-parent new) parent)))) ;; KEEP-PROPS (should (org-element-property