Changeset

18:6ad3ea055905

clix.send: Add --stdin flag to indicate to read data from stdin (but not interactively)
author Matthew Wild <mwild1@gmail.com>
date Thu, 07 Jan 2010 20:57:59 +0000
parents 17:fa9efbef8a0c
children 19:3a0a156e0a79
files clix/send.lua
diffstat 1 files changed, 16 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/clix/send.lua	Thu Jan 07 20:56:18 2010 +0000
+++ b/clix/send.lua	Thu Jan 07 20:57:59 2010 +0000
@@ -1,14 +1,15 @@
 short_opts.i = "interactive";
+short_opts.e = "echo";
 
 return function (opts, arg)
 	if (#arg == 0 or opts.help) and not opts.interactive then
 		return 0;
 	end
 	local function on_connect(conn)
-		local function send_message(_, text)
+		local function send_message(text)
 			conn:send(verse.message({ to = opts.to, type = opts.type or "chat" }):body(text));
 		end
-		if opts.interactive then
+		if opts.interactive or opts.stdin then
 			-- Fake socket object around stdin
 			local stdin = {
 				getfd = function () return 0; end;
@@ -18,13 +19,23 @@
 				close = function () end;
 				receive = function (_, patt)
 					local data = io.stdin:read(patt);
-					io.write(data, patt == "*l" and "\n" or "");
+					if opts.echo then
+						io.write(data, patt == "*l" and "\n" or "");
+					end
 					return data;
 				end
 			};
-			stdin = require "net.server".wrapclient(stdin, "stdin", 0, { onincoming = send_message, ondisconnect = function () end }, "*l");
+			local function on_incoming(stdin, text)
+				send_message(text);
+				if not opts.interactive then
+					conn:close();
+				end
+			end
+			stdin = require "net.server".wrapclient(stdin, "stdin", 0, {
+				onincoming = on_incoming, ondisconnect = function () end
+				}, "*l");
 		else
-			send_message(nil, table.concat(arg, " "));
+			send_message(table.concat(arg, " "));
 			conn:close();
 		end
 	end