mirror of https://github.com/Hilbis/Hilbish
refactor!: make runners require returning a table
allows for more options for runners in the future, and makes it so that you can avoid passing certain args more easily.runner-prompt
parent
f9a2a981b4
commit
9b60dbfe99
15
exec.go
15
exec.go
|
@ -120,19 +120,22 @@ func runInput(input string, priv bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
luaInput := term.Get(0)
|
var runner *rt.Table
|
||||||
luaexitcode := term.Get(1)
|
var ok bool
|
||||||
runErr := term.Get(2)
|
runnerRet := term.Get(0)
|
||||||
|
if runner, ok = runnerRet.TryTable(); !ok {
|
||||||
|
fmt.Fprintln(os.Stderr, "runner did not return a table")
|
||||||
|
}
|
||||||
|
|
||||||
if code, ok := luaexitcode.TryInt(); ok {
|
if code, ok := runner.Get(rt.StringValue("exitCode")).TryInt(); ok {
|
||||||
exitCode = uint8(code)
|
exitCode = uint8(code)
|
||||||
}
|
}
|
||||||
|
|
||||||
if inp, ok := luaInput.TryString(); ok {
|
if inp, ok := runner.Get(rt.StringValue("input")).TryString(); ok {
|
||||||
input = inp
|
input = inp
|
||||||
}
|
}
|
||||||
|
|
||||||
if errStr, ok := runErr.TryString(); ok {
|
if errStr, ok := runner.Get(rt.StringValue("err")).TryString(); ok {
|
||||||
err = fmt.Errorf("%s", errStr)
|
err = fmt.Errorf("%s", errStr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,25 @@
|
||||||
local fs = require 'fs'
|
local fs = require 'fs'
|
||||||
|
|
||||||
function cdHandle(inp)
|
function cdHandle(inp)
|
||||||
local input, exit, err = hilbish.runner.lua(inp)
|
local res = hilbish.runner.lua(inp)
|
||||||
|
|
||||||
if not err then
|
if not res.err then
|
||||||
return input, exit, err
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
input, exit, err = hilbish.runner.sh(inp)
|
res = hilbish.runner.sh(inp)
|
||||||
|
|
||||||
if exit ~= 0 and hilbish.opts.autocd then
|
if res.exit ~= 0 and hilbish.opts.autocd then
|
||||||
local ok, stat = pcall(fs.stat, input)
|
local ok, stat = pcall(fs.stat, res.input)
|
||||||
if ok and stat.isDir then
|
if ok and stat.isDir then
|
||||||
-- discard here to not append the cd, which will be in history
|
-- discard here to not append the cd, which will be in history
|
||||||
_, exit, err = hilbish.runner.sh('cd ' .. input)
|
local _, exitCode, err = hilbish.runner.sh('cd ' .. res.input)
|
||||||
|
res.exitCode = exitCode
|
||||||
|
res.err = err
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return input, exit, err
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
hilbish.runner.setMode(cdHandle)
|
hilbish.runner.setMode(cdHandle)
|
||||||
|
|
|
@ -77,18 +77,18 @@ end
|
||||||
hilbish.runner.add('hybrid', function(input)
|
hilbish.runner.add('hybrid', function(input)
|
||||||
local cmdStr = hilbish.aliases.resolve(input)
|
local cmdStr = hilbish.aliases.resolve(input)
|
||||||
|
|
||||||
local _, _, err = hilbish.runner.lua(cmdStr)
|
local res = hilbish.runner.lua(cmdStr)
|
||||||
if not err then
|
if not res.err then
|
||||||
return input, 0, nil
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
return hilbish.runner.sh(input)
|
return hilbish.runner.sh(input)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
hilbish.runner.add('hybridRev', function(input)
|
hilbish.runner.add('hybridRev', function(input)
|
||||||
local _, _, err = hilbish.runner.sh(input)
|
local res = hilbish.runner.sh(input)
|
||||||
if not err then
|
if not res.err then
|
||||||
return input, 0, nil
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
local cmdStr = hilbish.aliases.resolve(input)
|
local cmdStr = hilbish.aliases.resolve(input)
|
||||||
|
|
|
@ -33,8 +33,12 @@ func shRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
luaErr = rt.StringValue(err.Error())
|
luaErr = rt.StringValue(err.Error())
|
||||||
}
|
}
|
||||||
|
runnerRet := rt.NewTable()
|
||||||
|
runnerRet.Set(rt.StringValue("input"), rt.StringValue(input))
|
||||||
|
runnerRet.Set(rt.StringValue("exitCode"), rt.IntValue(int64(exitCode)))
|
||||||
|
runnerRet.Set(rt.StringValue("err"), luaErr)
|
||||||
|
|
||||||
return c.PushingNext(t.Runtime, rt.StringValue(input), rt.IntValue(int64(exitCode)), luaErr), nil
|
return c.PushingNext(t.Runtime, rt.TableValue(runnerRet)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func luaRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
func luaRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
|
@ -51,6 +55,10 @@ func luaRunner(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
luaErr = rt.StringValue(err.Error())
|
luaErr = rt.StringValue(err.Error())
|
||||||
}
|
}
|
||||||
|
runnerRet := rt.NewTable()
|
||||||
|
runnerRet.Set(rt.StringValue("input"), rt.StringValue(input))
|
||||||
|
runnerRet.Set(rt.StringValue("exitCode"), rt.IntValue(int64(exitCode)))
|
||||||
|
runnerRet.Set(rt.StringValue("err"), luaErr)
|
||||||
|
|
||||||
return c.PushingNext(t.Runtime, rt.StringValue(input), rt.IntValue(int64(exitCode)), luaErr), nil
|
return c.PushingNext(t.Runtime, rt.TableValue(runnerRet)), nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue