mirror of https://github.com/Hilbis/Hilbish
Compare commits
9 Commits
926fc96895
...
d7104ec591
Author | SHA1 | Date |
---|---|---|
sammy | d7104ec591 | |
sammy | e0cf87d272 | |
sammy | a29eddb1bf | |
sammy | dc9bd1864c | |
sammy | d551d0f2ab | |
Devin Singh | 345ff65da8 | |
Devin Singh | 786b95c266 | |
Devin Singh | 4476a96eec | |
gokul swaminathan | bf11feb48b |
2
Makefile
2
Makefile
|
@ -10,7 +10,7 @@ install:
|
|||
@install -v -d "$(DESTDIR)$(BINDIR)/" && install -m 0755 -v hilbish "$(DESTDIR)$(BINDIR)/hilbish"
|
||||
@mkdir -p "$(DESTDIR)$(LIBDIR)"
|
||||
@cp libs preload.lua .hilbishrc.lua "$(DESTDIR)$(LIBDIR)" -r
|
||||
@echo "$(DESTDIR)$(BINDIR)/hilbish" >> /etc/shells
|
||||
@grep "$(DESTDIR)$(BINDIR)/hilbish" -qxF /etc/shells || echo "$(DESTDIR)$(BINDIR)/hilbish" >> /etc/shells
|
||||
@echo "Hilbish Installed"
|
||||
|
||||
uninstall:
|
||||
|
|
|
@ -4,27 +4,26 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/yuin/gopher-lua"
|
||||
"layeh.com/gopher-luar"
|
||||
lua "github.com/yuin/gopher-lua"
|
||||
luar "layeh.com/gopher-luar"
|
||||
)
|
||||
|
||||
func Loader(L *lua.LState) int {
|
||||
mod := L.SetFuncs(L.NewTable(), exports)
|
||||
mod := L.SetFuncs(L.NewTable(), exports)
|
||||
|
||||
L.Push(mod)
|
||||
return 1
|
||||
L.Push(mod)
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
func LuaErr(L *lua.LState, code int) {
|
||||
// TODO: Error with a table, with path and error code
|
||||
L.Error(lua.LNumber(code), 2)
|
||||
}
|
||||
|
||||
var exports = map[string]lua.LGFunction{
|
||||
"cd": cd,
|
||||
"mkdir": mkdir,
|
||||
"stat": stat,
|
||||
"cd": cd,
|
||||
"mkdir": mkdir,
|
||||
"stat": stat,
|
||||
}
|
||||
|
||||
func cd(L *lua.LState) int {
|
||||
|
|
31
lua.go
31
lua.go
|
@ -2,9 +2,9 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
hooks "hilbish/golibs/bait"
|
||||
cmds "hilbish/golibs/commander"
|
||||
lfs "hilbish/golibs/fs"
|
||||
"hilbish/golibs/bait"
|
||||
"hilbish/golibs/commander"
|
||||
"hilbish/golibs/fs"
|
||||
"os"
|
||||
|
||||
"github.com/yuin/gopher-lua"
|
||||
|
@ -27,13 +27,14 @@ func LuaInit(confpath string) {
|
|||
l.SetGlobal("prompt", l.NewFunction(hshprompt))
|
||||
l.SetGlobal("multiprompt", l.NewFunction(hshmlprompt))
|
||||
l.SetGlobal("alias", l.NewFunction(hshalias))
|
||||
l.SetGlobal("appendPath", l.NewFunction(hshappendPath))
|
||||
|
||||
// Add fs module to Lua
|
||||
l.PreloadModule("fs", lfs.Loader)
|
||||
l.PreloadModule("fs", fs.Loader)
|
||||
|
||||
commander := cmds.New()
|
||||
cmds := commander.New()
|
||||
// When a command from Lua is added, register it for use
|
||||
commander.Events.On("commandRegister",
|
||||
cmds.Events.On("commandRegister",
|
||||
func(cmdName string, cmd *lua.LFunction) {
|
||||
commands[cmdName] = true
|
||||
l.SetField(
|
||||
|
@ -43,10 +44,10 @@ func LuaInit(confpath string) {
|
|||
cmd)
|
||||
})
|
||||
|
||||
l.PreloadModule("commander", commander.Loader)
|
||||
l.PreloadModule("commander", cmds.Loader)
|
||||
|
||||
bait = hooks.New()
|
||||
l.PreloadModule("bait", bait.Loader)
|
||||
hooks = bait.New()
|
||||
l.PreloadModule("bait", hooks.Loader)
|
||||
|
||||
// Add more paths that Lua can require from
|
||||
l.DoString(`package.path = package.path
|
||||
|
@ -67,7 +68,9 @@ func LuaInit(confpath string) {
|
|||
}
|
||||
|
||||
// Run config
|
||||
if !interactive { return }
|
||||
if !interactive {
|
||||
return
|
||||
}
|
||||
err = l.DoFile(confpath)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err,
|
||||
|
@ -97,3 +100,11 @@ func hshalias(L *lua.LState) int {
|
|||
|
||||
return 1
|
||||
}
|
||||
|
||||
func hshappendPath(L *lua.LState) int {
|
||||
path := L.ToString(1)
|
||||
|
||||
os.Setenv("PATH", os.Getenv("PATH") + ":" + path)
|
||||
|
||||
return 0
|
||||
}
|
||||
|
|
4
main.go
4
main.go
|
@ -8,7 +8,7 @@ import (
|
|||
"os/user"
|
||||
"strings"
|
||||
|
||||
hooks "hilbish/golibs/bait"
|
||||
"hilbish/golibs/bait"
|
||||
|
||||
"github.com/akamensky/argparse"
|
||||
"github.com/bobappleyard/readline"
|
||||
|
@ -28,7 +28,7 @@ var (
|
|||
commands = map[string]bool{}
|
||||
aliases = map[string]string{}
|
||||
|
||||
bait hooks.Bait
|
||||
hooks bait.Bait
|
||||
homedir string
|
||||
running bool
|
||||
interactive bool
|
||||
|
|
16
shell.go
16
shell.go
|
@ -8,8 +8,8 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/yuin/gopher-lua"
|
||||
"github.com/bobappleyard/readline"
|
||||
"github.com/yuin/gopher-lua"
|
||||
"layeh.com/gopher-luar"
|
||||
"mvdan.cc/sh/v3/interp"
|
||||
"mvdan.cc/sh/v3/syntax"
|
||||
|
@ -23,7 +23,7 @@ func RunInput(input string) {
|
|||
// If it succeeds, add to history and prompt again
|
||||
HandleHistory(input)
|
||||
|
||||
bait.Em.Emit("command.exit", 0)
|
||||
hooks.Em.Emit("command.exit", 0)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -71,22 +71,22 @@ func RunInput(input string) {
|
|||
if syntax.IsIncomplete(err) || strings.HasSuffix(input, "\\") {
|
||||
continue
|
||||
} else if code, ok := interp.IsExitStatus(err); ok {
|
||||
bait.Em.Emit("command.exit", code)
|
||||
hooks.Em.Emit("command.exit", code)
|
||||
} else if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
bait.Em.Emit("command.exit", 1)
|
||||
hooks.Em.Emit("command.exit", 1)
|
||||
}
|
||||
break
|
||||
}
|
||||
} else {
|
||||
if code, ok := interp.IsExitStatus(err); ok {
|
||||
bait.Em.Emit("command.exit", code)
|
||||
hooks.Em.Emit("command.exit", code)
|
||||
} else {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bait.Em.Emit("command.exit", 0)
|
||||
hooks.Em.Emit("command.exit", 0)
|
||||
}
|
||||
HandleHistory(cmdString)
|
||||
}
|
||||
|
@ -167,7 +167,9 @@ func HandleHistory(cmd string) {
|
|||
func StartMultiline(prev string, sb *strings.Builder) bool {
|
||||
// sb fromt outside is passed so we can
|
||||
// save input from previous prompts
|
||||
if sb.String() == "" { sb.WriteString(prev + " ") }
|
||||
if sb.String() == "" {
|
||||
sb.WriteString(prev + " ")
|
||||
}
|
||||
|
||||
fmt.Print(multilinePrompt)
|
||||
|
||||
|
|
Loading…
Reference in New Issue