[[!sidebar content=""]] [[!meta title="Linking headings with org-super-links (poor-man's Zettelkasten)"]] [[!meta copyright="Copyright © 2022 Karl Voit"]] [[!inline pages="internal(2022/info/orgsuperlinks-nav)" raw="yes"]] # Linking headings (poor-man's Zettelkasten) and defining advanced task dependencies Karl Voit (he/him, IRC: publicvoit, ) As written in [this blog article](https://karl-voit.at/2020/06/14/Zettelkasten-concerns), Karl thinks that a full-blown Zettelkasten workflow is not always a perfect match for a given set of requirements. To him, the most important aspect of the Zettelkasten method are the **bi-directional links between arbitrary headings**. If you want to use such links without the additional burden and benefit of a Zettelkasten implementation, you might want to learn how bi-directional links are able to help you here. In this talk, you will see a demo how links are used in the author's setup for linking headings and **defining advanced dependencies between todo headings**. You can find [the **self-contained demo file** on Gitlab.com](https://gitlab.com/publicvoit/orgmode-link-demo). It consists of various packages and some Elisp glue to create these methods: - Bi-directional links between headings: - [org-super-links](https://github.com/toshism/org-super-links) with `org-super-links-org-ql` and `org-super-links-org-rifle` - `org-super-links-quick-insert-inline-link` - `org-super-links-quick-insert-drawer-link` - [org-linker](https://github.com/toshism/org-linker) - Advanced dependencies: - [org-edna](https://www.nongnu.org/org-edna-el/) - [org-linker-edna](https://github.com/toshism/org-linker-edna) - Search, completion and narrowing: - [helm](https://emacs-helm.github.io/helm/) - [helm-org](https://github.com/emacs-helm/helm-org) - [org-ql](https://github.com/alphapapa/org-ql) with `helm-org-ql` - Adding CREATED properties for new headings: [org-expiry](https://git.sr.ht/~bzg/org-contrib/blob/master/lisp/org-expiry.el) (not necessary for any demo functionality) More on bi-directional links and Karl's Org mode projects: - [UOMF: Linking Headings With org-super-links (Poor-Man's Zettelkasten)](https://karl-voit.at/2020/07/22/org-super-links/) - [UOMF: On How to Define Projects in Org Mode](https://karl-voit.at/2019/11/03/org-projects/) - [A Draft Workflow for Advanced Project Management Using Org Mode and Org Edna](https://karl-voit.at/2020/08/14/project-mgt-draft/) - [Zettelkasten/Org-roam/Org-brain Is Crap](https://karl-voit.at/2020/06/14/Zettelkasten-concerns/) [More Emacs-related articles by Karl](https://karl-voit.at/tags/emacs/) # Discussion ## Notes - Please note that Karl has written additional notes and links on + the linked blog article - Method vs. tool: - nice talk ## Questions and answers - Q: so the LINKS drawers holds so-called "backlinks"? - A: yes. You can customize the drawer name. - Q: does this configuration you use need packages outside elpa? - A: yes. repository link: - Q:Can you filter out blocked taskes on stuff like your agenda or a specific agenda view, When you want to know what you can do next? - A: Blocked tasks are never shown on the agenda by default. Whenever there is no scheduled timestamp attached to a heading, it's not visible on my agenda. If you use the dependencies as described in the demo, the timestamp is only marked if the previous one is canceled. So blocked tasks are not shown in this setup. - Q:The functionality seems quite nice but the markup seems pretty heavy in the property drawers.  Do you ever have any issues having so much meta-level information in the file? - A: As long as it doesn't need to be typed manually there's no real issue. The orgmode files tend to be large. I haven't felt it's bloated. - Q:Does this change how you use todo keywords "next, todo, blocked?", avoiding some or starting to use others - A: No. My keywords are NEXT, STARTED, WAITING, DONE, CANCELLED - Q:Org Brain has stuff like parent links and directional links, sibling links. If org roam else has nothing else intersting what about like the previous stuff? - A: My links are not "directed" most of the time. So I don't have the requirment for specific link types or directions. In short: I don't need semantic links so far. Following the KISS principle. I get the information from the context of the link. - Q: DO you find that the links are fragile, hard to maintain? - A: not really. sometimes I rename links and the link name is not updated, that require some fixes by hand - Q: PhD Thesis link - A: The first chapters of my thesis should be easy to read for the general public as I summarize the history of PIM (Personal Information Management) research - + related github projects around tagstore - tagstore = research prototype software in Python to do research around tagging interfaces for local files - flexible to adapt - Topic: improving the local file management beyond the usual hierarchy of directories (tagging + TagTrees) - DONE AFTER my PhD: filetags, date2name, move2archive, ... - Q: why not org-id's UUIDs for IDs, and the preference for human-readable ones (and not just use CUSTOM_ID for those)? - Karl: I hate UUID because they're opaque, so I removed them. - I don't understand. There is a part for human to read description: [[UUID][A human readable description]] - Karl: this would not add any benefit from my personal point of view as longs as the human-readable ID is unique. So why not get rid of the UUID and use the humand readable link text? - A human readble link is fragile, e.g. space, non acsii characters. When unexpected things happen, it is hard to detect the change. Using human-readable link text release the stress, so the user could focus on the content.  - Karl: You should take a look at my Elisp function that generates the ID strings. No problem so far. - I found you write a blog about it: . I will read about it. - I found `(defun my-generate-sanitized-alnum-dash-string(str)` in the - way to generate your ID requires replace non-ASCII characters: ;; - Replace German Umlauts with 7-bit ASCII. - ;; Replace German Umlauts with 7-bit ASCII. - (str (replace-regexp-in-string "[Ä]" "Ae" str t)) - (str (replace-regexp-in-string "[Ü]" "Ue" str t)) - This is a very tedious work to do. I don't know if users come from - other non-ASCII characters would have to write their own replacement - regular expression. - Q. do you have/use anything for "what links here / to this heading", in a more occur/grep-style buffer and auto.? - A: not yet, I use org-occur in the buffer and get the result - Q: (totally tangential):  Do you navigate your files with the arrow keys or with C-{pnbf}?  I saw arrows on your key-cast. - It's more complicated than that: - In short: I'm using the arrow keys but they are not where you'd assume they are. ;-) - Q: link to thesis please - Q: any way to do links by heading hierarchy? - Q: so the LINKS drawers holds so-called "backlinks"? - A: yes. You can customize the drawer name. - does this configuration you use need packages outside elpa? - A: my setup Elisp could be improved to great extend. - A: - A: ### Other discussions from IRC - Wow, this looks super organized - i have to admire embedding that much info into tasks (ie: blocked, next, etc), i never get that far. my headings are much more lightweight, i'd likely use a plain list if i could fold over the text below - Is there a specialized package for showing backlinks (org-mode) in a buffer, say based on IDs, in a normal occur buffer or even a grep/rg style thing? - i really like that both publicvoit's org-superlinks and hyperbole are both elisp and inside emacs, where org-roam is a hodgepodge of external tools (my impression) - isn't sqlite the only external dependency for org-roam though? - Speaker: Actually, to create the demo fully self-contained was most of the effort with this demo. By far. - Fashion: - *that* is a dapper looking fellow! - Really loved the ending publicvoit - haha the goodbye was epic - I am way underdressed for this conference it appears - oh! I backed up and see the shorts that publicvoit was wearing! - A fashion leder if you will - I was here for the fashion. Not dissapointed. [[!inline pages="internal(2022/info/orgsuperlinks-after)" raw="yes"]] [[!inline pages="internal(2022/info/orgsuperlinks-nav)" raw="yes"]] [[!taglink CategoryOrgMode]] [[!taglink CategoryZettelkasten]]