2017-05-01 13:32:39 +00:00
|
|
|
|
|
|
|
local native = (term.native and term.native()) or term
|
|
|
|
local redirectTarget = native
|
|
|
|
|
|
|
|
local function wrap( _sFunction )
|
|
|
|
return function( ... )
|
|
|
|
return redirectTarget[ _sFunction ]( ... )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local term = {}
|
|
|
|
|
|
|
|
term.redirect = function( target )
|
2017-07-03 16:08:51 +00:00
|
|
|
if type( target ) ~= "table" then
|
|
|
|
error( "bad argument #1 (expected table, got " .. type( target ) .. ")", 2 )
|
|
|
|
end
|
2017-05-01 13:32:39 +00:00
|
|
|
if target == term then
|
|
|
|
error( "term is not a recommended redirect target, try term.current() instead", 2 )
|
|
|
|
end
|
|
|
|
for k,v in pairs( native ) do
|
|
|
|
if type( k ) == "string" and type( v ) == "function" then
|
|
|
|
if type( target[k] ) ~= "function" then
|
|
|
|
target[k] = function()
|
|
|
|
error( "Redirect object is missing method "..k..".", 2 )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
local oldRedirectTarget = redirectTarget
|
|
|
|
redirectTarget = target
|
|
|
|
return oldRedirectTarget
|
|
|
|
end
|
|
|
|
|
|
|
|
term.current = function()
|
|
|
|
return redirectTarget
|
|
|
|
end
|
|
|
|
|
|
|
|
term.native = function()
|
|
|
|
-- NOTE: please don't use this function unless you have to.
|
|
|
|
-- If you're running in a redirected or multitasked enviorment, term.native() will NOT be
|
|
|
|
-- the current terminal when your program starts up. It is far better to use term.current()
|
|
|
|
return native
|
|
|
|
end
|
|
|
|
|
|
|
|
for k,v in pairs( native ) do
|
|
|
|
if type( k ) == "string" and type( v ) == "function" then
|
|
|
|
if term[k] == nil then
|
|
|
|
term[k] = wrap( k )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
local env = _ENV
|
|
|
|
for k,v in pairs( term ) do
|
|
|
|
env[k] = v
|
|
|
|
end
|