Hilbish/preload.lua

106 lines
2.1 KiB
Lua
Raw Normal View History

-- The preload file initializes everything else for our shell
local fs = require 'fs'
local commander = require 'commander'
local bait = require 'bait'
2021-06-10 10:29:35 +00:00
local oldDir = hilbish.cwd()
2021-05-29 03:10:23 +00:00
local shlvl = tonumber(os.getenv 'SHLVL')
if shlvl ~= nil then os.setenv('SHLVL', shlvl + 1) else os.setenv('SHLVL', 1) end
2021-05-19 01:04:49 +00:00
-- Builtins
commander.register('cd', function (args)
if #args > 0 then
local path = ''
for i = 1, #args do
path = path .. tostring(args[i]) .. ' '
end
path = path:gsub('$%$','\0'):gsub('${([%w_]+)}', os.getenv)
2021-09-30 02:32:37 +00:00
:gsub('$([%w_]+)', os.getenv):gsub('%z','$')
if path == '-' then
2021-06-10 10:29:35 +00:00
path = oldDir
2021-05-27 23:06:45 +00:00
print(path)
end
2021-06-10 10:29:35 +00:00
oldDir = hilbish.cwd()
2021-05-27 23:06:45 +00:00
local ok, err = pcall(function() fs.cd(path) end)
if not ok then
if err == 1 then
print('directory does not exist')
end
return err
end
bait.throw('cd', path)
return
end
fs.cd(hilbish.home)
bait.throw('cd', hilbish.home)
return
end)
commander.register('exit', function()
os.exit(0)
end)
do
local virt_G = { }
2021-06-09 22:41:37 +00:00
setmetatable(_G, {
2021-06-09 22:41:37 +00:00
__index = function (_, key)
local got_virt = virt_G[key]
if got_virt ~= nil then
return got_virt
end
2021-06-09 22:41:37 +00:00
virt_G[key] = os.getenv(key)
return virt_G[key]
end,
2021-06-09 22:41:37 +00:00
__newindex = function (_, key, value)
if type(value) == 'string' then
os.setenv(key, value)
virt_G[key] = value
else
if type(virt_G[key]) == 'string' then
os.setenv(key, '')
end
virt_G[key] = value
end
end,
})
2021-06-09 22:41:37 +00:00
bait.catch('command.exit', function ()
for key, value in pairs(virt_G) do
if type(value) == 'string' then
virt_G[key] = os.getenv(key)
end
end
end)
end
2021-05-01 05:08:20 +00:00
-- Function additions to Lua standard library
function string.split(str, delimiter)
local result = {}
local from = 1
2021-06-09 22:41:37 +00:00
2021-05-01 05:08:20 +00:00
local delim_from, delim_to = string.find(str, delimiter, from)
2021-06-09 22:41:37 +00:00
2021-05-01 05:08:20 +00:00
while delim_from do
table.insert(result, string.sub(str, from, delim_from - 1))
from = delim_to + 1
delim_from, delim_to = string.find(str, delimiter, from)
end
2021-06-09 22:41:37 +00:00
2021-05-01 05:08:20 +00:00
table.insert(result, string.sub(str, from))
return result
end
2021-05-19 01:04:49 +00:00
-- Hook handles
bait.catch('command.not-found', function(cmd)
print(string.format('hilbish: %s not found', cmd))
end)