Set ThunderBird as Default RSS Reader in Firefox

之前主要用 Google Reader ……
但在线工具毕竟是在线工具……
没有手感 -__- ……
在我还没下定决心用 Google Gear 之前……
我想到了用 ThunderBird ……

好歹自己也算是个 ThunderBird 的拥趸了……
不仅仅只是把它作为一个邮件终端……
还利用其强悍的 Filter 和 Tag 功能管理邮件列表、订阅新闻组……
然后配合 LightningGoogle Calendar 和 Treo 来实现 GTD ……
这次将其提拔为 RSS 阅读器实在是最近有点儿心痒……
想折腾折腾工作环境……

好吧……
入正题……
有人可能会问……
Firefox 不是允许选择线下 RSS 阅读软件么?」
是的……
的确可以……
但是你可以指定 ThunderBird 作为阅读器试试看……
点击 "Subscribe Now" 后除了呼出 ThunderBird 外并没有执行订阅操作……
自家人都不认自家人了……
像个什么话!

屡试屡爽之后……
我意识到这可能是个 Bug ……
二话不说上 Bugzilla 一搜……
果然就就是 Bug 350735 ……
不过前年的 Bug 至今还没解决还真是有点儿那啥……

继续搜索……
找到几种解决临时方案……
其中在 MozillaZine 论坛找到的方案应该是最通用的一种了……
作者 alta88 说是由于 Thunderbird 接受 Feed 的参数与 Firefox 发送的不符而造成的……
知道原因就好办了……
马上搜索 ThunderBird 源码……
在 components\newsblog.js 中找到了如下代码:
(Portable ThunderBird 位于 App\thunderbird\components\newsblog.js)

