From 1234c780f8ea98116f0a2acd5d6229ca0530fa93 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 22:36:56 -0400 Subject: [PATCH 01/14] chore: new entry to todo --- TODO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.md b/TODO.md index 154560b..1a6bc92 100644 --- a/TODO.md +++ b/TODO.md @@ -6,3 +6,4 @@ - [ ] Readme badges - [x] Hooks - [x] Aliases +- [ ] hlua (hilbish lua) - 100% lua in the hilbish interactive shell, cuz why not From 1d22e4cdc12cf095f384d3105b6e9d35f14d1e77 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 22:37:08 -0400 Subject: [PATCH 02/14] fix: move LuaInit function to lua.go --- lua.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 50 -------------------------------------------------- 2 files changed, 54 insertions(+), 50 deletions(-) diff --git a/lua.go b/lua.go index f605ebd..b8d0d9b 100644 --- a/lua.go +++ b/lua.go @@ -1,9 +1,63 @@ package main import ( + "fmt" + "os" + lfs "hilbish/golibs/fs" + cmds "hilbish/golibs/commander" + hooks "hilbish/golibs/bait" + "github.com/yuin/gopher-lua" ) +func LuaInit() { + l = lua.NewState() + + l.OpenLibs() + + l.SetGlobal("prompt", l.NewFunction(hshprompt)) + l.SetGlobal("alias", l.NewFunction(hshalias)) + + // Add fs module to Lua + l.PreloadModule("fs", lfs.Loader) + + commander := cmds.New() + // When a command from Lua is added, register it for use + commander.Events.On("commandRegister", + func (cmdName string, cmd *lua.LFunction) { + commands[cmdName] = true + l.SetField( + l.GetTable(l.GetGlobal("commanding"), + lua.LString("__commands")), + cmdName, + cmd) + }) + + l.PreloadModule("commander", commander.Loader) + + bait = hooks.New() + l.PreloadModule("bait", bait.Loader) + + // Add more paths that Lua can require from + l.DoString("package.path = package.path .. ';./libs/?/init.lua;/usr/share/hilbish/libs/?/init.lua'") + + err := l.DoFile("/usr/share/hilbish/preload.lua") + if err != nil { + err = l.DoFile("preload.lua") + if err != nil { + fmt.Fprintln(os.Stderr, + "Missing preload file, builtins may be missing.") + } + } + + homedir, _ := os.UserHomeDir() + // Run config + err = l.DoFile(homedir + "/.hilbishrc.lua") + if err != nil { + panic(err) + } +} + func hshprompt(L *lua.LState) int { prompt = L.ToString(1) diff --git a/main.go b/main.go index 91ecf90..4042128 100644 --- a/main.go +++ b/main.go @@ -10,8 +10,6 @@ import ( "strings" "io" "context" - lfs "hilbish/golibs/fs" - cmds "hilbish/golibs/commander" hooks "hilbish/golibs/bait" "github.com/akamensky/argparse" @@ -304,51 +302,3 @@ func HandleSignals() { }() } -func LuaInit() { - // TODO: Move to lua.go - l = lua.NewState() - - l.OpenLibs() - - l.SetGlobal("prompt", l.NewFunction(hshprompt)) - l.SetGlobal("alias", l.NewFunction(hshalias)) - - // Add fs module to Lua - l.PreloadModule("fs", lfs.Loader) - - commander := cmds.New() - // When a command from Lua is added, register it for use - commander.Events.On("commandRegister", - func (cmdName string, cmd *lua.LFunction) { - commands[cmdName] = true - l.SetField( - l.GetTable(l.GetGlobal("commanding"), - lua.LString("__commands")), - cmdName, - cmd) - }) - - l.PreloadModule("commander", commander.Loader) - - bait = hooks.New() - l.PreloadModule("bait", bait.Loader) - - // Add more paths that Lua can require from - l.DoString("package.path = package.path .. ';./libs/?/init.lua;/usr/share/hilbish/libs/?/init.lua'") - - err := l.DoFile("/usr/share/hilbish/preload.lua") - if err != nil { - err = l.DoFile("preload.lua") - if err != nil { - fmt.Fprintln(os.Stderr, - "Missing preload file, builtins may be missing.") - } - } - - homedir, _ := os.UserHomeDir() - // Run config - err = l.DoFile(homedir + "/.hilbishrc.lua") - if err != nil { - panic(err) - } -} From 5dd7ce382a55172ae3ddcf27c4ddf5f48aa98e39 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 23:56:37 -0400 Subject: [PATCH 03/14] fix: throw lua error if fs.cd fails --- golibs/fs/fs.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go index 6716664..88d1a5d 100644 --- a/golibs/fs/fs.go +++ b/golibs/fs/fs.go @@ -13,6 +13,11 @@ func Loader(L *lua.LState) int { return 1 } + +func LuaErr(L *lua.LState, code int) { + L.Error(lua.LNumber(code), 1) +} + var exports = map[string]lua.LGFunction{ "cd": cd, } @@ -20,7 +25,13 @@ var exports = map[string]lua.LGFunction{ func cd(L *lua.LState) int { path := L.ToString(1) - os.Chdir(path) + err := os.Chdir(path) + if err != nil { + switch err.(*os.PathError).Err.Error() { + case "no such file or directory": + LuaErr(L, 1) + } + } return 0 } From 0d5c826f5401782ba4a96d835363d72ccf2214d0 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 23:57:13 -0400 Subject: [PATCH 04/14] fix: change error level to 2 --- golibs/fs/fs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go index 88d1a5d..4cff36e 100644 --- a/golibs/fs/fs.go +++ b/golibs/fs/fs.go @@ -29,7 +29,7 @@ func cd(L *lua.LState) int { if err != nil { switch err.(*os.PathError).Err.Error() { case "no such file or directory": - LuaErr(L, 1) + LuaErr(L, 2) } } From 7326cb77c645127cafa2f3ab43f2153ed47dcb27 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 23:58:12 -0400 Subject: [PATCH 05/14] fix: display error to user if dir does not exist --- preload.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/preload.lua b/preload.lua index 76f48eb..d129412 100644 --- a/preload.lua +++ b/preload.lua @@ -3,9 +3,15 @@ local fs = require 'fs' local commander = require 'commander' +local bait = require 'bait' commander.register('cd', function (path) if #path == 1 then - fs.cd(path[1]) + local ok, err = pcall(function() fs.cd(path[1]) end) + if not ok then + if err == 1 then + print("directory does not exist") + end + end end end) From 8d92fc3b74902803e16a93f7215b483c087e3d81 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Tue, 30 Mar 2021 23:59:59 -0400 Subject: [PATCH 06/14] feat: cd with no path changes to homedir --- preload.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/preload.lua b/preload.lua index d129412..6b166e8 100644 --- a/preload.lua +++ b/preload.lua @@ -10,8 +10,10 @@ commander.register('cd', function (path) local ok, err = pcall(function() fs.cd(path[1]) end) if not ok then if err == 1 then - print("directory does not exist") + print('directory does not exist') end end + return end + fs.cd(os.getenv 'HOME') end) From 60a0204958500280f96f4fbf9f0a34e6608abd97 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 00:02:39 -0400 Subject: [PATCH 07/14] chore: add todo node --- golibs/fs/fs.go | 1 + 1 file changed, 1 insertion(+) diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go index 4cff36e..9929368 100644 --- a/golibs/fs/fs.go +++ b/golibs/fs/fs.go @@ -15,6 +15,7 @@ func Loader(L *lua.LState) int { func LuaErr(L *lua.LState, code int) { + // TODO: Error with a table, with path and error code L.Error(lua.LNumber(code), 1) } From 5500baf5b667e77ac4e906ca7f0b09e861898e8f Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 01:02:14 -0400 Subject: [PATCH 08/14] feat: throw cd hook when chanding directory --- preload.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/preload.lua b/preload.lua index 6b166e8..254a142 100644 --- a/preload.lua +++ b/preload.lua @@ -13,7 +13,9 @@ commander.register('cd', function (path) print('directory does not exist') end end + bait.throw('cd', path) return end fs.cd(os.getenv 'HOME') + bait.throw('cd', path) end) From a9018a2740954c510109480dceea90055c552460 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 07:32:47 -0400 Subject: [PATCH 09/14] fix: return correct error code and fix error level --- golibs/fs/fs.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go index 9929368..98abef9 100644 --- a/golibs/fs/fs.go +++ b/golibs/fs/fs.go @@ -16,7 +16,7 @@ func Loader(L *lua.LState) int { func LuaErr(L *lua.LState, code int) { // TODO: Error with a table, with path and error code - L.Error(lua.LNumber(code), 1) + L.Error(lua.LNumber(code), 2) } var exports = map[string]lua.LGFunction{ @@ -30,7 +30,7 @@ func cd(L *lua.LState) int { if err != nil { switch err.(*os.PathError).Err.Error() { case "no such file or directory": - LuaErr(L, 2) + LuaErr(L, 1) } } From 098789914448ef7f21acf729a147d885e153826a Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 12:53:33 -0400 Subject: [PATCH 10/14] fix: throw command.success hook after successfullua input --- main.go | 1 + 1 file changed, 1 insertion(+) diff --git a/main.go b/main.go index 4042128..c3625f5 100644 --- a/main.go +++ b/main.go @@ -108,6 +108,7 @@ func main() { if err == nil { // If it succeeds, add to history and prompt again readline.AddHistory(cmdString) + bait.Em.Emit("command.success", nil) continue } From 204d50d73c69640cc2075bda09f9538fd0c60876 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:46:22 -0400 Subject: [PATCH 11/14] feat(preload/cd): throw command hooks in cd command and add support for folders with spaces --- preload.lua | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/preload.lua b/preload.lua index 254a142..9032f2d 100644 --- a/preload.lua +++ b/preload.lua @@ -5,17 +5,23 @@ local fs = require 'fs' local commander = require 'commander' local bait = require 'bait' -commander.register('cd', function (path) - if #path == 1 then - local ok, err = pcall(function() fs.cd(path[1]) end) +commander.register('cd', function (args) + bait.throw('cd', args) + if #args > 0 then + local path = '' + for i = 1, #args do + path = path .. tostring(args[i]) .. ' ' + end + + local ok, err = pcall(function() fs.cd(path) end) if not ok then if err == 1 then print('directory does not exist') end - end - bait.throw('cd', path) + bait.throw('command.fail', nil) + else bait.throw('command.success', nil) end return end fs.cd(os.getenv 'HOME') - bait.throw('cd', path) + bait.throw('command.success', nil) end) From b1f2a36639e6c915a3d6fc05566e249fca6aae66 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:46:49 -0400 Subject: [PATCH 12/14] fix: trim spaces in cd func --- golibs/fs/fs.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/golibs/fs/fs.go b/golibs/fs/fs.go index 98abef9..9e24f94 100644 --- a/golibs/fs/fs.go +++ b/golibs/fs/fs.go @@ -2,6 +2,7 @@ package fs import ( "os" + "strings" "github.com/yuin/gopher-lua" ) @@ -26,7 +27,7 @@ var exports = map[string]lua.LGFunction{ func cd(L *lua.LState) int { path := L.ToString(1) - err := os.Chdir(path) + err := os.Chdir(strings.TrimSpace(path)) if err != nil { switch err.(*os.PathError).Err.Error() { case "no such file or directory": From 2d93f2ce4a80ddfee1be8b880b53aa27c019be40 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:57:20 -0400 Subject: [PATCH 13/14] chore: update todo --- TODO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TODO.md b/TODO.md index 1a6bc92..84bd742 100644 --- a/TODO.md +++ b/TODO.md @@ -7,3 +7,4 @@ - [x] Hooks - [x] Aliases - [ ] hlua (hilbish lua) - 100% lua in the hilbish interactive shell, cuz why not +- [ ] Petals (name of plugins) From 23f6986123fa2c24d71266ab4ba758c4d8a7ef33 Mon Sep 17 00:00:00 2001 From: TorchedSammy <38820196+TorchedSammy@users.noreply.github.com> Date: Wed, 31 Mar 2021 14:08:34 -0400 Subject: [PATCH 14/14] chore: add semantic pull requests config --- .github/semantic.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/semantic.yml diff --git a/.github/semantic.yml b/.github/semantic.yml new file mode 100644 index 0000000..2b82d0f --- /dev/null +++ b/.github/semantic.yml @@ -0,0 +1 @@ +titleAndCommits: true