mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).

Mon, 26 Jul 2010 01:52:04 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 26 Jul 2010 01:52:04 +0500
changeset 3407
15f633285755
parent 3406
748246005893
child 3408
e03fd9a16e19

mod_console: Override dofile() in the console environment (this lets print() print to the console session for example).

plugins/mod_console.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_console.lua	Mon Jul 26 01:12:52 2010 +0500
+++ b/plugins/mod_console.lua	Mon Jul 26 01:52:04 2010 +0500
@@ -27,7 +27,13 @@
 prosody.console = { commands = commands, env = def_env };
 
 local function redirect_output(_G, session)
-	return setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end, __newindex = function (t, k, v) rawset(_G, k, v); end });
+	local env = setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end, __newindex = function (t, k, v) rawset(_G, k, v); end });
+	env.dofile = function(name)
+		local f, err = loadfile(name);
+		if not f then return f, err; end
+		return setfenv(f, env)();
+	end;
+	return env;
 end
 
 console = {};

mercurial