diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d047d1c --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module hilbish + +go 1.16 diff --git a/main.go b/main.go new file mode 100644 index 0000000..b83b454 --- /dev/null +++ b/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "os/exec" + "os/user" + "os/signal" + "strings" +) + +func main() { + HandleSignals() + + for { + user, _ := user.Current() + dir, _ := os.Getwd() + host, _ := os.Hostname() + + reader := bufio.NewReader(os.Stdin) + + fmt.Printf("\u001b[1m\u001b[36m%s@%s \u001b[34m%s $ \u001b[0m", user.Username, host, dir) + + cmdString, err := reader.ReadString('\n') + if err != nil { + fmt.Fprintln(os.Stderr, err) + } + cmdString = strings.TrimSuffix(cmdString, "\n") + cmdArgs := strings.Fields(cmdString) + + if len(cmdArgs) == 0 { continue } + + switch cmdArgs[0] { + case "exit": + os.Exit(0) + } + + cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + + if err := cmd.Run(); err != nil { + fmt.Fprintln(os.Stderr, err) + } + } +} + +func HandleSignals() { + c := make(chan os.Signal) + signal.Notify(c, os.Interrupt) + go func() { + <-c + }() +}