Compare commits

...

9 Commits

Author SHA1 Message Date
sammy fd478e883f
feat: args variable (resolves #49)
anytime hilbish is ran as shebang or given a script to run,
itll provide an `args` variable which will be the args a user
provides to the script.
it includes the execute path, as most argv's do
2021-05-11 19:37:00 -04:00
sammy 0f9d3732fb
fix: check if type assertion of return value is valid 2021-05-11 19:00:07 -04:00
sammy accd4beeba
fix(cd): return err code of fs.cd instead of 1 specifically 2021-05-11 18:57:54 -04:00
sammy a140db1610
fix(cd): make it return 1 exit code on err 2021-05-11 18:55:22 -04:00
sammy 630d7dde9c
fix: prefer to run preload in cwd first 2021-05-11 18:55:05 -04:00
sammy 0ddfc5bea0
feat: allow command defined by commander to return exit code 2021-05-11 18:53:24 -04:00
sammy cc995e0f34
chore: bump version 2021-05-11 18:52:49 -04:00
sammy 05f5bbcfdd
fix: add -c description 2021-05-11 18:19:53 -04:00
sammy 0acae37704
chore: revert "fix: reordering init code [...]"
this reverts commit 8d5e36bcde.
apparently, when i reordered the code it caused hilbish's history
to be emptied and not work when used interactively
i literally have no idea why
2021-05-11 18:12:58 -04:00
4 changed files with 23 additions and 14 deletions

4
lua.go
View File

@ -65,9 +65,9 @@ func LuaInit() {
.. os.getenv 'HOME' .. '/.local/share/hilbish/libs/?.lua' .. os.getenv 'HOME' .. '/.local/share/hilbish/libs/?.lua'
`) `)
err := l.DoFile("/usr/share/hilbish/preload.lua") err := l.DoFile("preload.lua")
if err != nil { if err != nil {
err = l.DoFile("preload.lua") err = l.DoFile("/usr/share/hilbish/preload.lua")
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, fmt.Fprintln(os.Stderr,
"Missing preload file, builtins may be missing.") "Missing preload file, builtins may be missing.")

18
main.go
View File

@ -14,10 +14,11 @@ import (
"github.com/pborman/getopt" "github.com/pborman/getopt"
"github.com/bobappleyard/readline" "github.com/bobappleyard/readline"
"github.com/yuin/gopher-lua" "github.com/yuin/gopher-lua"
"layeh.com/gopher-luar"
"golang.org/x/term" "golang.org/x/term"
) )
const version = "0.4.0" const version = "0.4.1-dev.7"
var ( var (
l *lua.LState l *lua.LState
@ -46,7 +47,7 @@ func main() {
// parser := argparse.NewParser("hilbish", "A shell for lua and flower lovers") // parser := argparse.NewParser("hilbish", "A shell for lua and flower lovers")
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', "", /*TODO: Help description*/ "") 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', "Makes Hilbish act like 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")
@ -108,13 +109,17 @@ func main() {
} }
} }
go HandleSignals()
LuaInit() LuaInit()
RunLogin() RunLogin()
RunInput(*cmdflag)
RunConfig(*configflag) RunConfig(*configflag)
readline.Completer = readline.FilenameCompleter
readline.LoadHistory(homedir + "/.hilbish-history")
RunInput(*cmdflag)
if getopt.NArgs() > 0 { if getopt.NArgs() > 0 {
l.SetGlobal("args", luar.New(l, getopt.Args()))
err := l.DoFile(getopt.Arg(0)) err := l.DoFile(getopt.Arg(0))
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, err)
@ -123,11 +128,6 @@ func main() {
os.Exit(0) os.Exit(0)
} }
readline.Completer = readline.FilenameCompleter
readline.LoadHistory(homedir + "/.hilbish-history")
go HandleSignals()
for interactive { for interactive {
running = false running = false

View File

@ -20,8 +20,8 @@ commander.register('cd', function (args)
if err == 1 then if err == 1 then
print('directory does not exist') print('directory does not exist')
end end
bait.throw('command.exit', err) return err
else bait.throw('command.exit', 0) end end
return return
end end
fs.cd(os.getenv 'HOME') fs.cd(os.getenv 'HOME')

View File

@ -52,9 +52,17 @@ func RunInput(input string) {
l.GetGlobal("commanding"), l.GetGlobal("commanding"),
lua.LString("__commands")), lua.LString("__commands")),
cmdArgs[0]), cmdArgs[0]),
NRet: 0, NRet: 1,
Protect: true, Protect: true,
}, luar.New(l, cmdArgs[1:])) }, luar.New(l, cmdArgs[1:]))
luaexitcode := l.Get(-1)
exitcode := lua.LNumber(0)
l.Pop(1)
if code, ok := luaexitcode.(lua.LNumber); luaexitcode != lua.LNil && ok {
exitcode = code
}
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, fmt.Fprintln(os.Stderr,
"Error in command:\n\n" + err.Error()) "Error in command:\n\n" + err.Error())
@ -62,6 +70,7 @@ func RunInput(input string) {
if cmdArgs[0] != "exit" { if cmdArgs[0] != "exit" {
HandleHistory(cmdString) HandleHistory(cmdString)
} }
hooks.Em.Emit("command.exit", exitcode)
return return
} }