function OnInit(initData) { initData.name = "DeDuplicateTabs"; initData.version = "1.0"; initData.copyright = "(c) 2020 Leo Davidson"; initData.url = "https://resource.dopus.com/t/deduplicatetabs-auto-close-duplicate-tabs-when-new-windows-open/37050/1"; initData.desc = "Automatically closes duplicate folder tabs in new windows."; initData.default_enable = true; initData.min_version = "12.22"; } // Called when a new Lister is opened function OnOpenLister(openListerData) { if (!openListerData.after) { // The tabs aren't open yet. Ask to be called again when they are. return true; } var cmd = DOpus.Create.Command(); cmd.SetSourceTab(openListerData.lister.activetab); closeDuplicateTabs(cmd, openListerData.lister.tabsleft); closeDuplicateTabs(cmd, openListerData.lister.tabsright); return false; // Don't call us again for this lister. } function closeDuplicateTabs(cmd, tabList) { var mapPaths = DOpus.Create.Map(); var vecTabsToClose = DOpus.Create.Vector(); var tabIndex = 0; for (var eTabs = new Enumerator(tabList); !eTabs.atEnd(); eTabs.moveNext()) { var tab = eTabs.item(); var tabPath = tab.path; if (mapPaths.exists(tabPath)) { vecTabsToClose.push_back(tab); if (tab.visible) { cmd.RunCommand("Go TABSELECT=" + mapPaths(tabPath)); } } else { mapPaths(tabPath) = tabIndex; } tabIndex = tabIndex + 1; } if (vecTabsToClose.empty) return; cmd.Clear(); for (var eTabs = new Enumerator(vecTabsToClose); !eTabs.atEnd(); eTabs.moveNext()) { var tab = eTabs.item(); cmd.AddLine("Go TABCLOSE=" + tab); } cmd.Run(); }