From 3219c470718e333710fde1a86bec0113c89337f8 Mon Sep 17 00:00:00 2001 From: sammyette Date: Mon, 25 Dec 2023 22:32:37 -0400 Subject: [PATCH] docs: reorganize text and add more info --- api.go | 29 ++++- docs/api/bait.md | 6 +- docs/api/hilbish/_index.md | 28 ++++- docs/api/hilbish/hilbish.runner.md | 37 +++++- docs/completions.md | 105 ++++++++++-------- docs/features/runner-mode.md | 45 ++++++++ docs/jobs.md | 9 +- docs/runner-mode.md | 70 ------------ emmyLuaDocs/bait.lua | 2 +- emmyLuaDocs/hilbish.lua | 4 +- golibs/bait/bait.go | 4 +- runnermode.go | 46 +++++++- website/static/completion.mp4 | Bin 0 -> 34742 bytes .../themes/hsh/layouts/shortcodes/video.html | 5 + 14 files changed, 251 insertions(+), 139 deletions(-) delete mode 100644 docs/runner-mode.md create mode 100644 website/static/completion.mp4 create mode 100644 website/themes/hsh/layouts/shortcodes/video.html diff --git a/api.go b/api.go index 93e29d0..f5bcb9f 100644 --- a/api.go +++ b/api.go @@ -556,12 +556,39 @@ func hlinterval(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { // complete(scope, cb) // Registers a completion handler for the specified scope. -// A `scope` is currently only expected to be `command.`, +// A `scope` is expected to be `command.`, // replacing with the name of the command (for example `command.git`). // The documentation for completions, under Features/Completions or `doc completions` // provides more details. // #param scope string // #param cb function +/* +#example +-- This is a very simple example. Read the full doc for completions for details. +hilbish.complete('command.sudo', function(query, ctx, fields) + if #fields == 0 then + -- complete for commands + local comps, pfx = hilbish.completion.bins(query, ctx, fields) + local compGroup = { + items = comps, -- our list of items to complete + type = 'grid' -- what our completions will look like. + } + + return {compGroup}, pfx + end + + -- otherwise just be boring and return files + + local comps, pfx = hilbish.completion.files(query, ctx, fields) + local compGroup = { + items = comps, + type = 'grid' + } + + return {compGroup}, pfx +end) +#example +*/ func hlcomplete(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { scope, cb, err := util.HandleStrCallback(t, c) if err != nil { diff --git a/docs/api/bait.md b/docs/api/bait.md index 950d680..60b1056 100644 --- a/docs/api/bait.md +++ b/docs/api/bait.md @@ -37,7 +37,7 @@ this function will set the user prompt. |----|----| |catch(name, cb)|Catches an event. This function can be used to act on events.| |catchOnce(name, cb)|Catches an event, but only once. This will remove the hook immediately after it runs for the first time.| -|hooks(name) -> table|Returns a list of callbacks that are hooked on an event with the corresponding `name`.| +|hooks(name) -> table|Returns a table of functions that are hooked on an event with the corresponding `name`.| |release(name, catcher)|Removes the `catcher` for the event with `name`.| |throw(name, ...args)|Throws a hook with `name` with the provided `args`.| @@ -96,11 +96,11 @@ bait.hooks(name) -> table -Returns a list of callbacks that are hooked on an event with the corresponding `name`. +Returns a table of functions that are hooked on an event with the corresponding `name`. #### Parameters `string` **`name`** -The name of the function +The name of the hook diff --git a/docs/api/hilbish/_index.md b/docs/api/hilbish/_index.md index ad3d6b7..66f01ee 100644 --- a/docs/api/hilbish/_index.md +++ b/docs/api/hilbish/_index.md @@ -113,7 +113,7 @@ hilbish.complete(scope, cb) Registers a completion handler for the specified scope. -A `scope` is currently only expected to be `command.`, +A `scope` is expected to be `command.`, replacing with the name of the command (for example `command.git`). The documentation for completions, under Features/Completions or `doc completions` provides more details. @@ -125,6 +125,32 @@ provides more details. `function` **`cb`** +#### Example +```lua +-- This is a very simple example. Read the full doc for completions for details. +hilbish.complete('command.sudo', function(query, ctx, fields) + if #fields == 0 then + -- complete for commands + local comps, pfx = hilbish.completion.bins(query, ctx, fields) + local compGroup = { + items = comps, -- our list of items to complete + type = 'grid' -- what our completions will look like. + } + + return {compGroup}, pfx + end + + -- otherwise just be boring and return files + + local comps, pfx = hilbish.completion.files(query, ctx, fields) + local compGroup = { + items = comps, + type = 'grid' + } + + return {compGroup}, pfx +end) +```
diff --git a/docs/api/hilbish/hilbish.runner.md b/docs/api/hilbish/hilbish.runner.md index 9a5cf71..b5cfde4 100644 --- a/docs/api/hilbish/hilbish.runner.md +++ b/docs/api/hilbish/hilbish.runner.md @@ -8,12 +8,47 @@ menu: --- ## Introduction -The runner interface contains functions that allow the user to change + The runner interface contains functions that allow the user to change how Hilbish interprets interactive input. Users can add and change the default runner for interactive input to any language or script of their choosing. A good example is using it to write command in Fennel. +Runners are functions that evaluate user input. The default runners in +Hilbish can run shell script and Lua code. + +A runner is passed the input and has to return a table with these values. +All are not required, only the useful ones the runner needs to return. +(So if there isn't an error, just omit `err`.) + +- `exitCode` (number): A numerical code to indicate the exit result. +- `input` (string): The user input. This will be used to add +to the history. +- `err` (string): A string to indicate an interal error for the runner. +It can be set to a few special values for Hilbish to throw the right hooks and have a better looking message: + +`[command]: not-found` will throw a command.not-found hook based on what `[command]` is. + +`[command]: not-executable` will throw a command.not-executable hook. +- `continue` (boolean): Whether to prompt the user for more input. + +Here is a simple example of a fennel runner. It falls back to +shell script if fennel eval has an error. +```lua +local fennel = require 'fennel' + +hilbish.runnerMode(function(input) + local ok = pcall(fennel.eval, input) + if ok then + return { + input = input + } + end + + return hilbish.runner.sh(input) +end) +``` + ## Functions ||| |----|----| diff --git a/docs/completions.md b/docs/completions.md index 0ea60c2..59ead1b 100644 --- a/docs/completions.md +++ b/docs/completions.md @@ -7,59 +7,72 @@ menu: parent: "Features" --- -Hilbish has a pretty good completion system. It has a nice looking -menu, with 2 types of menus: grid (like file completions) or -list. +Completions for commands can be created with the [`hilbish.complete`](../api/hilbish#complete) +function. See the link for how to use it. +To create completions for a command is simple. +The callback will be passed 3 parameters: +- `query` (string): The text that the user is currently trying to complete. +This should be used to match entries. +- `ctx` (string): Contains the entire line. Use this if +more text is needed to be parsed for context. +- `fields` (string): The `ctx` split up by spaces. + +In most cases, the completer just uses `fields` to check the amount +and `query` on what to match entries on. + +In order to return your results, it has to go within a "completion group." +Then you return a table of completion groups and a prefix. The prefix will +usually just be the `query`. + +Hilbish allows one to mix completion menus of different types, so +a grid menu and a list menu can be used and complete and display at the same time. +A completion group is a table with these keys: +- `type` (string): type of completion menu, either `grid` or `list`. +- `items` (table): a list of items. + +The requirements of the `items` table is different based on the +`type`. If it is a `grid`, it can simply be a table of strings. + +Otherwise if it is a `list` then each entry can +either be a string or a table. +Example: +```lua +local cg = { + items = { + 'list item 1', + ['--command-flag-here'] = {'this does a thing', '--the-flag-alias'} + }, + type = 'list' +} +local cg2 = { + items = {'just', 'a bunch', 'of items', 'here', 'hehe'}, + type = 'grid' +} + +return {cg, cg2}, prefix +``` + +Which looks like this: +{{< video src="https://safe.saya.moe/t4CiLK6dgPbD.mp4" >}} + +# Completion Handler Like most parts of Hilbish, it's made to be extensible and customizable. The default handler for completions in general can be overwritten to provide more advanced completions if needed. +This usually doesn't need to be done though, unless you know +what you're doing. -# Completion Handler -By default, it provides 3 things: for the first argument, +The default completion handler provides 3 things: binaries (with a plain name requested to complete, those in -$PATH), files, or command completions. With the default -completion handler, it will try to run a handler for the -command or fallback to file completions. +$PATH), files, or command completions. It will try to run a handler +for the command or fallback to file completions. -To overwrite it, just assign a function to -`hilbish.completion.handler` like so: +To overwrite it, just assign a function to `hilbish.completion.handler` like so: +```lua +-- line is the entire line as a string +-- pos is the position of the cursor. function hilbish.completion.handler(line, pos) -- do things end - -It is passed 2 arguments, the entire line, and the current -cursor position. The functions in the completion interface -take 3 arguments: query, ctx, and fields. - -- The `query`, which what the user is currently trying to complete -- `ctx`, being just the entire line -- `fields` being a table of arguments. It's just `ctx` split up, -delimited by spaces. - -It's expected to return 2 things: a table of completion groups, and -a prefix. A completion group is defined as a table with 2 keys: -`items` and `type`. - -- The `items` field is just a table of items to use for completions. -- The `type` is for the completion menu type, being either `grid` or -`list`. - -The prefix is what all the completions start with. It should be empty -if the user doesn't have a query. If the beginning of the completion -item does not match the prefix, it will be replaced and fixed -properly in the line. It is case sensitive. - -If you want to overwrite the functionality of the general completion -handler, or make your command completion have files as well -(and filter them), then there is the `files` function, which is -mentioned below. - -# Completion Interface -## Functions -- `files(query, ctx, fields)` -> table, prefix: get file completions, -based on the user's query. -- `bins(query, ctx, fields)` -> table, prefix: get binary/executable -completions, based on user query. -- `call(scope, query, ctx, fields)` -> table, prefix: call a completion -handler with `scope`, usually being in the form of `command.` +``` diff --git a/docs/features/runner-mode.md b/docs/features/runner-mode.md index 58b55dd..0f7a8dd 100644 --- a/docs/features/runner-mode.md +++ b/docs/features/runner-mode.md @@ -19,3 +19,48 @@ Fennel as the interactive script runner. Runner mode can also be used to handle specific kinds of input before evaluating like normal, which is how [Link.hsh](https://github.com/TorchedSammy/Link.hsh) handles links. + +The "runner mode" of Hilbish is customizable via `hilbish.runnerMode`, +which determines how Hilbish will run user input. By default, this is +set to `hybrid` which is the previously mentioned behaviour of running Lua +first then going to shell script. If you want the reverse order, you can +set it to `hybridRev` and for isolated modes there is `sh` and `lua` +respectively. + +You can also set it to a function, which will be called everytime Hilbish +needs to run interactive input. For more detail, see the [API documentation](../../api/hilbish/hilbish.runner) + +The `hilbish.runner` interface is an alternative to using `hilbish.runnerMode` +and also provides the shell script and Lua runner functions that Hilbish itself uses. + +A runner function is expected to return a table with the following values: +- `exitCode` (number): Exit code of the command +- `input` (string): The text input of the user. This is used by Hilbish to append extra input, in case +more is requested. +- `err` (string): A string that represents an error from the runner. +This should only be set when, for example, there is a syntax error. +It can be set to a few special values for Hilbish to throw the right +hooks and have a better looking message. + - `: not-found` will throw a `command.not-found` hook + based on what `` is. + - `: not-executable` will throw a `command.not-executable` hook. +- `continue` (boolean): Whether Hilbish should prompt the user for no input + +## Functions +These are the "low level" functions for the `hilbish.runner` interface. + ++ setMode(mode) > The same as `hilbish.runnerMode` ++ sh(input) -> table > Runs `input` in Hilbish's sh interpreter ++ lua(input) -> table > Evals `input` as Lua code + +These functions should be preferred over the previous ones. ++ setCurrent(mode) > The same as `setMode`, but works with runners managed +via the functions below. ++ add(name, runner) > Adds a runner to a table of available runners. The `runner` +argument is either a function or a table with a run callback. ++ set(name, runner) > The same as `add` but requires passing a table and +overwrites if the `name`d runner already exists. ++ get(name) > runner > Gets a runner by name. It is a table with at least a +run function, to run input. ++ exec(cmd, runnerName) > Runs `cmd` with a runner. If `runnerName` isn't passed, +the current runner mode is used. diff --git a/docs/jobs.md b/docs/jobs.md index 59f2113..8651051 100644 --- a/docs/jobs.md +++ b/docs/jobs.md @@ -1,11 +1,4 @@ ---- -title: Jobs -description: Controls for background commands in Hilbish. -layout: doc -menu: - docs: - parent: "Features" ---- +(This has mainly been replaced by [hilbish.jobs](../api/hilbish.jobs)). Hilbish has pretty standard job control. It's missing one or two things, but works well. One thing which is different from other shells diff --git a/docs/runner-mode.md b/docs/runner-mode.md deleted file mode 100644 index 4844c27..0000000 --- a/docs/runner-mode.md +++ /dev/null @@ -1,70 +0,0 @@ -Hilbish allows you to change how interactive text can be interpreted. -This is mainly due to the fact that the default method Hilbish uses -is that it runs Lua first and then falls back to shell script. - -In some cases, someone might want to switch to just shell script to avoid -it while interactive but still have a Lua config, or go full Lua to use -Hilbish as a REPL. This also allows users to add alternative languages like -Fennel as the interactive script runner. - -Runner mode can also be used to handle specific kinds of input before -evaluating like normal, which is how [Link.hsh](https://github.com/TorchedSammy/Link.hsh) -handles links. - -The "runner mode" of Hilbish is customizable via `hilbish.runnerMode`, -which determines how Hilbish will run user input. By default, this is -set to `hybrid` which is the previously mentioned behaviour of running Lua -first then going to shell script. If you want the reverse order, you can -set it to `hybridRev` and for isolated modes there is `sh` and `lua` -respectively. - -You can also set it to a function, which will be called everytime Hilbish -needs to run interactive input. For example, you can set this to a simple -function to compile and evaluate Fennel, and now you can run Fennel. -You can even mix it with sh to make a hybrid mode with Lua replaced by -Fennel. - -An example: -hilbish.runnerMode(function(input) - local ok = pcall(fennel.eval, input) - if ok then - return input, 0, nil - end - - return hilbish.runner.sh(input) -end) - -The `hilbish.runner` interface is an alternative to using `hilbish.runnerMode` -and also provides the shell script and Lua runner functions that Hilbish itself uses. - -A runner function is expected to return a table with the following values: -- `exitCode` (number): Exit code of the command -- `input` (string): The text input of the user. This is used by Hilbish to append extra input, in case -more is requested. -- `err` (string): A string that represents an error from the runner. -This should only be set when, for example, there is a syntax error. -It can be set to a few special values for Hilbish to throw the right -hooks and have a better looking message. - - `: not-found` will throw a `command.not-found` hook - based on what `` is. - - `: not-executable` will throw a `command.not-executable` hook. -- `continue` (boolean): Whether Hilbish should prompt the user for no input - -## Functions -These are the "low level" functions for the `hilbish.runner` interface. - -+ setMode(mode) > The same as `hilbish.runnerMode` -+ sh(input) -> table > Runs `input` in Hilbish's sh interpreter -+ lua(input) -> table > Evals `input` as Lua code - -These functions should be preferred over the previous ones. -+ setCurrent(mode) > The same as `setMode`, but works with runners managed -via the functions below. -+ add(name, runner) > Adds a runner to a table of available runners. The `runner` -argument is either a function or a table with a run callback. -+ set(name, runner) > The same as `add` but requires passing a table and -overwrites if the `name`d runner already exists. -+ get(name) > runner > Gets a runner by name. It is a table with at least a -run function, to run input. -+ exec(cmd, runnerName) > Runs `cmd` with a runner. If `runnerName` isn't passed, -the current runner mode is used. diff --git a/emmyLuaDocs/bait.lua b/emmyLuaDocs/bait.lua index 09f3d98..c38eea1 100644 --- a/emmyLuaDocs/bait.lua +++ b/emmyLuaDocs/bait.lua @@ -10,7 +10,7 @@ function bait.catch(name, cb) end --- Catches an event, but only once. This will remove the hook immediately after it runs for the first time. function bait.catchOnce(name, cb) end ---- Returns a list of callbacks that are hooked on an event with the corresponding `name`. +--- Returns a table of functions that are hooked on an event with the corresponding `name`. function bait.hooks(name) end --- Removes the `catcher` for the event with `name`. diff --git a/emmyLuaDocs/hilbish.lua b/emmyLuaDocs/hilbish.lua index 8521065..20deb48 100644 --- a/emmyLuaDocs/hilbish.lua +++ b/emmyLuaDocs/hilbish.lua @@ -61,10 +61,12 @@ function hilbish.alias(cmd, orig) end function hilbish.appendPath(dir) end --- Registers a completion handler for the specified scope. ---- A `scope` is currently only expected to be `command.`, +--- A `scope` is expected to be `command.`, --- replacing with the name of the command (for example `command.git`). --- The documentation for completions, under Features/Completions or `doc completions` --- provides more details. +--- +--- function hilbish.complete(scope, cb) end --- Returns the current directory of the shell diff --git a/golibs/bait/bait.go b/golibs/bait/bait.go index 8f24d17..1f85c76 100644 --- a/golibs/bait/bait.go +++ b/golibs/bait/bait.go @@ -285,8 +285,8 @@ func (b *Bait) bcatchOnce(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { } // hooks(name) -> table -// Returns a list of callbacks that are hooked on an event with the corresponding `name`. -// #param name string The name of the function +// Returns a table of functions that are hooked on an event with the corresponding `name`. +// #param name string The name of the hook // #returns table func (b *Bait) bhooks(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { if err := c.Check1Arg(); err != nil { diff --git a/runnermode.go b/runnermode.go index 56a0178..55adfdc 100644 --- a/runnermode.go +++ b/runnermode.go @@ -8,11 +8,47 @@ import ( // #interface runner // interactive command runner customization -// The runner interface contains functions that allow the user to change -// how Hilbish interprets interactive input. -// Users can add and change the default runner for interactive input to any -// language or script of their choosing. A good example is using it to -// write command in Fennel. +/* The runner interface contains functions that allow the user to change +how Hilbish interprets interactive input. +Users can add and change the default runner for interactive input to any +language or script of their choosing. A good example is using it to +write command in Fennel. + +Runners are functions that evaluate user input. The default runners in +Hilbish can run shell script and Lua code. + +A runner is passed the input and has to return a table with these values. +All are not required, only the useful ones the runner needs to return. +(So if there isn't an error, just omit `err`.) + +- `exitCode` (number): A numerical code to indicate the exit result. +- `input` (string): The user input. This will be used to add +to the history. +- `err` (string): A string to indicate an interal error for the runner. +It can be set to a few special values for Hilbish to throw the right hooks and have a better looking message: + +`[command]: not-found` will throw a command.not-found hook based on what `[command]` is. + +`[command]: not-executable` will throw a command.not-executable hook. +- `continue` (boolean): Whether to prompt the user for more input. + +Here is a simple example of a fennel runner. It falls back to +shell script if fennel eval has an error. +```lua +local fennel = require 'fennel' + +hilbish.runnerMode(function(input) + local ok = pcall(fennel.eval, input) + if ok then + return { + input = input + } + end + + return hilbish.runner.sh(input) +end) +``` +*/ func runnerModeLoader(rtm *rt.Runtime) *rt.Table { exports := map[string]util.LuaExport{ "sh": {shRunner, 1, false}, diff --git a/website/static/completion.mp4 b/website/static/completion.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..057f9ab4af41feb13c90a3532226cb0ddc438d09 GIT binary patch literal 34742 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

fJ#v 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%0A8<#)W_L{=hfpuv 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 + There's a video missing here... + Well here is the URL: {{ .Get "src" }} + +