Marty Oehme
fdcb0f2a93
Opens zettel by linked value, most often a direct path link, but will also look through the root dir to find a(n exactly) matching basename to open. If nothing is found in the root dir will open a new file to write with the corresponding name. Careful, if the reference is a full path definition, and the file does not exist, it will still open the corresponding file at the correct location but when attempting to save will generally complain if parts of the path are missing. They have to be created manually or in some other place, this is outside the scope of this plugin.
95 lines
4.3 KiB
Markdown
95 lines
4.3 KiB
Markdown
# Zettelkasten.nvim
|
|
|
|
To develop / debug:
|
|
|
|
start neovim with `nvim --cmd "set rtp+=$(pwd)" .` to automatically load the files in project dir as if they were on path
|
|
|
|
next up:
|
|
[ ] fix link following:
|
|
* [x] empty space (e.g. in link text, or link itself) disrupts link regex search
|
|
* [x] line-end following breaks if cursor is in the MIDDLE of the link
|
|
* [x] extract anchor from link/string (anchor.lua)
|
|
* [x] probably stop hardcoding anchor regex, make an option
|
|
* [ ] implement custom anchor creation function to go with custom regex
|
|
* [ ] opening zettel should use generated link table for full filename anchor search
|
|
* [x] need a default zettel directory to look in
|
|
* [ ] link following order should be:
|
|
* [x] look up & follow anchor
|
|
* [ ] look for filename in current dir (or relative/absolute link loc)
|
|
* [ ] implement fallback to filename in any of zettel subdirs
|
|
|
|
## TODO: needed functionality
|
|
|
|
* [ ] note creation (new anchor)
|
|
* [x] create anchor
|
|
* [ ] *unique* anchor creation
|
|
* [x] create link (md / wiki)
|
|
* [ ] note listing (anchors / titles, no anchor)
|
|
* [ ] list anchors
|
|
* [ ] list filenames
|
|
* [ ] link following (to existing anchor)
|
|
* [ ] fallback to filename if anchor invalid / not found
|
|
* [ ] link creation (to existing note)
|
|
* [ ] list existing
|
|
* [ ] create link (md / wiki)
|
|
* [ ] link switching (point to another existing note)
|
|
* [ ] note search (title / full-text)
|
|
* [ ] jump to zettel (open existing anchor)
|
|
* [ ] select by anchor
|
|
* [ ] select by (fuzzy) title match
|
|
* [ ] options
|
|
* [x] zettel anchor separator
|
|
* [x] zettel extension
|
|
* [x] link style (wiki/markdown)
|
|
* [ ] custom link style?
|
|
* [x] link detection/following (under word, next on line)
|
|
* [ ] recursive dir lookup for zettel
|
|
* [ ] zettel anchor regex
|
|
|
|
## TODO: nice-to-haves
|
|
|
|
* [ ] refactor parsers (md/wiki) to be tables of functions/regex in options, so e.g. valid link detection can call `options.parser.isValidLink(link)` or transformation `options.parser.styleLink(anchor, text)`
|
|
* [ ] use unified parser model (e.g. containing `turn-to-link()`, `parse-link()`) function
|
|
* [ ] enable custom parser supply
|
|
* [ ] completion engine (e.g. for `completion-nvim`, look in completion_buffers/completion-tags for reference)
|
|
* [ ] zettel caching for big directories
|
|
* [ ] backlinks (via rg for filename anchor?)
|
|
* [ ] keep tree of notes cached?
|
|
* [ ] zettel maintenance
|
|
* [ ] fix malformed anchors
|
|
* [ ] fix-link function which looks for most similar file to be found and renames file/link automatically (after confirmation)
|
|
* [ ] add missing anchors
|
|
* [ ] 'rename' anchor (goes against stability?)
|
|
* [ ] recognize duplicate anchors (in directory, when listing, etc)
|
|
* [ ] provide option to rename and automatically change backlinks
|
|
* [ ] zettel 'lens' (preview first headline + content of linked zettel through floating window etc, on keypress)
|
|
* [ ] support *both* md-style and wiki-style links at the same time
|
|
* [ ] file/directory exception list for gathering files, which will be ignored
|
|
* [ ] 'strict' mode *only* matching and following valid anchor links
|
|
|
|
## TODO: maintenance
|
|
|
|
* [ ] remove hard-coding of option vimnames in tests, now that we can dynamically change this through a single table
|
|
|
|
* anchor creation
|
|
* *must* be unique
|
|
* default: 10 digits, usually current date+time (YYMMDDHHmm)
|
|
* but, if multiple links created within one minute (or other circumstances), this would duplicate
|
|
* thus, duplicate-check before creating a new anchor
|
|
* if duplicated, generate first *non*-duplicated link (recursive?)
|
|
* try to move *backwards* through minutes not forward
|
|
* i.e. if 2030101200 exists move to 2030101159, 2030101158, ...
|
|
* if moving backwards, we do not take away id space from *future* note creation
|
|
* if moving forwards, every zettel created within a minute would delay next zettel creation *another* minute
|
|
* to decide: should zettel creation create a zettel in current working dir or at zettel root dir? or set by option?
|
|
|
|
* [ ] (CODE) switch -- comments to --- doc comments for function descriptions etc
|
|
|
|
## Options
|
|
|
|
atm:
|
|
```
|
|
anchor_separator = vim.g["zettel_anchor_separator"] or vim.b["zettel_anchor_separator"] or "_",
|
|
zettel_extension = vim.g["zettel_extension"] or vim.b["zettel_extension"] or ".md",
|
|
zettel_root = vim.g["zettel_root"] or vim.b["zettel_root"] or "~/documents/notes",
|
|
```
|