examples/marking.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Tue, 24 Feb 2009 19:42:48 +0200
changeset 7 eb6d89bf1fbf
parent 5 cba039bd6f13
child 8 fc9060b9b7cc
permissions -rw-r--r--
Commands and init improvements * 'lua' command in C * add_command and del_command merged * de-hardcoded initialization file name


marked_jids = {}

function mark ()
	local jid = main.current_buddy ()
	marked_jids[jid] = true
	main.print_info ( jid, "Marked" )
end

function unmark ()
	local jid = main.current_buddy ()
	marked_jids[jid] = nil
	main.print_info ( jid, "Unmarked" )
end

function mark_toggle ()
	local jid = main.current_buddy ()
	if marked_jids[jid] then
		return unmark ()
	else
		return mark ()
	end
end

function marked ()
	local ret = {}
	for jid, v in pairs ( marked_jids ) do
		table.insert ( ret, jid )
	end
	return ret
end

function foreach_marked ( callback )
	for jid, v in pairs ( marked_jids ) do
		if v then
			callback ( jid )
		end
	end
end

function marked_clear ()
	marked_jids = {}
end

main.command ( 'marked',
	function ( args )
		local cmd = args:match ( "^%s*(%w+)" )
		if cmd == 'clear' then
			marked_clear ()
		elseif cmd == 'do' then
			local command = args:match ( "^%s*%w+%s+(.+)" )
			foreach_marked (
				function ( jid )
					main.run ( string.format ( command, jid ) )
				end )
		else
			print ( "Marked jids:" )
			foreach_marked (
				function ( jid )
					print ( ' - ' .. jid )
				end )
		end
	end )

commands_help['marked'] = "[clear | do mcabber_command]\n\nOperates on marked buddies. Without arguments prints list of marked jids.\nCommand should contain %s in place, where jid should be inserted."

-- vim: se ts=4: --