require 'open3' class MetaPlugin < XChatRuby::XChatRubyPlugin include XChatRuby def initialize hook_command('HOOKCMD', XCHAT_PRI_NORM, method(:hookcmd), '') end def hookcmd(words, words_eol, data) words.shift if words.length != 2 puts 'Usage: HOOKCMD ' else cmdname, program = words func = lambda do |words, words_eol, data| words.shift stdin, stdout, stderr = Open3.popen3(program, *words) while line = stdout.gets line.chomp! if line command(line) end end XCHAT_EAT_ALL end hook_command(cmdname.upcase, XCHAT_PRI_NORM, func, '') end return XCHAT_EAT_ALL end end