diff --git a/CHANGELOG.md b/CHANGELOG.md index b3ab22b..42812d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ will be ran on startup - 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, set `hilbish.opts.motd` to false. +- `hilbish.rawInput` hook for input from the readline library ### Changed - **Breaking Change:** Upgraded to Lua 5.4. diff --git a/lua.go b/lua.go index 8f3c0fb..d7eb823 100644 --- a/lua.go +++ b/lua.go @@ -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 err := util.DoString(l, "package.path = package.path .. " + requirePaths) if err != nil { diff --git a/readline/instance.go b/readline/instance.go index f04811e..fcd8379 100644 --- a/readline/instance.go +++ b/readline/instance.go @@ -198,6 +198,8 @@ type Instance struct { ViModeCallback func(ViMode) 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. diff --git a/readline/readline.go b/readline/readline.go index c00fda9..50d04b9 100644 --- a/readline/readline.go +++ b/readline/readline.go @@ -94,6 +94,7 @@ func (rl *Instance) Readline() (string, error) { rl.skipStdinRead = false r := []rune(string(b)) + rl.RawInputCallback(r[:i]) if isMultiline(r[:i]) || len(rl.multiline) > 0 { rl.multiline = append(rl.multiline, b[:i]...)