Build a Zettelkasten with the Hyperbole Rolodex
Ramin Honary ("Rah-mean" (hard-H) "Ho-na-ree", he/him.
- Email: ramin.honary@gmail.com
- Homepage: https://tilde.town/~ramin_hal9001/
- Mastodon: https://emacs.ch/@ramin_hal9001
- GitHub: https://github.com/RaminHAL9001
In this talk, Ramin Honary shares how he uses HyRolo to create and navigate links between his notes. Afterwards, he will handle questions via IRC.
00:00.000 Introduction 01:41.040 Key takeaway 02:17.000 Overview of Zettelkasten 02:46.320 Tools I use in day-to-day writing 03:25.360 Quick overview of Hyperbole 04:03.520 Explain HyRolo 04:55.240 Configuration of Hyperbole using ~use-package~ 05:44.280 The Hyperbole menu-driven user interface 06:37.600 Getting started with HyRolo: Create a /zettel/ 08:23.760 Searching the HyRolo database 09:27.120 Demo HyRolo search 10:06.960 Search operators AND/OR/NOT 10:42.520 Navigating the search results 12:01.760 Editing entries creates timestamps 12:25.560 How is HyRolo a zettelkasten? 12:56.040 Demo interlinked notes via HyRolo search 14:26.800 Explaining how Hyperbole hyperlinks work 15:35.080 Demo Hyperbole "implicit links" 16:04.680 Explain Hyperbole "explicit links" 16:04.680 Demo creating an explicit link 18:32.720 Demo creating an /zettel/ entry for a person 19:19.880 Demo explicit linking new entry to others 20:10.560 How "explicit buttons" encode actions 21:12.480 Conclusion
Description
"Zettelkasten" is a methodology for marshaling your knowledge, ideas, creativity, into a database of hyperlinked notes, each note representing a single quantity of knowledge. The method was first devised by a well-published social scientist named Niklas Luhmann. Though he constructed his database with actual slips of paper in a box with a notebook for indexing, naturally, modern software removes the manual labor from the process.
In the world of Emacs packages, Org Mode is the most well-known package that provides the tools necessary for building a Zettelkasten, along with extensions such as "Org Roam" which add functionality that manage links between Org Mode documents. But Org Mode is not the only Emacs package to provide such tools.
In this talk, I demonstrate how to use an oft-overlooked package called Hyperbole as an alternative to Org Roam for managing hyperlinks and building a Zettelkasten. In particular I use the Hyperbole "Rolodex" feature, called "HyRolo." It was originally designed for tracking your personal relations, but it can be used to build a Zettelkasten with almost no additional configuration or 3rd-party packages. HyRolo is a purely textual database, and does not require an external database software to index the notes. It also provides a very rich set of "actions" so that notes not only link to each other, but can also trigger Emacs to execute code as well.
Presentation outline:
Introduction
Ramin Honary
Software Engineer, App Developer (mostly Python and Haskell)
Emacs user for about 4 years (since 2018)
Key Takeaway
The Hyperbole hyperlink markup language lets you create links that execute arbitrary Emacs commands.
To link entries, create a hyperlink that executes a HyRolo search.
Quick overview of the Zettelkasten methodology
Note: most of what I say about the Zettelkasten method comes from Sacha Fast of https://zettelkasten.de
Zettelkasten is: a database of interconnected ideas
Tools I use in day-to-day writing
Hyperbole: for hyperlinking, search, project management
Embark: arranging text, copy and paste
Org-Mode: for markup
Dired: for working with sets of files
Consult, Vertico, Orderless, Marginalia: interactive search
Magit: Git revision control of my plain-text database
Quick overview of Hyperbole
Core functionality: a markup language for hyperlinks
Applications such as HyRolo and Koutline built on top of this core functionality.
HyRolo is the feature I use as my Zettelkasten.
Configuration of Hyperbole using use-package
```emacs-lisp
(use-package hyperbole
:config
(setq hbmap:dir-user "~/.emacs.d/hyperb/")
(setq hyrolo-file-list '("~/.emacs.d/hyperb/ideas.org"))
(setq hyrolo-date-format "%Y-%m-%d %H:%M:%S"))
```
The Hyperbole Menu-Driven User Interface
Menus are a kind of modal user interface
Enter menu with Hyperbole leader key
{C-h h ...}
Select menu items with key presses
Works a little like
which-key
Getting started with HyRolo: Create a zettel
- Add entry:
{C-h h r a}
"hyperbole rolodex add" - Prompts you for a title for the entry
- The Zettelkasten file (e.g. ~idea.org~) is opened
- Write the body of the zettel, save the file.
Searching the HyRolo database
Multiple search options: by string, by regex, by word.
I use string search most often:
{C-h h r s}
String search provides logical
AND
,OR
,XOR
,NOT
Executing a search opens the
*HyRolo*
buffer.Read-only mode buffer with useful single-key navigation.
Searching the HyRolo database
{o}
as in "overview": hides all but the headings{a}
as in "all": shows all information under each heading{t}
as in "top": shows top-level entries{n}
and{p}
: next/previous result{h}
and{s}
: hide/show a search result subheading{C-u r}
as in "regex": prompts for a new string search{e}
or{M-RET}
: jump to that entry for editing, although using this command inserts a new timestamp, I just use{C-/}
to undo insertion of the timestamp.
How is HyRolo a Zettelkasten?
Key take-away: The Hyperbole hyperlink markup language lets you execute arbitrary Emacs commands.
To link Zettelkasten entries, create an hyperlinks that execute a HyRolo search.
How to create an explicit link
Highlight text to be linked
{C-h h e c}
to create a linkPrompted for link text with highlighted region (press enter)
Prompted for action:
hyrolo-fgrep
Prompted for search string:
hyperbole
How "explicit buttons" encode actions
A separate file from the HyRolo flat-file database.
By default, called
.hypb
, exists in the same directory as the HyRolo flat-file database.
Conclusion
A Zettelkasten is database of ideas linked together
The Hyperbole HyRolo can run search queries
The Hyperbole markdown creates links that execute queries
This results in a minimal but useful Zettelkasten.
Discussion
Notes
- My blog: https://tilde.town/~ramin_hal9001
Questions and answers
- Q: Why is the time-stamp not implemented as an Org mode PROPERTIES
entry? (e,g, :CREATED:)
- A: Hyperbole pre-dates Org-Mode, although the maintainers have made efforts to make Hyperbole compatible with Org-Mode as much as possible. You could ask Bob Weiner directly, but it could just be for backward compatibility, trying to keep the formatting for current Hyperbole users. You could raise that as an issue, they may be willing to include a config option allowing you to specify the time-stamp format.
- Q: why Hyperbole/HyRolo over Org-Roam? (I don't use either, just
curious)
- A: HyRolo and Hyperbole require no other software beyond code builtin to Emacs. For example, when I first built Org-Roam, it did not work properly for me and I had to modify the build process to get it set up. With Hyperbole, you install one package and you can start working.
- A: ^this, and I find it to be a lighter-weight solution. I was able to get it working without depending on SQLite or doing any indexing. Hyperbole is also a more general solution that can be applied to a wider range of use cases than just Zettelkasten.
- Q: How does this scale to very large data bases?
- A: It works very well with fairly large personal databases. No one has ever complained about performance. Generally, people are surprised how fast it is given that there is no separate indexing in the background.
- A: I personally do not have a large database so I don't know for sure. But it is basically as efficient as Grep is, and I have used Grep on multiple-gigabyte files without noticing it being too slow. Modern computers are fast enough that indexing isn't required for reasonable performance on smaller databases.
- Q: The demo displayed how to search occurances of certain keywords
in a giant single-document text database. But what about other open
(or not open) Emacs buffers? Think of IRC chars, emails, etc.
- A: Set the hyrolo-file-list variaable to include any directory
of files you want to search.
- I mostly referred to non-file buffers.
- Searching through (for example) an IRC buffer is a different command than searching through a directory of files, and this makes sense for the "Rolodex" use case, since typically your database will be a file, and not an in-memory buffer. But you can create a hyperlink button that triggers an ordinary "isearch"-like command the same way you would execute other Emacs commands.
- I mostly referred to non-file buffers.
- A: Set the hyrolo-file-list variaable to include any directory
of files you want to search.
- Q: if I may ask, why Hyperbole/HyRolo over Org-Roam? (I don't use either, just curious)
- rswgnu: HyRolo and Hyperbole require no other software beyond code builtin to Emacs. For example, when I first built Org-Roam, it did not work properly for me and I had to modify the build process to get it set up. With Hyperbole, you install one package and you can start working.
- A: @lounge-060 I found Hyperbole to be a more light-weight option over Org-Roam.
- Q: did i misunderstand, that each time he's hitting a button he's going to a temporary buffer which is a search result?
- A: yes, the button executes a search, so the cursor jumps to the search result buffer, but you can jump to other links within the same search result buffer.
- interesting, but i asked if a link can go directly to the source file, not a search buffer. i'm thinking like org's follow link, which isn't always accurate as i'd like.
- A: yes, you could do that. the Hyperbole link syntax does not have to execute a search, you can link directly to a file.
- interesting, but i asked if a link can go directly to the source file, not a search buffer. i'm thinking like org's follow link, which isn't always accurate as i'd like.
- A: yes, the button executes a search, so the cursor jumps to the search result buffer, but you can jump to other links within the same search result buffer.
- Q: can the hyperlink goto the ORG file buffer at a specific location?
- Q: Thanks for the links. Can you recommend resources for incremental peg too?
- Q: wonder how that compares to plain org-mode, with links and in particular "elisp" links to built-in org-agenda functions, or org-ql (any of alphapapa's packages really)?
- One relevant distinction is that Hyperbole provides "alternative" action for a link. You may not just follow it, but do other things. Org mode does not have that
- custom link types are quite extensible though, and with the "elisp" type it's possible to call into many things without such customization. I'll have to try Hyperbole though.
- hyperbole looks like it can use code, has some assumption of data types, etc
- custom link types are quite extensible though, and with the "elisp" type it's possible to call into many things without such customization. I'll have to try Hyperbole though.
- A: Yeah, hyperbole is a very general solution for establishing connections between various pieces of information. Hyperbole is a global minor mode so it works everywhere.
- One relevant distinction is that Hyperbole provides "alternative" action for a link. You may not just follow it, but do other things. Org mode does not have that
- Q: Why do you have only one file?
- A: it is just easier for me to keep all the realted information in a single file. I could split it into several files in a directory, but I don't see any benefit to doing that. You can point the search function to the directory, and it will search all of the files there.
- i honestly find the idea of tons of little files to be a problem. why not have many headings in a file by primary category
- HyRolo does use single files for its databases. Ramin is just migrating from keeping a separate Org file per note.
- Q: One thing that stopped me from using Hyperbole is that is does not load for me Reporting bug is still in my todo list
- A: curious. If you load, can you run M-x action-key and get it to work? If so, it probably works but is blocked by your key bindings.
- another obvious issue I faced is M-RET is already used by Org extensively
- I had to compromise on marks by setting leader keybinding C-SPC C-SPC to hyperbole action instead
- Q: rswgnu perhaps already asked before, but M-RET (default hyperbole action key) conflicts with org-mode use. For now I've resorted to using C-SPC C-SPC (with leader package) but is there another better alternative generally preferred? Perhaps one that does not conflict with a major feature like marks?
- Q: what would you recommend with emphasis on "beginner level" when starting with org-mode and planning to create the "2nd brain" approach: org-roam or hyberbole?
- Q: if you have a blog somewhere, I'll be very interested to read more. Your style of explaining and demo-ing things is quite nice
- A: My blog is https://tilde.town/~ramin_hal9001
- Q: what advantage do you see in using hyperbole?
- A: The big advantage for me is the "explicit links" feature, it lets me create a database of links that work universally. For example, you can change the link in the flat file database, and it updates in all of your files. If you and I shared a Hyperbole link file, I could write a link
<(like this)>
right here in the chat buffer and you could use it from within the Emacs chat client ERC.
- A: The big advantage for me is the "explicit links" feature, it lets me create a database of links that work universally. For example, you can change the link in the flat file database, and it updates in all of your files. If you and I shared a Hyperbole link file, I could write a link
Other discussions from IRC
- Feedback
- I like this method of the talk slides being kinda transparent so you can see the speaker behind them.
- This looks very interesting tbf
- Its cool to see how many different note taking packages there are in Emacs
- Very nice talk-- and very understandable for me as a beginner who had never heard of hyperbole and did not understand the use-case. I also have not heard or read of a Zettelkasten, so this was even more useful.
- This talk has already given enough ideas on making some stuff dynamic
- There is a very good chance I'll keep coming back to this talk and its transcript over the next year, just to see how I can improve my presonal workflow more by integrating Hyperbole. Right now, I just use hyperbole to more conveniently (and more importantly, with same keybinding everywhere) open links across Emacs.
- Great talk Rami n, thank you!
- Hyperbole
- Nice-- I needed this talk yesterday having not been familiar with hyperbole and use cases.
- i've been waiting to see a hyperbole use case, so i'm watching =]
- (Hopefully I can finally grok what this Hyperbole thing is about and how it contrasts with Org/Org-mode and such)
- sounds very vanilla...which I like
- Hyperbole sounds like something I definitely should get into, but I havent looked into it
- finally something that helped me grok hyperbole ;]
- Seeing an application thereof, as opposed to an exposition of its capabilities in the abstract (though quite interesting too, thanks rswgnu!), has given me a slightly better understanding, thanks!
- hyperbole has been something i've struggled to understand from the docs and examples. i think i've finally started to get that it's a text hyperlink with potential code embedded.
- ty for the explaination, like i said, this has helped me refine my impression of hyperbole further.
- I'm quite looking forward to more integration between org and hyperbole
- Thanks ramin_hal9001, I'm further on my way to enlightenment about Hyperbole that I was that's for sure!
- Watching Hyperbole videos like this, not understanding it completely: to me, Hyperbole doesn't have much advantage if you're happy with (bi-directional) Org mode links (as demoed in 15min). However, I do think that Hyperbole does have many advantages when you're starting to embrace the idea of "dynamic links" of all sorts. So far, I did not get creative enough to start with Hyperbole for that
- rswgnu : If I may ask, I keep looking for either uses cases or capabilities that Hyperbole could bring to bear beyond what I'm doing with Org/Org-mode (taking in account that its has custom link types and elisp links and such), are there some that would come to mind? I've watched most videos and skimmed the documentation a few times, but I'm still not reaching the aha moment, yet, but I feel one use case could change that.
- It could be interesting to use Hyperbole to auto-detect various links in Emails by matching common text patterns
Transcript
[00:00:00.000] Hello, attendees of EmacsConf 2022! The title of my talk is: "Build a Zettelkasten with the Hyperbole Rolodex." My name is Ramin Honary. I work as a software engineer writing apps for a small machine learning consultancy. I have been using Emacs since roughly 2018 after having switched from a workflow using Vim together with Screen/Tmux for over a decade. Today I'd like to talk a bit about the Hyperbole package for Emacs. Others are presenting talks later today about Hyperbole as well, including some of the the authors and maintainers, so I won't go into too much detail about how Hyperbole works. Instead, I want to present a more concrete use case for Hyperbole, which is how to use it to facilitate the Zettelkasten method. Most Emacs users will probably be more familiar with Org Roam. Org Roam may even be the first thing that comes to mind when you hear the word "Zettelkasten." But personally, I use Hyperbole because I found it easier to get started with using it as an ideas database. All you need to do is install the Hyperbole package (which is available on GNU-ELPA) and then set a few customization options. There is nothing else you really need to do to get started. And also, Hyperbole works nicely with Org Mode. So Hyperbole's built-in functionality can be used as a nice, light-weight alternative to other Emacs Zettelkasten packages. This talk is for people who are curious about getting started with the Zettelkasten method, but are not ready to commit to a more purpose-built solution like Org Roam.
[00:01:41.040] So the thing I'd like people to take away from this presentation is that the Hyperbole Emacs package provides you with a flat-file database called "HyRolo" which you can use to store ideas. Then you can use what Hyperbole calls "buttons" (which are hyperlinks) to execute arbitrary Emacs commands and by inserting links into your database that execute queries against the database itself. These query-action links serve as a means to link ideas together, thus creating a functioning "Zettelkasten." If this doesn't make sense to you, I'll explain what all of this means presently.
[00:02:19.840] So just a quick overview of what "Zettelkasten" is. Note that most of what I say about the Zettelkasten method comes from a guy called Sascha Fast, and his website: zettelkasten.de . So a Zettelkasten is, in brief, a database containing many nodes of interconnected ideas, each idea being a single quantity of knowledge (about a paragraph) and linked to other related ideas.
[00:02:46.320] Also, let me quickly mention that there are actually many tools I use that assist me with the zettelkasten method: Hyperbole for hyperlinks; Embark for general text editing; Org Mode for markup; Dired for managing large sets of files; Consult, Vertico, Orderless, Marginalia; for interactive search through directories and documents; and Magit for revision control, and syncing my database of ideas across a few of my computers. Each of these tools provides some unique functionality, but today I will be focusing mostly on Hyperbole and how it is especially useful for the task of linking information together which is the most important aspect of the Zettelkasten methodology.
[00:03:25.360] And now I'll briefly go over what Hyperbole is. At it's core, Hyperbole is a simple markup language specifically designed to markup hyperlinks. Now, a hyperlink usually is only able to jump to ordinary URLs and file paths. Hyperbole extends the function of a hyperlink to provide a simple human-readable markup for executing Emacs commands (called "button actions") and then, on top of this core functionality, a few mini applications for example "HyRolo" and "Koutline", have been built to make Hyperbole more generally useful as a personal information management tool.
[00:04:03.520] "HyRolo" is the feature that I use as my Zettelkasten, and in particular, the HyRolo search feature in combination with the usual Hyperbole hyperlink markup language. So let me just quote the Hyperbole manual: "Hyperbole includes HyRolo for convenient management of hierarchical, record-oriented information. Most often, this is used for contact management but it can quickly be adapted to most any record-oriented lookup task requiring fast retrieval." So in other words, for example, it can be used to run search queries across the full set of nodes in a set of Org-Mode files. This means we can use an Org-Mode file as a flat-file database in which entries in the database can be linked together. This, in essence, is a what a Zettelkasten is.
[00:04:55.240] HyRolo needs almost no configuration, even if you are using it for the purpose of Zettelkasten, but you should at least make sure you set the location of the database in your Emacs config file, using the Customize system or however you prefer to configure your Emacs. I use "use-package", and on this slide I have here an abridged version of what my "init.el" file looks like for the Hyperbole package. A few relevant environment variables are set: the "hyrolo-file-list" variable selects where to find Rolo database files for the purpose of search. I have it set to just the Zettelkasten flat file database. And I also set "hyrolo-date-format" variable. Each database entry has a time stamp, and I use the time stamp as a unique ID for each entry (that is, each idea node) in the database.
[00:05:44.280] Finally, before I get into the actual demo, let me quickly explain the Hyperbole mini-buffer menu system. Mini-buffer menus in Hyperbole work just like in an ordinary GUI, except you typically enter into the mini-buffer menu with a key binding instead of a mouse click. To open the Hyperbole menu, you use the Hyperbole universal leader key that's C-h h, which by the way, this rebinds the "view-hello-file" command, which is a command that probably most people never use. So all Hyperbole menu key sequences begin with C-h h. Please remember this: as I explain how to do things, please don't worry too much about the key sequences I use to perform certain actions. Really, I am just navigating the Hyperbole mini-buffer menus. It is a very discoverable and fluid user interface.
[00:06:37.600] Anyway, now that we have configured our Rolo database, let's see how we enter new ideas into the database. And I will start with an empty database, then I'll switch over to a more complete database that I prepared for this demo. So... first we type the Hyperbole universal leader key C-h h, and then, you can see the menus down here we type "r" for "Rolo" and "a" for "add". That's C-h h r a to enter a new idea. And this command is available globally so, much like with the "org-capture" feature in Org-Mode, you can run this command at any time, at the very moment you want to enter an idea. First we are prompted for an entry title, and if you were using HyRolo as a contact list, this is where you would enter the person's name. I am using it as a Zettelkasten, so I instead enter a title for my idea. I'll just type in... and as soon as I press enter after this prompt, my Zettelkasten org file is opened, a new entry with the timestamp is created, and the cursor is placed at this entry ready for me to enter the body text of the idea. I'll type that in... Now I save the "idea" file (C-x C-s) and switch back to what I was working on before with the usual C-x 0 (delete-window) command.
[00:08:23.760] Next, I'd like to talk about the HyRolo database search feature, which is very useful. The HyRolo search feature uses only Emacs built-in functions and there is no indexing as with tools like "mlocate" or Org-Roam. So far, I have not had any trouble with efficiency. I don't know if at some point in the future, it will start slowing down. Emacs built-in search functionality is already pretty efficient as it is. It could also be that I am in the habit of storing larger bodies of text in separate files, and not in the flat file database. Anyway, you can search by regex, by string, or by words. I personally find the string search to be the most useful. The difference between word search and string search is that string search provides logical query operators like AND, OR, XOR, and NOT. Once you run a search query, a "HyRolo" buffer is opened with the query's results. And this is a read-only-mode buffer with a few useful single-key action bindings for navigating the list of results which I will now demonstrate.
[00:09:27.120] By the way, I have now switched over to a larger example Rolo database that I have created to demonstrate more of the HyRolo features. The HyRolo search is available in the Hyperbole mini-buffer menu so it is always available to you. Start with the Hyperbole universal leader key C-h h then "r" for Rolo and "s" for search. That is C-h h r s. Now we are prompted for a search string: I type in "Alice Abelton", and when I press enter, the search results pop up and the number of results is printed in the mini-buffer.
[00:10:06.960] We could also enter a search expression similar to a Lisp S-expression with logical operators like AND or NOT, but you would not need to quote the search terms. So, for example (C-h h r s), I could write "(and university character)" within parentheses and this would find entries that only contain both of the words "university" and "character". For the most part, I only really ever use the ordinary string search without logical operators. So as you can see, a search result buffer
[00:10:44.760] called "HyRolo" has popped up with all of the matching entries. And the search results buffer is a read-only buffer with several useful navigation key bindings: I can press "o" to switch to "overview" mode, which shows all of the headings, but no content. This would include subheadings with like 2 stars in front of it or 3 stars I can press "a" to switch to "show all mode" which shows all of the content under each heading. If I know I am looking for a keyword in a top-level heading, I can press "t" to switch to the "top-level" view mode which shows only the top-level headings. As is always the case with the Emacs default key bindings, "n" and "p" move the cursor down and up lines, so I can navigate the cursor downward to an entry that looks interesting. I can press "s" to show the content of that particular entry. I can press "h" to hide the entry again. And I can press "e" or M-RET on the entry heading to "edit" that heading (that entry), which will open the Org-Mode file, that is, the Zettelkasten database file with the cursor at this particular entry.
[00:12:01.760] Be warned that editing an entry creates a new timestamp, which I do not need, and there is currently no way to avoid this behavior. I work around this by simply using the undo command which removes the unwanted timestamp. And so that is how I use the HyRolo search functionality.
[00:12:25.560] Now... since the most important aspect of Zettelkasten is linking ideas in the database, how do we actually make this work in HyRolo? So this is the secret sauce of Hyperbole, and the key take-away for this presentation (as I said earlier). Hyperbole provides markup syntax for executing arbitrary Emacs commands so you can link HyRolo entries together using the HyRolo search function.
[00:12:56.040] Let me demonstrate this now. I am back in my example HyRolo database, and if you take a closer look you can see some of the hyperlinks that I already created with the angle-round bracket syntax. Now with the cursor inside of these brackets, I can press M-RET to "click" on this link. As you can see, the search query corresponding to this hyperlink here has executed and popped up the "HyRolo" search results buffer. There is only one linked entry, but the list of ideas that are produced by the search query in this buffer here are the list of all of the other ideas that are related to this hyperlink that we just clicked on here. (Let me get rid of the other window...) Now from within this "HyRolo" buffer, I can navigate to another hyperlink... and clicking on that updates the "HyRolo" buffer with new results again. I can just keep navigating through all the Zettelkasten entries in this way. And so this is it. This is my simple but effective Zettelkasten, constructed entirely with the functionality already built-in to Hyperbole.
[00:14:26.800] In the remaining time, I'd like to talk about how Hyperbole hyperlinks work, because it's slightly different from how hyperlinks work in Org Mode or with the Emacs clickable text properties. The easiest way to create a hyperlink button that runs an Emacs command is simply to type the Emacs command as an S-expression, but with angle brackets instead of parentheses. If you were looking closely, you probably already saw a hyperlink of this form, an angle-bracketed Emacs command. This hyperlink simply calls the "hyrolo-fgrep" function with this string argument. and so clicking on this button is equivalent to running a HyRolo search with the C-h h r s key sequence. As you can see, clicking on it produced the search results for entries associated with that string query.
[00:15:35.080] It's also possible to label an action with a so-called "implicit link", and that's this angle-and-square bracketed notation. If I click on this button, it will activate this action to the right of the colon separator, and there are the relevant search results from that string query.
[00:16:04.680] Finally, there are "explicit links", which I find to be especially useful for the Zettelkasten method. I've already shown an example of using an explicit link before. What makes explicit links so useful is, firstly, that the button works with just the label alone. There is no need to write an S-expression or anything. You can write the link label inline with the body text of the idea. (For example, like this.) Explicit links are identified by their label, so they are especially good for the names of people and places. By the way, this Zettelkasten database is for a fictional story I started writing for the purpose of demonstrating HyRolo in this presentation, and I had so much fun writing it that I may actually continue developing this story. Anyway, let's create a new explicit link and a new idea entry for a character in the story. So suppose I want to create a new idea node entry for this fictional character here, and I'll also want to link this entry to that node. Since hyperlinks are just string search, we don't actually need to have an entry in the database for this character. The worst that can happen is that the hyperlink executes a search that returns no results. So it's OK to create the hyperlink before we have an actual entry for this person. (I'll just M-w copy the name.) Now I use the universal Hyperbole leader key C-h h, and then "e" for "explicit links" and "c" for "create". That's C-h h e c. We are prompted for an entry label but it defaults to the text highlighted by the region, so I just press enter. Now it prompts for a button type, so I select "hyrolo-fgrep" (and there's Orderless helping me go faster), and since "hyrolo-fgrep" requires a string argument for the search query, I am prompted for the query string. I'll type in "character:", (yank "Kerri Katz's" name) and there we are, the link has been created, and (let me just get rid of the # character) I can try it out.
[00:18:32.720] There's no search results. That's fine. We haven't created an idea entry yet for this character now. So let's go ahead and do that now. If we remember how to create a new idea, it's C-h h r a, and then I type "character:" and then yank the name again. Now a new node has been created, and I can start describing this character. Notice that I like to precede my characters with the keyword "character:" colon. This technique helps me to create hyperlinks using more descriptive search queries that return fewer but more useful search results.
[00:19:19.880] And finally, I can create an explicit link from this character back to the other character (her boyfriend). I just type in "<(Bertrand Becket)>", and this explicit link has already been created so I don't need to create it again. It just works. Hyperbole identifies buttons by their label, so as long as an explicit link button with that label has been created before, I just can type in the button with markup by hand, and then I can just use it. Now I am back to the search results for the boyfriend character. I hope you can see how minimal but useful is this particular Zettelkasten technique I have that uses this "HyRolo".
[00:20:10.560] I should also make clear that Hyperbole explicit links are encoded in a separate file in the same directory as the Zettelkasten flat-file database. (So, let's go back to that and C-x C-f ".hypb"). You should not edit this file by hand, but it is human readable, so it works well with Git and other revision control systems. Whenever an explicit link is activated, it consults this file and runs the associated action, which, in the Zettelkasten use case, will always be to run a HyRolo search query. The advantage of keeping a separate table of links is that you can edit the link action (that is, the search query) in just one place, and the updated button action works everywhere without having to change any other files.
[00:21:12.480] So, that is all for today. Thank you so much for listening to my talk. I'll be available for questions for the next 20 minutes or so. If there are any questions that I cannot answer, you will have a chance to ask the author of Hyperbole himself, Bob Weiner, later today after his presentation. Thanks for your attention!
Captioner: ramin
Questions or comments? Please e-mail ramin.honary@gmail.com