function OnInit(initData) { initData.name = "SortTabs"; initData.version = "1.0"; initData.copyright = "(c) 2017 Leo Davidson"; initData.url = "https://resource.dopus.com/t/sort-folder-tabs-on-demand-or-when-listers-open/26890"; initData.desc = "When a new lister opens, alphabetically sort its folder tabs by label."; initData.default_enable = true; initData.min_version = "12.6.2"; } // 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); sortTabs(cmd, openListerData.lister.tabsleft); sortTabs(cmd, openListerData.lister.tabsright); return false; // Don't call us again for this lister. } function sortTabs(cmd, tabList) { var setLabels = DOpus.Create.StringSet(); var mapLabelToTabVec = DOpus.Create.Map(); for (var eTabs = new Enumerator(tabList); !eTabs.atEnd(); eTabs.moveNext()) { var tab = eTabs.item(); var label = tab.displayed_label.toLowerCase(); setLabels.insert(label); if (!mapLabelToTabVec.exists(label)) { mapLabelToTabVec(label) = DOpus.Create.Vector(); } mapLabelToTabVec(label).push_back(tab); } var vecLabels = DOpus.Create.Vector(); for (var eLabels = new Enumerator(setLabels); !eLabels.atEnd(); eLabels.moveNext()) { vecLabels.push_back(eLabels.item()); } vecLabels.sort(); cmd.Clear(); var tabPos = 0; for (var eLabels = new Enumerator(vecLabels); !eLabels.atEnd(); eLabels.moveNext()) { var vecTabs = mapLabelToTabVec(eLabels.item()); for (var eTabs = new Enumerator(vecTabs); !eTabs.atEnd(); eTabs.moveNext()) { var tab = eTabs.item(); cmd.AddLine("Go TABPOS=" + tabPos + "," + tab); ++tabPos; } } if (tabPos > 1) { cmd.Run(); } }