38 lines
819 B
Lua
38 lines
819 B
Lua
local Map = require('opus.map')
|
|
|
|
local fs = _G.fs
|
|
local shell = _ENV.shell
|
|
|
|
local commands = Map.transpose {
|
|
'packages/moonscript/moon',
|
|
'packages/moonscript/moonc'
|
|
}
|
|
|
|
local function compatEnv(source)
|
|
local env = Map.shallowCopy(source._G)
|
|
Map.merge(env, source)
|
|
env._G = env
|
|
_G.requireInjector(env, 'packages/moonscript')
|
|
return env
|
|
end
|
|
|
|
shell.registerHandler(function(args, env)
|
|
if args[1]:match('(.+)%.moon$') then
|
|
return {
|
|
title = fs.getName(args[1]):match('([^%.]+)'),
|
|
path = 'packages/moonscript/moon',
|
|
args = args,
|
|
load = loadfile,
|
|
env = compatEnv(env),
|
|
}
|
|
end
|
|
local command = shell.resolveProgram(args[1]) or ''
|
|
return commands[command] and {
|
|
title = fs.getName(command),
|
|
path = command,
|
|
args = { table.unpack(args, 2) },
|
|
load = loadfile,
|
|
env = compatEnv(env),
|
|
}
|
|
end)
|