An org mode syntax I use heavily that I rarely see mentioned, including in this cheat sheet, is the obscurely named Radio Targets. Enclose any term or phrase in <<<tripple angle brackets>>>, hit C-c C-c on it, and then any previous or further instance of it in the same buffer will be automatically linked to it from then on. Incredibly useful when you're wroting notes on a long book for example and want to keep track of the instance when a term was defined. Turns an org file into its own wiki.
If you’re into this, you might also want to look at Howm-mode which offers such “comefrom links” also between files and it works well with Org-mode:
https://github.com/kaorahi/howm
See also Logseq, which is an open-source privacy-centric offline-first plaintext-based reimplementation of the UI/UX of Roam Research. The main author is an Emacs user, so obviously a lot of Org-mode influence too, and Org is a supported format.
Basically, think Org Roam, just with Electron instead of Emacs.
This is amusing to read because I just started learning org-mode the other day and ran into these immediately while trying to figure out how to link to a bulletpoint in a list later in the document (couldn't figure it out but it ended up being unnecessary in the end, so... progress).
To quickly link to bullet points, just use [[*My bullet point]] (if you omit the *, it may still work but Org also finds non-heading elements like table names with the same text).
Personally, I like to create custom ids for bullet points so that I can easily change the text in the bullet point later without breaking my links:
* My bullet point
:PROPERTIES:
:CUSTOM_ID: foo
:END:
This is easier with C-c C-x p (org-set-property).
Elsewhere, I can just write [[#foo]] to create a link to that bullet.
Hi, the docs are quite brief about this. Would ratio targets allow you to create a link to a website to the word <<<my site>>> would always lead to a corresponding link? Do you have an example of radio targets?
My Glossary:
- <<<Martin Prince>>>: Smart guy, gets bullied a lot Nelson Muntz
- <<<Nelson Muntz>>>: Troubled guy, does a lot of bullying to Martin Prince.
Watching the Simpsons, Martin Prince seems to get into a lot of altercations with Nelson Munz.
Any reference of "Martin Prince" or "Nelson Muntz" will be highlighted (YES, even in the definitions themselves) due to the radio targets in the document (you may have C-c C-c the target first to initialise it).
You can click on that highlighted text to jump to where it was first defined.
No, that wouldn't work. Radio Targets are intended for the precise repetitions of the same characters. If you surround a regular org link in three angle brackets, eg <<<[[https://www.bbc.com][bbc]]>>>, then the Radio link will clobber the web link on the target itself (ie C-c C-o won't take you anywhere), and it will only highlight repetitions of [[https://www.bbc.com][bbc]] rather than just bbc.
For something similar to what you're asking, I would just go for something like...
The <<<bbc>>> ([[https://www.bbc.com][site]]) is the UK's state broadcasting company. Now when I write bbc (or BBC) these will be highlighted as links and will take you back to the Radio Target in the first sentence and I can then click on the link
Also note that you can mark a word or region and then hit C-c n r (org-insert-radio-target-brackets) to surround it in angle brackets and enable it as a radio target.
I couldn’t find the command you mentioned “org-insert-radio-target-brackets” in my Emacs and it doesn’t appear to be in the manual[1] either. But of course it is very trivial to write, in case anyone else needs this:
(defun org-insert-radio-target-brackets (start end)
"Wraps a region with angular brackets to create a radio target."
(interactive "r")
(save-excursion
(goto-char end)
(insert ">>>")
(goto-char start)
(insert "<<<")))
(keymap-set org-mode-map "C-c n r" #'org-insert-radio-target-brackets)
Apologies, you're right - this was a function I'd forgotten that I'd defined myself! The main thing I would add to your definition is to finish with org-update-radio-target-regexp which does what C-c C-c would otherwise do in this context.
Here's how I defined it.
(defun org-insert-radio-target-brackets (&optional arg)
"Surround selected text with Org Radio Target angle brackets (eg. <<<arg>>>) and then find and update all radio targets"
(interactive)
(progn
(insert-pair arg "<<<" ">>>")
(org-update-radio-target-regexp)))
If there is one tool (if I can call it that) that changed my life, it is Org Mode. I was a Vim guy who in a desperate attempt to get digitally organised was forced to give Org Mode a try and got sucked into Emacs. I now live better organised, with far less anxiety and remain unfazed at the multi-tasking demands of the corporate world, all thanks to this major mode.
I've been an Emacs user since 2000 or so. Got introduced to org when it first came out and it (along with ledger for accounts) have taken over my life.
The phone did make it a little challenging but before that I used a notebook and dumped it into org at the end of the day. I've been doing something similar with my phone now.
A lot of people refer to org-mode as the gateway drug for Emacs and it truly is that.
I keep hearing anecdotes like this and truly want to give Emacs a shot. Do you use it exclusively on a PC?
My big blocker is that a significant portion of my time is on a phone rather than a computer these days and I have to think that all the chording with Emacs would get impossibly cumbersome.
Anyone here have a good way to leverage Emacs on the go?
I've had a stab at this. My requirements are pretty much:
- Actual emacs as a client strongly preferred; don't assume anything else can correctly parse org-mode
- Sync between Windows, Mac OS, Linux, Android
- Don't force me to remember to sync, so `git commit`/`git pull` or `rsync` isn't viable unless it's completely hidden
- Don't allow me to overwrite the file if the sync has failed
- Work from an ssh terminal
The closest I got was `crdt-mode.el`. That gives me real-time updates between connected clients. It needs some UI polish around connecting and disconnecting, but it's nothing unworkable. I can get to it on Android via termux ssh to emacs running in tmux on an always-on raspberry pi in my office. That's just about ok in terms of key chording for most things. You do lose some capabilities. I've contemplated getting a bluetooth keyboard for these situations but obviously that's not usable in a lot of situations you might want to be taking notes in. I got in the habit of using the very top of the file as a dumping-ground for one-liners from mobile because sometimes that was just easier than anything else. If I was feeling particularly keen I might try something in the spacemacs vein to make the key combinations work better on mobile. From memory org-agenda was fine, so I tended to use that as a default view for TODOs.
What's annoyingly broken is having Windows in the mix. There's something not quite right about the way `crdt-mode` handles line endings which means updates from Windows mess up the other copies, and given how much org-mode relies on line endings it can completely break whole sections at a time. I ended up using the version running on SSH from Windows too, but there are a couple of chords which Windows Terminal mucks up. That bit's not great.
Take Windows out and sshing to a shared terminal emacs instance running in `screen` is worth a try, with the caveat that you will have to rebuild the muscle memory for the chording on mobile. The termux keyboard has a couple of niceties that the default Android one doesn't, without which it would be a complete non-starter.
I faced this problem too. I am a Linux user personally, but use Windows at work. I am not a phone person, but do use it regularly.
I sync org files to phone (using Syncthing) and use Orgzly to access these from Android. Although it is possible to install Emacs in Android as a terminal tool in Termux or even as a GUI tool, you need to connect a keyboard to do something sensible. Long story short, if your phone is your daily driver, Emacs may not be for you as it is keyboard oriented. But if you are a computer person who occasionally uses the phone, there are ways to get by.
I moved from Orgzly to Orgro. Now updating the files on the phone is exactly like any other note-taking phone application (for better or worse). It's not as good as experience as the Emacs desktop, but no worse than anything else on the phone.
How do you use Organice? Do you self host it? Did you install the PWA? Do you have an account with organice.200ok.ch? Is your Org mode usage confined to a single file? How do you open other Org mode files on your phone with it?
I installed the native apk from that issue i linked to, no account or hosting.
I use a few files on my phone, it shows them with a kind of file picker.
I have managed to get org mode working with emacs android port. big help was keyboard designer keyboard.
I was able to set C-x and M-x for single touch. And added some keys as per requirements. https://www.keyboarddesigner.com/index.php?page=24
> Although it is possible to install Emacs in Android as a terminal tool in Termux or even as a GUI tool
FWIW, it seems Emacs can now be built for Android natively - there seem to be related files and documentation in the main Emacs repo, though I haven't actually built it myself, so I don't know how well it works.
Leader keys + Evil mode make the keybindings pretty much non-issue on mobile. Emacs also has native Android port now, I've found it work quite well. There are apps like orgro[0] that make dealing with org files a pleasure on mobile.
That being said, it is not perfect. My ultimate (and imperfect) solution was to acquire a GPD Micro[1]. Now that thing makes up for all shortcomings of mobile devices, not just Emacs :)
Same thing as my main laptop: NixOS + Plasma desktop.
I barely see the desktop TBH. It is there just so I have convenient control of peripherals. 99% of my time is in Web browser or Emacsclient or Terminal. On GPD I use the browser even less, because its purpose is to be a lightweight mobile terminal. Graphical Emacs is just superset of terminal one, so it is preferred is all.
Personally I use the emacs android port with org-roam, with syncthing for sync to back home. I've got ctrl and meta mapped to volume up and down. I don't know that I'd call it a good way, but it works well enough for me :).
Emacs org-mode is one of the better organization tools with batteries included.
For someone who is disciplined, organized and feels limited by their current tooling, Emacs will probably work great like these anecdotes. If having the discipline itself is a problem then Emacs is probably not the right choice to start with because of the learning curve and the friction due to sub-optimal experience on phone.
That said, I do recommend to give it a go. On Android, Orgzly + Syncthing is good enough to get started.
It doesn't look like anyone has mentioned Beorg yet? [1]
I'm not an org power user (yet), but I find this iphone app works great to quickly add todos, view outlines, see my agenda, etc whilst I am out. I have it synced via Dropbox so when I get back to my desktop everything is waiting to be properly organized.
I’ve used org mode as a daily driver personally and at work for awhile but ultimately transitioned to Roam Research in part because the mobile experience is better.
I still use org mode to write my blog and journal but my knowledge management is all in Roam.
I use org mode as simple outline or table but so far the organization part still evades me.. I guess I'm too chaotic still to understand how to make real good use of it.
I've been using Org-Mode for over 10 years. There is no one way.
You start off first writing simple outlines, and then you start creating todos, and then maybe you start to look at agendas to organize your todos (note: I rarely do this).
The biggest game changer for me was org-roam. It's essentially a database of all my files where I can add snippets or link to other files, or whatnot.
The TODO stuff I use a rough general guide of where I am, but I do not strictly adhere to it.
Essentially: Make Org-Mode work for you and your mindset, don't feel the need to bend to it.
I don't know about videos, but here's my general workflow.
1. "Huh, I wonder at what point SSDs of today are comparable
to RAM speeds of yester-year?"
2. `C-c n c` (create-node) "ssd_ram_yearly" (title)
3. (a document spawns) "\* SSD vs RAM comparison" (I give it a
better unofficial title)
4. I do googling, drag and drop images into the document (org-download
is a must have)
5. Satisfied with the document, I decide to link it to a
parent node
6. `C-c n i` (insert node) "random_thoughts"
7. If the random_thoughts node exists, it just links, if not, it
creates a new document which I can fill out, and then `C-c
C-c` to complete it, and then it links back to the ram document.
8. I finally do `C-c C-c` to complete the original ram document.
Later on:
1. "Huh, what was I thinking about again?"
2. `C-c n f` (find node) "random_thoughts"
3. `C-c n l` (show backward links) a new buffer pops up showing
all files that link to random_thoughts, and I click on
the Ram ssd one.
it's not very complicated - it's an outliner mashed into an ad-hoc wiki in your editor, and also lets you mark up things as "tasks" with optional "scheduling". you can just outline things in to it, then when an item congeals enough to become a task, <S-right> on it to add a TODO tag and now org mode can be an organiser - put it in the agenda agenda, specify a workflow (TODO->PENDING->DONE; TODO->ABANDONED, etc), schedule it, emit it in to an ical file, etc etc.
probably the nicest part of org is that you don't pay for things you don't use - using it as a just a nice way of organising bullet points works fine, and then there are a jillion optional features around it.
Oh I've tuned the hell out of it, the issue lies above I guess, cause I keep accumulating tasks in various states, sometimes clocked or not.. and then it's hell to manage cleaning what's what.
Keep track of all TODOs in one's life. You can create TODO items and schedule them. You tag them (similar to hashtags) too. Now, if I want to see the list to things to be done today (or any day for that matter), Org Mode will generate the agenda for you. You can filter your agenda/TODOs - for example, if you are getting into a call with Team X, you can filter with "teamx" to get the list of items marked against the team. You can of course add checklists under tasks (sub items), and notes too. Recurring schedule is supported.
Keeping notes. Org Mode doubles up as an Outliner. You can keep hierarchical notes in a single large file. You can mix-in tables (with support for LISP formulae) for tabular data. You can embed images and LaTeX too. You can convert your notes to HTML or Markdown in a jiffy. There are shortcuts for instant note taking. You can archive sections that are no longer required.
I have stopped using mindmaps and now rather rely on Org. It can handle tree-structured information very well.
As a calendar. You can also add diary-remind reminders. Remember one's wedding anniversary (and Spouse's birthday) to save one's marriage.
As with everything in Emacs, configurable and extensible (with ELisp). Almost every method and every variable is Global. This is of course crazy, but the power that this proffers is enormous.
I learn something new about Org Mode every now and then. I do not consider myself as a power user, as I am sure there is still much left to be explored.
Good summary. One thing to note about org is it's not opinionated. Even the word "Todo" is up to you, in fact you can just tell it a bunch of "not done" keywords and a bunch of "done" ones. Over the years I've tweaked these. For example I use STARTED for tasks that I've begun but not yet finished, because I hate starting things but but not finishing them. I've set my agenda views to display these right at the top. Similarly I've added more resolutions like DELEGATED.
This flexibility means you can bend it to rather odd requirements. For example, in my current job I'm required to track time against project codes, but I have to scale the proportion against the hours I'm contracted for (it's a tax thing, I'm told). Org supports clocking in/out of things. It doesn't know what those things are, they are just items in the outline. So I structure my todos under the project codes then track time against those tasks or just directly to the project. Then I have an agenda view which shows me totals for each project and a column scaling the proportions to the total contracted hours over the period.
But you might have completely different requirements. You might want a flat backlog and to "refile" tasks into "sprints" when they get properly defined then set a deadline on the whole sprint. Org supports it all because it doesn't really care that much. Seeing people struggle with the likes of Jira becomes rather comical.
You might also like the org-babel features of creating executable code-blocks. You can even mix languages by using the output of one block as the input to another. Welcome to the future of 2012 ;)
I made one such document a while back with mostly Clojure, if you want to have a look: https://github.com/dnv-opensource/reagent-flow/
org is absolutely the gateway drug to the whole Emacs ecosystem. I started using org after 16 years on vim and slowly found myself replacing my entire text/code workflow with it. I stopped using vim at all about 5 years ago and I never looked back.
I used Orgmode for years, but I think fundamentally tieing your markup to your editor is kind of a bad sign... I'd be curious to hear counterarguments though. I think the primary reason it's tied is because you sort of can't make standalone ELisp apps (or at least nobody does). Otherwise you'd just have an `org2html` and `org2pdf` application at the command line.
Alternatives like Asciidoc are not perfect, esp for literate programming, b/c it's also kinda complex and so it also only has one backend (that's runnable from Clojure through JRuby!). I imagine a simpler multi-backend solution like Djot will be the future most likely. Bloated underspeced markups are on the way out.
Well if you don't do that, you would only have a lowest common denominator system with none of the advanced features, and the world has enough of those.
If I wanted to emulate a fraction of org-mode features I use daily in markdown, I would have to use Obsidian with a bunch of plugins, and we would end up in same boat.
I don't know the exact spec situation, but I know that comprehensive parsing libraries in modern non-elisp languages exist. An org-mode contributor has one in Julia[1], another in Dart[2] that powers a Flutter app, and there are many tree-sitter grammar based tools that are useable from neovim (e.g. [3]). The basic org2html or org2pdf CLI needs are already addressed by Pandoc.
The format/spec isn't really the problem. It's just that parsing and rendering Org Mode files is like parsing and rendering .PSD files - getting your app to open and write PSDs alone does not turn your app into Photoshop; you're still missing 99% of the features.
Right but if you implement the rest of the features, you become an org-mode IDE anyway. I don't mean that's a bad thing, syntax is just bare minimum, most usefulness comes from interactive developer experience anyway. I was just addressing the point parent raised that marrying markup with IDE is a bad idea, and that when it comes to syntax org-mode is hardly underspecified compared to other markup languages.
Would it be neat to have an alternate complete implementation of org-mode elsewhere? Sure. But unlike say Photoshop, Emacs is already open and extremely hackable. That mitigates most of the reasons you would want to.
Well, there's org-mode plugins for vim and vscode, github displays it just fine, pandoc processes it, there's a syntax specification at https://orgmode.org/worg/dev/org-syntax-edited.html, a separate clojure implementation at https://github.com/200ok-ch/org-parser using EBNF, several Android and iOS apps. And Emacs has been around long enough that it's likely to keep being around for at least as long (see Lindy Effect).
Org is hardly more tied up to the editor than any of the many other formats people use – all of these have more or less complete editor support depending on what features you need (e.g. if you start doing fancy literate programming in markdown, or azathoth forbid, try commenting out lines, you'll find spotty support in at least some of the existing implementations). And if you like the full combination of features that Emacs+Org gives you, you'll be hard pressed to find another environment to replace that, so ... why bother?
(OTOH if you only need some minor part, like html export, and you have to work with people already using other formats, then those other formats might be better.)
>you sort of can't make standalone ELisp apps (or at least nobody does). Otherwise you'd just have an `org2html` and `org2pdf` application at the command line.
Because I don't like emacs and I wanted to lean on command line apps for getting data into and out of my orgzly org-mode electronic brain, I've been doing this by combining orgmode with jinja2 (I do this with a cli app I wrote called 'orji').
I think it's a very powerful combination. I use it to generate latex/html/whatever and short bash scripts which are then run. E.g.
* Generate my CV using a latex CV template I found on overleaf that I converted into a jinja2 template.
* Send the contents of a TODO note tagged 'sendemail' as an email with a tiny templated bash script.
* Create jira ticket with the details of a note.
* Generate reveal.js presentations.
All from my phone, using orgzly and one big button which runs a single termux script that seeks out TODO notes with labels (e.g. cv/sendemail) that match the scripts in my library (cv.sh / sendemail.sh).
jinja2 certainly has the capability to end up creating a huge old mess if you abuse it, especially to generate code, but I find that using it to template tiny 5-6 line bash scripts or a latex or an HTML file hits a sweet spot of usability and flexibility.
A link to the documentation¹ and repo² to save others a few steps. Examples are helpfully linked toward the end of the page and its source in the README.
> I used Orgmode for years, but I think fundamentally tieing your markup to your editor is kind of a bad sign... I'd be curious to hear counterarguments though.
For better or worse, Org Mode is a feature-rich application, and org mode format is markup tied to that application. Using it as general-purpose markup is kind of a nice side effect of it being plaintext, and that even the portable subset is more feature-rich than most markup alternatives.
For full compatibility, you'd have to port Org Mode to different editors, in the same way you'd port a native app between OS-es. Org Mode is very much an application that's making full use of its platform's specific features and APIs, except here the platform isn't Windows/Win32 API, but Emacs/Elisp.
Org mode is a markup language in the same way as Emacs is just an editor. Both are true but do not tell the whole story. Org is a plain text application framework built on top of Emacs platform.
My favorite is Org Babel (jupyter notebooks on steroids) that can be used for literate programming that you mentioned (reproducible research, devops-y tasks).
Publishing is just one of many applications. There are certainly cases where you might want a more specialized tool.
I daily-drive Emacs, and write my website/blog [1] in org-mode, but I use pandoc to compile org to HTML [2]... This choice was critical for me. I did not want my publishing workflow to depend on Emacs!
It's true that Emacs is the canonical Org-Mode compiler, but there are many other compilers, including Github pages. If it's typesetting you want, the support is widely available. If it is org-mode-powered workflows (like TODOs etc.), then support outside of Emacs is narrower, but still quite serviceable [3].
__shite_templating_compile_source_to_html() {
# If content has front matter metadata, it is presumed to be in a format
# that the content compiler can safely process and elide or ignore.
local file_type=${1:?"Fail. We expect file type of content like html, org, md etc."}
case ${file_type} in
html )
cat -
;;
md )
pandoc -f markdown -t html
;;
org )
pandoc -f org -t html
;;
esac
}
I did many applications, I just did not publish them.
It is great when the applications need to generate reports, for that I used org mode and then exported in LaTeX, generating a PDF at the end.
Mass availability of LLMs has made it much easier to adopt EMACS and Org Mode because you no longer need to read the docs to be a power user. I can ask an LLM how to do literally anything in EMACS and it will either tell me an existing function or show me how to write a new one. This is a feature that I haven’t seen still in the most popular editors. What would be most powerful is something like Cursor but applied to the editor config, where the editor itself gets more powerful and more suited to your needs the more you use it.
LLMs are so damn useful for small languages in general. Imperfect, but the tradeoffs are much better that in large languages with loads of easy access material.
I also cut my teeth on Elisp when ChatGPT was new, and it was very helpful.
Unfortunately, "Org-mode" (or Orgmode) means two different things: (1) the lightweight markup syntax and (2) the Elisp implementation of a PIM/PKM tool within GNU Emacs.
This seems to be subtle but it results in many misunderstandings and unnecessary discussion issues.
Although I'm using Orgdown and Org-mode for over a decade, I do think that even with an objective point of view, Orgdown does have its benefits from a syntax definition point of view in comparison to Markdown and other lightweight markup languages (LML): https://karl-voit.at/2017/09/23/orgmode-as-markup-only/
Oh and btw, the linked cheat-sheet covers only the most basic Orgdown syntax elements. Within the Orgdown concept, I defined misc "levels" of syntax elements, starting with OD1: https://gitlab.com/publicvoit/orgdown/-/blob/master/doc/Orgd... This also serves as some sort of cheat sheet I guess.
I have been using Emacs ever since I bought an Amiga in the 80s. I love Emacs and Elisp.
Some 15 years ago I started using Orgmode heavily. But a lack of a mobile solution and it not being available ubiquitously made me go back to Markdown and Obsidian for note taking and Kanban boards in Notion for task management.
Markdown is available everywhere. In forums, in chatgpt, in any kind of text editor.
So although I still use Emacs, I stopped (heavy heartedly) using Orgmode.
I like the idea of OBTF and org mode but I find the syntax quite inconvenient. I do not like Markdown also.
I'm currently taking inspiration from bujo, obtf, org mode and markdown for making my own thing based on characters I'm ok to type both on mobile and desktop and which can make it easy to find information back in a huge file both for humans and programs.
If you're alreay spending a lot of special chars for a quote combo (hash, plus, newline), why does it have to be so verbose instead of something shorter like... a quotation mark? And for paired stuff maybe the plus sign could be replaced with some paired symbol like {?
I wish org mode had a syntax for end of line comments. Why do comments have to be their own line or in a space eating comment block? Sometimes I just want to comment something I've written without the extra space and ambiguity of breaking to a new line.
https://orgmode.org/manual/Radio-Targets.html