Remember to cover the basics, that is, what you expected to happen and what in fact did happen. You don't know how to make a good report? See
https://orgmode.org/manual/Feedback.html#Feedback Your bug report will be posted to the Org mailing list. ------------------------------------------------------------------------ * Introduction This bug report show examples where it is noticeable that =org-element-map=, when =link= is the value for the =TYPES= argument, doesn't consider all links in the current buffer. * Examples without errors :PROPERTIES: :CREATED: [2021-09-24 13:23:45 -05] :END: This section show examples where =org-element-map= correctly iterates through all links. The following is an example. #+begin_src elisp (let ((lines '("|-----------------------|" "| [[https://link1.com]] |" "| [[https://link2.com]] |" "| [[https://link3.com]] |" "|-----------------------|"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link1.com" "https://link2.com" "https://link3.com") #+end_example The following is another example. #+begin_src elisp (let ((lines '("#+BEGIN_QUOTE" "[[https://link1.org]]" "#+END_QUOTE"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link1.org") #+end_example The following is another example. #+begin_src elisp (let ((lines '("This is [[https://link1.com][a link]]" "#+BEGIN_SRC python" "print('[[https://link2.com][a link]]')" "#+END_SRC" "This is [[https://link3.com][a link]]"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link1.com" "https://link3.com") #+end_example * Examples with errors :PROPERTIES: :CREATED: [2021-09-24 13:24:03 -05] :END: This section show examples where =org-element-map= doesn't iterate through all links in the buffer. The following is an example. Links in properties drawers are not considered. I expect those links to be considered. #+begin_src elisp (let ((lines '("* John Doe" ":PROPERTIES:" ":ONE: [[https://link1.com]]" ":TWO: [[https://link2.com]]" ":END:" "[[https://link3.com]]"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link3.com") #+end_example The following is another example. The link in the =#+TITLE= line is not considered. I expect that links to be considered. #+begin_src elisp (let ((lines '("#+TITLE: A line with [[https://link1.com][a]] link" "" "[[https://link2.com]]"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link2.com") #+end_example The following is another example. In general, links in keyword lines (i.e. those starting with =#+=) are not considered. I expect those links to be considered. #+begin_src elisp (let ((lines '("#+TITLE: A line with [[https://link1.com][a link]]" "#+SUBTITLE: A line with [[https://link2.com][a link]]" "#+AUTHOR: A line with [[https://link3.com][a link]]" "#+SUBAUTHOR: A line with [[https://link4.com][a link]]" "" "A simple paragraph with [[https://link5.com][a link]]"))) (with-temp-buffer (org-mode) (insert (string-join lines "\n")) (org-element-map (org-element-parse-buffer) 'link (lambda (link) (org-element-property :raw-link link))))) #+end_src #+RESULTS: #+begin_example ("https://link5.com") #+end_example * Personal thoughts :PROPERTIES: :CREATED: [2021-09-24 17:41:12 -05] :END: I think that links in properties drawers and keyword lines should be considered by =org-element-map= because there are use cases for having links at these locations. I will mention a use case for each context ** Links in property drawers :PROPERTIES: :CREATED: [2021-09-24 17:49:32 -05] :END: For storing contacts' information #+BEGIN_SRC org ,* John Doe :PROPERTIES: :LANGUAGE_NATIVE: SPA :LANGUAGE_FLUENT: ENG :PERSONAL_SITE: https://www.jhondoe.com :END: #+END_SRC ** Links in the =#+TITLE= line :PROPERTIES: :CREATED: [2021-09-24 17:50:04 -05] :END: For making a specific part of the title clickable. #+BEGIN_SRC org ,#+TITLE: My article on [[https://www.gnu.org/software/emacs/][GNU Emacs]] ,#+AUTHOR: John Doe ,* My section This is a paragraph. ,* My second section This is a paragraph. #+END_SRC * System information Emacs : GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.27, cairo version 1.17.4) of 2021-03-26 Package: Org mode version 9.4.4 (release_9.4.4 @ /usr/share/emacs/27.2/lisp/org/) [[[ If you see a signature in spanish below this message, please omit it. It is automatically inserted in all my messages due to the internal privacy policies of the organization that owns the domain of my email address. ]]]