6 lua "github.com/yuin/gopher-lua"
7 luar "layeh.com/gopher-luar"
9 "github.com/zyedidia/micro/v2/internal/action"
10 "github.com/zyedidia/micro/v2/internal/buffer"
11 "github.com/zyedidia/micro/v2/internal/config"
12 "github.com/zyedidia/micro/v2/internal/display"
13 ulua "github.com/zyedidia/micro/v2/internal/lua"
14 "github.com/zyedidia/micro/v2/internal/screen"
15 "github.com/zyedidia/micro/v2/internal/shell"
16 "github.com/zyedidia/micro/v2/internal/util"
20 ulua.L = lua.NewState()
21 ulua.L.SetGlobal("import", luar.New(ulua.L, LuaImport))
24 // LuaImport is meant to be called from lua by a plugin and will import the given micro package
25 func LuaImport(pkg string) *lua.LTable {
28 return luaImportMicro()
30 return luaImportMicroShell()
32 return luaImportMicroBuffer()
34 return luaImportMicroConfig()
36 return luaImportMicroUtil()
38 return ulua.Import(pkg)
42 func luaImportMicro() *lua.LTable {
43 pkg := ulua.L.NewTable()
45 ulua.L.SetField(pkg, "TermMessage", luar.New(ulua.L, screen.TermMessage))
46 ulua.L.SetField(pkg, "TermError", luar.New(ulua.L, screen.TermError))
47 ulua.L.SetField(pkg, "InfoBar", luar.New(ulua.L, action.GetInfoBar))
48 ulua.L.SetField(pkg, "Log", luar.New(ulua.L, log.Println))
49 ulua.L.SetField(pkg, "SetStatusInfoFn", luar.New(ulua.L, display.SetStatusInfoFnLua))
50 ulua.L.SetField(pkg, "CurPane", luar.New(ulua.L, func() action.Pane {
51 return action.MainTab().CurPane()
53 ulua.L.SetField(pkg, "CurTab", luar.New(ulua.L, action.MainTab))
54 ulua.L.SetField(pkg, "Tabs", luar.New(ulua.L, func() *action.TabList {
57 ulua.L.SetField(pkg, "Lock", luar.New(ulua.L, ulua.Lock))
62 func luaImportMicroConfig() *lua.LTable {
63 pkg := ulua.L.NewTable()
65 ulua.L.SetField(pkg, "MakeCommand", luar.New(ulua.L, action.MakeCommand))
66 ulua.L.SetField(pkg, "FileComplete", luar.New(ulua.L, buffer.FileComplete))
67 ulua.L.SetField(pkg, "HelpComplete", luar.New(ulua.L, action.HelpComplete))
68 ulua.L.SetField(pkg, "OptionComplete", luar.New(ulua.L, action.OptionComplete))
69 ulua.L.SetField(pkg, "OptionValueComplete", luar.New(ulua.L, action.OptionValueComplete))
70 ulua.L.SetField(pkg, "NoComplete", luar.New(ulua.L, nil))
71 ulua.L.SetField(pkg, "TryBindKey", luar.New(ulua.L, action.TryBindKey))
72 ulua.L.SetField(pkg, "Reload", luar.New(ulua.L, action.ReloadConfig))
73 ulua.L.SetField(pkg, "AddRuntimeFileFromMemory", luar.New(ulua.L, config.PluginAddRuntimeFileFromMemory))
74 ulua.L.SetField(pkg, "AddRuntimeFilesFromDirectory", luar.New(ulua.L, config.PluginAddRuntimeFilesFromDirectory))
75 ulua.L.SetField(pkg, "AddRuntimeFile", luar.New(ulua.L, config.PluginAddRuntimeFile))
76 ulua.L.SetField(pkg, "ListRuntimeFiles", luar.New(ulua.L, config.PluginListRuntimeFiles))
77 ulua.L.SetField(pkg, "ReadRuntimeFile", luar.New(ulua.L, config.PluginReadRuntimeFile))
78 ulua.L.SetField(pkg, "NewRTFiletype", luar.New(ulua.L, config.NewRTFiletype))
79 ulua.L.SetField(pkg, "RTColorscheme", luar.New(ulua.L, config.RTColorscheme))
80 ulua.L.SetField(pkg, "RTSyntax", luar.New(ulua.L, config.RTSyntax))
81 ulua.L.SetField(pkg, "RTHelp", luar.New(ulua.L, config.RTHelp))
82 ulua.L.SetField(pkg, "RTPlugin", luar.New(ulua.L, config.RTPlugin))
83 ulua.L.SetField(pkg, "RegisterCommonOption", luar.New(ulua.L, config.RegisterCommonOptionPlug))
84 ulua.L.SetField(pkg, "RegisterGlobalOption", luar.New(ulua.L, config.RegisterGlobalOptionPlug))
85 ulua.L.SetField(pkg, "GetGlobalOption", luar.New(ulua.L, config.GetGlobalOption))
86 ulua.L.SetField(pkg, "SetGlobalOption", luar.New(ulua.L, action.SetGlobalOption))
87 ulua.L.SetField(pkg, "SetGlobalOptionNative", luar.New(ulua.L, action.SetGlobalOptionNative))
88 ulua.L.SetField(pkg, "ConfigDir", luar.New(ulua.L, config.ConfigDir))
93 func luaImportMicroShell() *lua.LTable {
94 pkg := ulua.L.NewTable()
96 ulua.L.SetField(pkg, "ExecCommand", luar.New(ulua.L, shell.ExecCommand))
97 ulua.L.SetField(pkg, "RunCommand", luar.New(ulua.L, shell.RunCommand))
98 ulua.L.SetField(pkg, "RunBackgroundShell", luar.New(ulua.L, shell.RunBackgroundShell))
99 ulua.L.SetField(pkg, "RunInteractiveShell", luar.New(ulua.L, shell.RunInteractiveShell))
100 ulua.L.SetField(pkg, "JobStart", luar.New(ulua.L, shell.JobStart))
101 ulua.L.SetField(pkg, "JobSpawn", luar.New(ulua.L, shell.JobSpawn))
102 ulua.L.SetField(pkg, "JobStop", luar.New(ulua.L, shell.JobStop))
103 ulua.L.SetField(pkg, "JobSend", luar.New(ulua.L, shell.JobSend))
104 ulua.L.SetField(pkg, "RunTermEmulator", luar.New(ulua.L, action.RunTermEmulator))
105 ulua.L.SetField(pkg, "TermEmuSupported", luar.New(ulua.L, action.TermEmuSupported))
110 func luaImportMicroBuffer() *lua.LTable {
111 pkg := ulua.L.NewTable()
113 ulua.L.SetField(pkg, "NewMessage", luar.New(ulua.L, buffer.NewMessage))
114 ulua.L.SetField(pkg, "NewMessageAtLine", luar.New(ulua.L, buffer.NewMessageAtLine))
115 ulua.L.SetField(pkg, "MTInfo", luar.New(ulua.L, buffer.MTInfo))
116 ulua.L.SetField(pkg, "MTWarning", luar.New(ulua.L, buffer.MTWarning))
117 ulua.L.SetField(pkg, "MTError", luar.New(ulua.L, buffer.MTError))
118 ulua.L.SetField(pkg, "Loc", luar.New(ulua.L, func(x, y int) buffer.Loc {
119 return buffer.Loc{x, y}
121 ulua.L.SetField(pkg, "SLoc", luar.New(ulua.L, func(line, row int) display.SLoc {
122 return display.SLoc{line, row}
124 ulua.L.SetField(pkg, "BTDefault", luar.New(ulua.L, buffer.BTDefault.Kind))
125 ulua.L.SetField(pkg, "BTHelp", luar.New(ulua.L, buffer.BTHelp.Kind))
126 ulua.L.SetField(pkg, "BTLog", luar.New(ulua.L, buffer.BTLog.Kind))
127 ulua.L.SetField(pkg, "BTScratch", luar.New(ulua.L, buffer.BTScratch.Kind))
128 ulua.L.SetField(pkg, "BTRaw", luar.New(ulua.L, buffer.BTRaw.Kind))
129 ulua.L.SetField(pkg, "BTInfo", luar.New(ulua.L, buffer.BTInfo.Kind))
130 ulua.L.SetField(pkg, "NewBuffer", luar.New(ulua.L, func(text, path string) *buffer.Buffer {
131 return buffer.NewBufferFromString(text, path, buffer.BTDefault)
133 ulua.L.SetField(pkg, "NewBufferFromFile", luar.New(ulua.L, func(path string) (*buffer.Buffer, error) {
134 return buffer.NewBufferFromFile(path, buffer.BTDefault)
136 ulua.L.SetField(pkg, "ByteOffset", luar.New(ulua.L, buffer.ByteOffset))
137 ulua.L.SetField(pkg, "Log", luar.New(ulua.L, buffer.WriteLog))
138 ulua.L.SetField(pkg, "LogBuf", luar.New(ulua.L, buffer.GetLogBuf))
143 func luaImportMicroUtil() *lua.LTable {
144 pkg := ulua.L.NewTable()
146 ulua.L.SetField(pkg, "RuneAt", luar.New(ulua.L, util.LuaRuneAt))
147 ulua.L.SetField(pkg, "GetLeadingWhitespace", luar.New(ulua.L, util.LuaGetLeadingWhitespace))
148 ulua.L.SetField(pkg, "IsWordChar", luar.New(ulua.L, util.LuaIsWordChar))
149 ulua.L.SetField(pkg, "String", luar.New(ulua.L, util.String))
150 ulua.L.SetField(pkg, "Unzip", luar.New(ulua.L, util.Unzip))
151 ulua.L.SetField(pkg, "Version", luar.New(ulua.L, util.Version))
152 ulua.L.SetField(pkg, "SemVersion", luar.New(ulua.L, util.SemVersion))
153 ulua.L.SetField(pkg, "CharacterCountInString", luar.New(ulua.L, util.CharacterCountInString))
154 ulua.L.SetField(pkg, "RuneStr", luar.New(ulua.L, func(r rune) string {