/* nsICommandLineHandler */ handle : function(cmdLine) { // we only care about "-mail someurl" where someurl is a feed: url // we also don't want to remove the parameter in case we don't end up handling it... var mailPos = cmdLine.findFlag("mail", false); if (mailPos != -1 && cmdLine.length >= mailPos ) { var uriStr = cmdLine.getArgument(mailPos + 1); if (/^feed:/i.test(uriStr)) { var mailWindow = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService() .QueryInterface(Components.interfaces.nsIWindowMediator).getMostRecentWindow("mail:3pane"); // if we don't have a 3 pane window visible already, then we can optimize and do nothing here, // that will let the default command line handler create a 3pane window for us using the feed // URL as an argument to that window when it gets constructed...so we only care about the // case where we want to re-use an existing 3 pane to subscribe to the feed url if (mailWindow) { cmdLine.handleFlagWithParam("mail", false); // eat up the arguments we are now handling cmdLine.preventDefault = true; // prevent the default cmd line handler from doing anything var feedHandler = Components.classes["@mozilla.org/newsblog-feed-downloader;1"].getService(Components.interfaces.nsINewsBlogFeedDownloader); if (feedHandler) feedHandler.subscribeToFeed(uriStr, null, mailWindow.msgWindow); } } } },

显然可以看出……
ThunderBird 要求 Feed 作为 Mail 参数来传递……
具体格式为:

thunderbird.exe -mail feed:URL

我在命令行下测试如下命令……

thunderbird.exe -mail feed:http://www.quchao.com/feed/

果然成功地订阅成功……

问题找出来就好解决了……
两种方案……
让 Firefox 附上参数……
或让 ThunderBird 忽略参数……
显然添加参数比忽略参数要安全……
毕竟 ThunderBird 不只是 RSS 阅读器而已……
忽略掉参数怕会影响其它的服务哟……

那么就拿 Firefox 开刀吧……
看了 alta88 的解决方案……
他增加了两个 pref 变量用来保存参数和 Feed 协议……
很通用的方法……
但我个人觉得没有必要……
不如直接判断阅读器的文件名……
包含 Thunderbird 变添加参数后发送……
一来不必往 Pref 里添加并不常用的变量……(洁癖作祟?)
二来其它 RSS 阅读器没准就直接支持 Firefox 的方式……

我的修改方法如下:
找到 Firefox 的 components\FeedConverter.js 文件……
(Portable 版本位于 App\firefox\components\FeedConverter.js)
搜索:

var ios = Cc["@mozilla.org/network/io-service;1"]. getService(Ci.nsIIOService); var feedURI = ios.newURI(spec, null, null); if (feedURI.schemeIs("http")) { feedURI.scheme = "feed"; spec = feedURI.spec; } else spec = "feed:" + spec; var ss = Cc["@mozilla.org/browser/shell-service;1"]. getService(Ci.nsIShellService); ss.openApplicationWithURI(clientApp, spec);

替换为:

// Hacked by Chappell.Wat from http://QuChao.com @ 2008-6-3 if (clientApp.persistentDescriptor.toLowerCase().indexOf('thunderbird') != -1) { var targetFile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); try { targetFile.initWithPath(clientApp.persistentDescriptor); } catch(e) { alert(e); return(false); } if (!targetFile.exists()) { alert('Client Does Not Exists.'); return(false); } spec = 'feed:' + spec; var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess); process.init(targetFile); var arguments = ['-mail', spec]; process.run(false, arguments, arguments.length,{}); } else { var ios = Cc["@mozilla.org/network/io-service;1"]. getService(Ci.nsIIOService); var feedURI = ios.newURI(spec, null, null); if (feedURI.schemeIs("http")) { feedURI.scheme = "feed"; spec = feedURI.spec; } else spec = "feed:" + spec; var ss = Cc["@mozilla.org/browser/shell-service;1"]. getService(Ci.nsIShellService); ss.openApplicationWithURI(clientApp, spec); }

原理是判断阅读器文件名……
包含 "thunderbird" 便发送 -mail 参数……
至于为何要换 openApplicationWithURI 函数为 run ……
事出无奈……
openApplicationWithURI 似乎无法发送形如 -mail feed:URL 的参数……
且源码应该是被封在 browser.xpt 里……
不过使用效果一样就行了……

最后……
轮到测试时间了……
测试之前我建议还没有在 ThunderBird 里建立 RSS 账户的朋友去新建一个……
(File -> New -> Account... -> RSS News & Blogs)
我当初修改了好久均无法调用订阅动作……
看了代码才知道是没有 RSS 账户提供绑定……
(详见 components\newsblog.js 文件的 120-132 行 )

下面跟着我一起访问 feed:http//www.quchao.com/feed/
(要是觉得慢也可以自己随便找个源喔……)
浏览器会把你带到订阅界面……
在下拉菜单中选择 "Choose Application" 并定位于你的 ThunderBird ……
(如顶图)
接下来猛击 "Subscribe Now"……
不出意外 ThunderBird 应该被激活(或启动)来验证 Feed 地址……
如果验证无误……
这个 Feed 应该就乖乖躺在你的 RSS 账户里了……
如果没有它躺下……
您可以在本文后留下您遇到的问题……
我会尽力解答……

Use FolderPane Tools to change the order

题外话一:
如果你和我一样由于邮箱太多……
新建的 RSS 账户位于底部看不见的话……
我建议使用 FolderPane Tools 来调整账户的顺序……
(如上图)

题外话二:
如果你和我一样不习惯将 RSS 和 Mail 数据放在一起的话……
你可以看看这篇文章……
顺便说一下我的 RSS 账户 ID 是 11……
(现在你知道我到底在 ThunderBird 里放了多少东西了吧)
修改完后……
RSS、邮件和新闻组的数据放在不同的文件夹……
看着舒心……
用着也放心……

题外话三:
很早之前用过一个名为 RSS News Ticker 的软件……
相当好用……
但是该软件的更新是全局式的……
比如你设置 10 分钟更新一次……
那么不管 RSS 有没有显示完它都会“敬业”地进行更新……
我的想法是仅仅订阅一个源……
这个源包含所有我未读 RSS ……
是否能通过编写 Thunderbird 扩展来完成呢……
考虑ing……

[最新变动]

更新到 5.3.0.1638 ……
添加词条:5 ……
更新词条:4 ……
修复错误:10 ……
下载地址更新……

其实我已经彻底投入“四大天王”的怀抱了……
内置 Calendar + Snoozy + RollOver + Mother! ……
容量瞬间节省 1M 多……
对于 Treo650 这是多么大的善举呵……

============ 华丽的分割 ============

其实我不用中文版已经有些时日了……
毕竟英文的某些 agenda 类型的词条翻译过来会显得不太贴切……
保持本语言包的更新……
一来是为了造福胖友……
二来则是不想让之前的工作付诸东流……
如有港台朋友愿意进行繁体用语调整可以直接编辑 loc 文件……
不过请至少保留本日志的地址以便他人寻找更新……
另外我还考虑投递至官方试试……
反正我也即将逃离 Agendus 阵营……
大不了“理直气壮”地跟官方说我不是海贼版用户嘛……
(脸红 ing……)

============ 华丽的分割 ============

Agedus for Win Palm Desktop Edition

Agendus for Win Outlook Edition

自从用上 Palm 以来……
一直离不开 Agendus 这个强大的日程管理软体……
最近它分别释出 PC 端Palm 端的新版(v.4 和 v.11)……
凉鞋俺这个死忠当然得首先试用……

Palm 端的新版与 Clie TJ37 在 Trip View 下依旧有冲突……
但与 Treo 650 暂时没发现冲突……(持续测试中)
Palm 我尚未开始汉化……
等闲下来我也会一齐汉化……

PC 端我一直使用的是 Palm Desktop 版本……
通过设置快捷工具完全可以替代 Palm Desktop 的功用……
于是凉鞋我花了三个晚上将 PC 端完全汉化……
汉化文件虽然是针对 Palm Desktop 版本而制作……
但我汉化时注意到里面也包含针对 Outlook 版本的词条……
所以我相信这个汉化文件可以适用于 PC 端的所有版本……
汉化全部手工完成……
除了个别词条还需斟酌之外……
其它都应与平时的使用相一致了……
PS:未针对繁体中文用户习惯进行优化……
有心的港台朋友可以自行编辑……

而所谓的‘绿色’版本是我的个人爱好而已……
(现在包括服务器在内 95% 的软体都是绿色的鸟……开心……)
我从最新的安装软体里头抽出来的……
所以版本和功能上毋庸担心……
绝对和安装版一样……
而且……
试用期过了以后你同样需要注册后才能使用……

现在提供该绿色版本下载:
PS: 顾忌版权纠纷…… 下载包不含注册码……)

