Table of Contents
Problem
Before turning a note into a blog post, I want to remove some of the org-mode links that are internal to my notes. There did not appear to be a way to do this out of the box. The answers I found on emacs stackexchange used regular expressions or deleted a space after the link.
I used a fair number of tabs to cobble up a solution, so I thought it would be worth sharing.
org-delete-link
by a throw-away account almost worked, and uses org-modes’ Abstract Syntax Three through the org-element api. User Timm correctly pointed out a space after the link would also be deleted.
Solution
I prefer Andrew Swann’s name for the function, so here is my fixed mashup:
(defun org-replace-link-by-link-description ()
"Remove the link part of an org-mode link at point and keep
only the description"
(interactive)
(let ((elem (org-element-context)))
(if (eq (car elem) 'link)
(let* ((content-begin (org-element-property :contents-begin elem))
(content-end (org-element-property :contents-end elem))
(link-begin (org-element-property :begin elem))
(link-end (org-element-property :end elem)))
(if (and content-begin content-end)
(let ((content (buffer-substring-no-properties content-begin content-end)))
(delete-region link-begin (- link-end 1))
(insert content)))))))
Subtract one from link-end and it works. This is the fixed line:
(delete-region link-begin (- link-end 1))
Original question on emacs stackexchange: in org-mode, how to remove a link?
Epilogue
Why do I want this? I want to publish only some of my org-roam notes. Org-roam notes are like private wiki-pages. It also allows (with a bookmarklet) to clip webpages to their own org-roam note. At the top of the note, there is a roamkey that then contains the url of the page. I want to export my org-roam notes to markdown. Links should be to orignal webpages, instead of my private clippings with notes.
This is a baby step in the right direction.
FYI macs is perfectly usable without writing any code, using a distribution like Doom Emacs (my current) or Spacemacs (my previous). This is the first time in six years of regular emacs use that I’m writing a non-trivial amount of code for it.
Top comments (0)