K-Meleon
KMeleonWiki > Resources > MacroLibrary > KmmGroups2
Submitted by: JamesD and desga2
Notes:
Groups2.kmm adds a limited groups function for KM version 1.5 and later. It does not replace Sessions, but can be used in addition to sessions. Groups2 can add a tab or group of tabs without clearing currently open tabs.
To save a group have a tab or multiple tabs open to the pages you desire and choose 'Save a Group' from the menu.
There are three ways to load a group. 1) You can click on the group's name in the menu. 2) You can enter the group's name in the URL bar and press ALT + ENTER. 3) You can use the 'Load a Group' item from the menu. This will pop up a box where you can enter the group name. Note that this method will clear any currently open tabs.
Updates:
Changelog - Delete _Groups2_compat function, unused and old. + Add Export groups to ini file function. + Add Import from an ini file function, with two options: Replace and Merge. + Backup your groups in ini file before Import from an ini file. + Open a group in K-Meleon at startup. + Sort function to sort in alphabetical order your list of groups. + Report status of operations in the statusbar. + Option to remember Export, Import, and Backup paths. + Translate function added to all displayed text. + Other minor fixes, corrections, documentation and comments in code.
Changelog + Add session history/restore for group deletes + Add HotGroups support for K-Meleon's Hotlinks + Add Options - About for easy checking of version number + Minor fix to prevent groups count from being a negative number
Open your User Macro Folder (Edit > Configuration > User-Defined Macros) or your Macro Folder (Edit > Configuration > Macros) and create the following text file:
# K-Meleon Macros (http://kmeleon.sourceforge.net/wiki/index.php?id=MacroLanguage) # File name: Groups2.kmm # ---------- Groups2 in tabs for K-Meleon 1.5.x and later ------------------------------- # # Dependencies : main.kmm KM version 1.5 or later and tabs # Resources : - # Preferences : k-meleon_Groups2.<group_name>.<#> = URL # : k-meleon_Groups2.<group_name>.count = Number of URLs in group # : k-meleon_Groups2.count = Total of groups count # : k-meleon_Groups2.<#> = Group name # : k-meleon_Groups2_History.<group_name>.<#> = URL # : k-meleon_Groups2_History.<group_name>.count = Number of URLs in group # : k-meleon_Groups2_History.count = Total of groups count # : k-meleon_Groups2_History.<#> = Group name # : k-meleon_Groups2.startup = Start group name # : k-meleon_Groups2.exportpath, k-meleon_Groups2.importpath, # : k-meleon_Groups2.backuppath, k-meleon_Groups2.paths # : k-meleon_Groups2.HotGroup[0-9] = Boolean enable a Hotgroup for a Hotlink # Version : 0.6.7 2010-08-18 # Authors : JamesD and desga2 # --------------------------------------------------------------------------------------- _Groups2_About { macroinfo = _("Groups2.kmm version 0.6.7 2010-08-18"); alert(_("Groups2.kmm version 0.6.7 2010-08-18"), _(Groups2) ); } _Groups2_RunCode_Save { macroinfo = _("Save the current tab's URLs as a group."); $_Groups2_Name = prompt(_("Assign a name to save this group of tabs."), _("Group Name to save")); macros(_Groups2_Symbols); if ($_Groups2_Name != "") { macros("_Groups2_ObtainC"); if ($_Groups2_Match == "true") { $_Goverwrite = confirm(_("Group name: '") . $_Groups2_Name . _("' already exist.\nDo you want overwrite it?"), _("Group Name to save"), YESNO, QUESTION); $_Goverwrite == "YES" ? plugin(macros, "_Goverwrite(" . $_Groups2_Name . ")") : 0; } else { setpref(STRING, "k-meleon_Groups2." . $_Groups2_Exist_Count, $_Groups2_Name); $_Groups2_Exist_Count = $_Groups2_Exist_Count + 1; setpref(INT, "k-meleon_Groups2.count", $_Groups2_Exist_Count); $_Groups2_Number_of_Tabs = $TabNumber; $_Groups2_Tab_Count = 0; while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Save_Loop; &_Groups2_BuildGroupsMenu; } } } _Groups2_Symbols { $_Groups2_SymbolName = gsub( "&", "+", $_Groups2_Name ); if ($_Groups2_SymbolName != $_Groups2_Name) { $__gt1 = _("The & character is not allowed")."\n\n" ; $__gt2 = $_Groups2_Name ." ". _("has been changed to")."\n\n" ; alert($__gt1 . $__gt2 . $_Groups2_SymbolName , _("Required name change"),EXCLAIM); $_Groups2_Name = $_Groups2_SymbolName ; } } _Groups2_Save_Loop { $_Groups2_Tab_Count == 0 ? setpref(INT, "k-meleon_Groups2." . $_Groups2_Name . ".count", $_Groups2_Number_of_Tabs) : 0; id(ID_TAB_NEXT); setpref(STRING, "k-meleon_Groups2." . $_Groups2_Name . "." . $_Groups2_Tab_Count, $URL); $_Groups2_Tab_Count = $_Groups2_Tab_Count + 1; } _Goverwrite { $_Groups2_Name = $ARG; $_Groups2_Number_of_Tabs = getpref(INT, "k-meleon_Groups2." . $_Groups2_Name . ".count"); $_Groups2_Tab_Count = 0; while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Delete_Loop; $_Groups2_Number_of_Tabs = $TabNumber; $_Groups2_Tab_Count = 0; while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Save_Loop; } Groups2_OpenGroup { $_Groups2_Name = $ARG; $_Groups2_Name == "" ? $_Groups2_Name = $URLBAR : 0; $_Groups2_Name == "" ? $_Groups2_Name = $URL : 0; $_Groups2_Name == $URL ? 0 : $_Groups2_Number_of_Tabs = getpref(INT, "k-meleon_Groups2." . $_Groups2_Name . ".count"); $_Groups2_Tab_Count = 0; if ($_Groups2_Name != $URL) while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Load_Loop; } _Groups2_RunCode_Load { macroinfo = _("Load a saved group of tabs."); $_Groups2_Name = prompt(_("Enter name of group to load."), _("Group Name to load")); if ($_Groups2_Name != "") { macros("_Groups2_ObtainC"); if ($_Groups2_Match == "true") { $_Groups2_Number_of_Tabs = getpref(INT, "k-meleon_Groups2." . $_Groups2_Name . ".count"); $_Groups2_Tab_Count = 0; id(ID_CLOSE_ALLTAB); $URLBAR = "about:blank"; while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Load_Loop; } else { alert(_("No group found with name: ") . $_Groups2_Name, _("Group Name to load"), EXCLAIM); } } } _Groups2_Load_Loop { $_Groups2_URL = getpref(STRING, "k-meleon_Groups2." . $_Groups2_Name . "." . $_Groups2_Tab_Count); if ($URLBAR == "about:blank") { open($_Groups2_URL); $URLBAR = ""; } else { opentab($_Groups2_URL); } $_Groups2_Tab_Count = $_Groups2_Tab_Count + 1; } _Groups2_RunCode_Delete { macroinfo = _("Delete a saved group of tabs."); $_Groups_ATD = getpref(INT, "k-meleon_Groups2.count"); $_Groups_ATD < 1 ? &_Groups2_NoDelete : &_Groups2_Delete2 ; } _Groups2_NoDelete { alert(_("There are no groups to delete"), _("Action halted"),EXCLAIM); } _Groups2_Delete2 { $_Groups2_Name = prompt(_("Enter name of group to delete."), _("Group Name to delete")); if ($_Groups2_Name != "") { macros("_Groups2_ObtainC"); if ($_Groups2_Match == "true") { $_Groups2_DelName = $_Groups2_Name; macros("_Groups2_collapse"); plugin(macros, "_Groups2_Get_Hg(Delete)"); macros("_Groups2_Del_to_History"); macros("_Groups2_ReLoadHistMatch"); setpref(STRING,"k-meleon_Groups2_History." . $_Groups2_Hcount-1 , $_Groups2_NewRName); $_Groups2_Number_of_Tabs = getpref(INT, "k-meleon_Groups2." . $_Groups2_Name . ".count"); $_Groups2_Tab_Count = 0; while ($_Groups2_Tab_Count < $_Groups2_Number_of_Tabs) &_Groups2_Delete_Loop; setpref(INT, "k-meleon_Groups2.count", $_Groups2_Exist_Count - 1); &_Groups2_BuildGroupsMenu; } else { alert("No group found with name: " . $_Groups2_Name, "Group Name to delete", EXCLAIM); } } } _Groups2_Del_to_History { ## add 1 to the existing history count $_Groups2_Hcount = getpref(INT,"k-meleon_Groups2_History.count"); $_Groups2_Hcount = $_Groups2_Hcount + 1 ; setpref(INT,"k-meleon_Groups2_History.count",$_Groups2_Hcount); } _Groups2_ReLoadHistMatch { $_Groups2_NewRName = $_Groups2_Name; ## HExist_Count should be the original count before _Groups2_Del_to_History increased it $_Groups2_HExist_Count = $_Groups2_Hcount -1; $_Groups2_RMatch = "false" ; macros(_Groups2_ReLoadHistMatch2); } _Groups2_ReLoadHistMatch2 { if ($_Groups2_HExist_Count != 0) { $_GU_cntr = 0; ## get group names over the existing history count while ($_GU_cntr < $_Groups2_HExist_Count) { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2_History." . $_GU_cntr); ## compare existing name to the one currently being deleted $_Groups2_RMatch = $_Groups2_NewRName == $_Groups2_EName ? "true" : "false"; if ($_Groups2_RMatch == "true") { $_GU_cntr = $_Groups2_HExist_Count; } $_GU_cntr = $_GU_cntr + 1; } } $_Groups2_RMatch == "true" ? &_Groups2_ReLoadHistMatch3 : 0 ; } _Groups2_ReLoadHistMatch3 { $_Groups2_ExtNRN = "{" . $_Groups2_ExtCnt . "}" ; $_Groups2_NewRName = $_Groups2_NewRName . " " . $_Groups2_ExtNRN ; $_Groups2_ExtCnt = $_Groups2_ExtCnt + 1 ; macros(_Groups2_ReLoadHistMatch2); } _Groups2_Delete_Loop { setpref(INT,"k-meleon_Groups2_History." . $_Groups2_NewRName . ".count",$_Groups2_Tab_Count +1); $_Groups2_Tab_Count == 0 ? delpref("k-meleon_Groups2." . $_Groups2_Name . ".count") : 0; setpref(STRING,"k-meleon_Groups2_History.". $_Groups2_NewRName . "." . $_Groups2_Tab_Count, getpref(STRING,"k-meleon_Groups2.". $_Groups2_Name . "." . $_Groups2_Tab_Count)) ; delpref("k-meleon_Groups2." . $_Groups2_Name . "." . $_Groups2_Tab_Count); $_Groups2_Tab_Count = $_Groups2_Tab_Count + 1; } _Groups2_ObtainC { $_Groups2_Match = "false" ; $_Groups2_Exist_Count = getpref(INT, "k-meleon_Groups2.count"); if ($_Groups2_Exist_Count != 0) { $_GU_cntr = 0; while ($_GU_cntr < $_Groups2_Exist_Count) { macros("_Groups2_Read"); } } } _Groups2_Read { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); $_Groups2_Match = $_Groups2_Name == $_Groups2_EName ? "true" : "false"; if ($_Groups2_Match == "true") { $_Groups2_Match_cntr = $_GU_cntr; $_GU_cntr = $_Groups2_Exist_Count; } else { $_GU_cntr = $_GU_cntr + 1; } } _Groups2_collapse { while ($_Groups2_Match_cntr + 1 < $_Groups2_Exist_Count) { $_Groups2_collapse_value = getpref(STRING, "k-meleon_Groups2." . $_Groups2_Match_cntr + 1); setpref(STRING, "k-meleon_Groups2." . $_Groups2_Match_cntr, $_Groups2_collapse_value); $_Groups2_Match_cntr = $_Groups2_Match_cntr + 1; } delpref("k-meleon_Groups2." . $_Groups2_Exist_Count - 1); } _Groups2_Get_Hg { $_Groups2_DelMethod = $ARG ; $_Groups2_HgCnt = 0; while($_Groups2_HgCnt < 10) { ## Obtain true/false status of hotgroup #HgCnt $_Groups2_Exist_Hg = getpref(BOOL, "k-meleon_Groups2.HotGroup" . $_Groups2_HgCnt); if ($_Groups2_Exist_Hg == true) { $_Groups2_Exist_Hg = getpref(STRING, "kmeleon.plugins.macros.hotlink" . $_Groups2_HgCnt . ".url"); if ($_Groups2_Name == $_Groups2_Exist_Hg) { $_Groups2_DelMethod == "Replace" ? $_Groups2_RMHg = confirm( _("Do you wish to remove the hotlink?"), _("A hotlink exists for group '").$_Groups2_Name."' being replaced.", YESNO, QUESTION) : 0; $_Groups2_DelMethod == "Delete" ? $_Groups2_RMHg = confirm( _("Do you wish to remove the hotlink?"), _("A hotlink exists for group '").$_Groups2_Name."' being deleted.", YESNO, QUESTION) : 0; $_Groups2_HgCnt2 = $_Groups2_HgCnt ; $_Groups2_RMHg == "YES" ? &_Groups2_Del_Hg : 0; $_Groups2_HgCnt = 10; } } $_Groups2_HgCnt = $_Groups2_HgCnt + 1; } } _Groups2_Del_Hg { togglepref(BOOL,"k-meleon_Groups2.HotGroup" .$_Groups2_HgCnt2) ; setpref(STRING,"kmeleon.plugins.macros.hotlink" .$_Groups2_HgCnt2.".url", ""); } _Groups2_Restore { macroinfo = _("Restore a group deleted in the current session."); $_Groups2_HisMax = getpref(INT,"k-meleon_Groups2_History.count"); $_Groups2_HisMax < 1 ? &_Groups2_NoHist : &_Groups2_Restore2 ; } _Groups2_NoHist { alert(_("No groups available in history."), _("History data"),EXCLAIM); } _Groups2_Restore2 { $_Groups2_HisCnt = 0 ; $_Groups2_HisName = "" ; while ( $_Groups2_HisCnt < $_Groups2_HisMax ) { $_Groups2_HisN = getpref(STRING,"k-meleon_Groups2_History." . $_Groups2_HisCnt); $_Groups2_HisName = $_Groups2_HisName . $_Groups2_HisCnt . " ... " . $_Groups2_HisN . "\n" ; $_Groups2_HisCnt = $_Groups2_HisCnt + 1 ; } ## prompt for group alert($_Groups2_HisName. "\n\n". _("Use the number at the next prompt"), _("Note the number by your choice")); $_Groups2_HistRN = prompt(_("Enter the number for the group")); ## validate user's choice $_Groups2_HistRN == "" ? &_Groups2_ReLCancel : &_Groups2_ReLRange ; } _Groups2_ReLCancel { $_Groups2_CancelH = confirm(_("Did you mean to cancel?"),_("Choice was cancelled"),YESNO,QUESTION); $_Groups2_CancelH == "YES" ? 0 : &_Groups2_Restore2 ; } _Groups2_ReLRange { if ( $_Groups2_HistRN >= 0 ) { if ( $_Groups2_HistRN <= $_Groups2_HisMax -1) { macros(_Groups2_ReLoadMatch) ; } else { macros(_Groups2_BadRange); } } } _Groups2_BadRange { $_Groups2_ErrRange = confirm(_("Do you wish to try again?"),_("Your answer was out of range"),YESNO,QUESTION); $_Groups2_ErrRange == "YES" ? &_Groups2_Restore2 : 0 ; } _Groups2_ReLoadMatch { $_Groups2_NewRName = getpref(STRING,"k-meleon_Groups2_History." .$_Groups2_HistRN); $_Groups2_HFindName = $_Groups2_NewRName ; ## for reading history if name extended $_Groups2_Exist_Count = getpref(INT, "k-meleon_Groups2.count"); $_Groups2_RMatch = "false" ; macros(_Groups2_ReLoadMatch2); } _Groups2_ReLoadMatch2 { if ($_Groups2_Exist_Count != 0) { $_GU_cntr = 0; while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); $_Groups2_RMatch = $_Groups2_NewRName == $_Groups2_EName ? "true" : "false"; if ($_Groups2_RMatch == "true") { $_GU_cntr = $_Groups2_Exist_Count; } else { $_GU_cntr = $_GU_cntr + 1; } } } $_Groups2_RMatch == "true" ? &_Groups2_ReLoadMatch3 : &_Groups2_ReLoad ; } _Groups2_ReLoadMatch3 { $_Groups2_ExtNRN = "{" . $_Groups2_ExtCnt . "}" ; $_Groups2_NewRName = $_Groups2_NewRName . " " . $_Groups2_ExtNRN ; $_Groups2_ExtCnt = $_Groups2_ExtCnt + 1 ; macros(_Groups2_ReLoadMatch2); } _Groups2_ReLoad { statusbar(_("Groups2 Restore running")); $_Groups2_NewRcnt = getpref(INT,"k-meleon_Groups2.count") ; # raise the active count by 1 and assign last count to name from history setpref(INT,"k-meleon_Groups2.count", $_Groups2_NewRcnt + 1 ); setpref(STRING, "k-meleon_Groups2." . $_Groups2_NewRcnt, $_Groups2_NewRName); # get count of tabs from history and assign last count to name from history $_Groups2_HTabCnt = getpref(INT,"k-meleon_Groups2_History." . $_Groups2_HFindName . ".count"); setpref(INT,"k-meleon_Groups2.". $_Groups2_NewRName . ".count", $_Groups2_HTabCnt ) ; $_Groups2_HTcnt = 0 ; while($_Groups2_HTcnt < $_Groups2_HTabCnt) { $_Groups2_hURL = getpref(STRING,"k-meleon_Groups2_History." . $_Groups2_HFindName . "." .$_Groups2_HTcnt); setpref(STRING,"k-meleon_Groups2." . $_Groups2_NewRName . "." .$_Groups2_HTcnt ,$_Groups2_hURL); $_Groups2_HTcnt = $_Groups2_HTcnt + 1; } macros("_Groups2_BuildGroupsMenu"); statusbar(_("Restore complete")); } _Groups2_RunCode_Paths { menuchecked = getpref(BOOL, "k-meleon_Groups2.paths") == true; # Checkmark value for the menu must be the first line in macro function. togglepref(BOOL, "k-meleon_Groups2.paths"); } _Groups2_RunCode_Export { macroinfo = _("Export the current groups to an ini file."); if (getpref(BOOL, "k-meleon_Groups2.paths") == true) { $_Groups2_Initial_Export_Path = getpref(STRING, "k-meleon_Groups2.exportpath"); if (length($_Groups2_Initial_Export_Path) != 0) { $_Groups2_Export_Path = promptforfolder(_("Select a folder to contain your exported file."), $_Groups2_Initial_Export_Path); } else { $_Groups2_Export_Path = promptforfolder(_("Select a folder to contain your exported file."), getfolder(UserMacroFolder)); } } else { $_Groups2_Export_Path = promptforfolder(_("Select a folder to contain your exported file."), getfolder(UserMacroFolder)); } if ($_Groups2_Export_Path != "") { if (getpref(BOOL, "k-meleon_Groups2.paths") == true) { setpref(STRING, "k-meleon_Groups2.exportpath", $_Groups2_Export_Path); } $_Groups2_Export_FullPath = $_Groups2_Export_Path . "\\Groups2.ini"; ## Count the groups $_Groups2_Export_Cnt = getpref(INT, "k-meleon_Groups2.count"); if ($_Groups2_Export_Cnt == 0) { alert(_("No groups found in K-Meleon prefs."), _("Warning"), EXCLAIM); } else { $_Groups2_Backup = "false"; macros("_Groups2_RunCode_Export2"); } } } _Groups2_RunCode_Export2 { statusbar(_("Exporting to ") . $_Groups2_Export_FullPath); $_Groups2_Export_Section = "Groups"; $_Groups2_Export_Key = "Count"; $_Groups2_Export_Value = $_Groups2_Export_Cnt; iniwrite($_Groups2_Export_Section, $_Groups2_Export_Key, $_Groups2_Export_Value, $_Groups2_Export_FullPath); if ($_Groups2_Backup == "true") { delpref("k-meleon_Groups2.count"); } $__GCnt = 0; while ($__GCnt < $_Groups2_Export_Cnt) { $_Groups2_Export_Section = $__GCnt; $_Groups2_Export_Key = "Name"; ## Retain group name $_Groups2_Export_GName = getpref(STRING, "k-meleon_Groups2." . $__GCnt); ## next line is for deleting hotgroups if required $_Groups2_Name = $_Groups2_Export_GName ; if ($_Groups2_Backup == "true") { plugin(macros, "_Groups2_Get_Hg(Replace)"); } ## Delete from menu if import backup if ($_Groups2_Backup == "true") { setmenu("_Groups_List", macro, $_Groups2_Export_GName, ""); rebuildmenu("_Groups_List"); } $_Groups2_Export_Value = $_Groups2_Export_GName; iniwrite($_Groups2_Export_Section, $_Groups2_Export_Key, $_Groups2_Export_Value, $_Groups2_Export_FullPath); if ($_Groups2_Backup == "true") { delpref("k-meleon_Groups2." . $__GCnt); } ## Write the count of URLs in the group $_Groups2_Export_Key = "GCount"; $_Groups2_Export_GCount = getpref(INT, "k-meleon_Groups2." . $_Groups2_Export_GName . ".count"); $_Groups2_Export_Value = $_Groups2_Export_GCount; iniwrite($_Groups2_Export_Section, $_Groups2_Export_Key, $_Groups2_Export_Value, $_Groups2_Export_FullPath); if ($_Groups2_Backup == "true") { delpref("k-meleon_Groups2." . $_Groups2_Export_GName . ".count"); } ## Write the URLs in the group to file $__GnCnt = 0; while ($__GnCnt < $_Groups2_Export_GCount) { ## Write the name of an URL in the group $_Groups2_Export_Key = "URL_" . $__GnCnt; $_Groups2_Export_URL = getpref(STRING, "k-meleon_Groups2." . $_Groups2_Export_GName . "." . $__GnCnt); $_Groups2_Export_Value = $_Groups2_Export_URL; $_Gp2_URL_len = length($_Groups2_Export_URL); if ($_Gp2_URL_len > 255) { alert(_("The next item will be trimmed to 256 characters in the exported ini file:") . "\n" . $_Groups2_Export_URL, _("Warning"), EXCLAIM); $_Groups2_Export_Value = substr($_Groups2_Export_URL, 0, 255); } iniwrite($_Groups2_Export_Section, $_Groups2_Export_Key, $_Groups2_Export_Value, $_Groups2_Export_FullPath); if ($_Groups2_Backup == "true") { delpref("k-meleon_Groups2." . $_Groups2_Export_GName . "." . $__GnCnt); } ## Increment the groupcount variable $__GnCnt = $__GnCnt + 1; } ## Increment the count variable $__GCnt = $__GCnt + 1; } if ($_Groups2_Backup == "true") { macros("_Groups2_BuildGroupsMenu"); statusbar(_("Backup complete")); } else { statusbar(_("Export complete")); } } _Groups2_RunCode_Import { macroinfo = _("Replace current groups with those from an ini file."); if (getpref(BOOL, "k-meleon_Groups2.paths") == true ) { $_Groups2_Initial_Import_Path = getpref(STRING, "k-meleon_Groups2.importpath"); if (length($_Groups2_Initial_Import_Path) != 0) { $_Groups2_Import_Path = promptforfile($_Groups2_Initial_Import_Path, _("Groups2 ini files"), "Groups2.ini;G2BkUp.ini"); } else { $_Groups2_Import_Path = promptforfile(getfolder(UserMacroFolder), _("Groups2 ini files"), "Groups2.ini;G2BkUp.ini"); } } else { $_Groups2_Import_Path = promptforfile(getfolder(UserMacroFolder), _("Groups2 ini files"), "Groups2.ini;G2BkUp.ini"); } if ($_Groups2_Import_Path != "") { if (getpref(BOOL, "k-meleon_Groups2.paths") == true) { setpref(STRING, "k-meleon_Groups2.importpath", $_Groups2_Import_Path); } ## Value remains after delete because iniread is reading cached info in registry $__Value = iniread("", "", "", ""); $_Groups2_Import_Section = "Groups"; $_Groups2_Import_Key = "Count"; $_Groups2_Import_Value = ""; ## Check count of groups in ini file $_Groups2_Import_Cnt = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); if ($_Groups2_Import_Cnt == 0) { alert(_("No groups found in the ini file."), _("Warning"), EXCLAIM); } else { $_Groups2_Backup = "false"; $ARG == "Merge" ? plugin(macros, "_Groups2_RunCode_Import2(" . $_Groups2_Merge . ")") : macros("_Groups2_RunCode_Import2"); } } } _Groups2_RunCode_Import2 { ## Check for currently existing groups $_Groups2_Current_Cnt = getpref(INT, "k-meleon_Groups2.count"); if ($_Groups2_Current_Cnt != 0) { $ARG == "Merge" ? plugin(macros, "_Groups2_RunCode_BackUp(" . $_Groups2_Merge . ")") : macros("_Groups2_RunCode_BackUp"); } else { macros("_Groups2_RunCode_Import3"); } } _Groups2_RunCode_BackUp { ## Export all groups to an ini file if (getpref(BOOL, "k-meleon_Groups2.paths") == true) { $_Groups2_Initial_Backup_Path = getpref(STRING, "k-meleon_Groups2.backuppath"); if (length($_Groups2_Initial_Backup_Path) != 0) { $_Groups2_Backup_Path = promptforfolder(_("Select a folder to contain your backup file."), $_Groups2_Initial_Backup_Path); } else { $_Groups2_Backup_Path = promptforfolder(_("Select a folder to contain your backup file."), getfolder(UserMacroFolder)); } } else { $_Groups2_Backup_Path = promptforfolder(_("Select a folder to contain your backup file."), getfolder(UserMacroFolder)); } if ($_Groups2_Backup_Path != "") { if (getpref(BOOL, "k-meleon_Groups2.paths") == true) { setpref(STRING, "k-meleon_Groups2.backuppath", $_Groups2_Backup_Path); } $_Groups2_Export_FullPath = $_Groups2_Backup_Path . "\\G2BkUp.ini"; $_Groups2_Export_Cnt = $_Groups2_Current_Cnt; $ARG == "Merge" ? $_Groups2_Backup = "false" : $_Groups2_Backup = "true"; macros("_Groups2_RunCode_Export2"); $ARG == "Merge" ? macros("_Groups2_RunCode_Import4") : macros("_Groups2_RunCode_Import3"); } if ($_Groups2_Backup_Path == "") alert(_("No backup path was selected.\nBackup prior to import is required.\nImport is aborted."), _("Backup path selection cancelled"), EXCLAIM); } _Groups2_RunCode_Import3 { statusbar(_("Importing from ") . $_Groups2_Import_Path); ## Write the count of groups to pref "k-meleon_Groups2.count" setpref(INT, "k-meleon_Groups2.count", $_Groups2_Import_Cnt); $__GCnt = 0; while ($__GCnt < $_Groups2_Import_Cnt) { $_Groups2_Import_Section = $__GCnt; $_Groups2_Import_Key = "Name"; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_GName = $_Groups2_Import_Value; setpref(STRING, "k-meleon_Groups2." . $__GCnt, $_Groups2_Import_GName); $_Groups2_Import_Key = "GCount"; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_GCount = $_Groups2_Import_Value; setpref(INT, "k-meleon_Groups2." . $_Groups2_Import_GName . ".count", $_Groups2_Import_GCount); $__GnCnt = 0; while ($__GnCnt < $_Groups2_Import_GCount) { $_Groups2_Import_Key = "URL_" . $__GnCnt; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_URL = $_Groups2_Import_Value; setpref(STRING, "k-meleon_Groups2." . $_Groups2_Import_GName . "." . $__GnCnt, $_Groups2_Import_URL); ## Increment the groupcount variable $__GnCnt = $__GnCnt + 1; } ## Increment the count variable $__GCnt = $__GCnt + 1; } macros("_Groups2_BuildGroupsMenu"); statusbar(_("Import complete")); } _Groups2_RunCode_Import4 { statusbar(_("Importing from ") . $_Groups2_Import_Path); $_Groups2_Exist_Count = getpref(INT, "k-meleon_Groups2.count"); $_Groups2_Import_New = 0; $__GCnt = 0; while ($__GCnt < $_Groups2_Import_Cnt) { $_Groups2_Import_Section = $__GCnt; $_Groups2_Import_Key = "Name"; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_GName = $_Groups2_Import_Value; $_Groups2_Import_Key = "GCount"; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_GCount = $_Groups2_Import_Value; $_Groups2_Import_exist = "false"; # Check if import group already exist $_GU_cntr = 0; while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); if ($_Groups2_EName == $_Groups2_Import_GName) { $_Groups2_Import_exist = "true"; $_GU_cntr = $_Groups2_Exist_Count; } else { $_GU_cntr = $_GU_cntr + 1; } } # If import group already exist confirm replace it if ($_Groups2_Import_exist == "true") { $_Greplace = confirm(_("Group name: '") . $_Groups2_Import_GName . _("' already exist.\nDo you want replace it?"), _("Import Merge existing group"), YESNO, QUESTION); if ($_Greplace == "YES") { $_Groups2_Local_GCount = getpref(INT, "k-meleon_Groups2." . $_Groups2_EName . ".count"); setpref(INT, "k-meleon_Groups2." . $_Groups2_Import_GName . ".count", $_Groups2_Import_GCount); $__GnCnt = 0; while ($__GnCnt < $_Groups2_Import_GCount) { $_Groups2_Import_Key = "URL_" . $__GnCnt; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_URL = $_Groups2_Import_Value; setpref(STRING, "k-meleon_Groups2." . $_Groups2_Import_GName . "." . $__GnCnt, $_Groups2_Import_URL); ## Increment the groupcount variable $__GnCnt = $__GnCnt + 1; } while ($_Groups2_Local_GCount > $_Groups2_Import_GCount) { delpref("k-meleon_Groups2." . $_Groups2_Import_GName . "." . $_Groups2_Local_GCount - 1); $_Groups2_Local_GCount = $_Groups2_Local_GCount - 1; } } } else { # If import group not exist add it to the end of group list setpref(STRING, "k-meleon_Groups2." . ($_Groups2_Exist_Count + $_Groups2_Import_New), $_Groups2_Import_GName); setpref(INT, "k-meleon_Groups2." . $_Groups2_Import_GName . ".count", $_Groups2_Import_GCount); $__GnCnt = 0; while ($__GnCnt < $_Groups2_Import_GCount) { $_Groups2_Import_Key = "URL_" . $__GnCnt; $_Groups2_Import_Value = iniread($_Groups2_Import_Section, $_Groups2_Import_Key, $_Groups2_Import_Value, $_Groups2_Import_Path); $_Groups2_Import_URL = $_Groups2_Import_Value; setpref(STRING, "k-meleon_Groups2." . $_Groups2_Import_GName . "." . $__GnCnt, $_Groups2_Import_URL); ## Increment the groupcount variable $__GnCnt = $__GnCnt + 1; } # New group to added $_Groups2_Import_New = $_Groups2_Import_New + 1; } ## Increment the count variable $__GCnt = $__GCnt + 1; } ## Add new groups to the count of groups in pref "k-meleon_Groups2.count" setpref(INT, "k-meleon_Groups2.count", ($_Groups2_Exist_Count + $_Groups2_Import_New)); $_Groups2_Merge = ""; macros("_Groups2_BuildGroupsMenu"); statusbar(_("Import complete")); } _Groups2_RunCode_Import_M { macroinfo = _("Merge current groups with those in an ini file"); $_Groups2_Merge = "Merge"; plugin(macros, "_Groups2_RunCode_Import(" . $_Groups2_Merge . ")"); } _Groups2_Sort { macroinfo = _("Sort the list of groups by alphabetical order"); statusbar(_("Sorting groups")); $_Groups2_Exist_Count = getpref(INT, "k-meleon_Groups2.count"); if ($_Groups2_Exist_Count > 1) { $_GU_cntr = 0; $_GU_cntr2 = 0; $_Groups2_List = ""; # Sort order is: z-a > Z-A > 9-0, by ANSI code value -> 1st item is the minor value $_Groups2_Glist_H = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr2); $_Groups2_Glist_T = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr2 + 1); $_Groups2_Glist_H2 = ""; $_Groups2_Glist_T2 = ""; # H, ..., T => Head = minor value, Tail = major value -> in List_tmp # H2, ..., T2 => Head2 = minor value, Tail2 = major value -> in final List # The sorted method obtain the minor (Head) and major (Tail) values from List_tmp in each cicle. # This values are stored in H2 and T2 and are added to the final List. # At the end of proccess you obtain the sorted groups in List. # How you obtain 2 values in each cicle (minor and major) the list is sorted in the half of cicles. while ($_GU_cntr2 < (($_Groups2_Exist_Count / 2) + 1)) { $_Groups2_List_tmp = $_Groups2_Glist_H . "\n" . $_Groups2_Glist_T . "\n"; # Compare with each group name while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); # Avoid items already added to the final List if (index($_Groups2_List, $_Groups2_EName) == -1) { # If minor add to List_tmp in Head if ($_Groups2_EName < $_Groups2_Glist_H) { $_Groups2_List_tmp = $_Groups2_EName . "\n" . $_Groups2_List_tmp; $_Groups2_Glist_H = $_Groups2_EName; } else { # If major add to List_tmp in Tail if ($_Groups2_EName > $_Groups2_Glist_T) { $_Groups2_List_tmp = $_Groups2_List_tmp . $_Groups2_EName . "\n"; $_Groups2_Glist_T = $_Groups2_EName; } else { # If not minor and not major add in middle of List_tmp, before of Tail or after of Head $_Groups2_List_tmp = sub($_Groups2_Glist_T, $_Groups2_EName . "\n" . $_Groups2_Glist_T, $_Groups2_List_tmp); } } } $_GU_cntr = $_GU_cntr + 1; } # If final List is empty, is the first cicle. Add Head and Tail to final List if ($_Groups2_List == "") { $_Groups2_List = $_Groups2_Glist_H . "\n" . $_Groups2_Glist_T . "\n"; } else { # Check Head not exist in final List to avoid duplicates in final List and add it after H2 if (index($_Groups2_List, $_Groups2_Glist_H) == -1) { $_Groups2_List = sub($_Groups2_Glist_H2 . "\n", $_Groups2_Glist_H2 . "\n" . $_Groups2_Glist_H . "\n", $_Groups2_List); } # Check Tail not exist in final List to avoid duplicates in final List and add it before T2 if (index($_Groups2_List, $_Groups2_Glist_T) == -1) { $_Groups2_List = sub($_Groups2_Glist_T2, $_Groups2_Glist_T . "\n" . $_Groups2_Glist_T2, $_Groups2_List); } } # Move H to H2 and T to T2 $_Groups2_Glist_H2 = $_Groups2_Glist_H; $_Groups2_Glist_T2 = $_Groups2_Glist_T; # Reset item counter for group names $_GU_cntr = 0; # Obtain new H and T values from List_tmp and delete it in List_tmp $_Groups2_List_tmp = sub($_Groups2_Glist_H . "\n", "", $_Groups2_List_tmp); $_Groups2_Glist_H = substr($_Groups2_List_tmp, 0, index($_Groups2_List_tmp, "\n")); $_Groups2_List_tmp = sub($_Groups2_Glist_H . "\n", "", $_Groups2_List_tmp); $_Groups2_Glist_T = substr($_Groups2_List_tmp, 0, index($_Groups2_List_tmp, "\n")); $_Groups2_List_tmp = sub($_Groups2_Glist_T . "\n", "", $_Groups2_List_tmp); $_GU_cntr2 = $_GU_cntr2 + 1; } # All groups are sorted in $_Groups2_List # Reorder Prefs: $_GU_cntr = 0; $_Groups2_EName = ""; while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_EName = substr($_Groups2_List, 0, index($_Groups2_List, "\n")); setpref(STRING, "k-meleon_Groups2." . $_GU_cntr, $_Groups2_EName); $_Groups2_List = sub($_Groups2_EName . "\n", "", $_Groups2_List); $_GU_cntr = $_GU_cntr + 1; } # Destroy the list of groups in menu and rebuild it sorted $_GU_cntr = 0; while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_DelName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); $_Groups2_DelName != "" ? setmenu($_m, macro, $_Groups2_DelName, "") : 0; $_GU_cntr = $_GU_cntr + 1; } $_Groups2_DelName = ""; &_Groups2_BuildGroupsMenu; statusbar(_("Sorting complete")); } } _Groups2_StartGroup { macroinfo = _("Load a group at startup."); $_startupGroup = getpref(STRING, "k-meleon_Groups2.startup"); $_Groups2_Name = prompt(_("Enter name of group to load at startup. Enter '!' to disable."), _("Group Name at startup"), $_startupGroup); if ($_Groups2_Name != "") { $_Groups2_Name != "!" ? setpref(STRING, "k-meleon_Groups2.startup", $_Groups2_Name) : delpref("k-meleon_Groups2.startup"); } } _Groups2_BuildMenu { if ($kTabs) { $_g = "&Groups"; setmenu(Main, popup, $_g, "&Tools"); $__m = "_Groups"; setmenu($_g, inline, $__m); setmenu($__m, macro, _("&Save a group ..."), _Groups2_RunCode_Save); setmenu($__m, macro, _("&Load a group ..."), _Groups2_RunCode_Load); setmenu($__m, macro, _("&Delete a group ..."), _Groups2_RunCode_Delete); setmenu($__m, separator, 3); setmenu($__m, popup, _("&Options")); setmenu(_("&Options"), macro, _("Start &with group ..."), _Groups2_StartGroup); setmenu(_("&Options"), macro, _("&Sort groups ..."), _Groups2_Sort); setmenu(_("&Options"), popup, _("&HotGroups")); &_Groups2_BuildHotGroupsMenu; setmenu(_("&Options"), separator, 3); setmenu(_("&Options"), macro, _("Res&tore"), _Groups2_Restore); setmenu(_("&Options"), separator, 5); setmenu(_("&Options"), macro, _("&Export ..."), _Groups2_RunCode_Export); setmenu(_("&Options"), popup, _("&Import")); setmenu(_("&Import"), macro, _("&Merge ..."), _Groups2_RunCode_Import_M); setmenu(_("&Import"), macro, _("&Replace ..."), _Groups2_RunCode_Import); setmenu(_("&Options"), macro, _("Retain &paths"), _Groups2_RunCode_Paths); setmenu(_("&Options"), separator, 9); setmenu(_("&Options"), macro, _("&About"), _Groups2_About); setmenu($__m, separator, 5); $_Groups2_DelName = ""; &_Groups2_BuildGroupsMenu; } } _Groups2_BuildGroupsMenu { $_g = "&Groups"; $_m = "_Groups_List"; setmenu($_g, inline, $_m); $_Groups2_Exist_Count = getpref(INT, "k-meleon_Groups2.count"); $_GU_cntr = 0; while ($_GU_cntr < $_Groups2_Exist_Count) { $_Groups2_EName = getpref(STRING, "k-meleon_Groups2." . $_GU_cntr); setmenu($_m, macro, $_Groups2_EName, "Groups2_OpenGroup(" . $_Groups2_EName . ")"); $_GU_cntr = $_GU_cntr + 1; } $_Groups2_DelName != "" ? setmenu($_m, macro, $_Groups2_DelName, "") : 0; rebuildmenu($_g); rebuildmenu($_m); $_Groups2_DelName = ""; getpref(INT,"k-meleon_Groups2.count") == 0 ? delpref("k-meleon_Groups2.count") :0; } _Groups2_HotGroup0 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup0"); togglepref(BOOL, "k-meleon_Groups2.HotGroup0"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup0") ? "HotGroup" : "Hotlink", _("Hotlink 0 as %s"))); } _Groups2_HotGroup1 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup1"); togglepref(BOOL, "k-meleon_Groups2.HotGroup1"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup1") ? "HotGroup" : "Hotlink", _("Hotlink 1 as %s"))); } _Groups2_HotGroup2 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup2"); togglepref(BOOL, "k-meleon_Groups2.HotGroup2"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup2") ? "HotGroup" : "Hotlink", _("Hotlink 2 as %s"))); } _Groups2_HotGroup3 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup3"); togglepref(BOOL, "k-meleon_Groups2.HotGroup3"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup3") ? "HotGroup" : "Hotlink", _("Hotlink 3 as %s"))); } _Groups2_HotGroup4 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup4"); togglepref(BOOL, "k-meleon_Groups2.HotGroup4"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup4") ? "HotGroup" : "Hotlink", _("Hotlink 4 as %s"))); } _Groups2_HotGroup5 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup5"); togglepref(BOOL, "k-meleon_Groups2.HotGroup5"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup5") ? "HotGroup" : "Hotlink", _("Hotlink 5 as %s"))); } _Groups2_HotGroup6 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup6"); togglepref(BOOL, "k-meleon_Groups2.HotGroup6"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup6") ? "HotGroup" : "Hotlink", _("Hotlink 6 as %s"))); } _Groups2_HotGroup7 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup7"); togglepref(BOOL, "k-meleon_Groups2.HotGroup7"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup7") ? "HotGroup" : "Hotlink", _("Hotlink 7 as %s"))); } _Groups2_HotGroup8 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup8"); togglepref(BOOL, "k-meleon_Groups2.HotGroup8"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup8") ? "HotGroup" : "Hotlink", _("Hotlink 8 as %s"))); } _Groups2_HotGroup9 { macroinfo = _("Toggle Hotlink/HotGroup"); menuchecked = getpref(BOOL, "k-meleon_Groups2.HotGroup9"); togglepref(BOOL, "k-meleon_Groups2.HotGroup9"); statusbar(sub("%s", getpref(BOOL, "k-meleon_Groups2.HotGroup9") ? "HotGroup" : "Hotlink", _("Hotlink 9 as %s"))); } _Groups2_BuildHotGroupsMenu { # Create HotGroups menu & accels: setmenu(_("&HotGroups"), macro, _("&Set Hotlink as HotGroup..."), "kmPrefs(hotlinks)"); setmenu(_("&HotGroups"), separator, 1); $_i=0; while($_i != 10) { setmenu(_("&HotGroups"), macro, _("HotGroup ") . $_i, "_Groups2_HotGroup" . $_i); setaccel("CTRL " . $_i, "macros(_Groups2_OpenHotGroup(" . $_i . "))"); $_i = $_i + 1; } } _Groups2_OpenURL { # Open a Hotlink URL value: $_Folder = pluginmsgex(bookmarks, FindNick, $OpenURL,STRING); $_Folder ? 0 : $_Folder = pluginmsgex(hotlist, FindNick, $OpenURL, STRING); $_Folder ? $URLBAR=$OpenURL : plugin(macros, "Groups2_OpenGroup(" . $OpenURL .")"); $_Folder ? id(ID_SELECT_URL) : 0; $_Folder ? id(ID_NAV_GO) : 0; } _Groups2_OpenHotGroup { # Check if a Hotlink URL value is URI or Group/Nick name: $OpenURL = getpref(STRING, $_hotlink . $ARG . ".url"); if (getpref(BOOL, "k-meleon_Groups2.HotGroup" . $ARG)) { $OpenURL == ""? 0 : &_Groups2_OpenURL; } else { $OpenURL == ""? 0 : (getpref(BOOL, $_hotlink.$ARG.".new")? &OpenURL_InNew : open($OpenURL)); } } _Groups2_SetAccels { setaccel("ALT VK_RETURN", "macros(Groups2_OpenGroup)"); } _Groups2_Startup { $_startupGroup = getpref(STRING, "k-meleon_Groups2.startup"); $_startupGroup != "" ? plugin(macros, "Groups2_OpenGroup(" . $_startupGroup . ")") : 0; # Merge variable initialization is needed $_Groups2_Merge = ""; } _Groups2_HistEOS { # history count $_Groups2_HisMax = getpref(INT,"k-meleon_Groups2_History.count"); delpref("k-meleon_Groups2_History.count"); $_Groups2_HisCnt = 0 ; $_Groups2_HisName = "" ; while ( $_Groups2_HisCnt < $_Groups2_HisMax ) { # group name $_Groups2_HisName = getpref(STRING,"k-meleon_Groups2_History." . $_Groups2_HisCnt); delpref("k-meleon_Groups2_History." . $_Groups2_HisCnt); # group tab count $_Groups2_HTabCnt = getpref(INT,"k-meleon_Groups2_History." . $_Groups2_HisName . ".count"); delpref("k-meleon_Groups2_History." . $_Groups2_HisName . ".count"); $_Groups2_HTcnt = 0 ; while($_Groups2_HTcnt < $_Groups2_HTabCnt) { # group tab delpref("k-meleon_Groups2_History." . $_Groups2_HisName . "." .$_Groups2_HTcnt ); $_Groups2_HTcnt = $_Groups2_HTcnt + 1; } $_Groups2_HisCnt = $_Groups2_HisCnt + 1 ; } $_Groups2_HisCnt = 0 ; while ($_Groups2_HisCnt < 10 ) { # unused hotlink value getpref(STRING,"kmeleon.plugins.macros.hotlink".$_Groups2_HisCnt.".url") == "" ? delpref("kmeleon.plugins.macros.hotlink".$_Groups2_HisCnt.".url") :0; getpref(BOOL,"k-meleon_Groups2.HotGroup".$_Groups2_HisCnt) == false ? delpref("k-meleon_Groups2.HotGroup".$_Groups2_HisCnt) :0; $_Groups2_HisCnt = $_Groups2_HisCnt +1 ; } } _Groups2_Initial { $_Groups2_ExtCnt = 1; } $OnQuit = $OnQuit . "_Groups2_HistEOS;"; $OnInit = $OnInit . "_Groups2_SetAccels;_Groups2_BuildMenu;_Groups2_Initial;"; $OnStartup = $OnStartup . "_Groups2_Startup;"; $macroModules = $macroModules . "Groups2;";