Agendus for Windows
Version 5.3.0 Build 1638
Palm Desktop Edition

国内镜像:(请右键另存)
简体语言包http://VIP.YYJoy.com/Chappell/Agendus/Simplified_Chinese.loc
繁体语言包http://VIP.YYJoy.com/Chappell/Agendus/Traditional_Chinese.loc

海外镜像:(请右键另存)
简体语言包http://www.QuChao.com/Projects/Agendus/Simplified_Chinese.loc
繁体语言包http://www.QuChao.com/Projects/Agendus/Traditional_Chinese.loc

[使用方法]
放置到 Agendus 根目录下……
在 Agendus 中选择 “简体中文”或“繁體中文”……
然后重启 Agendus 程序……
Done……

有任何问题就留言吧……
我睡觉去了……

[更新记录]

06-07-21 : 更新至 4.0.4 Build 1449
06-09-02 : 更新至 4.0.5 Build 1451
06-11-06 : 补档,上传简繁语言包供 OutLook 版使用
06-11-16 : 更新至 4.2.2 Build 1474
07-05-01 : 更新至 4.3.0 Build 1493
08-02-03: 更新至 5.1.0 Build 1600,修正多处 Bug
08-05-26: 更新至 5.3.0 Build 1638

[080429]
继续补档……
纳米盘变慢了…………
换到 FS2You ……

[080427]
补档……
虽然很喜欢 Live-Share ……
但近来发生的连续无法打开下载页面的错误已经让我无法忍受……
因此转向纳米盘……
然后针对有的朋友首次使用而反馈的问题……
添加了初始配置指引……
在文章尾部……

[080423]
添加英文绿色打包版本下载……
解压即可使用……
仍需进行少量设置……
(主要是目录参数变更……)
请参看官方原帖……
下载地址见末尾……

