- "ChinaUnix.net" search plugin
- "VeryCD" search plugin
- "python-chinese" search plugin
学习制作Mozilla搜索插件(Mozilla-Search plugins)
Mozilla搜索插件在Mozilla和Mozilla Firefox里的表现形式不太一样,但Firefox也可以安装SearchSideBar这个扩展来实现同样的sidebar。
为Mozilla添加新的搜索插件很简单,如Mycroft上所说,只要你懂一点html的知识。Mycroft是搜索插件的"集散地",你在Firefox的搜索工具栏的下拉菜单里选"添加引擎"就会带你去这里,找到你想用的插件,点击链接安装它们。
Mycroft有很详细的制作教程,甚至还有一个plugin生成页面帮你,不过我没试过。
下面我结合我为CU精华贴搜索制作的搜索插件来介绍如何制作一个搜索插件。
首先,用你最喜欢的文本编辑器新建一个文件。我在Windows下用的是PSPad,你可能喜欢别的,当然用记事本也可以。Unix下就不用多说了,vi、emacs、nano随便你。
先写一些注释信息,以#开头,可以描述一下这个插件是为哪个搜索引擎创建的、作者是谁、最后更新时间等等。这些虽然是可写可不写的,但是强烈建议你加上,至少可以显得我们很专业。像我,就写这么一行:
# Mozilla plug-in file for ChinaUnix.net by wolfg <wolfg****@*****mail.com>
关于这些header信息如何写,可以参考http://mycroft.mozdev.org/deepdocs/headerinfo.html。
下面开始真正的plugin代码。插件代码要求必须以SEARCH标签开始,
<search
接下来必须是version这个属性
version="7.1"
注意,这个version并不是指plugin自己的版本。至于7.1这个值是怎么来的,请详细阅读SEARCH标签的文档。
属性name和description都是必须的,name用来显示在选择搜索引擎的下拉菜单里。这里我写的是:
name="ChinaUnix.net"
description="ChinaUnix.net"
属性action、searchForm和method比较重要了,是plugin能否工作正常的条件之一。searchForm要指定包含输入搜索条件 表单(Form)的那个页面的url,比如CU的搜索就是http://search.chinaunix.net/cgi-bin/search; action则和搜索表单里的action一样,查看包含表单的那个页面的源代码就知道了;method呢,显然应该跟表单的method属性一样,但是 现在只能用GET。
method="GET"
action="http://search.chinaunix.net/cgi-bin/search"
searchForm="http://search.chinaunix.net/cgi-bin/search"
因为CU的搜索是简体中文页面,所以queryEncoding和queryCharset这两个属性也要加上。
queryEncoding="gb2312"
queryCharset="gb2312"
然后呢,用>关闭SEARCH标签的开始部分,跟写html标签一样。
在用</search>来结束SEARCH标签之前,还需要包含INPUT标签和INTERPRET标签。
INPUT标签是用来告诉Mozilla把什么信息提交给搜索页面的。
<input name="sourceid" value="Mozilla-search">
这个名为sourceid的INPUT是用来告诉搜索页面是Mozilla-search提交查询请求的,满足网站统计的需要。
<input name="key" user>
这个也是重要的地方,user表示这个是需要用户在搜索工具栏里输入的查询信息。这种需要用户输入的INPUT标签只能有一个。name的值要看搜索页面的源代码来确定。CU搜索页面的那个input的name是key,所以这里的name也是key。
CU的搜索还需要两个信息,forum_num和mode,这些就不能要求用户输入了,所以直接用value来指定固定的值。当然,这些也是通过查看搜索页面的源代码得知的。
<input name="forum_num" value="-1">
<input name="mode" value="title">
<inputnext name="begin" factor="50">
<inputprev>
<inputnext name="page_n" factor="1">
<inputprev>
inputnext和inputprev标签比较特殊,用来实现在Mozilla的侧栏(sidebar)里将查询结果分页。factor表示下一 页时属性的增长值。上面的代码表示每次按下"下一页",begin会增加50,按下"前一页"则减少50。(注:factor是从0开始计算的。而CU的 搜索中page_n这个参数是从1开始的,所以在sidebar里的分页工作得不正常。已经有人提出了这个问题,,是个bug吗?)
INPUT标签的文档在这里。
INTERPRET标签则是用来告诉Mozilla如何解释查询返回的结果的。至少要包括resultListStart、resultListEnd、 resultItemStart和resultItemEnd这四个属性。
<interpret
browserResultType="result"
charset = "gb2312"
resultListStart = '<table width=100% border="0" cellspacing="1" cellpadding="0" align="center">'
resultListEnd = "</table>"
resultItemStart="<td >"
resultItemEnd="</td>"
>
这里,resultListStart和resultListEnd是告诉Mozilla从什么地方开始查找查询结果,直到遇见什么为止。 resultItemStart和resultItemEnd告诉Mozilla在它们指定的范围内找<a xhref="" mce_href="" >标签以便生成sidebar里的查询结果列表。
现在该用</search>来结束SEARCH标签了。
最后,还需要BROWSER标签来指定与插件更新相关的一些信息,如更新的url和检查周期。
<browser
update="http://mycroft.mozdev.org/update.php/id0/chinaunix.src"
updateIcon="http://mycroft.mozdev.org/update.php/id0/chinaunix.gif"
updateCheckDays="7"
>
完整的代码如下:
# Mozilla plug-in file for ChinaUnix.net by wolfg <wolfg****@****mail.com>
<search
version="7.1"
name="ChinaUnix.net"
description="ChinaUnix.net"
method="GET"
action="http://search.chinaunix.net/cgi-bin/search"
searchForm="http://search.chinaunix.net/cgi-bin/search"
queryEncoding="gb2312"
queryCharset="gb2312"
><input name="sourceid" value="Mozilla-search">
<input name="key" user>
<input name="forum_num" value="-1">
<input name="mode" value="title">
<inputnext name="begin" factor="50">
<inputprev>
<inputnext name="page_n" factor="1">
<inputprev><interpret
browserResultType="result"
charset = "gb2312"
resultListStart = '<table width=100% border="0" cellspacing="1" cellpadding="0" align="center">'
resultListEnd = "</table>"
resultItemStart="<td >"
resultItemEnd="</td>"
></search>
<browser
update="http://mycroft.mozdev.org/update.php/id0/chinaunix.src"
updateIcon="http://mycroft.mozdev.org/update.php/id0/chinaunix.gif"
updateCheckDays="7"
>
现在保存这个文本文件,扩展名得是.src。 还需要为插件准备一个图标文件。这个图标得是16x16像素的gif、jpg、jpge或png文件,文件名 必须和插件代码的名字一致。比如,我这个代码文件叫chinaunix.src,那么它的图标文件就得是chinaunix.gif或 chinaunix.png什么的。详细要求在这里。
在把你的插件提交到Mycroft之前,请遵照这里的要求检查一番吧。怎么安装你 的插件呢?最简单的办法,直接copy到Mozilla的searchplugins目录。默认情况下,Windows 下这个目录是C:/Program Files/Mozilla.org/Mozilla/searchplugins(Firefox的是C:/Program Files/Mozilla Firefox/searchplugins),Linux下是/usr/lib/Mozilla/searchplugins(非root用户需要写权限)。
一切正常?只要你满意就可以提交了,分享你的成果吧!
cygwin下不能退出Emacs
在Cygwin下练习使用Emacs,敲了C-x C-c后不退出。
google "emacs cygwin quit",发现不只我遇到这个问题,呵呵。
解决办法:修改启动Cygwin的批处理文件 cygwin.bat。
在@echo off后面加上这一行
set CYGWIN=binmode tty ntsec
改好以后是这样的:
@echo off
set CYGWIN=binmode tty ntsec
C:\
chdir C:\cygwin\bin
bash --login -i
Ref: http://lists.gnu.org/archive/html/help-gnu-emacs/2005-01/msg00499.html
CYGWIN这个环境变量的详细介绍在Cygwin的User Guide里可以找到。
foobar2000
其实早就知道foobar2000了,记得好像有人叫它"程序员的播放器"。
PSPad
终于可以踢掉UltraEdit和EditPlus了:)
更重要的是,感觉PSPad对Unicode的支持比其他的好,这下可以开始翻译docbook文档了,呵呵。
强烈推荐!!