From 5186d785a9b38a79fb95dc1ffeae9e8026f0356d Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Sun, 21 Mar 2021 17:19:51 -0400 Subject: [PATCH] feat: aliases via alias(alias, orig) --- lua.go | 8 ++++++ main.go | 79 ++++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 58 insertions(+), 29 deletions(-) diff --git a/lua.go b/lua.go index 0fde645..f605ebd 100644 --- a/lua.go +++ b/lua.go @@ -10,3 +10,11 @@ func hshprompt(L *lua.LState) int { return 0 } +func hshalias(L *lua.LState) int { + alias := L.ToString(1) + source := L.ToString(2) + + aliases[alias] = source + + return 1 +} diff --git a/main.go b/main.go index dc96ee8..64cb970 100644 --- a/main.go +++ b/main.go @@ -23,6 +23,7 @@ const version = "0.0.12" var l *lua.LState var prompt string var commands = map[string]bool{} +var aliases = map[string]string{} func main() { parser := argparse.NewParser("hilbish", "A shell for lua and flower lovers") @@ -86,30 +87,16 @@ func main() { if err == nil { continue } - quoted := false - cmdArgs := []string{} - sb := &strings.Builder{} - - for _, r := range cmdString { - if r == '"' { - quoted = !quoted - // dont add back quotes - //sb.WriteRune(r) - } else if !quoted && r == '~' { - sb.WriteString(os.Getenv("HOME")) - } else if !quoted && r == ' ' { - cmdArgs = append(cmdArgs, sb.String()) - sb.Reset() - } else { - sb.WriteRune(r) - } - } - if sb.Len() > 0 { - cmdArgs = append(cmdArgs, sb.String()) - } - + cmdArgs := splitInput(cmdString) if len(cmdArgs) == 0 { continue } + if aliases[cmdArgs[0]] != "" { + cmdString = aliases[cmdArgs[0]] + strings.Trim(cmdString, cmdArgs[0]) + cmdArgs := splitInput(cmdString) + execCommand(cmdArgs[0], cmdArgs[1:]) + continue + } + if commands[cmdArgs[0]] { err := l.CallByParam(lua.P{ Fn: l.GetField( @@ -130,19 +117,52 @@ func main() { case "exit": os.Exit(0) default: - cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...) - cmd.Stdin = os.Stdin - cmd.Stderr = os.Stderr - cmd.Stdout = os.Stdout - - if err := cmd.Run(); err != nil { + err := execCommand(cmdArgs[0], cmdArgs[1:]) + if err != nil { fmt.Fprintln(os.Stderr, err) } } - readline.AddHistory(cmdString) } } +func splitInput(input string) []string { + quoted := false + cmdArgs := []string{} + sb := &strings.Builder{} + + for _, r := range input { + if r == '"' { + quoted = !quoted + // dont add back quotes + //sb.WriteRune(r) + } else if !quoted && r == '~' { + sb.WriteString(os.Getenv("HOME")) + } else if !quoted && r == ' ' { + cmdArgs = append(cmdArgs, sb.String()) + sb.Reset() + } else { + sb.WriteRune(r) + } + } + if sb.Len() > 0 { + cmdArgs = append(cmdArgs, sb.String()) + } + + readline.AddHistory(input) + return cmdArgs +} +func execCommand(name string, args []string) error { + cmd := exec.Command(name, args...) + cmd.Stdin = os.Stdin + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + + + if err := cmd.Run(); err != nil { + return err + } + return nil +} func HandleSignals() { c := make(chan os.Signal) signal.Notify(c, os.Interrupt, syscall.SIGTERM) @@ -157,6 +177,7 @@ func LuaInit() { l.OpenLibs() l.SetGlobal("prompt", l.NewFunction(hshprompt)) + l.SetGlobal("alias", l.NewFunction(hshalias)) l.PreloadModule("fs", lfs.Loader)