diff --git a/golibs/commander/commander.go b/golibs/commander/commander.go new file mode 100644 index 0000000..1b14106 --- /dev/null +++ b/golibs/commander/commander.go @@ -0,0 +1,38 @@ +package commander + +import ( + "github.com/chuckpreslar/emission" + "github.com/yuin/gopher-lua" +) + +type Commander struct{ + Events *emission.Emitter +} + +func New() Commander { + return Commander{ + Events: emission.NewEmitter(), + } +} + +func (c *Commander) Loader(L *lua.LState) int { + var exports = map[string]lua.LGFunction{ + "register": c.register, + } + mod := L.SetFuncs(L.NewTable(), exports) + L.SetField(mod, "__commands", L.NewTable()) + + L.Push(mod) + + return 1 +} + +func (c *Commander) register(L *lua.LState) int { + cmdName := L.ToString(1) + cmd := L.ToFunction(2) + + c.Events.Emit("commandRegister", cmdName, cmd) + + return 0 +} + diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go new file mode 100644 index 0000000..6716664 --- /dev/null +++ b/golibs/fs/fs.go @@ -0,0 +1,27 @@ +package fs + +import ( + "os" + + "github.com/yuin/gopher-lua" +) + +func Loader(L *lua.LState) int { + mod := L.SetFuncs(L.NewTable(), exports) + + L.Push(mod) + return 1 +} + +var exports = map[string]lua.LGFunction{ + "cd": cd, +} + +func cd(L *lua.LState) int { + path := L.ToString(1) + + os.Chdir(path) + + return 0 +} +