[080421]
iFoo 是一款 Panels UI 主题……
作者是来自于 HydrogenAudio 的 Br3tt ……
该主题一经推出就受到广泛推崇……
(谁让 iPhone 这么火呢……)
在先锋等网站也有相关讨论……

之所以现在才写出来推介给大家……
一来是这段时间才闲下来……
二来则是因为 Panels UI 插件似乎与我的软件环境有冲突……
每当我想修改配置文件的时候便会 Crash ……
知道最近我才发现能正常地进行修改 PUI 代码了……
(注意:官方推荐的 Panels UI 版本是 v0.14.9

由于该皮肤主要适用于英文玩家……
(Foobar 玩家 -__-)
虽然同样适用于中文……
但由于字体和字号大小等原因会造成显示效果并不佳……
于是乎我忍痛操刀将默认字体改成了微软雅黑……
并随之将一些显示中文时会超出或显示不全的地方做了恢复性改造……
另外……
由于我习惯听歌时将 Foobar2000 最小化到 Tray 栏……
(相信很多人也有相同的习惯吧……)
于是我将 iFoo 的“Power Off”功能按钮改变为“Minimize to tray”……
这样就不会造成误关闭的错误了……(深有体会啊)
最大的修改应该是将 iFoo 的歌词面板……
由“歌词秀”改成了“乐辞”……
这样不仅实现了各种播放器的歌词设定通用……
(比如 WMP 和 KMPlayer ……)
还可以在 Foobar 最小化时浮动显示歌词……
这样我写程序或上网时还能分心唱唱卡拉哦克……
嘿嘿……

下面秀一下我的 iFoo……
(我的是 XP Version ……
Vista 下效果更赞……)

Normal Mode:

iFoo Home iFoo Setting NowPlaying Cover Build-in Explorer
Playlist Album ListLyrics (Lyricist.dll) Lyrics Drag to playback

Cover Flow Mode:

Visualization Type 1 Visualization Type 2
Cover Flow 3D Mode Cover Flow Playlist

Minimize Mode:

Minimize Mode

下面提供我修改后的 PUI 文件……
在我的 Foobar2000 v0.9.5.2 Eng 上使用运行正常……
覆盖官方的即可……
下载地址:点此开启下载页面

[080423]
提供英文绿色版本下载……
解压即可使用……
点此开启下载页面

由于是绿色版……
打开后即可使用……
之前有使用 Foobar2000 的用户……
有可能用户文件夹下有一个名为 user_profiles_enabled 的无后缀文件……
删掉它……
然后安装 PanelsUI/iFoo/font 下的字体……
微软雅黑字体请自备……)
最后参看官方原帖来进行一些使用上的调整……
(如果你直接使用我提供的绿色版则无需再调整了……)
要特别提醒的是一些路径的调整……
(我的默认路径是 F:\Tools\Audio\Foobar\
你可以修改为你自己的路径……
需要修改的包括乐辞的歌词编辑器路径……
Cover Flow 模式下的 nocover 图片路径……
在此不再详述……

 注意:新版本尚在编写中,推荐使用缩略版:
http://www.quchao.com/entry/tianya-helper-lite/

[080418]
修正本脚本在天涯某些使用 Ajax 进行分页的版面里无法正确获取首页楼主 ID 的 Bug……
使用鄙人所架设的 ChinaList for Pagerization 源的朋友……
如果想更好使用本脚本……
请在 Pagerization 的 Excluded Pages 添加以下页面……

http://cache.tianya.cn/publicforum/content/*
http://cache.tianya.cn/techforum/content/*
http://*.tianya.cn/new/publicforum/Content.asp?idWriter=*
http://*.tianya.cn/new/techforum/Content.asp?idWriter=*

经过鄙人测试……
该脚本应该算是比较圆满了……
如没有大的问题就不会再更新了……
:)

