Seam is a personal wiki system based on Org mode.
It’s aimed at those who wish to keep a large collection of notes — some publicly shared and others private — and to export a subset of them to HTML in a no-nonsense way.
Read on for a brief overview, or follow the tutorial.
Notes
A Seam note is an Org file with a level 1 headline for its title. Note files are automatically renamed to match their title.
All notes are kept in a single directory: seam-note-directory
. They
are filed into subdirectories according to their type. (Deeper
nesting is not currently supported.)
One key use of types is to exclude certain notes from export.
In the default setup, all notes are created private
, and can be made
public
with seam-set-note-type
. This can be customized via
seam-note-types
and seam-default-note-type
.
Exporting
Nothing is exported by default. Use seam-export-alist
to set up
exports.
Here is an example with two different export setups (using a custom
draft
note type):
(setq seam-export-alist
'(("~/seam/html/preview"
:types ("public" "draft")
:root-path "/preview/")
("~/seam/html/live"
:types ("public")
:root-path "/")))
All relevant notes are exported automatically when saving. You can
run seam-export-all-notes
if you ever need to manually re-export
existing notes.
Linking
Notes are linked together by name, using the seam:
link scheme.
Whenever a note is renamed, links are fixed up automatically. Links
to unexported notes are not rendered as links — only the description
will be visible.
If you wish to have a backlinks (or “incoming links”) section on your page, it’s easy to do so with templating.
Templating
Currently Seam uses a very basic HTML templating system. It specifies
a handful of variables that you can reference like {{this}}
within
your templates.
See seam-export-alist
for the various ways of specifying a template,
and seam-export-default-template-string
for the variables that are
available.
Title formatting
By default, Seam formats titles for completion and buffer names using
seam-format-title-default
. However, you can set seam-format-title
to a custom function. Here is an example of a formatter using icons:
(defun my-seam-title-formatter (title type)
(format "%s %s"
(cdr (assoc type '(("private" . "🔒")
("public" . "🌐"))))
title))
Other options
All options are documented under M-x customize-group seam
.
Check it out
git clone https://git.plexwave.org/seam
There is a GitHub mirror if you prefer.
Seam has no dependencies besides Emacs itself and POSIX-compatible
find
and grep
. Requires Emacs 29 or greater, with Org 9.6 or
greater.
Incoming
✏ Edited