examples/marking.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 14 Apr 2010 11:21:02 +0300
changeset 111 5bcdb71ef2f2
parent 84 c0db7efde255
child 125 3e2421384d7a
permissions -rw-r--r--
Fix some example scripts * Unregister LM message handlers on module unload * Fix muc room-config command


-- MARKING

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[1]
		if cmd == 'clear' then
			marked_clear ()
		elseif cmd == 'do' then
			local command = args[2]
			foreach_marked (
				function ( jid )
					main.run ( string.format ( command, jid ) )
				end )
		else
			print ( "Marked jids:" )
			foreach_marked (
				function ( jid )
					print ( ' - ' .. jid )
				end )
		end
	end, true, { 'clear', 'do' } )

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."

mark_ins_bound = false

-- Ins
if not main.binding ( '331' ) then
	main.binding ( '331', 'lua mark_toggle ()' )
	mark_ins_bound = true
end

hooks_d['hook-quit'].mark =
	function ( args )
		if mark_ins_bound then
			main.binding ( '331', nil )
		end
	end

-- vim: se ts=4: --