[080417]
终于解决了此脚本运行时出现的兼容问题……
我开始以为是 FF2 和 FF3 所渲染出来的页面差异问题……
害我昨天的更新还专门针对浏览器的大版本来区别处理……
今天找 ObiWan 测试后才知道“全世界”就我的 Firefox 渲染出来的页面代码不同……(笑)
我的系统和环境基本都是英文的……
不知道和语言版本有没有关系……
不过算了……
既然代码有些许不同……
我只好用正则来解决了……
起初怕正则效率低影响大伙儿的看帖热情……
写完后测试下发现还不错……
哎……
早就该采用正则 + Xpath 这样比较科幻的方法来解决的……
害我昨天白更新了……

浮动控制栏 今天最大的更新是添加了“浮动控制栏”……
Skyee 说这种方便的玩意儿是“小白专用”的……
那我觉得他应该就算最大的小白了……
浮动栏的效果不错……(如右图)
还可以从猴子命令里进行隐藏哟……(-__-|)

1.2 的更新内容如下:
1.添加浮动控制栏……
2.修正某些 Bug ……
3.改用正则替换解决版本间兼容问题……

============================================

[080416]
发布后收到许多 FF2 用户不能正常使用的反馈……
坐下来研究了下……
原来是 FF2 和 FF3 对 HTML 源码进行整理的结果不同所致……
无奈只能找出尘封已久的 FF2.0.014 测试并更新……
目前应该能支持 FF2 平台了……
另外……
Adblock+Firebug 等会对页面源码进行修改的插件也在一定程度上影响了脚本效果……
我只能尽可能地加以兼容……
GreaseMonkey 本身对脚本的影响也不小……
比如某些旧版本的猴子在读写选项值时是不支持 Unicode 字符的……
就需要用 encodeURI 和 decodeURI 加以处理……

1.1 的更新内容如下:
1.支持 FF2 平台……
2.修正某些 Bug ……
3.缩小代码重构范围来提高速度……

ToDo:

1.完善对某些特殊版面(使用 js 分页)的支持…… 目前仅支持该类型版面(如开心乐园)帖子的第一页……

2.增加浮动按钮方便激活功能……
3.消除与 Pagerization 的冲突……

============================================

[080415]
几个月前就答应 Skyee 君要编写这样一个用户脚本(GreaseMonkey UserScript)……
而当时也确实着手去写了一个……
无奈天涯社区里帖子的 HTML 代码实在是太不规范……
无法用 XPath 去做预想中的操作……
然后编写工作就中断了……

近来天涯俨然成了我等“愤怒青年”(笑)的集散地……
闲暇时刻要在那里耗费不少时间……
而帖子里主次不分的回复也着实让俺深切体会到了 Skyee 君的痛苦……
于是乎俺下定决心要写为天涯论坛写一个“只看楼主”的猴子脚本了……

花了两个晚上的时间……
终于实现了这个功能……
天涯社区的帖子代码嵌套有不小问题……
导致 DOM 树生长得很畸形……
因此 XPath 只用在了取楼主 ID 这样的小地方……
真正的操作还是通过重构源码来实现的……
有兴趣的朋友还是直接看代码吧……

该脚本为用户提供了两个主要的功能……
一是仅显示楼主所发的帖子……(Ctrl - Y)
二是高亮显示楼主所发的帖子……(Alt - Y)
个人觉得第二个功能似乎还要更常用一些……
毕竟天涯里的回帖也是战斗的乐趣所在……
因此俺给高亮功能提供了较大的自由度……
你可以通过编写 CSS 自定义高亮的效果……
(默认是粗体+红色边框…… 详见后面的截图)

除了  Ctrl - Y 和 Alt - Y 两个快捷键……
你还可以通过状态栏的猴子的菜单命令来控制……
在猴子图标上点击右键并选择 User Script Commands……
选单中……
1.天涯助手 - 只看楼主/恢复
2.天涯助手 - 高亮楼主/恢复
3.天涯助手 - 隐藏浮栏/恢复
(自 1.2 起添加了浮动控制栏可供更方便地操作……)

