最近接了个比较有挑战性的任务——写帮助文档...@_@。由于需要收集资料,第一时间就想到了Tiddlywiki。以前用Tiddlywiki的时候只是当个好玩的记事本来用,这几天脑力过剩,工作之余就摆弄下插件,改改样式,看看代码,倒也不亦乐乎。越来越发觉Tiddlywiki的确是个好东东,如果让我早几年发现这个东西,也许我就会对javascript早点改观,不会象如今这样看着一些ajax的应用兴叹:原来javascript还可以做成这样的……。
关于Tiddlywiki的基本知识就不多费唇舌了,有兴趣的朋友可以去 http://jiangzhanyong.com/tiddlywiki.html 看看介绍(注意:如果你用的是IE6,进入网站后要立刻打开右边栏的“偏好设置”,把“使用动画显示”取消掉。否则就等着看一秒8格的幻灯片吧......)。用一句简单的话来说,Tiddlywiki就是一个完全用html+javascript+css编写的带有wiki特性的记事本。它把程序逻辑和内容数据都放在一个html文件中,因此只要把这个html文件email或者放到USB盘里,找台有浏览器的电脑就可以继续干活了。心血来潮的话把文件往WEB服务器上一放,别人就可以通过http访问了。
当然,这造成了一个问题:文件会越来越大。好在一个空的Tiddlywiki本身并不大,200来K左右,我曾经把一个Tiddlywiki文件填到2M左右,在本地打开倒也没发现什么问题(放在网上,客户端就要先把这2M的文件的html文件下载下来才能打开)。Tiddlywiki提供了从另一个Tiddlywiki文件中导入条目的功能,因此如果文件的确太大,要分成多个Tiddlywiki文件也很方便,只是分离之后交叉引用就不方便了。
Tiddlywiki的另一个优点是网上有不少免费插件,通过合理利用这些插件,可以令Tiddlywiki实现许多有趣的功能。但是同样,安装插件也会令文件体积增大(通常这是Tiddlywiki文件过大的主要原因),所以要根据需要合理选择。我现在一般是一个项目用两个专门的Tiddlywiki文件,一个是日常记事和时间计划,另一个是知识库,根据项目的需要装必要的插件。许多刚开始用Tiddlywiki的朋友往往不知道怎样安装插件,其实很简单:插件其实就是一个wiki条目。网上的插件一般都也是放在一个Tiddlywiki文件中的,你把关于这个插件的条目打开编辑,源代码就在里面了。在自己的Tiddlywiki里新建一条条目,把代码copy过来,取同样的标题和分类名(分类中必须有systemConfig)。保存后刷新页面,插件就起作用了。当然,还有个更方便的做法是把包含插件的tiddlywiki文件整个下载回来,然后在自己的tiddlywiki中使用“导入条目”功能把插件成批导入。
Tiddlywiki有个最大的问题是在IE6中表现一般。它默认打开的条目动画效果在IE6中会变得非常慢,一定要关掉。而且安装了某些插件后可能会出现在IE下保存出错,通常是文件头部分编码出错导致CSS布局混乱,如果出现这种情况又没有备份,只要用一个好的Tiddlywiki把文件前几行copy过来就行了。如果还不行,也不用担心会掉失有用信息,找一个空的Tiddlywiki把坏文件里面的信息条目都导进去就可以了。当然,防范胜于治疗,如果以IE6为主要浏览器时,安装新插件前一定要先备份,安装完后保存刷新页面后立刻再保存一次并刷新(第一次启动插件,第二次测试),确认没有问题再输入有用信息。以上说的情况,在Firefox里就不会出现。顺带一提,Firefox有个tiddlysnip免费扩展可以很方便的把网页的内容添加到tiddlywiki中,挺好用。
以上是简单用法介绍,这里谈谈这几天摆弄Tiddlywiki的一些心得,
一、应用
1. 活动桌面
个人觉得这是Tiddlywiki一个最另类但实用的功能:将它设置为windows的活动桌面。现在你的桌面图标就可以全部扔进回收站了。Tiddlywiki支持用file:///链接本地文件或目录,而活动桌面是IE内核……你该明白我说什么了吧。你可以通过Tiddlywiki活动桌面打开chm, pdf, html, txt, doc等等文件,能直接运行exe和cmd文件,还能直接打开目录,基本上可以满足日常需要了。你可以很方便通过Tiddlywiki的内容组织能力去组织这些“快捷方式”,例如用">"标签建立Treeview结构,或者在说明文字中放一个“点这里运行”的链接。别忘了Tiddlywiki本身是个记事本,现在你不用满世界找notepad的图标或者安装桌面便贴软件,直接在桌面上点“新建条目”就可以了。这个方案的缺点有:
a.无法直接打开lnk快捷方式。有些应用程序需要通过lnk快捷方式打开,例如需要设置启动目录位置或者运行参数的应用程序。由于IE不认识lnk文件,如果在tiddlywiki中直接连接的话,它会先下载再打开,期间弹出两次对话框,很麻烦。解决的方法是:1. 做个同样效果的cmd文件;2. 把lnk放到快速启动栏;3.把lnk文件集中到一个目录中,然后在Tiddlywiki的醒目位置放一条打开这个目录的连接。第3点适用于所有IE不认识的文件,当然,你也可以直接把目录甚至快捷方式放在桌面上。
b. 由于活动桌面其实就是IE,上面提到在IE6中的问题都会遇到。所以一定要关掉动画效果,装插件时必须小心。有些样式风格和插件用来做桌面很不错,但由于与IE6冲突也只好忍痛割爱了。据说IE7有所改善,但我没有试过。
c. 有时某些操作会引起桌面自动刷新,这时如果tiddlywiki活动桌面中有尚未保存的数据,就会丢失。(系统会有对话框提示,但这时候无论选确定还是取消,信息都无法保存了)好在这种情况并不常见,我这几天平均每天在电脑前15小时以上,一天也就刷新了3、4次,只需要及时存盘基本上问题不大。也可以考虑打开自动保存选项,此选项保证确认修改一个条目都自动存盘,同时应关闭保存备份选项。
对于活动桌面,我总觉得装太多插件会影响系统性能,因此只装了一些必要的,大概有:
a. CalendarPlugin, CalendarPluginConfig, DatePlugin, DatePluginConfig:这四个插件一起可以为tiddlywiki添加一个类似blog的月历。高亮显示今天和有修改记录的日期,点击日期可以打开下拉菜单查看修改的条目
b. ToggleSideBarMacro: 这个插件可以添加一个按钮打开或隐藏右边工具栏
c. SinglePageModePlugin: 这个插件增加三个配置选项,可以定制同时只会显示一条条目(打开新条目将关闭其他旧条目),或者新条目总在最顶打开,或总在最底打开。因为我不太喜欢在活动桌面里拉滚动条,因此这个插件在这种时候非常有用。
d. BreadCrumbsPlugin: 显示打开条目的历史,javascript富客户端的通病之一就是无法返回前一页面,当使用SinglePageModePlugin时这个缺点就特别突出。这个插件让你可以在点历史路径上的条目名来返回前面的页面
2. GTD计划表
据说GettingThingsDone是一个很实用的日常事务管理方法,有关的书籍我没看过,不过从monkeyGTD ( http://monkeygtd.tiddlyspot.com/ ) 的版面看上去的确不错。monkeyGTD是tiddlywiki的一个mod,提供了GTD计划管理的功能。它已经包括了几个基本的插件,例如前面提到的月历插件,有个比较有趣的功能是,如果设置了提醒条目,你拉下日历中的下拉菜单时会显示距离这个提醒还有多少天。前面提到对每个项目使用两个tiddlywiki文件,monkeyGTD就非常适宜用来计划与记事。我甚至想用它来做活动桌面,可惜它的样式在IE里无法正确显示,只好放弃了。
3. 知识库
既然名字里有wiki,这是基本功能了。通过搭配合适的插件,可以为tiddlywiki加入blog的特性,变成一个bliki,或者叫wikilog。通常的搭配是前面的日历插件加上ForEachPlugin(或tiddlerList)。ForEachPlugin支持对条目进行复杂的筛选循环,这样就可以在首页中顺序列出最近更新的条目了。有一个专门的WeblogPlugin据说可以更直接地在启动时自动打开最近更新的条目,但我试了一下,并不运作,可能是版本问题或者插件冲突。现在正在研究中...
在原始版的Tiddlywiki里,分类标签并不起眼。但通过一些插件就可以实现很方便的组织功能。较常用的组合是:IntelliTagger(辅助填写分类信息的工具栏)+QuickOpenTagPlugin(把Tag作为条目打开)+NewHere(把当前条目标题作为分类名创建一条新条目)+RenameTagsPlugin(统一修改分类名称)
二 插件资源
官方网站推荐了一些插件网站:
http://www.tiddlywiki.com/#AbegoSoftware%20BidiXTW%20Gimcrack'd%20JacksTiddlyWiki%20LewcidTW%20MonkeyPirateTW%20PeachTW%20RedMountainVista%20TiddlyStyles%20TiddlyTools
列一下我觉得有用的插件,我的选择标准主要是倾向信息组织方面和易用性方面的
1. AbegoSoftware http://tiddlywiki.abego-software.de/
ForEachTiddlerPlugin 可以根据循环条件列出条目
IntelliTaggerPlugin 填写分类的工具条
2. Jack's TiddlyWiki http://jackparke.googlepages.com/jtw.html
PublishMacro 将内容导出到多个html文件
SectionMacro 一个方便的可展开的按钮 (用原版虽然也可做到同样效果,但需要使用多条条目)
TiddlerListMacro 可以根据循环条件列出条目
BreadCrumbsPlugin 在标题栏下列出你打开条目的历史记录,非常适合配合SinglePageModePlugin一起使用
DoBackupMacro 提供一个备份按钮(原版备份需要先在配置中勾选“保存备份”然后再选“保存”,若下次保存不想保存备份,则还要取消“保存备份”)
3. Lewcid http://tw.lewcid.org/
FullScreenPlugin 提供一个快捷按钮切换到全屏模式(隐藏标题、菜单栏与右栏)
JumpToTopMacro 提供一个可以直接回到文档顶部的按钮
OpenTiddlersMacro 可用一个连接打开多个条目
PopupMacro 在内容中创建弹出菜单
TaggerPlugin: 为条目增加一个tags下拉菜单,可以为条目设置或取消分类
ToggleSideBarMacro: 提供一个可以隐藏/显示右边栏的按钮
4. MonkeyPirateTW http://mptw.tiddlyspot.com/
CloseOnCancelPlugin 若新建条目时在编辑状态选了“取消”,则直接关闭该条目
ExtentTagButtonPlugin 在Tag标签的下拉菜单中增加一条添加新条目的选项
NewHerePlugin 在条目的快捷按钮中增加一个按钮,新建一条目并以当前条目名称作为分类名
QuickOpenTagPlugin 把分类作为条目打开
RenameTagsPlugin 对分类统一重命名或删除
5 PeachTW http://bradleymeck.tiddlyspot.com/
InlineJavascriptPlugin 在条目中插入javascript
6 tiddlytools http://www.tiddlytools.com/
CalendarPlugin 提供可显示日历的标签 (网站上另有一CalendarPluginConfig条目设置外观)
DatePlugin 与CalendarPlugin配合可为日历加上下拉菜单 (网站上另有一DatePluginConfig条目设置外观)
AutoTaggerPlugin 自动为条目添加作者,日期等分类信息
HTMLFormattingPlugin 可在内容中加入html标签(原版在标签中的内容无法使用wiki特性,而这个plugin则不受影响)
(这个网站上还有不少很炫的插件,但与我的需求无关也就没有仔细尝试了)
样式资源
http://tiddlythemes.com/
(未完待续)
三 定制页面
四 编写插件
tiddlywiki明确地分离了内容、表现和行为。其中内容是由用户输入,行为是由插件和宏来实现。表现则可以通过定义一些特殊的条目来进行配置。这些条目在英文版中称为shadowed tiddler,中文标准版中称为默认tiddler,也有些版本称为影子条目。在原始版本中,页面右下方有一标签页,有一页叫“更多”或“more”,点进去后下面又是一个子标签页,有一页叫“默认tiddler”或“Shadowed”,此页列出了所有的默认特殊条目。
如果由于定制原因找不到这个标签页,可以新建一个条目,输入<>(必须使用两个小于号与两个大于号括起来),确定后就可以列出所有默认tiddler的条目了。初始情况下,这些条目并不存在,在列表中可以看到它们属于未定义的WikiWord(初始情况下是斜体字),但实际上它们已被系统赋予了默认值。当向这些条目输入了新内容,就以输入的内容的为准,当删掉输入的同名条目后,则回复到原来的默认值,而默认的条目就无法删除了,这就是它们称为“影子”的原因。
合理使用这些影子条目可以定制TiddlyWiki的表现特性,它们又可以细分为三类:系统内容,页面框架(模板),页面样式。
1. 系统内容:包括配置信息、列表信息、与表现内容
1.1 配置信息
AdvancedOptions: 高级配置选项条目。编辑这个条目可以看到,这里基本上是一些配置复选框的宏(宏是用<< >>括起的部分)。
PlugManager: 用来配置插件
ImportTiddlers: 用来导入外部条目
DefaultTiddlers: 用来设置打开TiddlyWiki时自动打开显示的条目
SiteUrl: 当放在HTTP服务器上时,设置本页的根路径
ColorPalette: 设置一些命名的颜色值
1.2 列表信息
TabAll: 列出所有条目。(不包括未被覆盖的影子条目)
TabMoreMissing: 列出未定义的WikiWord (不包括未被覆盖的影子条目)
TabMoreOrphans: 列出没有被任何条目连接的条目
TabMoreShadowed: 列出影子条目
TabTags: 列出所有已定义的分类标签
TabTimeline: 按最后修改日期排序列出所有条目
GettingStarted: 一条指导用户进行简单初始配置的条目(DefaultTiddlers默认指向此条目)
1.3 表现内容
SiteTitle: 页面标题
SiteSubtitle: 页面子标题
MainMenu: 主菜单内容
OptionsPanel: “偏好设定”配置栏内容
SideBarTabs: 右栏下方的标签页内容
SideBarOptions: 右栏内容。初始情况下包括搜索框与右栏一系列按钮,若使用日历插件可考虑在此加入显示日历的宏。
TabMore: “其他”分页标签
2. 页面框架:
PageTemplate: 页面的整体嵌套布局模板。通过修改此条目可以改变页面的结构,例如去掉标题部分,把左栏竖列显示菜单改为在标题栏下横排显示等等。要注意默认情况下,标题栏的底色是在这个条目中定义的,个人认为这是一个败笔(颜色属于样式,应在StyleSheetLayout或StyleSheetColor条目中定义)。除了这点之外,这个条目非常好地体现了布局与样式分离的原则,默认情况下这一条目内容非常简单:
从内容中可以清楚看到各板块的嵌套关系,而且也只包括了嵌套信息(除了第一行那很碍眼的颜色设置),具体的定位与颜色搭配都留给StyleSheet系列条目定义。
注意在编辑时可以看到内容中开始和结尾带有 ... 两行,这是种很有趣的用法:由于这个条目的内容是代码,作者不想tiddlywiki对其进行语法解释,因此用tiddlywiki的代码标记{{{...}}}将其括起;但这个条目作为HTML代码条目需要暴露给浏览器进行解释,而浏览器不认识{{{...}}}标记,因此需要用HTML注释标记将其括起。在编写插件时经常会使用这种交叉注释的做法。
-----------------------------
ViewTemplate: 显示条目时使用的模板。默认内容也是非常简单(交叉注释部分略去,下同):
第一行定义了条目上方的快捷按钮,第二行显示条目标题,第三行显示条目信息,第四行列出以本条目为分类标签的条目,第五行显示本条目所属的分类标签,第六行显示正文。这个条目也完全不涉及样式。若要添加或减少条目的快捷按钮或在条目中添加其他宏(例如返回页面顶部的插件宏),可以修改此条目。
-----------------------------
EditTemplate: 编辑条目时的模板。进入编辑条目状态时,使用这个模板来显示输入界面。结构类似ViewTemplate。