WIP: org-exobrain. A knowledge management system inspired by zettlekasten, wikis, and all that’s great about org-mode.
Coming soon…
If you installed from MELPA, you’re done. Just run one of the commands below.
Install these required packages:
org-super-links
org-ql
(coming soon, can be skpped for now)Other
I believe these are part of current emacs versions: org, org-element, org-id, cl, cl-lib
Then put this file in your load-path, and put this in your init file:
(require 'org-xob.el)
You need to set org-xob-dir
, default value is “~/xob”. xob only looks at files in this directory.
There are 4 file types used by xob:
- xob general knowledge base (KB) files. This is intended for long term material.
- xob agenda files which are added to
org-agenda-files
. All ‘activity’ based content goes in these files and the files are treated as normal org files. - xob log files. These are similar to agenda files. All day node entries are added here in a date tree. When editing a xob node from a KB file, temporal based material (scheduling, clocking, etc) is sent instead to its corresponding entry in the day node. Only the current log file is added to
org-agenda-files
. - xob archive files. Any material sent here is ignored by the xob system and not included in agenda files.
Files are recognized by property headings loocated in the top 1K of the file:
#+PROPERTY: xob t
lets xob know to use this file
#+PROPERTY: xob-current-file t
Current files are those where new material is sent:
#+PROPERTY: xob-log t
identifies a xob log file
#+PROPERTY: xob-agenda t
identifies a xob agenda file
#+PROPERTY: xob-archive t
identifies a xob archive file
If no current file is found for either of the file types, then a new numbered file is created and set as current.
(Coming soon) Likewise, if a file gets too big (based on org-xob-max-KB-filesize
), then a new file of that type is created. Default file size value is 2^19 or 524,288 bytes.
org-xob
fully relies on org-id
and UUID
formatted IDs. Please make sure that:
org-id-link-to-org-use-id
is set to either: t
, create-if-interactive
, or create-if-interactive-and-no-custom-id
org-id-method
is set to uuid
The central idea is presentation management where xob buffers are not associated with files but are instead treated like windows; they are a place where material is displayed and possibly edited. As such, all content is copied from the original location and pasted into a xob buffer. For current release v0.5, to edit a xob node (note, entry) an indirect buffer is created and narrowed to that entry. Next release will likely also copy the content and then provide syncing capabilities. This approach allows for great flexibility in interacting with your org files. Unlike zettlekasten approaches, there is no restriction on using a tree structure, you are free to have org headings in a node, vice-versa, and even nest nodes. Contextual material from both backlinks and forlinks are presented in a dedicated context buffer under ‘source’ headings. ie all backlinks go under the node backlinks heading, and similarly for the forlinks. You can alter what is displayed, simply the headings, their first paragraph, top section, subheadings, or the full content of that node. Future release will allow for associated material from other sources, such as org-ql searches, or internet content.
All commands will start org-xob if it has not started already. General commands are applicable anywhere, Edit buffer commands are relevant in the edit buffer, and Context buffer commands are relevant in that buffer.
Opening a current or new node via org-xob-get-node
will open it in an edit buffer. All contextual material is sent to the context buffer. The edit buffer is a clone that is narrowed to the node entry. The context buffer is not read-only so that the headlines can be re-ordered to preference. Any additional content you enter will be ignored, except demoting source headings will screw up insertion of sub-tree content (will be fixed soon).
If the xob system is running, a timer will open a new log day entry at 12:00am. Opening any node for editing will add an entry to the log. (Coming soon): clocking, scheduling, and other org temporal material will apply to the log entry of a node, not the node itself. This applies to knowledge base nodes, not to nodes that are in designated agenda files.
General Commands | |
---|---|
org-xob-get-node | Open or create node for editing |
org-xob-insert-link | Insert a xob link (to a node) at point |
org-xob-open-day | Go to the current day log entry |
org-xob-todo-at-point | Create a todo item, insert xob link to here |
org-xob-remove-node | Remove entry from system, but do not delete contents |
Node Conversion | |
org-xob-heading-to-node | Convert regular org entry to a xob node |
org-xob-log-done | Convert a todo entry into a log entry |
org-xob-add-node-labels | Add labels in property drawer (not links) |
org-xob-change-node-type | Change node type in property drawer |
System Management | |
org-xob-start | Required: Start the xob system |
org-xob-stop | Stopping saves state and cleans up |
org-xob-rebuild | Go through all xob files and rebuild xob data structures |
Edit Buffer | |
org-xob-toggle-sideline | Toggle the sideline window on/off |
org-xob-show-backlinks | Show node backlinks in context buffer |
org-xob-show-forlinks | Show node forlinks in context buffer |
org-xob-ql-search | (N/A) show ql search results in context buffer |
org-xob-refresh-context | Refresh all the context sources in context buffer |
Context Buffer | |
org-xob-clear-heading | Clear heading contents |
org-xob-to-summary | Show first paragraph |
org-xob-to-section | Show section before first subheading |
org-xob-to-node-tree | Show only tree structure of source item |
org-xob-to-full-node | Show the complete source item |
org-xob-refresh-context | Refresh context item at point |
- (Coming soon) You can customize settings in the
package-name
group.
Initial release.
This package would not have been possible without the following packages:
- org, org-id, org-element
- org-super-links
- org-ql
Bug reports, feature requests, suggestions — I’ll try to keep up, please be patient, thanks.
GPLv3