Compare commits

...

8 Commits

Author SHA1 Message Date
sammyette 36ea20b550
fix: aliases in sh interp exec handler 2021-06-12 11:52:56 -04:00
sammyette 81f7b77b8b
docs: fix description of -l flag 2021-06-12 10:49:22 -04:00
sammyette e6c4c32bd7
feat: handle -h option 2021-06-12 10:48:57 -04:00
sammyette b974ada64e
fix: comment out unused module 2021-06-12 10:43:13 -04:00
sammyette 7e5f9e9541
fix: remove debug logging 2021-06-12 10:41:51 -04:00
sammyette a413b28f2a
fix: define deregister function in commander module 2021-06-12 10:32:48 -04:00
sammyette 26eee56c8b
feat: add commander.deregister function
simply deregisters/removes a lua defined command
2021-06-12 10:30:47 -04:00
sammyette fb04322844
feat: add option for fs.mkdir to make recursive 2021-06-12 09:31:42 -04:00
5 changed files with 30 additions and 8 deletions

View File

@ -18,10 +18,9 @@ func New() Commander {
func (c *Commander) Loader(L *lua.LState) int { func (c *Commander) Loader(L *lua.LState) int {
var exports = map[string]lua.LGFunction{ var exports = map[string]lua.LGFunction{
"register": c.register, "register": c.register,
"deregister": c.deregister,
} }
mod := L.SetFuncs(L.NewTable(), exports) mod := L.SetFuncs(L.NewTable(), exports)
L.SetGlobal("commanding", &lua.LTable{})
L.SetField(L.GetGlobal("commanding"), "__commands", L.NewTable())
L.Push(mod) L.Push(mod)
@ -37,3 +36,10 @@ func (c *Commander) register(L *lua.LState) int {
return 0 return 0
} }
func (c *Commander) deregister(L *lua.LState) int {
cmdName := L.CheckString(1)
c.Events.Emit("commandDeregister", cmdName)
return 0
}

View File

@ -47,9 +47,15 @@ func cd(L *lua.LState) int {
func mkdir(L *lua.LState) int { func mkdir(L *lua.LState) int {
dirname := L.CheckString(1) dirname := L.CheckString(1)
recursive := L.ToBool(2)
path := strings.TrimSpace(dirname)
// TODO: handle error here // TODO: handle error here
os.Mkdir(strings.TrimSpace(dirname), 0744) if recursive {
os.MkdirAll(path, 0744)
} else {
os.Mkdir(path, 0744)
}
return 0 return 0
} }

4
lua.go
View File

@ -48,7 +48,9 @@ func LuaInit() {
cmds.Events.On("commandRegister", func(cmdName string, cmd *lua.LFunction) { cmds.Events.On("commandRegister", func(cmdName string, cmd *lua.LFunction) {
commands[cmdName] = cmd commands[cmdName] = cmd
}) })
cmds.Events.On("commandDeregister", func(cmdName string) {
delete(commands, cmdName)
})
l.PreloadModule("commander", cmds.Loader) l.PreloadModule("commander", cmds.Loader)
hooks = bait.New() hooks = bait.New()

View File

@ -44,11 +44,12 @@ func main() {
defaultConfPath = filepath.Join(strings.Replace(defaultConfDir, "~", homedir, 1), ".hilbishrc.lua") defaultConfPath = filepath.Join(strings.Replace(defaultConfDir, "~", homedir, 1), ".hilbishrc.lua")
} }
helpflag := getopt.BoolLong("help", 'h', "Prints Hilbish flags")
verflag := getopt.BoolLong("version", 'v', "Prints Hilbish version") verflag := getopt.BoolLong("version", 'v', "Prints Hilbish version")
setshflag := getopt.BoolLong("setshellenv", 'S', "Sets $SHELL to Hilbish's executed path") setshflag := getopt.BoolLong("setshellenv", 'S', "Sets $SHELL to Hilbish's executed path")
cmdflag := getopt.StringLong("command", 'c', "", "Executes a command on startup") cmdflag := getopt.StringLong("command", 'c', "", "Executes a command on startup")
configflag := getopt.StringLong("config", 'C', defaultConfPath, "Sets the path to Hilbish's config") configflag := getopt.StringLong("config", 'C', defaultConfPath, "Sets the path to Hilbish's config")
getopt.BoolLong("login", 'l', "Makes Hilbish act like a login shell") getopt.BoolLong("login", 'l', "Force Hilbish to be a login shell")
getopt.BoolLong("interactive", 'i', "Force Hilbish to be an interactive shell") getopt.BoolLong("interactive", 'i', "Force Hilbish to be an interactive shell")
getopt.BoolLong("noexec", 'n', "Don't execute and only report Lua syntax errors") getopt.BoolLong("noexec", 'n', "Don't execute and only report Lua syntax errors")
@ -57,6 +58,11 @@ func main() {
interactiveflag := getopt.Lookup('i').Seen() interactiveflag := getopt.Lookup('i').Seen()
noexecflag := getopt.Lookup('n').Seen() noexecflag := getopt.Lookup('n').Seen()
if *helpflag {
getopt.PrintUsage(os.Stdout)
os.Exit(0)
}
if *cmdflag == "" || interactiveflag { if *cmdflag == "" || interactiveflag {
interactive = true interactive = true
} }

View File

@ -9,7 +9,7 @@ import (
// "github.com/bobappleyard/readline" // "github.com/bobappleyard/readline"
"github.com/yuin/gopher-lua" "github.com/yuin/gopher-lua"
"github.com/yuin/gopher-lua/parse" // "github.com/yuin/gopher-lua/parse"
"layeh.com/gopher-luar" "layeh.com/gopher-luar"
"mvdan.cc/sh/v3/interp" "mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax" "mvdan.cc/sh/v3/syntax"
@ -33,11 +33,12 @@ func RunInput(input string) {
fn, err := l.LoadString(cmdString) fn, err := l.LoadString(cmdString)
if err != nil && noexecute { if err != nil && noexecute {
fmt.Println(err) fmt.Println(err)
if lerr, ok := err.(*lua.ApiError); ok { /* if lerr, ok := err.(*lua.ApiError); ok {
if perr, ok := lerr.Cause.(*parse.Error); ok { if perr, ok := lerr.Cause.(*parse.Error); ok {
print(perr.Pos.Line == parse.EOF) print(perr.Pos.Line == parse.EOF)
} }
} }
*/
return return
} }
// And if there's no syntax errors and -n isnt provided, run // And if there's no syntax errors and -n isnt provided, run
@ -120,7 +121,8 @@ func execCommand(cmd string) error {
if aliases[args[0]] != "" { if aliases[args[0]] != "" {
alias := aliases[args[0]] alias := aliases[args[0]]
argstring = alias + strings.TrimPrefix(argstring, args[0]) argstring = alias + strings.TrimPrefix(argstring, args[0])
args[0] = alias cmdArgs, _ := splitInput(argstring)
args = cmdArgs
} }
// If command is defined in Lua then run it // If command is defined in Lua then run it