]> git.lizzy.rs Git - micro.git/blob - cmd/micro/initlua.go
scala.yaml: add support for .sc extension (#2452)
[micro.git] / cmd / micro / initlua.go
1 package main
2
3 import (
4         "log"
5
6         lua "github.com/yuin/gopher-lua"
7         luar "layeh.com/gopher-luar"
8
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"
17 )
18
19 func init() {
20         ulua.L = lua.NewState()
21         ulua.L.SetGlobal("import", luar.New(ulua.L, LuaImport))
22 }
23
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 {
26         switch pkg {
27         case "micro":
28                 return luaImportMicro()
29         case "micro/shell":
30                 return luaImportMicroShell()
31         case "micro/buffer":
32                 return luaImportMicroBuffer()
33         case "micro/config":
34                 return luaImportMicroConfig()
35         case "micro/util":
36                 return luaImportMicroUtil()
37         default:
38                 return ulua.Import(pkg)
39         }
40 }
41
42 func luaImportMicro() *lua.LTable {
43         pkg := ulua.L.NewTable()
44
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()
52         }))
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 {
55                 return action.Tabs
56         }))
57         ulua.L.SetField(pkg, "Lock", luar.New(ulua.L, ulua.Lock))
58
59         return pkg
60 }
61
62 func luaImportMicroConfig() *lua.LTable {
63         pkg := ulua.L.NewTable()
64
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))
89
90         return pkg
91 }
92
93 func luaImportMicroShell() *lua.LTable {
94         pkg := ulua.L.NewTable()
95
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))
106
107         return pkg
108 }
109
110 func luaImportMicroBuffer() *lua.LTable {
111         pkg := ulua.L.NewTable()
112
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}
120         }))
121         ulua.L.SetField(pkg, "SLoc", luar.New(ulua.L, func(line, row int) display.SLoc {
122                 return display.SLoc{line, row}
123         }))
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)
132         }))
133         ulua.L.SetField(pkg, "NewBufferFromFile", luar.New(ulua.L, func(path string) (*buffer.Buffer, error) {
134                 return buffer.NewBufferFromFile(path, buffer.BTDefault)
135         }))
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))
139
140         return pkg
141 }
142
143 func luaImportMicroUtil() *lua.LTable {
144         pkg := ulua.L.NewTable()
145
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 {
155                 return string(r)
156         }))
157
158         return pkg
159 }