diff --git a/cmd/micro/initlua.go b/cmd/micro/initlua.go index 0e023c4c..b440cf8b 100644 --- a/cmd/micro/initlua.go +++ b/cmd/micro/initlua.go @@ -62,10 +62,11 @@ func luaImportMicroConfig() *lua.LTable { ulua.L.SetField(pkg, "TryBindKey", luar.New(ulua.L, action.TryBindKey)) ulua.L.SetField(pkg, "Reload", luar.New(ulua.L, action.ReloadConfig)) ulua.L.SetField(pkg, "AddRuntimeFileFromMemory", luar.New(ulua.L, config.PluginAddRuntimeFileFromMemory)) - ulua.L.SetField(pkg, "AddRuntimeFilesFromDirectory", luar.New(ulua.L, config.PluginAddRuntimeFileFromMemory)) + ulua.L.SetField(pkg, "AddRuntimeFilesFromDirectory", luar.New(ulua.L, config.PluginAddRuntimeFilesFromDirectory)) ulua.L.SetField(pkg, "AddRuntimeFile", luar.New(ulua.L, config.PluginAddRuntimeFile)) ulua.L.SetField(pkg, "ListRuntimeFiles", luar.New(ulua.L, config.PluginListRuntimeFiles)) ulua.L.SetField(pkg, "ReadRuntimeFile", luar.New(ulua.L, config.PluginReadRuntimeFile)) + ulua.L.SetField(pkg, "NewRTFiletype", luar.New(ulua.L, config.NewRTFiletype)) ulua.L.SetField(pkg, "RTColorscheme", luar.New(ulua.L, config.RTColorscheme)) ulua.L.SetField(pkg, "RTSyntax", luar.New(ulua.L, config.RTSyntax)) ulua.L.SetField(pkg, "RTHelp", luar.New(ulua.L, config.RTHelp)) @@ -130,6 +131,9 @@ func luaImportMicroUtil() *lua.LTable { ulua.L.SetField(pkg, "GetLeadingWhitespace", luar.New(ulua.L, util.LuaGetLeadingWhitespace)) ulua.L.SetField(pkg, "IsWordChar", luar.New(ulua.L, util.LuaIsWordChar)) ulua.L.SetField(pkg, "String", luar.New(ulua.L, util.String)) + ulua.L.SetField(pkg, "RuneStr", luar.New(ulua.L, func(r rune) string { + return string(r) + })) return pkg } diff --git a/internal/buffer/eventhandler.go b/internal/buffer/eventhandler.go index 3f7b0f6a..065118e3 100644 --- a/internal/buffer/eventhandler.go +++ b/internal/buffer/eventhandler.go @@ -191,7 +191,7 @@ func (eh *EventHandler) Execute(t *TextEvent) { } eh.UndoStack.Push(t) - b, err := config.RunPluginFnBool("onBeforeTextEvent", luar.New(ulua.L, t)) + b, err := config.RunPluginFnBool("onBeforeTextEvent", luar.New(ulua.L, eh.buf), luar.New(ulua.L, t)) if err != nil { screen.TermMessage(err) } diff --git a/internal/config/rtfiles.go b/internal/config/rtfiles.go index 6070e4eb..a6e7fe2a 100644 --- a/internal/config/rtfiles.go +++ b/internal/config/rtfiles.go @@ -17,10 +17,13 @@ const ( RTHelp = 2 RTPlugin = 3 RTSyntaxHeader = 4 - NumTypes = 5 // How many filetypes are there ) -type RTFiletype byte +var ( + NumTypes = 5 // How many filetypes are there +) + +type RTFiletype int // RuntimeFile allows the program to read runtime data like colorschemes or syntax files type RuntimeFile interface { @@ -31,8 +34,20 @@ type RuntimeFile interface { } // allFiles contains all available files, mapped by filetype -var allFiles [NumTypes][]RuntimeFile -var realFiles [NumTypes][]RuntimeFile +var allFiles [][]RuntimeFile +var realFiles [][]RuntimeFile + +func init() { + allFiles = make([][]RuntimeFile, NumTypes) + realFiles = make([][]RuntimeFile, NumTypes) +} + +func NewRTFiletype() int { + NumTypes++ + allFiles = append(allFiles, []RuntimeFile{}) + realFiles = append(realFiles, []RuntimeFile{}) + return NumTypes - 1 +} // some file on filesystem type realFile string