org-mode links in 2022: implementation, packages, articles and videos | THIS IS EMACS
- On GitHub
- WE ARE DONE!!!
I hope you are doing well.
In the last few weeks, we have dedicated 6 posts to org-mode links.
Our interest was not only to show the specific features of org-mode links but also to see how they are implemented.
In this post, the last one about org-mode links, we list ALL the videos, articles and packages related to org-mode links.
It is unrealistic to think that it is possible to do so. But, we can try. And If you think about any video, article or package that should be part of that list, please do share it in the comment section below.
In the post Search options in file links | link abbreviations | COME
WITH ME on this JOURNEY into the heart of the command
org-open-at-point, we looked at the implementation of
To do so, we also looked at the functions:
In the post Did you know that Org links in property drawers are not
links?, we looked at the functions
org-open-at-point and also the variable
In the post FULL example of org-mode links: internal links and search
options, instead of "explaining" the implementation of the function
org-link-search we gave an full example that demonstrates its behavior
and provided some Elisp examples of the functions and variables used by
In the post Link to a git commit from Org mode using Magit | THIS IS
EMACS, we looked at the functions
In the post org-mode links everywhere, not only in org-mode buffers |
THIS IS EMACS, we looked at
In the post org-store-link... powerful and flexible | THIS IS EMACS,
we looked at
In his series DoomCasts: Emacs Doom Screencasts Zaiste dedicates the episode 10, 11 and 12 to org-mode links.
In Emacs Doom E10: Org Mode - Links, Hyperlinks and more, the focus is
on internal links to headline, file links, links to url, elisp link
type (use for instance to open org agenda with
type (to list files in a directory) and
In Emacs Doom E11: Org Mode - Custom Link Types Zaist describes how to
add a new link type using
org-add-link-type. Note that
org-add-link-type is obsolete since org-mode
9.0 but still supported.
9.0 we use
org-link-set-parameters to add the links:
;; from the video (defun make-youtube-link (youtube_id) (browse-url (concat "https://www.youtube.com/embed/" youtube_id))) (org-add-link-type "yt" #'make-youtube-link) ; obsolete since 9.0 ;; since 9.0 (org-link-set-parameters "yt" :follow #'make-youtube-link)
This allows us to open the following link
[[yt:Febe4lUK5G4]] in the
org-open-at-point (bound to
C-c C-o by default).
In Emacs Doom E12: Org Mode - Linking to words & Bookmarks the focus
is on using command
org-store-link on an org-mode headline and the
org-open-at-point when we modify the variable
In his series OrgMode tutorial Rainer König dedicates the episode
E05S02 to org-mode links.
In OrgMode E05S01: Linking (internal) the focus is on
link to named target (
#+NAME:), link to headline with
property, radio targets (enclosed by triple angular brackets like this
At some point he says that we are responsible for the
make them unique through out the document which is true.
We take the opportunity to mention the command
org-lint that checks
the current Org buffer for syntax mistakes. This command reports if
there are duplicated
For instance, if we call the command
org-lint in the following Org
buffer (with two
CUSTOM_ID with the value
* headline 1 :PROPERTIES: :CUSTOM_ID: foo :END: * headline 2 :PROPERTIES: :CUSTOM_ID: foo :END:
*Org Lint* pops up with the following content:
3 nil Duplicate CUSTOM_ID property "foo" 7 nil Duplicate CUSTOM_ID property "foo"
In OrgMode E05S02: Linking (external) Rainer talks about links of type
file, url, bbdb. He shows how to use
id links (
some custom functions). He also demonstrates how
id links does not
break when we archive a subtree with the command
org-archive-subtree-default (bound to
C-c C-x C-a by default).
In New link features in org-mode v9.0 John Kitchin demonstrates
how to defines new link types using the function
:faceproperty is used to make links green,
:displayproperty is used to show "all" the link,
:help-echois used to produce a dynamic tooltip for some links,
:followproperty is used to define a function to open
filetype link that let you choose the command to use to open a file with completion using
:keymapproperty is used to define a keymap only active on some links,
:activate-funcare also demonstrated.
This video is completed with this article New link features in org 9.
In New link features in org 9 John Kitchin demonstrates how to defines
new link types using the function
article is completed with this videos New link features in org-mode
Kaushal Modi wrote two articles about org-mode links:
Linking and Exporting Org "info:" links with the following abstract:
Journey of Org links from copying (storing) them, inserting them in Org documents and exporting them. The focus of this post is on the info: type Org links, but the same concept would apply to any Org link type.
and Improving ox-hugo exported Org "info:" links with the following abstract:
In my previous post, I talked about how info: Org link export support got added to ox-hugo. This post is about making those exported links a tiny 🤏 bit better.
In Custom Org-mode link abbrevs Eigenbahn "blends" link abbreviations
and link types to have fast copy/paste experience with link
abbreviations. He uses
org-link-set-parameters and advices the
org-yank to do so.
In Emacs: With ace-window and link-hint, open links exactly where you want them Grant Rosson describes, as said in the abstract:
how the Emacs package link-hint can be combined with ace-window to allow you to select, on-the-fly, which window a link will open in—instead of letting fate, or custom, or Emacs decide for you.
The repository https://git.sr.ht/~bzg/org-contrib contains many add-ons to Org.
Doing a recursive grep inside the repository for the function
org-link-set-parameters we can find the following link types.
This file implements links to Mew messages from within Org-mode.
It defines the link type mew.
Support for hooking mairix search into Org for different MUAs.
It defines the link type mairix.
Links to Emacs-lisp symbols.
It defines the link type elisp-symbol.
Org-mode Babel support for SMILES.
It defines the link type molecule.
Links to Wanderlust messages.
It defines the link type wl.
Links to bookmarks.
It defines the link type bookmark.
By doing a search for the function
org-link-set-parameters (used to
define new Org link types) using https://grep.app/ we can find "all"
the org link types defined in GitHub public repositories.
There are more than 150 of them.
I tried some of them, read the source of others.
One of these Org link types may meet your needs or you can read their implementations to get inspired to write your own.
So here is the list of Org link types I found (the urls point to the definition on GitHub of these links pinned to the last revision while I was writing this post).
https://github.com/doomemacs/doomemacs: Doom is a configuration framework for [GNU Emacs] tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better).
https://github.com/jkitchin/org-ref: org-ref makes it easy to insert citations, cross-references, indexes and glossaries as hyper-functional links into org files. The links are fontified so you can tell them apart from other links, and each link is clickable to access functions like opening a pdf, notes or url associated with the link. Each link also can be exported to LaTeX to build a PDF. For citations, export to other formats is supported by citeproc for high quality export to HTML, markdown, plain text, or stand-alone (i.e. independent of a bibtex file) LaTeX.
org-ref defines the link types:
https://github.com/tgbugs/orgstrap: orgstrap allows Org files to describe their own requirements and define their own functionality, making them self-contained standalone computational artifacts dependent only on Emacs or other implementations of the Org Babel protocol in the future.
https://github.com/minad/osm: Osm.el is a tile-based map viewer,
with a responsive moveable and zoomable display. The map can be
controlled with the keyboard or with the mouse. The viewer fetches
the map tiles in parallel from tile servers via the
curl program. The
package comes with a list of multiple preconfigured tile servers. You
can bookmark your favorite locations using regular Emacs bookmarks or
create links from Org files to locations. Furthermore the package
provides commands to search for locations by name and to open and
display GPX tracks.
osm defines the link type osm.
https://github.com/jkitchin/scimax: Scimax is an Emacs starterkit for scientists and engineers. It provides a comprehensive configuration of Emacs for scientific programming and publishing.
https://github.com/egh/zotxt-emacs: zotxt-emacs works with https://github.com/egh/zotxt to provide Emacs integration with Zotero, allowing you to manage citation keys for pandoc markdown documents as well as org mode links to items in your Zotero collection.
zotxt-emacs defines the link type zotero.