<?xml version="1.0"?>
<button backcol="none" display="label" separate="yes" textcol="none">
	<label>Close Duplicate Tabs</label>
	<tip>Closes duplicate tabs in file display</tip>
	<icon1>#newcommand</icon1>
	<function type="script">
		<instruction>@script JScript</instruction>
		<instruction>function OnClick(clickData)</instruction>
		<instruction>{</instruction>
		<instruction>	var cmd = clickData.func.command;</instruction>
		<instruction>	cmd.deselect = false; // Prevent automatic deselection</instruction>
		<instruction>	cmd.ClearFiles();</instruction>
		<instruction />
		<instruction>	var lister = clickData.func.sourcetab.lister;</instruction>
		<instruction>	closeDuplicateTabs(cmd, lister.tabsleft);</instruction>
		<instruction>	closeDuplicateTabs(cmd, lister.tabsright);</instruction>
		<instruction />
		<instruction>}</instruction>
		<instruction />
		<instruction>function closeDuplicateTabs(cmd, tabList)</instruction>
		<instruction>{</instruction>
		<instruction>	var mapPaths = DOpus.Create.Map();</instruction>
		<instruction>	var vecTabsToClose = DOpus.Create.Vector();</instruction>
		<instruction>	var tabIndex = 0;</instruction>
		<instruction />
		<instruction>	for (var eTabs = new Enumerator(tabList); !eTabs.atEnd(); eTabs.moveNext())</instruction>
		<instruction>	{</instruction>
		<instruction>		var tab = eTabs.item();</instruction>
		<instruction>		var tabPath = tab.path;</instruction>
		<instruction>		</instruction>
		<instruction>		if (mapPaths.exists(tabPath))</instruction>
		<instruction>		{</instruction>
		<instruction>			vecTabsToClose.push_back(tab);</instruction>
		<instruction>			if (tab.visible)</instruction>
		<instruction>			{</instruction>
		<instruction>				cmd.RunCommand(&quot;Go TABSELECT=&quot; + mapPaths(tabPath));</instruction>
		<instruction>			}</instruction>
		<instruction>		}</instruction>
		<instruction>		else</instruction>
		<instruction>		{</instruction>
		<instruction>			mapPaths(tabPath) = tabIndex;</instruction>
		<instruction>		}</instruction>
		<instruction>		</instruction>
		<instruction>		tabIndex = tabIndex + 1;</instruction>
		<instruction>	}</instruction>
		<instruction />
		<instruction>	if (vecTabsToClose.empty)</instruction>
		<instruction>		return;</instruction>
		<instruction />
		<instruction>	cmd.Clear();</instruction>
		<instruction />
		<instruction>	for (var eTabs = new Enumerator(vecTabsToClose); !eTabs.atEnd(); eTabs.moveNext())</instruction>
		<instruction>	{</instruction>
		<instruction>		var tab = eTabs.item();</instruction>
		<instruction>		cmd.AddLine(&quot;Go TABCLOSE=&quot; + tab);</instruction>
		<instruction>	}</instruction>
		<instruction />
		<instruction>	cmd.Run();</instruction>
		<instruction>	cmd.Clear();</instruction>
		<instruction>}</instruction>
	</function>
</button>
