mirror of
				https://github.com/sammy-ette/Hilbish
				synced 2025-08-10 02:52:03 +00:00 
			
		
		
		
	Compare commits
	
		
			No commits in common. "17e12c8c2a93d0955c84cb417fd7660facbed678" and "7b0b06d9bf3d8304106a6830dfaa8a24d07cb4a4" have entirely different histories.
		
	
	
		
			17e12c8c2a
			...
			7b0b06d9bf
		
	
		
							
								
								
									
										26
									
								
								lua.go
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								lua.go
									
									
									
									
									
								
							| @ -2,10 +2,10 @@ package main | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	hooks "hilbish/golibs/bait" |  | ||||||
| 	cmds "hilbish/golibs/commander" |  | ||||||
| 	lfs "hilbish/golibs/fs" |  | ||||||
| 	"os" | 	"os" | ||||||
|  | 	lfs "hilbish/golibs/fs" | ||||||
|  | 	cmds "hilbish/golibs/commander" | ||||||
|  | 	hooks "hilbish/golibs/bait" | ||||||
| 
 | 
 | ||||||
| 	"github.com/yuin/gopher-lua" | 	"github.com/yuin/gopher-lua" | ||||||
| ) | ) | ||||||
| @ -34,14 +34,14 @@ func LuaInit(confpath string) { | |||||||
| 	commander := cmds.New() | 	commander := cmds.New() | ||||||
| 	// When a command from Lua is added, register it for use | 	// When a command from Lua is added, register it for use | ||||||
| 	commander.Events.On("commandRegister", | 	commander.Events.On("commandRegister", | ||||||
| 		func(cmdName string, cmd *lua.LFunction) { | 	func (cmdName string, cmd *lua.LFunction) { | ||||||
| 			commands[cmdName] = true | 		commands[cmdName] = true | ||||||
| 			l.SetField( | 		l.SetField( | ||||||
| 				l.GetTable(l.GetGlobal("commanding"), | 			l.GetTable(l.GetGlobal("commanding"), | ||||||
| 					lua.LString("__commands")), | 			lua.LString("__commands")), | ||||||
| 				cmdName, | 			cmdName, | ||||||
| 				cmd) | 			cmd) | ||||||
| 		}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	l.PreloadModule("commander", commander.Loader) | 	l.PreloadModule("commander", commander.Loader) | ||||||
| 
 | 
 | ||||||
| @ -62,7 +62,7 @@ func LuaInit(confpath string) { | |||||||
| 		err = l.DoFile("preload.lua") | 		err = l.DoFile("preload.lua") | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			fmt.Fprintln(os.Stderr, | 			fmt.Fprintln(os.Stderr, | ||||||
| 				"Missing preload file, builtins may be missing.") | 			"Missing preload file, builtins may be missing.") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -70,7 +70,7 @@ func LuaInit(confpath string) { | |||||||
| 	err = l.DoFile(confpath) | 	err = l.DoFile(confpath) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Fprintln(os.Stderr, err, | 		fmt.Fprintln(os.Stderr, err, | ||||||
| 			"\nAn error has occured while loading your config! Falling back to minimal default config.\n") | 		"\nAn error has occured while loading your config! Falling back to minimal default config.\n") | ||||||
| 
 | 
 | ||||||
| 		l.DoString(minimalconf) | 		l.DoString(minimalconf) | ||||||
| 	} | 	} | ||||||
|  | |||||||
							
								
								
									
										49
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								main.go
									
									
									
									
									
								
							| @ -2,12 +2,11 @@ package main | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" |  | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" |  | ||||||
| 	"os/user" | 	"os/user" | ||||||
|  | 	"os/signal" | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 	"io" | ||||||
| 	hooks "hilbish/golibs/bait" | 	hooks "hilbish/golibs/bait" | ||||||
| 
 | 
 | ||||||
| 	"github.com/akamensky/argparse" | 	"github.com/akamensky/argparse" | ||||||
| @ -17,21 +16,18 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const version = "0.4.0-dev.2+hilbiline" | const version = "0.4.0-dev.2+hilbiline" | ||||||
|  | var l *lua.LState | ||||||
|  | // User's prompt, this will get set when lua side is initialized | ||||||
|  | var prompt string | ||||||
|  | var multilinePrompt = "> " | ||||||
| 
 | 
 | ||||||
| var ( | // Map of builtin/custom commands defined in the commander lua module | ||||||
| 	l *lua.LState | var commands = map[string]bool{} | ||||||
| 
 | // Command aliases | ||||||
| 	// User's prompt, this will get set when lua side is initialized | var aliases = map[string]string{} | ||||||
| 	prompt string | var bait hooks.Bait | ||||||
| 	multilinePrompt = "> " | var homedir string | ||||||
| 
 | var running bool | ||||||
| 	commands = map[string]bool{} |  | ||||||
| 	aliases = map[string]string{} |  | ||||||
| 
 |  | ||||||
| 	bait hooks.Bait |  | ||||||
| 	homedir string |  | ||||||
| 	running bool |  | ||||||
| ) |  | ||||||
| 
 | 
 | ||||||
| func main() { | func main() { | ||||||
| 	homedir, _ = os.UserHomeDir() | 	homedir, _ = os.UserHomeDir() | ||||||
| @ -49,7 +45,7 @@ func main() { | |||||||
| 	configflag := parser.String("C", "config", &argparse.Options{ | 	configflag := parser.String("C", "config", &argparse.Options{ | ||||||
| 		Required: false, | 		Required: false, | ||||||
| 		Help: "Sets the path to Hilbish's config", | 		Help: "Sets the path to Hilbish's config", | ||||||
| 		Default:  defaultconfpath, | 		Default: defaultconfpath, | ||||||
| 	}) | 	}) | ||||||
| 	// loginshflag | 	// loginshflag | ||||||
| 	// TODO: issue #37 | 	// TODO: issue #37 | ||||||
| @ -73,9 +69,7 @@ func main() { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Set $SHELL if the user wants to | 	// Set $SHELL if the user wants to | ||||||
| 	if *setshflag { | 	if *setshflag { os.Setenv("SHELL", os.Args[0]) } | ||||||
| 		os.Setenv("SHELL", os.Args[0]) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	// If user's config doesn't exixt, | 	// If user's config doesn't exixt, | ||||||
| 	if _, err := os.Stat(defaultconfpath); os.IsNotExist(err) { | 	if _, err := os.Stat(defaultconfpath); os.IsNotExist(err) { | ||||||
| @ -92,7 +86,7 @@ func main() { | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Create it using either default config we found | 		// Create it using either default config we found | ||||||
| 		err = os.WriteFile(homedir+"/.hilbishrc.lua", input, 0644) | 		err = os.WriteFile(homedir + "/.hilbishrc.lua", input, 0644) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			// If that fails, bail | 			// If that fails, bail | ||||||
| 			fmt.Println("Error creating config file") | 			fmt.Println("Error creating config file") | ||||||
| @ -131,19 +125,15 @@ func main() { | |||||||
| 			for { | 			for { | ||||||
| 				input, err = ContinuePrompt(strings.TrimSuffix(input, "\\")) | 				input, err = ContinuePrompt(strings.TrimSuffix(input, "\\")) | ||||||
| 
 | 
 | ||||||
| 				if err != nil || !strings.HasSuffix(input, "\\") { | 				if err != nil || !strings.HasSuffix(input, "\\") { break } | ||||||
| 					break |  | ||||||
| 				} |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		running = true | 		running = true | ||||||
| 		RunInput(input) | 		RunInput(input) | ||||||
| 
 | 
 | ||||||
| 		termwidth, _, err := term.GetSize(0) | 		termwidth, _, err := term.GetSize(0) | ||||||
| 		if err != nil { | 		if err != nil { continue } | ||||||
| 			continue | 		fmt.Printf("\u001b[7m∆\u001b[0m" + strings.Repeat(" ", termwidth - 1) + "\r") | ||||||
| 		} |  | ||||||
| 		fmt.Printf("\u001b[7m∆\u001b[0m" + strings.Repeat(" ", termwidth-1) + "\r") |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -198,3 +188,4 @@ func HandleSignals() { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								shell.go
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								shell.go
									
									
									
									
									
								
							| @ -1,17 +1,18 @@ | |||||||
| package main | package main | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"os" | ||||||
| 	"bufio" | 	"bufio" | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" |  | ||||||
| 	"io" | 	"io" | ||||||
| 	"os" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
| 	"github.com/yuin/gopher-lua" | 	"github.com/yuin/gopher-lua" | ||||||
| 	"layeh.com/gopher-luar" | 	"layeh.com/gopher-luar" | ||||||
| 	"mvdan.cc/sh/v3/interp" | 	"mvdan.cc/sh/v3/interp" | ||||||
| 	"mvdan.cc/sh/v3/syntax" | 	"mvdan.cc/sh/v3/syntax" | ||||||
|  | 
 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func RunInput(input string) { | func RunInput(input string) { | ||||||
| @ -30,9 +31,7 @@ func RunInput(input string) { | |||||||
| 
 | 
 | ||||||
| 	// If alias was found, use command alias | 	// If alias was found, use command alias | ||||||
| 	if aliases[cmdArgs[0]] != "" { | 	if aliases[cmdArgs[0]] != "" { | ||||||
| 		alias := aliases[cmdArgs[0]] | 		cmdString = aliases[cmdArgs[0]] + strings.Trim(cmdString, cmdArgs[0]) | ||||||
| 		cmdString = alias + strings.Trim(cmdString, cmdArgs[0]) |  | ||||||
| 		cmdArgs[0] = alias |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// If command is defined in Lua then run it | 	// If command is defined in Lua then run it | ||||||
| @ -43,16 +42,14 @@ func RunInput(input string) { | |||||||
| 					l.GetGlobal("commanding"), | 					l.GetGlobal("commanding"), | ||||||
| 					lua.LString("__commands")), | 					lua.LString("__commands")), | ||||||
| 				cmdArgs[0]), | 				cmdArgs[0]), | ||||||
| 			NRet:    0, | 			NRet: 0, | ||||||
| 			Protect: true, | 			Protect: true, | ||||||
| 		}, luar.New(l, cmdArgs[1:])) | 		}, luar.New(l, cmdArgs[1:])) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			fmt.Fprintln(os.Stderr, | 			fmt.Fprintln(os.Stderr, | ||||||
| 				"Error in command:\n\n"+err.Error()) | 			"Error in command:\n\n" + err.Error()) | ||||||
| 		} |  | ||||||
| 		if cmdArgs[0] != "exit" { |  | ||||||
| 			HandleHistory(cmdString) |  | ||||||
| 		} | 		} | ||||||
|  | 		if cmdArgs[0] != "exit" { HandleHistory(cmdString) } | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -63,11 +60,9 @@ func RunInput(input string) { | |||||||
| 		if syntax.IsIncomplete(err) { | 		if syntax.IsIncomplete(err) { | ||||||
| 			for { | 			for { | ||||||
| 				cmdString, err = ContinuePrompt(strings.TrimSuffix(cmdString, "\\")) | 				cmdString, err = ContinuePrompt(strings.TrimSuffix(cmdString, "\\")) | ||||||
| 				if err != nil { | 				if err != nil { break } | ||||||
| 					break |  | ||||||
| 				} |  | ||||||
| 				err = execCommand(cmdString) | 				err = execCommand(cmdString) | ||||||
| 				if syntax.IsIncomplete(err) || strings.HasSuffix(input, "\\") { | 					if syntax.IsIncomplete(err) || strings.HasSuffix(input, "\\") { | ||||||
| 					continue | 					continue | ||||||
| 				} else if code, ok := interp.IsExitStatus(err); ok { | 				} else if code, ok := interp.IsExitStatus(err); ok { | ||||||
| 					bait.Em.Emit("command.exit", code) | 					bait.Em.Emit("command.exit", code) | ||||||
| @ -80,9 +75,7 @@ func RunInput(input string) { | |||||||
| 		} else { | 		} else { | ||||||
| 			if code, ok := interp.IsExitStatus(err); ok { | 			if code, ok := interp.IsExitStatus(err); ok { | ||||||
| 				bait.Em.Emit("command.exit", code) | 				bait.Em.Emit("command.exit", code) | ||||||
| 			} else { | 			} else { fmt.Fprintln(os.Stderr, err) } | ||||||
| 				fmt.Fprintln(os.Stderr, err) |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		bait.Em.Emit("command.exit", 0) | 		bait.Em.Emit("command.exit", 0) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user