examples/marking.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 125 3e2421384d7a
permissions -rw-r--r--
Fix module loading problem


-- MARKING

-- public functions:
--  * mark
--  * unmark
--  * mark_toggle
--  * marked
--  * foreach_marked
--  * marked_clear
-- binds 331 (Ins)
-- FIXME
--  * freezes on loading
-- TODO:
--  * test
--  * check jid type
--  * print marked/unmarked to log
--  * check command formatting

local 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' } )

-- Ins
if not main.binding ( '331' ) then
	main.binding ( '331', 'lua mark_toggle ()' )
	main.hook ( 'hook-lua-quit',
		function ( args )
			main.binding ( '331', nil )
		end )
end

-- vim: se ts=4 sw=4: --