diff --git a/cmd/docgen/docgen.go b/cmd/docgen/docgen.go
index 9008cca8..11f41dbf 100644
--- a/cmd/docgen/docgen.go
+++ b/cmd/docgen/docgen.go
@@ -437,7 +437,7 @@ func main() {
f, _ := os.Create(docPath)
f.WriteString(fmt.Sprintf(header, modOrIface, modname, modu.ShortDescription))
typeTag, _ := regexp.Compile(`@\w+`)
- modDescription := typeTag.ReplaceAllStringFunc(strings.Replace(modu.Description, "<", `\<`, -1), func(typ string) string {
+ modDescription := typeTag.ReplaceAllStringFunc(strings.Replace(strings.Replace(modu.Description, "<", `\<`, -1), "{{\\<", "{{<", -1), func(typ string) string {
typName := typ[1:]
typLookup := typeTable[strings.ToLower(typName)]
ifaces := typLookup[0] + "." + typLookup[1] + "/"
diff --git a/docs/api/bait.md b/docs/api/bait.md
index 5929bbda..c464563d 100644
--- a/docs/api/bait.md
+++ b/docs/api/bait.md
@@ -8,17 +8,37 @@ menu:
---
## Introduction
-Bait is the event emitter for Hilbish. Why name it bait? Why not.
-It throws hooks that you can catch. This is what you will use if
-you want to listen in on hooks to know when certain things have
-happened, like when you've changed directory, a command has failed,
-etc. To find all available hooks thrown by Hilbish, see doc hooks.
+
+Bait is the event emitter for Hilbish. Much like Node.js and
+its `events` system, many actions in Hilbish emit events.
+Unlike Node.js, Hilbish events are global. So make sure to
+pick a unique name!
+
+Usage of the Bait module consists of userstanding
+event-driven architecture, but it's pretty simple:
+If you want to act on a certain event, you can `catch` it.
+You can act on events via callback functions.
+
+Examples of this are in the Hilbish default config!
+Consider this part of it:
+```
+bait.catch('command.exit', function(code)
+ running = false
+ doPrompt(code ~= 0)
+ doNotifyPrompt()
+end)
+```
+
+What this does is, whenever the `command.exit` event is thrown,
+this function will set the user prompt.
## Functions
### bait.catch(name, cb)
Catches a hook with `name`. Runs the `cb` when it is thrown
#### Parameters
-This function has no parameters.
+`string` **`name`**
+ummm
+
### bait.catchOnce(name, cb)
Same as catch, but only runs the `cb` once and then removes the hook
diff --git a/golibs/bait/bait.go b/golibs/bait/bait.go
index 4ba2a37a..269ea1ec 100644
--- a/golibs/bait/bait.go
+++ b/golibs/bait/bait.go
@@ -1,9 +1,28 @@
// the event emitter
-// Bait is the event emitter for Hilbish. Why name it bait? Why not.
-// It throws hooks that you can catch. This is what you will use if
-// you want to listen in on hooks to know when certain things have
-// happened, like when you've changed directory, a command has failed,
-// etc. To find all available hooks thrown by Hilbish, see doc hooks.
+/*
+Bait is the event emitter for Hilbish. Much like Node.js and
+its `events` system, many actions in Hilbish emit events.
+Unlike Node.js, Hilbish events are global. So make sure to
+pick a unique name!
+
+Usage of the Bait module consists of userstanding
+event-driven architecture, but it's pretty simple:
+If you want to act on a certain event, you can `catch` it.
+You can act on events via callback functions.
+
+Examples of this are in the Hilbish default config!
+Consider this part of it:
+```
+bait.catch('command.exit', function(code)
+ running = false
+ doPrompt(code ~= 0)
+ doNotifyPrompt()
+end)
+```
+
+What this does is, whenever the `command.exit` event is thrown,
+this function will set the user prompt.
+*/
package bait
import (
@@ -253,8 +272,8 @@ func (b *Bait) bthrow(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
// catch(name, cb)
// Catches a hook with `name`. Runs the `cb` when it is thrown
-// --- @param name string
-// --- @param cb function
+// #param name string ummm
+// #param cb function ?
func (b *Bait) bcatch(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
name, catcher, err := util.HandleStrCallback(t, c)
if err != nil {
diff --git a/website/config.toml b/website/config.toml
index 31f42d55..0ae7ff2f 100644
--- a/website/config.toml
+++ b/website/config.toml
@@ -29,6 +29,9 @@ enableGitInfo = true
[markup.goldmark.renderer]
unsafe = true
+[markup.highlight]
+style = 'pastie'
+
[author]
[author.sammyette]
name = 'sammyette'
diff --git a/website/themes/hsh/assets/css/syntax.css b/website/themes/hsh/assets/css/syntax.css
new file mode 100644
index 00000000..724106aa
--- /dev/null
+++ b/website/themes/hsh/assets/css/syntax.css
@@ -0,0 +1,85 @@
+/* Background */ .bg { background-color: #ffffff; }
+/* PreWrapper */ .chroma { background-color: #ffffff; }
+/* Other */ .chroma .x { }
+/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }
+/* CodeLine */ .chroma .cl { }
+/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
+/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
+/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
+/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
+/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
+/* Line */ .chroma .line { display: flex; }
+/* Keyword */ .chroma .k { color: #008800; font-weight: bold }
+/* KeywordConstant */ .chroma .kc { color: #008800; font-weight: bold }
+/* KeywordDeclaration */ .chroma .kd { color: #008800; font-weight: bold }
+/* KeywordNamespace */ .chroma .kn { color: #008800; font-weight: bold }
+/* KeywordPseudo */ .chroma .kp { color: #008800 }
+/* KeywordReserved */ .chroma .kr { color: #008800; font-weight: bold }
+/* KeywordType */ .chroma .kt { color: #888888; font-weight: bold }
+/* Name */ .chroma .n { }
+/* NameAttribute */ .chroma .na { color: #336699 }
+/* NameBuiltin */ .chroma .nb { color: #003388 }
+/* NameBuiltinPseudo */ .chroma .bp { }
+/* NameClass */ .chroma .nc { color: #bb0066; font-weight: bold }
+/* NameConstant */ .chroma .no { color: #003366; font-weight: bold }
+/* NameDecorator */ .chroma .nd { color: #555555 }
+/* NameEntity */ .chroma .ni { }
+/* NameException */ .chroma .ne { color: #bb0066; font-weight: bold }
+/* NameFunction */ .chroma .nf { color: #0066bb; font-weight: bold }
+/* NameFunctionMagic */ .chroma .fm { }
+/* NameLabel */ .chroma .nl { color: #336699; font-style: italic }
+/* NameNamespace */ .chroma .nn { color: #bb0066; font-weight: bold }
+/* NameOther */ .chroma .nx { }
+/* NameProperty */ .chroma .py { color: #336699; font-weight: bold }
+/* NameTag */ .chroma .nt { color: #bb0066; font-weight: bold }
+/* NameVariable */ .chroma .nv { color: #336699 }
+/* NameVariableClass */ .chroma .vc { color: #336699 }
+/* NameVariableGlobal */ .chroma .vg { color: #dd7700 }
+/* NameVariableInstance */ .chroma .vi { color: #3333bb }
+/* NameVariableMagic */ .chroma .vm { }
+/* Literal */ .chroma .l { }
+/* LiteralDate */ .chroma .ld { }
+/* LiteralString */ .chroma .s { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringAffix */ .chroma .sa { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringBacktick */ .chroma .sb { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringChar */ .chroma .sc { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringDelimiter */ .chroma .dl { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringDoc */ .chroma .sd { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringDouble */ .chroma .s2 { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringEscape */ .chroma .se { color: #0044dd; background-color: #fff0f0 }
+/* LiteralStringHeredoc */ .chroma .sh { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringInterpol */ .chroma .si { color: #3333bb; background-color: #fff0f0 }
+/* LiteralStringOther */ .chroma .sx { color: #22bb22; background-color: #f0fff0 }
+/* LiteralStringRegex */ .chroma .sr { color: #008800; background-color: #fff0ff }
+/* LiteralStringSingle */ .chroma .s1 { color: #dd2200; background-color: #fff0f0 }
+/* LiteralStringSymbol */ .chroma .ss { color: #aa6600; background-color: #fff0f0 }
+/* LiteralNumber */ .chroma .m { color: #0000dd; font-weight: bold }
+/* LiteralNumberBin */ .chroma .mb { color: #0000dd; font-weight: bold }
+/* LiteralNumberFloat */ .chroma .mf { color: #0000dd; font-weight: bold }
+/* LiteralNumberHex */ .chroma .mh { color: #0000dd; font-weight: bold }
+/* LiteralNumberInteger */ .chroma .mi { color: #0000dd; font-weight: bold }
+/* LiteralNumberIntegerLong */ .chroma .il { color: #0000dd; font-weight: bold }
+/* LiteralNumberOct */ .chroma .mo { color: #0000dd; font-weight: bold }
+/* Operator */ .chroma .o { }
+/* OperatorWord */ .chroma .ow { color: #008800 }
+/* Punctuation */ .chroma .p { }
+/* Comment */ .chroma .c { color: #888888 }
+/* CommentHashbang */ .chroma .ch { color: #888888 }
+/* CommentMultiline */ .chroma .cm { color: #888888 }
+/* CommentSingle */ .chroma .c1 { color: #888888 }
+/* CommentSpecial */ .chroma .cs { color: #cc0000; background-color: #fff0f0; font-weight: bold }
+/* CommentPreproc */ .chroma .cp { color: #cc0000; font-weight: bold }
+/* CommentPreprocFile */ .chroma .cpf { color: #cc0000; font-weight: bold }
+/* Generic */ .chroma .g { }
+/* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd }
+/* GenericEmph */ .chroma .ge { font-style: italic }
+/* GenericError */ .chroma .gr { color: #aa0000 }
+/* GenericHeading */ .chroma .gh { color: #333333 }
+/* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd }
+/* GenericOutput */ .chroma .go { color: #888888 }
+/* GenericPrompt */ .chroma .gp { color: #555555 }
+/* GenericStrong */ .chroma .gs { font-weight: bold }
+/* GenericSubheading */ .chroma .gu { color: #666666 }
+/* GenericTraceback */ .chroma .gt { color: #aa0000 }
+/* GenericUnderline */ .chroma .gl { text-decoration: underline }
+/* TextWhitespace */ .chroma .w { color: #bbbbbb }
diff --git a/website/themes/hsh/layouts/partials/head.html b/website/themes/hsh/layouts/partials/head.html
index fca45585..cb2e12e9 100644
--- a/website/themes/hsh/layouts/partials/head.html
+++ b/website/themes/hsh/layouts/partials/head.html
@@ -23,7 +23,10 @@
+ {{ $syntax := resources.Get "css/syntax.css" | resources.Minify | resources.Fingerprint }}
+
+