Compare commits

..

7 Commits

Author SHA1 Message Date
sammy 8f94990fc3
feat: add exec function
this is basically the `exec` "command" in sh
itll replace hilbish with whatever provided
simple usage:
exec 'sleep 100'
2021-05-08 11:50:09 -04:00
sammy 1bacbfc778
fix: correct description for -n 2021-05-08 09:30:32 -04:00
sammy 8d5e36bcde
fix: reorder init code, making hilbish faster when used non-interactively 2021-05-08 09:30:14 -04:00
sammy 941902f43b
style: remove unneeded assign to _ 2021-05-08 09:12:21 -04:00
sammy cdd9dc1544
chore: merge from master 2021-05-08 08:57:16 -04:00
sammy e6382d454d
feat: add -n flag (closes #47) 2021-05-08 08:56:24 -04:00
Jim Tittsler 70a9e471eb
fix: typo in README (#46) 2021-05-03 06:20:52 -04:00
4 changed files with 48 additions and 14 deletions

View File

@ -60,11 +60,11 @@ sudo make install
sudo make all
```
Alternativly, if you use Arch Linux, you can compile Hilbish with an **(unofficial)** AUR package
Alternatively, if you use Arch Linux, you can compile Hilbish with an **(unofficial)** AUR package:
```sh
yay -S hilbish
```
If you want the latest and greatest, you can install and compile from latest git commit
If you want the latest and greatest, you can install and compile from latest git commit:
```sh
yay -S hilbish-git
```

19
lua.go
View File

@ -3,7 +3,9 @@ package main
import (
"fmt"
"os"
"os/exec"
"strings"
"syscall"
"hilbish/golibs/bait"
"hilbish/golibs/commander"
@ -31,6 +33,7 @@ func LuaInit() {
l.SetGlobal("multiprompt", l.NewFunction(hshmlprompt))
l.SetGlobal("alias", l.NewFunction(hshalias))
l.SetGlobal("appendPath", l.NewFunction(hshappendPath))
l.SetGlobal("exec", l.NewFunction(hshexec))
// Add fs module to Lua
l.PreloadModule("fs", fs.Loader)
@ -127,3 +130,19 @@ func hshappendPath(L *lua.LState) int {
return 0
}
func hshexec(L *lua.LState) int {
cmd := L.CheckString(1)
cmdArgs, _ := splitInput(cmd)
cmdPath, err := exec.LookPath(cmdArgs[0])
if err != nil {
fmt.Println(err)
// if we get here, cmdPath will be nothing
// therefore nothing will run
}
// syscall.Exec requires an absolute path to a binary
// path, args, string slice of environments
syscall.Exec(cmdPath, cmdArgs, os.Environ())
return 0
}

25
main.go
View File

@ -35,6 +35,7 @@ var (
hooks bait.Bait
interactive bool
login bool // Are we the login shell?
noexecute bool // Should we run Lua or only report syntax errors
)
func main() {
@ -47,14 +48,14 @@ func main() {
setshflag := getopt.BoolLong("setshellenv", 'S', "Sets $SHELL to Hilbish's executed path")
cmdflag := getopt.StringLong("command", 'c', "", /*TODO: Help description*/ "")
configflag := getopt.StringLong("config", 'C', defaultconfpath, "Sets the path to Hilbish's config")
// loginshflag
// TODO: issue #37
_ = getopt.BoolLong("login", 'l', "Makes Hilbish act like a login shell")
_ = getopt.BoolLong("interactive", 'i', "Force Hilbish to be an interactive 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("noexec", 'n', "Don't execute and only report Lua syntax errors")
getopt.Parse()
loginshflag := getopt.Lookup('l').Seen()
interactiveflag := getopt.Lookup('i').Seen()
noexecflag := getopt.Lookup('n').Seen()
if *cmdflag == "" || interactiveflag {
interactive = true
@ -64,6 +65,10 @@ func main() {
interactive = false
}
if noexecflag {
noexecute = true
}
// first arg, first character
if loginshflag || os.Args[0][0] == '-' {
login = true
@ -103,15 +108,12 @@ func main() {
}
}
go HandleSignals()
LuaInit()
RunLogin()
RunInput(*cmdflag)
RunConfig(*configflag)
readline.Completer = readline.FilenameCompleter
readline.LoadHistory(homedir + "/.hilbish-history")
RunInput(*cmdflag)
if getopt.NArgs() > 0 {
err := l.DoFile(getopt.Arg(0))
if err != nil {
@ -121,6 +123,11 @@ func main() {
os.Exit(0)
}
readline.Completer = readline.FilenameCompleter
readline.LoadHistory(homedir + "/.hilbish-history")
go HandleSignals()
for interactive {
running = false

View File

@ -16,9 +16,17 @@ import (
)
func RunInput(input string) {
// First try to run user input in Lua
err := l.DoString(input)
// First try to load input, essentially compiling to bytecode
fn, err := l.LoadString(input)
if err != nil && noexecute {
fmt.Println(err)
return
}
// And if there's no syntax errors and -n isnt provided, run
if !noexecute {
l.Push(fn)
err = l.PCall(0, lua.MultRet, nil)
}
if err == nil {
// If it succeeds, add to history and prompt again
HandleHistory(input)