⚠️ 🌱 This project is newly sprouted! So please consider it a beta: Remember to backup all data and please use version control.
CLI tooling to edit [[wikirefs]]
and semantic trees in a collection of markdown files. Commands will feel familiar to typical cli commands to inspect files and directories.
🧑🌾 🚰 ✂️ Tend your 🎋 WikiBonsai digital garden with minimalist tooling.
Install with npm:
npm install -g tendr-cli
Example:
$ tendr stat <filename>
Manual:
usage: tendr <command>
cli tools for markdown-based digital gardening.
Commands:
tendr lint lint garden files.
tendr tree print full knowledge bonsai.
tendr status <filename> show status of file relationships.
[aliases: stat]
tendr rename <old-fname> <new-fname> rename a file and all of its references
. [aliases: rn]
tendr retypedoc <old-type> <new-type> rename document type and update all occ
urrences. [aliases: rtdoc, rtd]
tendr retyperef <old-type> <new-type> rename reference type and all its occur
rences. [aliases: rtref, rtr]
tendr mkdntowiki [glob] convert from "[markdown](style)" to "[[
wiki-style]]" internal links.
[aliases: mtow]
tendr wikitomkdn [glob] convert from "[[wiki-style]]" to "[mark
down](style)" internal links.
[aliases: wtom]
tendr camltoyaml [glob] convert from "caml" to "yaml" style att
ributes. [aliases: ctoy]
tendr yamltocaml [glob] convert from "yaml" to "caml" style att
ributes. [aliases: ytoc]
Options:
--version Show version number [boolean]
--help Show help [boolean]
Note:
- Commands expect markdown files using the
.md
extension. - Commands that perform anything other than read operations will display a confirmation prompt before executing. This may typically be skipped with the force flag (
-f
).
Example:
$ tendr lint
Sample output:
// success
✅ all clean
// warnings
⚠️ lint warnings:
semtree.lint(): orphan trunk files found:
- i.orphan-trunk-1
- i.orphan-trunk-2
// errors
❌ lint errors:
semtree.lint(): duplicate entity names found:
- "duplicate-filename"
- File "i.bonsai" Line 1
- File "i.bonsai" Line 4
Manual:
tendr lint
lint garden files.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-c, --config relative path to config file, including filename; defaults to "
./config.toml" [string] [default: "./config.toml"]
-d, --doctype relative path to doctype file, including filename; defaults to
"t.doc.toml" [string] [default: "./t.doc.toml"]
-r, --root filename for root of tree [string]
-g, --glob glob to index files [string]
List garden information. Runs on all files in current directory and all subdirectories.
Example:
$ tendr list
Sample output:
todo
Manual:
todo
Example:
$ tendr tree
Sample output:
bk.how-to-read-a-book
├── demanding-reader
| └── active-reading
| ├── reading-comprehension
| └── the-art-of-reading
└── 4-levels-of-reading
├── elementary-reading
├── inspectional-reading
├── analytical-reading
└── syntopical-reading
Manual:
tendr tree
print full knowledge bonsai/semantic tree
Options:
--version Show version number [boolean]
--help Show help [boolean]
-c, --config relative path to config file, including filename; defaults to "
./config.toml" [string] [default: "./config.toml"]
-d, --doctype relative path to doctype file, including filename; defaults to
"t.doc.toml" [string] [default: "./t.doc.toml"]
-r, --root filename for root of tree [string]
-g, --glob glob to index files [string]
Example:
$ tendr status <filename>
Sample output:
┌────────────────────────────────────┐
│ 📄 RELs for... │
├──────┬─────────┬─────────┬─────────┤
│ FILE │ fname-a │ DOCTYPE │ default │
└──────┴─────────┴─────────┴─────────┘
┌───────────────────────┐
│ 🌳 FAM │
├───────────┬───────────┤
│ ANCESTORS │ i.bonsai │
├───────────┼───────────┤
│ CHILDREN │ • fname-b │
│ │ • fname-c │
│ │ • fname-d │
│ │ • fname-e │
└───────────┴───────────┘
┌─────────────────────────────────────────────────────┐
│ 🕸️ REF │
├───────┬──────────────────────┬──────────────────────┤
│ │ BACK │ FORE │
├───────┼──────────────────────┼──────────────────────┤
│ ATTR │ ◦ attrtype │ ◦ reftype │
│ │ • fname-b │ • fname-b │
│ │ │ ◦ attrtype │
│ │ │ • fname-c │
├───────┼──────────────────────┼──────────────────────┤
│ LINK │ • fname-b (attrtype) │ • fname-d (linktype) │
│ │ • fname-c (linktype) │ • fname-e │
│ │ • fname-d │ • no-doc │
│ │ • i.bonsai │ │
├───────┼──────────────────────┼──────────────────────┤
│ EMBED │ • fname-f │ -- │
└───────┴──────────────────────┴──────────────────────┘
Manual:
tendr status <filename>
show status of file relationships
Options:
--version Show version number [boolean]
--help Show help [boolean]
-k, --kind kind of relationships to list
(kinds: rel, fam, ancestor, child
, ref, attr, link, embed, fore, foreref, foreattr, forelink, fo
reembed, back, backref, backattr, backlink, backembed; default
is "rel") [string] [default: "rel"]
Example:
$ tendr find <fname>
Sample output:
Single file:
/path/to/notes/fname.md
Multiple files:
/path/to/notes/fname.md
/path/to/notes/folder/fname.md
Manual:
tendr find <fname>
show full path of markdown file(s) with the given filename.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-r, --regex usage: find <regex>; use regex pattern instead of string -- thi
s will find all filenames containing matches to the regex patte
rn. (use quotes around regex if the terminal is preemptively ex
ecuting it) [boolean] [default: false]
Example:
$ tendr rename <old-fname> <new-fname>
Sample Output:
$ tendr rename '4-levels-of-reading' 'four-levels-of-reading'
are you sure you want to rename "4-levels-of-reading" to "four-levels-of-reading"? [y/n]
y
UPDATED FILENAMES:
4-levels-of-reading -> four-levels-of-reading
UPDATED FILE CONTENT:
analytical-reading
demanding-reading
elementary-reading
inspectional-reading
syntopical-reading
Manual:
tendr rename <old-fname> <new-fname>
rename a file and all of its references.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-r, --regex usage: rename <regex> <replace-string>; use regex replacement i
nstead of string replacement -- this will rename all filenames
containing matches to the regex pattern; the regex argument wil
l be replaced by the string argument. (use quotes around regex
if the terminal is preemptively executing it)
[boolean] [default: false]
-f, --force skip verification prompt and perform operation
[boolean] [default: false]
note: keep in mind this will not retype caml primitive properties! this is for wikirefs only.
Example:
$ tendr retyperef <old-type> <new-type>
Manual:
tendr retyperef <old-type> <new-type>
rename reference type and all its occurrences.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-k, --kind kind of entity to rename (kinds: "reftype", "attrtype", "linkty
pe"; default is "reftype") [string] [default: "reftype"]
Example:
$ tendr mkdntowiki
Manual:
tendr mkdntowiki [glob]
convert from "[markdown](style)" to "[[wiki-style]]" internal links.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-F, --format how to parse markdown links -- "filename", "relative" urls, or
"absolute" urls [string] [default: "filename"]
-k, --kind kind of references to convert
(kinds: rel, fam, ancestor, child
, ref, attr, link, embed, fore, foreref, foreattr, forelink, fo
reembed, back, backref, backattr, backlink, backembed; default
is "rel") [string] [default: "ref"]
Example:
$ tendr wikitomkdn
Manual:
tendr wikitomkdn [glob]
convert from "[[wiki-style]]" to "[markdown](style)" internal links.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-F, --format how to format the resulting markdown links -- "filename", "rela
tive" urls, or "absolute" urls [string] [default: "filename"]
-k, --kind kind of references to convert
(kinds: rel, fam, ancestor, child
, ref, attr, link, embed, fore, foreref, foreattr, forelink, fo
reembed, back, backref, backattr, backlink, backembed; default
is "rel") [string] [default: "ref"]
Example:
$ tendr camltoyaml [glob]
Manual:
tendr camltoyaml [glob]
convert from "caml" to "yaml" style attributes.
Options:
--version Show version number [boolean]
--help Show help [boolean]
Example:
$ tendr yamltocaml [glob]
Manual:
tendr yamltocaml [glob]
convert from "yaml" to "caml" style attributes.
Options:
--version Show version number [boolean]
--help Show help [boolean]
-f, --format how to format caml output (kinds: "none", "pretty", or "pad
"; default is "none") [string] [default: "pretty"]
-l, --list-format how to format caml output lists (kinds: "mkdn" or "comma";
default is "mkdn") [string] [default: "mkdn"]
-p, --no-prefix do not use colon prefix in caml output
[boolean] [default: true]