mirror of https://github.com/Hilbis/Hilbish
feat: aliases via alias(alias, orig)
parent
b27b656dd6
commit
5186d785a9
8
lua.go
8
lua.go
|
@ -10,3 +10,11 @@ func hshprompt(L *lua.LState) int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hshalias(L *lua.LState) int {
|
||||||
|
alias := L.ToString(1)
|
||||||
|
source := L.ToString(2)
|
||||||
|
|
||||||
|
aliases[alias] = source
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
81
main.go
81
main.go
|
@ -23,6 +23,7 @@ const version = "0.0.12"
|
||||||
var l *lua.LState
|
var l *lua.LState
|
||||||
var prompt string
|
var prompt string
|
||||||
var commands = map[string]bool{}
|
var commands = map[string]bool{}
|
||||||
|
var aliases = map[string]string{}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
parser := argparse.NewParser("hilbish", "A shell for lua and flower lovers")
|
parser := argparse.NewParser("hilbish", "A shell for lua and flower lovers")
|
||||||
|
@ -86,30 +87,16 @@ func main() {
|
||||||
|
|
||||||
if err == nil { continue }
|
if err == nil { continue }
|
||||||
|
|
||||||
quoted := false
|
cmdArgs := splitInput(cmdString)
|
||||||
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())
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(cmdArgs) == 0 { continue }
|
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]] {
|
if commands[cmdArgs[0]] {
|
||||||
err := l.CallByParam(lua.P{
|
err := l.CallByParam(lua.P{
|
||||||
Fn: l.GetField(
|
Fn: l.GetField(
|
||||||
|
@ -130,19 +117,52 @@ func main() {
|
||||||
case "exit":
|
case "exit":
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
default:
|
default:
|
||||||
cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...)
|
err := execCommand(cmdArgs[0], cmdArgs[1:])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintln(os.Stderr, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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.Stdin = os.Stdin
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
readline.AddHistory(cmdString)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func HandleSignals() {
|
func HandleSignals() {
|
||||||
c := make(chan os.Signal)
|
c := make(chan os.Signal)
|
||||||
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
||||||
|
@ -157,6 +177,7 @@ func LuaInit() {
|
||||||
l.OpenLibs()
|
l.OpenLibs()
|
||||||
|
|
||||||
l.SetGlobal("prompt", l.NewFunction(hshprompt))
|
l.SetGlobal("prompt", l.NewFunction(hshprompt))
|
||||||
|
l.SetGlobal("alias", l.NewFunction(hshalias))
|
||||||
|
|
||||||
l.PreloadModule("fs", lfs.Loader)
|
l.PreloadModule("fs", lfs.Loader)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue