feat: add raw input hook (closes #180)

history-searcher
TorchedSammy 2022-07-10 20:34:00 -04:00
parent 83a2ce38ea
commit 08e2951513
Signed by: sammyette
GPG Key ID: 904FC49417B44DCD
4 changed files with 8 additions and 0 deletions

View File

@ -65,6 +65,7 @@ will be ran on startup
- Message of the day on startup (`hilbish.motd`), mainly intended as quick - Message of the day on startup (`hilbish.motd`), mainly intended as quick
small news pieces for releases. It is printed by default. To disable it, small news pieces for releases. It is printed by default. To disable it,
set `hilbish.opts.motd` to false. set `hilbish.opts.motd` to false.
- `hilbish.rawInput` hook for input from the readline library
### Changed ### Changed
- **Breaking Change:** Upgraded to Lua 5.4. - **Breaking Change:** Upgraded to Lua 5.4.

4
lua.go
View File

@ -48,6 +48,10 @@ func luaInit() {
} }
}) })
lr.rl.RawInputCallback = func(r []rune) {
hooks.Em.Emit("hilbish.rawInput", string(r))
}
// Add more paths that Lua can require from // Add more paths that Lua can require from
err := util.DoString(l, "package.path = package.path .. " + requirePaths) err := util.DoString(l, "package.path = package.path .. " + requirePaths)
if err != nil { if err != nil {

View File

@ -198,6 +198,8 @@ type Instance struct {
ViModeCallback func(ViMode) ViModeCallback func(ViMode)
ViActionCallback func(ViAction, []string) ViActionCallback func(ViAction, []string)
RawInputCallback func([]rune) // called on all input
} }
// NewInstance is used to create a readline instance and initialise it with sane defaults. // NewInstance is used to create a readline instance and initialise it with sane defaults.

View File

@ -94,6 +94,7 @@ func (rl *Instance) Readline() (string, error) {
rl.skipStdinRead = false rl.skipStdinRead = false
r := []rune(string(b)) r := []rune(string(b))
rl.RawInputCallback(r[:i])
if isMultiline(r[:i]) || len(rl.multiline) > 0 { if isMultiline(r[:i]) || len(rl.multiline) > 0 {
rl.multiline = append(rl.multiline, b[:i]...) rl.multiline = append(rl.multiline, b[:i]...)