summaryrefslogtreecommitdiffstats
path: root/2022/talks/orgsuperlinks.md
blob: 9bf0e51066ec2c47d7ad6f8977e0f8a8b3a76e45 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
[[!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"]]

<!-- Initially generated with emacsconf-generate-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Linking headings (poor-man's Zettelkasten) and defining advanced task dependencies
Karl Voit (he/him, IRC: publicvoit, <mailto:EmacsConf22@Karl-Voit.at>)

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
    <https://emacsconf.org/2022/talks/orgsuperlinks/> + the linked blog
    article <https://karl-voit.at/2020/07/22/org-super-links/>
-   Method vs. tool:
    <https://karl-voit.at/2021/01/18/feature-vs-method/>
- 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:
        <https://gitlab.com/publicvoit/orgmode-link-demo>
-   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: <https://karl-voit.at/tagstore/en/papers.shtml> 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
            <https://github.com/novoid/>
        -   tagstore <https://karl-voit.at/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:
            <https://karl-voit.at/managing-digital-photographs/>
            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.
                <https://github.com/novoid/dot-emacs/blob/master/config.org>
                -   I found you write a blog about it:
                    <https://karl-voit.at/2019/11/16/UOMF-Linking-Headings/>
                    . 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:
        <https://karl-voit.at/2021/05/23/advantage2-modifications/>
    -   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: <https://emacsconf.org/2022/talks/orgsuperlinks/>
  - A: <https://gitlab.com/publicvoit/orgmode-link-demo>

### 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]]