Hi all,
I've updated multi.xml but have not checked it into
CVS because I'd like some feedback to make sure I
didn't break the previous functionality.
I changed the regexp to not include commas because I
was trying some searches that needed included a comma
and it didn't work (it tried to split on commas).
Also I added the ability to specify multiple searches
like with different parameters:
multi fm; sf hs /new; gg wood planes
It is disabled by default but if you add
superMultiModeEnabled=true;
in your local prefs it will be enabled.
superMultiModeSepChar=';'; can also be set to whatever
character you want to split the string on but
semicolon is the default.
I've attached a new multi.xml and can check it in if
nobody has any complaints or feedback.
Brent
__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com
<search function="multi">
<name>MultiSearch</name>
<description>
Perform multiple searches with a single command line expression.<br/>
<b><i>superMultiModeEnabled</i></b> can be set to true in localprefs.js to enable super multi mode which allows different sets of
searches to be done (ie: multi search1 /firstParam; search2 search3 /secondParam)<br/>
<b><i>superMultiModeSepChar</i></b> can be set to a character in localprefs.js to determine the split character for the super multi mode
the default value is ;
<div class="helpboxDescLabels">Usage:</div>
<table class="helpboxDescTable">
<tr><td>multi <<i>search1</i>> [<<i>search2</i>> [...]] <<i>term</i>></td></tr>
</table>
<div class="helpboxDescLabels">Example:</div>
<table class="helpboxDescTable">
<tr><td>multi av gg wood planes</td><td> - </td><td>Display the search results for wood planes on altavista and google.</td></tr>
<tr><td>multi fm;sf hs /new</td><td> - </td><td>Display the new projects and files on freshmeat, sourceforge, and hotscripts provided superMultiModeEnabled is set to true in localprefs.js.</td></tr>
</table>
</description>
<category>Search the Web</category>
<contributor>Neel Doshi</contributor>
<script><![CDATA[
// This function is almost identical to the shortcut function in search.html
function multiIsCommand(t)
{
// look for matching commands first
var search = null;
var term = null;
var result = t.match(/^([a-zA-Z]+)\b/)
if (result)
{
if (aliases[result[1]])
{
search = aliases[result[1]];
term = t.slice(result[1].length);
}
}
// then look for longest matching punctuation prefix
if (!search)
{
result = t.match(/^([\s~`!@#$%\^&\*()\-=\+{}\[\];:'<>,\.\/\?]+)/);
if (result)
{
for (var subs = result[1].length; subs>0; subs--)
{
search = aliases[result[1].slice(0, subs)];
if (search)
{
term = t.slice(subs);
break;
}
}
}
}
// then look for longest matching punctuation suffix
if (!search)
{
result = t.match(/([\s~`!@#$%\^&\*()\-=\+{}\[\];:'<>,\.\/\?]+)$/);
if (result)
{
for (var subs = result[1].length; subs>0; subs--)
{
search = aliases[result[1].slice(-subs)];
if (search)
{
term = t.slice(0, -subs);
break;
}
}
}
}
// no match, no dice
if (!search)
return false;
// return the proper search term for the asking procedure
return search;
}
// the multi function actually performs the multiple searches given
// the input parameters. if the user's reuseBrowserWindowMode parameter
// is set to 1, multi will not work. Also, if the user's launchmode
// is not set to zero, multi will pause between searches
// to allow multi to work with browsers other than IE.
function multi(q)
{
if ( reuseBrowserWindowMode == 1 )
{
alert("Multisearch requires the reuseBrowserWindowMode parameter to be set to zero or two. Otherwise, all the searches will be spawned in the same window.");
return false;
}
if ( nullArgs("multi", q) )
return false;
var multiCmdSets = new Array();
var mySuperMultiModeEnabled = (typeof superMultiModeEnabled != "undefined" && superMultiModeEnabled != "");
var mySuperSepChar = (typeof superMultiModeSepChar != "undefined" && superMultiModeSepChar != "") ? superMultiModeSepChar : ";";
if (mySuperMultiModeEnabled == true)
{
var myCmds = q.split(mySuperSepChar);
for (var i=0; i < myCmds.length; i++)
{
var oneCmd = myCmds[i];
multiCmdSets[i] = oneCmd;
}
} else {
multiCmdSets.push(q);
}
for (var m=0; m < multiCmdSets.length; m++)
{
if (result = (multiCmdSets[m]).split( /[\s]+/ ) )
{
var arrCmds = new Array(0);
var arrParams = new Array(0);
// Loop through the arguments to filter out the commands.
// if an argument is not a command, then no future arguments
// can be commands either. The following variable keeps track of this.
var fLoopBool = 1;
var strCommandName;
for ( var i = 1; i <= result.length; i++ )
{
strCommandName = multiIsCommand(result[i - 1]);
if (strCommandName != false && fLoopBool == 1)
{
// Append the command list with this command
arrCmds.push(strCommandName);
}
else
{
// Set the fLoopBool to zero since no more commands should be found
fLoopBool = 0;
// Append the parameter string with this word
arrParams.push(result[i - 1].replace("\x27","\\x27"));
}
}
// Loop through the command list and perform the search
if (arrCmds.length == 0)
{
alert("Multisearch needs at least one search type parameter.");
return false;
}
else
{
// Perform each of the searches
for ( var j = 1; j <= arrCmds.length; j++ )
{
// if the user's launchmode is anything but zero, pause between searches.
if (launchmode != 0)
{
var Timeoutms = 1500;
var SearchString = "performsearch('" + arrCmds[j - 1] + "','" + arrParams.join(" ") + "');";
setTimeout( SearchString, Timeoutms * (j-1) );
}
else
performsearch(arrCmds[j - 1], arrParams.join(" "));
}
}
}
}
}
]]></script>
<copyright>
Copyright (c) 2002 David Bau
Distributed under the terms of the
GNU Public License, Version 2 (http://www.gnu.org/copyleft/gpl.txt)
</copyright>
</search>