Compare commits

..

3 Commits

Author SHA1 Message Date
TorchedSammy 5787582c2e
fix: expansion on quotes in alias expansion
to show what this fixes:
`git commit -m "a commit message"` would report that it didnt find
pathspecs for commit or message, because the commit message is only passed as `a`

also fixes it to make it work in commands in other sh syntax
2021-12-31 14:11:11 -04:00
TorchedSammy 9d685ab785
feat: add hilbish.greeting 2021-12-31 13:25:53 -04:00
TorchedSammy bcbd4be7f9
feat: allow appendPath to take table of paths (closes #88) 2021-12-31 13:22:26 -04:00
4 changed files with 39 additions and 8 deletions

View File

@ -8,8 +8,7 @@ function doPrompt(fail)
))
end
print(lunacolors.format('Welcome to {magenta}Hilbish{reset}, {cyan}' .. hilbish.user
.. '{reset}.\n' .. 'The nice lil shell for {blue}Lua{reset} fanatics!\n'))
print(lunacolors.format(hilbish.greeting))
doPrompt()

View File

@ -23,11 +23,18 @@ var exports = map[string]lua.LGFunction {
"read": hlread,
}
var greeting string
func hilbishLoader(L *lua.LState) int {
mod := L.SetFuncs(L.NewTable(), exports)
host, _ := os.Hostname()
username := curuser.Username
greeting = `Welcome to {magenta}Hilbish{reset}, {cyan}` + curuser.Username + `{reset}.
The nice lil shell for {blue}Lua{reset} fanatics!
`
if runtime.GOOS == "windows" {
username = strings.Split(username, "\\")[1] // for some reason Username includes the hostname on windows
}
@ -39,6 +46,7 @@ func hilbishLoader(L *lua.LState) int {
util.SetField(L, mod, "dataDir", lua.LString(dataDir), "Directory for Hilbish's data files")
util.SetField(L, mod, "interactive", lua.LBool(interactive), "If this is an interactive shell")
util.SetField(L, mod, "login", lua.LBool(interactive), "Whether this is a login shell")
util.SetField(L, mod, "greeting", lua.LString(greeting), "Hilbish's welcome message for interactive shells. It has Lunacolors formatting.")
util.Document(L, mod, "Hilbish's core API, containing submodules and functions which relate to the shell itself.")
// hilbish.userDir table

20
lua.go
View File

@ -137,7 +137,23 @@ func hshalias(L *lua.LState) int {
// appendPath(dir)
// Appends `dir` to $PATH
func hshappendPath(L *lua.LState) int {
dir := L.CheckString(1)
// check if dir is a table or a string
arg := L.Get(1)
fmt.Println(arg.Type())
if arg.Type() == lua.LTTable {
arg.(*lua.LTable).ForEach(func(k lua.LValue, v lua.LValue) {
appendPath(v.String())
})
} else if arg.Type() == lua.LTString {
appendPath(arg.String())
} else {
L.RaiseError("bad argument to appendPath (expected string or table, got %v)", L.Get(1).Type().String())
}
return 0
}
func appendPath(dir string) {
dir = strings.Replace(dir, "~", curuser.HomeDir, 1)
pathenv := os.Getenv("PATH")
@ -145,8 +161,6 @@ func hshappendPath(L *lua.LState) int {
if !strings.Contains(pathenv, dir) {
os.Setenv("PATH", pathenv + string(os.PathListSeparator) + dir)
}
return 0
}
// exec(cmd)

View File

@ -9,6 +9,7 @@ import (
"time"
"github.com/yuin/gopher-lua"
"mvdan.cc/sh/v3/shell"
//"github.com/yuin/gopher-lua/parse"
"mvdan.cc/sh/v3/interp"
"mvdan.cc/sh/v3/syntax"
@ -85,10 +86,19 @@ func execCommand(cmd string) error {
exechandle := func(ctx context.Context, args []string) error {
_, argstring := splitInput(strings.Join(args, " "))
// i dont really like this but it works
if aliases.All()[args[0]] != "" {
for i, arg := range args {
if strings.Contains(arg, " ") {
args[i] = fmt.Sprintf("\"%s\"", arg)
}
}
_, argstring = splitInput(strings.Join(args, " "))
// If alias was found, use command alias
argstring = aliases.Resolve(argstring)
args, _ = splitInput(argstring)
// If alias was found, use command alias
argstring = aliases.Resolve(argstring)
args, _ = shell.Fields(argstring, nil)
}
// If command is defined in Lua then run it
luacmdArgs := l.NewTable()