下面来讲解一下功能配置……
在 GreaseMoneky 中选中本脚本并进行编辑……
脚本信息的下方便是配置代码段……
/*----------------------------------------------------------------------------- * Configuration *-------------------------------------------------------------------------- */ // Auto show author's only? [true or false] var AUTO_ENABLE = false; // Auto highlight author's? [true or false] var AUTO_HIGHLIGHT = false; // Disable the hotkeys? [true or false] (Note: Ctrl-Y to hide/show; Alt-Y to highlight/restore) var DISABLE_HOTKEY = false; // Hightlight style, Sample: font-weight:bold!important;border:1px solid red; var HIGHLIGHT_STYLE = ''; // Normal style, Sample: font-weight:normal!important;border:0; var NORMAL_STYLE = '';
其中……
AUTO_ENABLE 设置是否自动开启“只看楼主”功能……(true 或 false)
AUTO_HIGHLIGHT 设置是否自动开启“高亮楼主”功能……(true 或 false)
DISABLE_HOTKEY 设置是否禁用快捷键……(Ctrl - Y 和 Alt - Y)
HIGHLIGHT_STYLE 设置高亮帖子的 CSS ……(默认是粗体加红框显示)
NORMAL_STYLE 设置非高亮状态时的 CSS ……

说这么多不如直接给出截图……
(截图来源于此贴……
如果您觉得截图内容侵犯了您的权益……
请联系我移除……)

原始状态:
原始状态

只看楼主 (Ctrl-Y):
只看楼主 (Ctrl-Y)

高亮楼主 (Alt-Y):
高亮楼主 (Alt-Y)

猴子命令:
高亮楼主 (Alt-Y)

浮动控制栏:
浮动控制栏

功能就介绍到这里……
感兴趣的朋友可以直接下载试用……
国外用户:http://www.QuChao.com/Projects/UserScripts/Tianya_Helper.user.js
国内用户:http://VIP.YYJoy.com/Chappell/UserScripts/Tianya_Helper.user.js
脚本官方http://UserScripts.org/Scripts/Source/25213.User.js

有什么意见和建议就留言吧……
如有需要俺会及时更新的……
今天就到这里吧……

おまもりんごさん3

所谓的「923 号室」,
其实是 C72 上出现名为「おまもりんごさん」的软件。
要解释得更清晰一些的话,
它是用于 Windows Media Player 的一款可视化效果插件。
本则日志的顶部便是俺安装于 WMP11 的效果截图,
是 C73 上刚展出的系列第三作,
支持 WMP、iTunes 和 Winamp 。

开始我还以为只是单纯的效果插件,
后来发现屋里的 Loli 竟然真能合着节奏做动作:
时而握着饭勺唱歌,
时而挥舞着痒痒挠扮指挥,
而听某首快歌的时候她居然在屋里乱蹦起来;
而那时屋里的金发美女仅着内衣躺床上睡觉在。
(鼻血…… 还好是背对着你。)
更多细节还是大伙儿自己去发现吧。
老盯着她们也着实很痛苦,
特别是我这种从不用 WMP 的人。
(那你还把 WMP 都升到 11 了?)

由于本人有可怕的「绿色」执念,
因此拿到镜像后便开始研究如何将其绿化安装,
结果发现只需要注册一个 dll 即可实现,
方法如下:

1.复制镜像中的 program/hirahira.net/おまもりんごさん3 到任意目录;
(建议为英文目录)
2.点击该文件夹中的 register.bat 完成 dll 资源的注册;
(同理运行 unregister.bat 进行卸载)
3.启动 WMP;
(据文档所述要求 WMP 9 以上)
4.切换到 Now Playing 界面点右键,
选择 おまもりんごさん3->923 号室(初次运行会跳出设定窗口)
5.如果不出意外即安装成功。

おまもりんごさん3 config

注意配置选项的「主線描画」:
即开启 Cel-Shading 描绘,
有爱的就开启吧。

下面提供安装文件,
感兴趣的请 Ctrl + A :

http://www.damipan.com/file/2D8vsoI.html

好了,
暂时没发现其它播放器可用的途径。
(比如 Kmplayer)

=============================

080408 更新:
我忘了 Kmplayer 可以直接调用 WMP 的 Visualization,
在右键菜单中先启用 Visualization -> Windows Visualization
然后同样在右键菜单中选择 Visualization ->おまもりんごさん3->923 号室 即可。
下面是截图演示:
(歌词部分使用了乐辞

KMP with おまもりんごさん3