K-Meleon
KMeleonWiki > Resources > MacroLibrary > KmmPriorTabs
Submitted by: JamesD
Notes:
PriorTabs creates a list of closed tabs for the current session and presents the list as a menu. The user may click on any prior tab to re-open the tab.
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: PriorTabs.kmm # ---------- Re-Open PriorTabs for K-Meleon 1.5.3 ---- # # Dependencies : main.kmm, KM version 1.5.3 and later, tabs # Resources : PriorTabs.ini # Preferences : - # Version : 1.1 2010-10-05 # Author : JamesD ( extra menu options by jsnj) # -------------------------------------------------------------------------------- _PriorTabs_ClearList { ## erase the ini file exec("cmd /c ERASE \"".$_PriorTabs_Path."\""); ## For user of win9x operating systems, cmd should be replaced with Command in the above line $_PriorTabs_Clearing = 1 ; &_PriorTabs_BuildListMenu ; $_PriorTabs_Clearing = 0 ; } _PriorTabs_ClearListMenu { $_PriorTabs_Clearing = 1 ; &_PriorTabs_BuildListMenu ; $_PriorTabs_Clearing = 0 ; } _PriorTabs_WipeList { $_PriorTabs_L = length(readfile($_PriorTabs_Path)); if ( $_PriorTabs_L > 1) { exec("cmd /c ERASE \"".$_PriorTabs_Path."\""); ## For user of win9x operating systems, cmd should be replaced with Command in the above line } } _PriorTabs_OpenTab { $_PriorTabs_URL = urldecode( $ARG ); $_PriorTabs_Pt1 = index( $_PriorTabs_URL, "~~" ); $_PriorTabs_URL = substr($_PriorTabs_URL, $_PriorTabs_Pt1 +2 ); opentab($_PriorTabs_URL) ; } _PriorTabs_CreateList { &_PriorTabs_CheckForLength ; &_PriorTabs_CheckListForDup ; $_PriorTabs_CurrType < 2 ? $_PriorTabs_Count = $_PriorTabs_Count + 1 : 0 ; if ($_PriorTabs_WasDup == 0) { $_PriorTabs_CurrType == 0 ? iniwrite("List", $_PriorTabs_Count, $TITLE . "~~" . $URL, $_PriorTabs_Path) :0; $_PriorTabs_CurrType == 1 ? iniwrite("List", $_PriorTabs_Count, "~~" . $URL, $_PriorTabs_Path) :0; $_PriorTabs_CurrType == 2 ? alert(_("URL length exceeds storage"). "\n" ._("Unable to store tab"), _("PriorTabs"), EXCLAIM) :0; } if ($_PriorTabs_WasDup == 1) { &_PriorTabs_ClearListMenu; } &_PriorTabs_BuildListMenu ; $_PriorTabs_WasDup = 0 ; } _PriorTabs_CheckForLength { $_PriorTabs_CurrType = 0 ; $_PriorTabs_CurrLength = length($TITLE . "~~" . $URL); if ( $_PriorTabs_CurrLength > 250 ) { $_PriorTabs_CurrType = 1 ; $_PriorTabs_CurrLength = length("~~" . $URL) ; if ( $_PriorTabs_CurrLength > 250 ) { $_PriorTabs_CurrType = 2 ; } } } _PriorTabs_CheckListForDup { $PT__cntr = 0; $_PriorTabs_ini_Value = ""; while($PT__cntr < $_PriorTabs_Count) { $_PriorTabs_EName = iniread("List", $PT__cntr +1, $_PriorTabs_ini_Value, $_PriorTabs_Path); if ($_PriorTabs_EName == $URL) { # Hold the current value in $_PriorTabs_ENameH $_PriorTabs_ENameH = $_PriorTabs_EName ; # overwrite downward from $_PriorTabs_Count to current key $PT__cntr_D = $PT__cntr + 1 ; while( $PT__cntr_D < $_PriorTabs_Count) { $_PriorTabs_EName = iniread("List", $PT__cntr_D +1 , $_PriorTabs_ini_Value, $_PriorTabs_Path); iniwrite("List", $PT__cntr_D, $_PriorTabs_EName, $_PriorTabs_Path); $PT__cntr_D = $PT__cntr_D + 1 ; } # If a dup write the new (replaced) item to highest key $_PriorTabs_WasDup = 1 ; $_PriorTabs_EName = $_PriorTabs_ENameH ; iniwrite("List", $PT__cntr_D, $_PriorTabs_ENameH, $_PriorTabs_Path); $_PriorTabs_Count = $_PriorTabs_Count -1 ; } $PT__cntr = $PT__cntr + 1 ; } } _PriorTabs_BuildMenu { if($kTabs){ $PT__g=_("Prior Tabs"); setmenu("NavEx",popup,$PT__g,3); $kSessions ? setmenu("&Sessions",popup,$PT__g,2):0; setmenu("TabButtonPopup",popup,$PT__g); $PT__m1="Options"; setmenu($PT__g,inline,$PT__m1); setmenu($PT__m1,macro,_("Clear List"),_PriorTabs_ClearList); setmenu($PT__m1,separator,1); &_PriorTabs_BuildListMenu; } } _PriorTabs_BuildListMenu{ $PT__g=_("Prior Tabs"); $PT__m2="PriorTabs_List"; setmenu($PT__g,inline,$PT__m2); if ($_PriorTabs_Count!=0) { $PT__cntr = 0; $_PriorTabs_ini_Value = ""; while($PT__cntr < $_PriorTabs_Count) { $_PriorTabs_EName = iniread("List", $PT__cntr +1, $_PriorTabs_ini_Value, $_PriorTabs_Path); if ($_PriorTabs_Clearing == 1) { setmenu($PT__m2,macro,$_PriorTabs_EName,""); } else { $_PriorTabs_ENameA = urlencode($_PriorTabs_EName); setmenu($PT__m2,macro,$_PriorTabs_EName,"_PriorTabs_OpenTab(".$_PriorTabs_ENameA.")"); } $PT__cntr = $PT__cntr + 1 ; } } if ($_PriorTabs_Clearing + $_PriorTabs_WasDup > 0) { rebuildmenu($PT__g); } rebuildmenu($PT__m2); } _PriorTabs_GetPath{ $_PriorTabs_Path=getfolder(UserMacroFolder)."\\PriorTabs.ini"; $_PriorTabs_Count = 0 ; $_PriorTabs_Clearing = 0 ; $_PriorTabs_WasDup = 0 ; } #--------------------------------------------- $OnCloseTab=$OnCloseTab."_PriorTabs_CreateList;"; $OnInit=$OnInit."_PriorTabs_GetPath;_PriorTabs_WipeList;_PriorTabs_BuildMenu;"; $OnQuit=$OnQuit."_PriorTabs_WipeList;"; $macroModules=$macroModules."PriorTabs;";
Comments & Questions http://kmeleon.sourceforge.net/forum/read.php?4,110702