mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-18 15:37:38 +00:00

Unfortunately we can't apply the config changes due to backwards compatibility. This'll be something we may need to PR into Forge. CraftTweaker support still needs to be added.
181 lines
6.9 KiB
Lua
181 lines
6.9 KiB
Lua
local completion = require "cc.shell.completion"
|
|
|
|
-- Setup paths
|
|
local sPath = ".:/rom/programs"
|
|
if term.isColor() then
|
|
sPath = sPath .. ":/rom/programs/advanced"
|
|
end
|
|
if turtle then
|
|
sPath = sPath .. ":/rom/programs/turtle"
|
|
else
|
|
sPath = sPath .. ":/rom/programs/rednet:/rom/programs/fun"
|
|
if term.isColor() then
|
|
sPath = sPath .. ":/rom/programs/fun/advanced"
|
|
end
|
|
end
|
|
if pocket then
|
|
sPath = sPath .. ":/rom/programs/pocket"
|
|
end
|
|
if commands then
|
|
sPath = sPath .. ":/rom/programs/command"
|
|
end
|
|
if http then
|
|
sPath = sPath .. ":/rom/programs/http"
|
|
end
|
|
shell.setPath( sPath )
|
|
help.setPath( "/rom/help" )
|
|
|
|
-- Setup aliases
|
|
shell.setAlias( "ls", "list" )
|
|
shell.setAlias( "dir", "list" )
|
|
shell.setAlias( "cp", "copy" )
|
|
shell.setAlias( "mv", "move" )
|
|
shell.setAlias( "rm", "delete" )
|
|
shell.setAlias( "clr", "clear" )
|
|
shell.setAlias( "rs", "redstone" )
|
|
shell.setAlias( "sh", "shell" )
|
|
if term.isColor() then
|
|
shell.setAlias( "background", "bg" )
|
|
shell.setAlias( "foreground", "fg" )
|
|
end
|
|
|
|
-- Setup completion functions
|
|
|
|
local function completePastebinPut(shell, text, previous)
|
|
if previous[2] == "put" then
|
|
return fs.complete(text, shell.dir(), true, false )
|
|
end
|
|
end
|
|
|
|
shell.setCompletionFunction( "rom/programs/alias.lua", completion.build(nil, completion.program) )
|
|
shell.setCompletionFunction( "rom/programs/cd.lua", completion.build(completion.dir) )
|
|
shell.setCompletionFunction( "rom/programs/copy.lua", completion.build(
|
|
{ completion.dirOrFile, true },
|
|
completion.dirOrFile
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/delete.lua", completion.build({ completion.dirOrFile, many = true }) )
|
|
shell.setCompletionFunction( "rom/programs/drive.lua", completion.build(completion.dir) )
|
|
shell.setCompletionFunction( "rom/programs/edit.lua", completion.build(completion.file) )
|
|
shell.setCompletionFunction( "rom/programs/eject.lua", completion.build(completion.peripheral) )
|
|
shell.setCompletionFunction( "rom/programs/gps.lua", completion.build({ completion.choice, { "host", "host ", "locate" } }) )
|
|
shell.setCompletionFunction( "rom/programs/help.lua", completion.build(completion.help) )
|
|
shell.setCompletionFunction( "rom/programs/id.lua", completion.build(completion.peripheral) )
|
|
shell.setCompletionFunction( "rom/programs/label.lua", completion.build(
|
|
{ completion.choice, { "get", "get ", "set ", "clear", "clear " } },
|
|
completion.peripheral
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/list.lua", completion.build(completion.dir) )
|
|
shell.setCompletionFunction( "rom/programs/mkdir.lua", completion.build({ completion.dir, many = true }) )
|
|
shell.setCompletionFunction( "rom/programs/monitor.lua", completion.build(
|
|
{ completion.peripheral, true },
|
|
completion.program
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/move.lua", completion.build(
|
|
{ completion.dirOrFile, true },
|
|
completion.dirOrFile
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/redstone.lua", completion.build(
|
|
{ completion.choice, { "probe", "set ", "pulse " } },
|
|
completion.side
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/rename.lua", completion.build(
|
|
{ completion.dirOrFile, true },
|
|
completion.dirOrFile
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/shell.lua", completion.build(completion.program) )
|
|
shell.setCompletionFunction( "rom/programs/type.lua", completion.build(completion.dirOrFile) )
|
|
shell.setCompletionFunction( "rom/programs/set.lua", completion.build({ completion.setting, true }) )
|
|
shell.setCompletionFunction( "rom/programs/advanced/bg.lua", completion.build(completion.program) )
|
|
shell.setCompletionFunction( "rom/programs/advanced/fg.lua", completion.build(completion.program) )
|
|
shell.setCompletionFunction( "rom/programs/fun/dj.lua", completion.build(
|
|
{ completion.choice, { "play", "play ", "stop " } },
|
|
completion.peripheral
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/fun/advanced/paint.lua", completion.build(completion.file) )
|
|
shell.setCompletionFunction( "rom/programs/http/pastebin.lua", completion.build(
|
|
{ completion.choice, { "put ", "get ", "run " } },
|
|
completePastebinPut
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/rednet/chat.lua", completion.build({ completion.choice, { "host ", "join " } }) )
|
|
shell.setCompletionFunction( "rom/programs/command/exec.lua", completion.build(completion.command) )
|
|
shell.setCompletionFunction( "rom/programs/http/wget.lua", completion.build({ completion.choice, { "run " } }) )
|
|
|
|
if turtle then
|
|
shell.setCompletionFunction( "rom/programs/turtle/go.lua", completion.build(
|
|
{ completion.choice, { "left", "right", "forward", "back", "down", "up" }, true, many = true }
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/turtle/turn.lua", completion.build(
|
|
{ completion.choice, { "left", "right" }, true, many = true }
|
|
))
|
|
shell.setCompletionFunction( "rom/programs/turtle/equip.lua", completion.build(
|
|
nil,
|
|
{ completion.choice, { "left", "right" } }
|
|
) )
|
|
shell.setCompletionFunction( "rom/programs/turtle/unequip.lua", completion.build(
|
|
{ completion.choice, { "left", "right" } }
|
|
) )
|
|
end
|
|
|
|
-- Run autorun files
|
|
if fs.exists( "/rom/autorun" ) and fs.isDir( "/rom/autorun" ) then
|
|
local tFiles = fs.list( "/rom/autorun" )
|
|
for _, sFile in ipairs( tFiles ) do
|
|
if string.sub( sFile, 1, 1 ) ~= "." then
|
|
local sPath = "/rom/autorun/" .. sFile
|
|
if not fs.isDir( sPath ) then
|
|
shell.run( sPath )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function findStartups( sBaseDir )
|
|
local tStartups = nil
|
|
local sBasePath = "/" .. fs.combine( sBaseDir, "startup" )
|
|
local sStartupNode = shell.resolveProgram( sBasePath )
|
|
if sStartupNode then
|
|
tStartups = { sStartupNode }
|
|
end
|
|
-- It's possible that there is a startup directory and a startup.lua file, so this has to be
|
|
-- executed even if a file has already been found.
|
|
if fs.isDir( sBasePath ) then
|
|
if tStartups == nil then
|
|
tStartups = {}
|
|
end
|
|
for _, v in pairs( fs.list( sBasePath ) ) do
|
|
local sPath = "/" .. fs.combine( sBasePath, v )
|
|
if not fs.isDir( sPath ) then
|
|
tStartups[ #tStartups + 1 ] = sPath
|
|
end
|
|
end
|
|
end
|
|
return tStartups
|
|
end
|
|
|
|
-- Show MOTD
|
|
if settings.get( "motd.enable" ) then
|
|
shell.run( "motd" )
|
|
end
|
|
|
|
-- Run the user created startup, either from disk drives or the root
|
|
local tUserStartups = nil
|
|
if settings.get( "shell.allow_startup" ) then
|
|
tUserStartups = findStartups( "/" )
|
|
end
|
|
if settings.get( "shell.allow_disk_startup" ) then
|
|
for _, sName in pairs( peripheral.getNames() ) do
|
|
if disk.isPresent( sName ) and disk.hasData( sName ) then
|
|
local startups = findStartups( disk.getMountPath( sName ) )
|
|
if startups then
|
|
tUserStartups = startups
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if tUserStartups then
|
|
for _, v in pairs( tUserStartups ) do
|
|
shell.run( v )
|
|
end
|
|
end
|