diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el index 57a94f6d4..8d5204c4c 100644 --- a/contrib/lisp/org-export.el +++ b/contrib/lisp/org-export.el @@ -1271,10 +1271,13 @@ Following tree properties are set: `:target-list' List of all targets in the parse tree." ;; First, get the list of elements and objects to ignore, and put it - ;; into `:ignore-list'. + ;; into `:ignore-list'. Do not overwrite any user ignore that might + ;; have been done during parse tree filtering. (setq info (plist-put info - :ignore-list (org-export-populate-ignore-list data info))) + :ignore-list + (append (org-export-populate-ignore-list data info) + (plist-get info :ignore-list)))) ;; Then compute `:headline-offset' in order to be able to use ;; `org-export-get-relative-level'. (setq info diff --git a/testing/contrib/lisp/test-org-export.el b/testing/contrib/lisp/test-org-export.el index 9edc9c44a..6d05d54bf 100644 --- a/testing/contrib/lisp/test-org-export.el +++ b/testing/contrib/lisp/test-org-export.el @@ -296,3 +296,22 @@ body\n"))) (org-export-expand-include-keyword) (should (equal (buffer-string) "#+BEGIN_SRC emacs-lisp\n(+ 2 1)\n#+END_SRC\n")))) + +(ert-deftest test-org-export/user-ignore-list () + "Test if `:ignore-list' accepts user input." + (org-test-with-backend "test" + (flet ((skip-note-head + (data backend info) + ;; Ignore headlines with the word "note" in their title. + (org-element-map + data 'headline + (lambda (headline) + (when (string-match "\\" + (org-element-property :raw-value headline)) + (org-export-ignore-element headline info))) + info) + data)) + ;; Install function in parse tree filters. + (let ((org-export-filter-parse-tree-functions '(skip-note-head))) + (org-test-with-temp-text "* Head1\n* Head2 (note)\n" + (should (equal (org-export-as 'test) "* Head1\n")))))))