Compare commits

..

4 Commits

15 changed files with 98 additions and 62 deletions

View File

@ -216,10 +216,11 @@ func completionHandler(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// #interface completions // #interface completions
// call(name, query, ctx, fields) // call(name, query, ctx, fields) -> completionGroups (table), prefix (string)
// Calls a completer function. This is mainly used to call // Calls a completer function. This is mainly used to call
// a command completer, which will have a `name` in the form // a command completer, which will have a `name` in the form
// of `command.name`, example: `command.git` // of `command.name`, example: `command.git`.
// You can check `doc completions` for info on the `completionGroups` return value.
// --- @param name string // --- @param name string
// --- @param query string // --- @param query string
// --- @param ctx string // --- @param ctx string
@ -264,7 +265,7 @@ func callLuaCompleter(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// #interface completions // #interface completions
// files(query, ctx, fields) // files(query, ctx, fields) -> entries (table), prefix (string)
// Returns file completion candidates based on the provided query. // Returns file completion candidates based on the provided query.
// --- @param query string // --- @param query string
// --- @param ctx string // --- @param ctx string
@ -286,7 +287,7 @@ func luaFileComplete(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// #interface completions // #interface completions
// bins(query, ctx, fields) // bins(query, ctx, fields) -> entries (table), prefix (string)
// Returns binary/executale completion candidates based on the provided query. // Returns binary/executale completion candidates based on the provided query.
// --- @param query string // --- @param query string
// --- @param ctx string // --- @param ctx string

View File

@ -21,11 +21,11 @@ Catches a hook with `name`. Runs the `cb` when it is thrown
### catchOnce(name, cb) ### catchOnce(name, cb)
Same as catch, but only runs the `cb` once and then removes the hook Same as catch, but only runs the `cb` once and then removes the hook
### hooks(name) -> {} ### hooks(name) -> table
Returns a table with hooks (callback functions) on the event with `name`. Returns a table with hooks (callback functions) on the event with `name`.
### release(name, catcher) ### release(name, catcher)
Removes the `catcher` for the event with `name` Removes the `catcher` for the event with `name`.
For this to work, `catcher` has to be the same function used to catch For this to work, `catcher` has to be the same function used to catch
an event, like one saved to a variable. an event, like one saved to a variable.

View File

@ -13,25 +13,25 @@ and other things, and acts an addition to the Lua standard library's
I/O and filesystem functions. I/O and filesystem functions.
## Functions ## Functions
### abs(path) ### abs(path) -> string
Gives an absolute version of `path`. Gives an absolute version of `path`.
### basename(path) ### basename(path) -> string
Gives the basename of `path`. For the rules, Gives the basename of `path`. For the rules,
see Go's filepath.Base see Go's filepath.Base
### cd(dir) ### cd(dir)
Changes directory to `dir` Changes directory to `dir`
### dir(path) ### dir(path) -> string
Returns the directory part of `path`. For the rules, see Go's Returns the directory part of `path`. For the rules, see Go's
filepath.Dir filepath.Dir
### glob(pattern) ### glob(pattern) -> matches (table)
Glob all files and directories that match the pattern. Glob all files and directories that match the pattern.
For the rules, see Go's filepath.Glob For the rules, see Go's filepath.Glob
### join(...) ### join(...) -> string
Takes paths and joins them together with the OS's Takes paths and joins them together with the OS's
directory separator (forward or backward slash). directory separator (forward or backward slash).

View File

@ -11,18 +11,19 @@ menu:
The completions interface deals with tab completions. The completions interface deals with tab completions.
## Functions ## Functions
### call(name, query, ctx, fields) ### call(name, query, ctx, fields) -> completionGroups (table), prefix (string)
Calls a completer function. This is mainly used to call Calls a completer function. This is mainly used to call
a command completer, which will have a `name` in the form a command completer, which will have a `name` in the form
of `command.name`, example: `command.git` of `command.name`, example: `command.git`.
You can check `doc completions` for info on the `completionGroups` return value.
### handler(line, pos) ### handler(line, pos)
The handler function is the callback for tab completion in Hilbish. The handler function is the callback for tab completion in Hilbish.
You can check the completions doc for more info. You can check the completions doc for more info.
### bins(query, ctx, fields) ### bins(query, ctx, fields) -> entries (table), prefix (string)
Returns binary/executale completion candidates based on the provided query. Returns binary/executale completion candidates based on the provided query.
### files(query, ctx, fields) ### files(query, ctx, fields) -> entries (table), prefix (string)
Returns file completion candidates based on the provided query. Returns file completion candidates based on the provided query.

View File

@ -12,10 +12,10 @@ The hilbish.editor interface provides functions to
directly interact with the line editor in use. directly interact with the line editor in use.
## Functions ## Functions
### getLine() ### getLine() -> string
Returns the current input line. Returns the current input line.
### getVimRegister(register) ### getVimRegister(register) -> string
Returns the text that is at the register. Returns the text that is at the register.
### insert(text) ### insert(text)

View File

@ -16,12 +16,15 @@ method of saving history.
### add(cmd) ### add(cmd)
Adds a command to the history. Adds a command to the history.
### all() -> table
Retrieves all history.
### clear() ### clear()
Deletes all commands from the history. Deletes all commands from the history.
### get(idx) ### get(idx)
Retrieves a command from the history based on the `idx`. Retrieves a command from the history based on the `idx`.
### size() ### size() -> number
Returns the amount of commands in the history. Returns the amount of commands in the history.

View File

@ -1,44 +1,56 @@
Hilbish has a pretty good completion system. It has a nice looking menu, Hilbish has a pretty good completion system. It has a nice looking
with 2 types of menus: grid (like file completions) or list. menu, with 2 types of menus: grid (like file completions) or
list.
Like most parts of Hilbish, it's made to be extensible and customizable. Like most parts of Hilbish, it's made to be extensible and
The default handler for completions in general can be overwritten to provide customizable. The default handler for completions in general can
more advanced completions if needed. be overwritten to provide more advanced completions if needed.
# Completion Handler # Completion Handler
By default, it provides 3 things: for the first argument, binaries (with a By default, it provides 3 things: for the first argument,
plain name requested to complete, those in $PATH), files, or command binaries (with a plain name requested to complete, those in
completions. With the default completion handler, it will try to run a $PATH), files, or command completions. With the default
handler for the command or fallback to file completions. completion handler, 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` To overwrite it, just assign a function to
like so: `hilbish.completion.handler` like so:
function hilbish.completion.handler(line, pos) function hilbish.completion.handler(line, pos)
-- do things -- do things
end 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, It is passed 2 arguments, the entire line, and the current
and fields. The `query`, which what the user is currently trying to complete, cursor position. The functions in the completion interface
`ctx`, being just the entire line, and `fields` being a table of arguments. take 3 arguments: query, ctx, and fields.
It's just `ctx` split up, delimited by spaces.
It's expected to return 2 things: a table of completion groups, and a prefix. - The `query`, which what the user is currently trying to complete
A completion group is defined as a table with 2 keys: `items` and `type`. - `ctx`, being just the entire line
The `items` field is just a table of items to use for completions. - `fields` being a table of arguments. It's just `ctx` split up,
The `type` is for the completion menu type, being either `grid` or `list`. 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 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 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 item does not match the prefix, it will be replaced and fixed
in the line. It is case sensitive. properly in the line. It is case sensitive.
If you want to overwrite the functionality of the general completion handler, If you want to overwrite the functionality of the general completion
or make your command completion have files as well (and filter them), handler, or make your command completion have files as well
then there is the `files` function, which is mentioned below. (and filter them), then there is the `files` function, which is
mentioned below.
# Completion Interface # Completion Interface
## Functions ## Functions
- `files(query, ctx, fields)` -> table, prefix: get file completions, based - `files(query, ctx, fields)` -> table, prefix: get file completions,
on the user's query. based on the user's query.
- `bins(query, ctx, fields)` -> table, prefix: get binary/executable - `bins(query, ctx, fields)` -> table, prefix: get binary/executable
completions, based on user query. completions, based on user query.
- `call(scope, query, ctx, fields)` -> table, prefix: call a completion handler - `call(scope, query, ctx, fields)` -> table, prefix: call a completion
with `scope`, usually being in the form of `command.<name>` handler with `scope`, usually being in the form of `command.<name>`

View File

@ -68,7 +68,7 @@ func editorSetRegister(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// #interface editor // #interface editor
// getVimRegister(register) // getVimRegister(register) -> string
// Returns the text that is at the register. // Returns the text that is at the register.
// --- @param register string // --- @param register string
func editorGetRegister(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func editorGetRegister(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
@ -87,7 +87,7 @@ func editorGetRegister(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// #interface editor // #interface editor
// getLine() // getLine() -> string
// Returns the current input line. // Returns the current input line.
func editorGetLine(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func editorGetLine(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
buf := lr.rl.GetLine() buf := lr.rl.GetLine()

View File

@ -17,7 +17,7 @@ function bait.catchOnce(name, cb) end
--- @returns table<function> --- @returns table<function>
function bait.hooks(name) end function bait.hooks(name) end
--- Removes the `catcher` for the event with `name` --- Removes the `catcher` for the event with `name`.
--- For this to work, `catcher` has to be the same function used to catch --- For this to work, `catcher` has to be the same function used to catch
--- an event, like one saved to a variable. --- an event, like one saved to a variable.
--- @param name string --- @param name string

View File

@ -4,10 +4,12 @@ local fs = {}
--- Gives an absolute version of `path`. --- Gives an absolute version of `path`.
--- @param path string --- @param path string
--- @returns string
function fs.abs(path) end function fs.abs(path) end
--- Gives the basename of `path`. For the rules, --- Gives the basename of `path`. For the rules,
--- see Go's filepath.Base --- see Go's filepath.Base
--- @returns string
function fs.basename(path) end function fs.basename(path) end
--- Changes directory to `dir` --- Changes directory to `dir`
@ -17,16 +19,19 @@ function fs.cd(dir) end
--- Returns the directory part of `path`. For the rules, see Go's --- Returns the directory part of `path`. For the rules, see Go's
--- filepath.Dir --- filepath.Dir
--- @param path string --- @param path string
--- @returns string
function fs.dir(path) end function fs.dir(path) end
--- Glob all files and directories that match the pattern. --- Glob all files and directories that match the pattern.
--- For the rules, see Go's filepath.Glob --- For the rules, see Go's filepath.Glob
--- @param pattern string --- @param pattern string
--- @returns table
function fs.glob(pattern) end function fs.glob(pattern) end
--- Takes paths and joins them together with the OS's --- Takes paths and joins them together with the OS's
--- directory separator (forward or backward slash). --- directory separator (forward or backward slash).
--- @vararg any --- @vararg string
--- @returns string
function fs.join(...) end function fs.join(...) end
--- Makes a directory called `name`. If `recursive` is true, it will create its parent directories. --- Makes a directory called `name`. If `recursive` is true, it will create its parent directories.

View File

@ -16,7 +16,8 @@ function hilbish.runner.setMode(cb) end
--- Calls a completer function. This is mainly used to call --- Calls a completer function. This is mainly used to call
--- a command completer, which will have a `name` in the form --- a command completer, which will have a `name` in the form
--- of `command.name`, example: `command.git` --- of `command.name`, example: `command.git`.
--- You can check `doc completions` for info on the `completionGroups` return value.
--- @param name string --- @param name string
--- @param query string --- @param query string
--- @param ctx string --- @param ctx string
@ -242,6 +243,10 @@ function hilbish.jobs.last() end
--- @param cmd string --- @param cmd string
function hilbish.history.add(cmd) end function hilbish.history.add(cmd) end
--- Retrieves all history.
--- @returns table
function hilbish.history.all() end
--- Deletes all commands from the history. --- Deletes all commands from the history.
function hilbish.history.clear() end function hilbish.history.clear() end

View File

@ -280,7 +280,7 @@ func (b *Bait) bcatchOnce(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
} }
// release(name, catcher) // release(name, catcher)
// Removes the `catcher` for the event with `name` // Removes the `catcher` for the event with `name`.
// For this to work, `catcher` has to be the same function used to catch // For this to work, `catcher` has to be the same function used to catch
// an event, like one saved to a variable. // an event, like one saved to a variable.
// --- @param name string // --- @param name string
@ -296,7 +296,7 @@ func (b *Bait) brelease(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.Next(), nil return c.Next(), nil
} }
// hooks(name) -> {} // hooks(name) -> table
// Returns a table with hooks (callback functions) on the event with `name`. // Returns a table with hooks (callback functions) on the event with `name`.
// --- @param name string // --- @param name string
// --- @returns table<function> // --- @returns table<function>

View File

@ -151,9 +151,10 @@ func freaddir(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext1(t.Runtime, rt.TableValue(names)), nil return c.PushingNext1(t.Runtime, rt.TableValue(names)), nil
} }
// abs(path) // abs(path) -> string
// Gives an absolute version of `path`. // Gives an absolute version of `path`.
// --- @param path string // --- @param path string
// --- @returns string
func fabs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func fabs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
path, err := c.StringArg(0) path, err := c.StringArg(0)
if err != nil { if err != nil {
@ -169,9 +170,10 @@ func fabs(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext1(t.Runtime, rt.StringValue(abspath)), nil return c.PushingNext1(t.Runtime, rt.StringValue(abspath)), nil
} }
// basename(path) // basename(path) -> string
// Gives the basename of `path`. For the rules, // Gives the basename of `path`. For the rules,
// see Go's filepath.Base // see Go's filepath.Base
// --- @returns string
func fbasename(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func fbasename(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
if err := c.Check1Arg(); err != nil { if err := c.Check1Arg(); err != nil {
return nil, err return nil, err
@ -184,10 +186,11 @@ func fbasename(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext(t.Runtime, rt.StringValue(filepath.Base(path))), nil return c.PushingNext(t.Runtime, rt.StringValue(filepath.Base(path))), nil
} }
// dir(path) // dir(path) -> string
// Returns the directory part of `path`. For the rules, see Go's // Returns the directory part of `path`. For the rules, see Go's
// filepath.Dir // filepath.Dir
// --- @param path string // --- @param path string
// --- @returns string
func fdir(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func fdir(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
if err := c.Check1Arg(); err != nil { if err := c.Check1Arg(); err != nil {
return nil, err return nil, err
@ -200,10 +203,11 @@ func fdir(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext(t.Runtime, rt.StringValue(filepath.Dir(path))), nil return c.PushingNext(t.Runtime, rt.StringValue(filepath.Dir(path))), nil
} }
// glob(pattern) // glob(pattern) -> matches (table)
// Glob all files and directories that match the pattern. // Glob all files and directories that match the pattern.
// For the rules, see Go's filepath.Glob // For the rules, see Go's filepath.Glob
// --- @param pattern string // --- @param pattern string
// --- @returns table
func fglob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func fglob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
if err := c.Check1Arg(); err != nil { if err := c.Check1Arg(); err != nil {
return nil, err return nil, err
@ -227,10 +231,11 @@ func fglob(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
return c.PushingNext(t.Runtime, rt.TableValue(luaMatches)), nil return c.PushingNext(t.Runtime, rt.TableValue(luaMatches)), nil
} }
// join(...) // join(...) -> string
// Takes paths and joins them together with the OS's // Takes paths and joins them together with the OS's
// directory separator (forward or backward slash). // directory separator (forward or backward slash).
// --- @vararg any // --- @vararg string
// --- @returns string
func fjoin(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func fjoin(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
strs := make([]string, len(c.Etc())) strs := make([]string, len(c.Etc()))
for i, v := range c.Etc() { for i, v := range c.Etc() {

6
rl.go
View File

@ -263,7 +263,7 @@ func (lr *lineReader) luaAddHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error)
} }
// #interface history // #interface history
// size() // size() -> number
// Returns the amount of commands in the history. // Returns the amount of commands in the history.
// --- @returns number // --- @returns number
func (lr *lineReader) luaSize(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func (lr *lineReader) luaSize(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
@ -288,6 +288,10 @@ func (lr *lineReader) luaGetHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error)
return c.PushingNext1(t.Runtime, rt.StringValue(cmd)), nil return c.PushingNext1(t.Runtime, rt.StringValue(cmd)), nil
} }
// #interface history
// all() -> table
// Retrieves all history.
// --- @returns table
func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) { func (lr *lineReader) luaAllHistory(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
tbl := rt.NewTable() tbl := rt.NewTable()
size := lr.fileHist.Len() size := lr.fileHist.Len()

View File

@ -12,7 +12,7 @@ var (
// Version info // Version info
var ( var (
ver = "v2.1.0" ver = "v2.1.0"
releaseName = "Hibiscus" releaseName = "Pansy"
gitCommit string gitCommit string
gitBranch string gitBranch string
) )