\n大多数工种都需要答一些Linux方面的问题\n整理一些题 给大家参考一下 学习linux到底应该学什么\n\n1 Linux中的swap相当于windows中的什么?\n\n2 使用shell写一个程序,把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。\n\n3 使用perl正则表达式判断一个日期是否合法(不考虑闰年)。\n\n4 写一个脚本,从网上下载一个文件,保存到指定目录。\n\n5 写一个脚本,执行指定任务(具体不记得了),如果检测到某个事件发生,就发送一个邮件到xxx@xxx.com\n每天要定时执行,应该如何设置?\n\n6 写一个脚本,判断一个数是不是完数。打印出1-1000之间的完数。 完数就是约数的和等于自身2倍的数。\n\n7 如果提示 can not open share object. libstdc++......so.3: no such file or .....,如何解决\n\n8 linux可以充当哪些设备,具体以其中一个为例子详细说明。\n\n9 写一个脚本,以行为单位,求文件A和文件B交集,并集,差集。\n\n10 谈谈你对proc文件系统的理解。 \n\n{{{\n\n1 Linux中的swap相当于windows中的什么?\n虚拟内存?\n2 使用shell写一个程序,把某个目录下的文件扩展名改为bat,再以时间为文件名压缩打包存放到某个目录。\nf_old=$1\nf_new=${f_old%.*}.bat\n\nfor i in ~/xxx do;\nmv i f_new\n# or rename\ntt=date %%% ...\ntar cvf ./xxx $tt.tar\n\n3 使用perl正则表达式判断一个日期是否合法(不考虑闰年)。\n\n这个俺写不出来,搜了个 YYMMDD\n^((\sd{2}((0[13578]|1[02])(0[1-9]|[12]\sd|3[01])|(0[13456789]|1[012])(0[1-9]|[12]\sd|30)|02(0[1-9]|1\sd|2[0-8])))|([02468][048]|[13579][26])0229)$\n4 写一个脚本,从网上下载一个文件,保存到指定目录。\n#!/bin/bash\nurl=\ndir=\nwget .....\n\n5 写一个脚本,执行指定任务(具体不记得了),如果检测到某个事件发生,就发送一个邮件到xxx@xxx.com\n这个检查 $? , 好办,不会是要检查 IPC signal 吧?\n\n6 写一个脚本,判断一个数是不是完数。打印出1-1000之间的完数。 完数就是约数的和等于自身2倍的数。\n16-28-496 :)\n7 如果提示 can not open share object. libstdc++......so.3: no such file or .....,如何解决\napt-get ,,hahahahaha !!!!!!!!!!!!!!!!!!\n\n8 linux可以充当哪些设备,具体以其中一个为例子详细说明。\nwhat's this mean ? linux(软件)=设备(硬件)?\n\n9 写一个脚本,以行为单位,求文件A和文件B交集,并集,差集。\nsed !\n}}}\n\nSource: [[Ubuntu中文 论坛 :: 阅读主题 - 9月14日 百度笔试题 跟linux相关的部分|http://forum.ubuntu.org.cn/viewtopic.php?t=75270&highlight=wget+%E4%BD%BF%E7%94%A8]]
<<tagCloud>>
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed\n<<option chkOpenInNewWindow>> OpenLinksInNewWindow\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close\n^^(override with Control or other modifier key)^^\n<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP\n<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time\n^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^\n<<option chkConfirmDelete>> ConfirmBeforeDeleting\nMaximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>\nFolder name for backup files: <<option txtBackupFolder>>\n<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page
<<timeline better:true excludeTag:hidden sortBy:created maxDays:1024 maxEntries:2048>>
!Articles
/***\n|Name|AutoOpenTiddlersPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#AutoOpenTiddlersPlugin|\n|Version|0.21|\n|Requires|~TW2.x|\n!!!Description:\nOpen a user defined number of recent tiddlers automatically when the TW loads.\nYou can also specify a tag and only load tiddlers that have that tag.\nTo change the number of tiddlers automatically opened, or define a tag to use, ed the config.autoOpenTiddlers part of the code below.\n\n!!!To Do\n*add an option to exclude tiddlers with a particular tag\n\n!!!Code\n***/\n//{{{\n//edit this section to change the default settings\nconfig.autoOpenTiddlers = \n{\n count: 0, //number of tiddlers opened.\n tag: undefined //change if you want to open tiddlers with a specific tag, eg: 'DefaultTiddlers'\n}\n\n\nconfig.autoOpenTiddlers.handler = function()\n{\n if (this.tag == undefined)\n var newTiddlers = store.getTiddlers("modified");\n else\n var newTiddlers = store.getTaggedTiddlers(this.tag,"modified");\n var newTiddlers = newTiddlers.reverse();\n var max = Math.min(this.count,newTiddlers.length-1);\n for (var i=max; i>=0; i--)\n { story.displayTiddler(null,newTiddlers[i].title);} \n}\n\nwindow.old_lewcid_autoOpenTiddlers_restart = restart;\nrestart = function ()\n{\n window.old_lewcid_autoOpenTiddlers_restart();\n config.autoOpenTiddlers.handler();\n}\n//}}}
Bash 是我们经常与之打交道的 Shell 程序,本文针对其使用技巧进行了搜罗。相信在你看过这些内容之后,定会在 Bash 的世界里游刃有余。\n\n * 从历史中执行命令\n\n 有时候,我们需要在 Bash 中重复执行先前的命令。你当然可以使用上方向键来查看之前曾经运行过的命令。但这里有一种更好的方式:你可以按 Ctrl + r 组合键进入历史搜索模式,一旦找到需要重复执行的命令,按回车键即可。\n * 重复命令参数\n\n 先来看一个例子:\n\n mkdir /path/to/exampledir\n cd !$\n\n 本例中,第一行命令将创建一个目录,而第二行的命令则转到刚创建的目录。这里,“!$”的作用就是重复前一个命令的参数。事实上,不仅是命令的参数可以重复,命令的选项同样可以。另外,Esc + . 快捷键可以切换这些命令参数或选项。\n * 用于编辑的快捷键\n o Ctrl + a:将光标定位到命令的开头\n o Ctrl + e:与上一个快捷键相反,将光标定位到命令的结尾\n o Ctrl + u:剪切光标之前的内容\n o Ctrl + k:与上一个快捷键相反,剪切光标之后的内容\n o Ctrl + y:粘贴以上两个快捷键所剪切的内容\n o Ctrl + t:交换光标之前两个字符的顺序\n o Ctrl + w:删除光标左边的参数(选项)或内容\n o Ctrl + l:清屏\n * 处理作业\n\n 首先,使用 Ctrl + z 快捷键可以让正在执行的命令挂起。如果要让该进程在后台执行,那么可以执行 bg 命令。而 fg 命令则可以让该进程重新回到前台来。使用 jobs 命令能够查看到哪些进程在后台执行。\n\n 你也可以在 fg 或 bg 命令中使用作业 id,如:\n fg %3\n\n 又如:\n bg %7\n * 使用置换\n o 命令置换\n\n 先看例子:\n du -h -a -c $(find . -name *.conf 2>&-)\n\n 注意 $() 中的部分,这将告诉 Bash 运行 find 命令,然后把返回的结果作为 du 的参数。\n o 进程置换\n\n 仍然先看例子:\n diff <(ps axo comm) <(ssh user@host ps axo comm)\n\n 该命令将比较本地系统和远程系统中正在运行的进程。请注意 <() 中的部分。\n o xargs\n\n 看例:\n find . -name *.conf -print0 | xargs -0 grep -l -Z mem_limit | xargs -0 -i cp {} {}.bak\n\n 该命令将备份当前目录中的所有 .conf 文件。 \n * 使用管道\n\n 下面是一个简单的使用管道的例子:\n ps aux | grep init\n\n 这里,“|”操作符将 ps aux 的输出重定向给 grep init。\n\n 下面还有两个稍微复杂点的例子:\n ps aux | tee filename | grep init\n\n 及:\n ps aux | tee -a filename | grep init\n * 将标准输出保存为文件\n\n 你可以将命令的标准输出内容保存到一个文件中,举例如下:\n ps aux > filename\n\n 注意其中的“>”符号。\n\n 你也可以将这些输出内容追加到一个已存在的文件中:\n ps aux >> filename\n\n 你还可以分割一个较长的行:\n command1 | command2 | ... | commandN > tempfile1\n cat tempfile1 | command1 | command2 | ... | commandN > tempfile2\n * 标准流:重定向与组合\n\n 重定向流的例子:\n ps aux 2>&1 | grep init\n\n 这里的数字代表:\n o 0:stdin\n o 1:stdout\n o 2:sterr\n\n 上面的命令中,“grep init”不仅搜索“ps aux”的标准输出,而且搜索 sterr 输出。 \n\nThe best tips & tricks for bash, explained [Linux Tutorials Blog]\n\nSource: [[LinuxTOY » Bash 使用技巧大补贴|http://linuxtoy.org/archives/the-best-tips-and-tricks-for-bash.html]]
/***\n|Name|BetterTimelineMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#BetterTimelineMacro|\n|Version|0.5 beta|\n|Requires|~TW2.x|\n!!!Description:\nA replacement for the core timeline macro that offers more features:\n*list tiddlers with only specfic tag\n*exclude tiddlers with a particular tag\n*limit entries to any number of days, for example one week\n*specify a start date for the timeline, only tiddlers after that date will be listed.\n\n!!!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!!!Syntax:\n{{{<<timeline better:true>>}}}\n''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''\n\nadditonal params:\n(use only the ones you want)\n{{{<<timeline better:true onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}\n\n''explanation of syntax:''\nonlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.\nexcludeTag: tiddlers with this tag will not be listed.\nsortBy: sort tiddlers by date modified or date created. Possible values are modified or created.\nfirstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006\nmaxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.\nmaxEntries: limit the total number of entries in the timeline.\n\n\n!!!History:\n*28-07-06: ver 0.5 beta, first release\n\n!!!Code\n***/\n//{{{\n// Return the tiddlers as a sorted array\nTiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)\n{\n var results = [];\n this.forEachTiddler(function(title,tiddler)\n {\n if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)\n if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)\n results.push(tiddler);\n });\n if(field)\n results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });\n return results;\n}\n\n\n\n//this function by Udo\nfunction getParam(params, name, defaultValue)\n{\n if (!params)\n return defaultValue;\n var p = params[0][name];\n return p ? p[0] : defaultValue;\n}\n\nwindow.old_timeline_handler= config.macros.timeline.handler;\nconfig.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var args = paramString.parseParams("list",null,true);\n var betterMode = getParam(args, "better", "false");\n if (betterMode == 'true')\n {\n var sortBy = getParam(args,"sortBy","modified");\n var excludeTag = getParam(args,"excludeTag",undefined);\n var includeTag = getParam(args,"onlyTag",undefined);\n var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);\n var firstDayParam = getParam(args,"firstDay",undefined);\n var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";\n var lastDay = "";\n var field= sortBy;\n var maxDaysParam = getParam(args,"maxDays",undefined);\n var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;\n var maxEntries = getParam(args,"maxEntries",undefined);\n var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;\n for(var t=tiddlers.length-1; t>=last; t--)\n {\n var tiddler = tiddlers[t];\n var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))\n {\n if(theDay != lastDay)\n {\n var theDateList = document.createElement("ul");\n place.appendChild(theDateList);\n createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);\n theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));\n }\n }\n }\n\n else\n {\n window.old_timeline_handler.apply(this,arguments);\n }\n}\n//}}}
h1, h2, h3, h4, h5, h6, th, dt\n{\n font-family: Tahoma, Verdana, 'Myriad Web', Syntax, sans-serif;\n }\n\np, div, ul, dl, dt, dd, pre, ol, li, blockquote, address\n{\n color: rgb(200, 200, 200);\n}\n\na, address, blockquote, body, cite, code, dd, del, dfn,\ndiv, dl, dt, em, form, h1, h2, h3, h4, h5, h6, iframe, img, kbd,\nli, object, ol, p, q, samp, small, span, strong, sub, sup, ul, var,\napplet, big, center, dir, font, menu, pre,\nabbr, acronym, bdo, button, fieldset, ins, label\n{\n word-spacing: normal;\n letter-spacing: normal;\n text-transform: none;\n text-decoration: none;\n border-color: rgb(200, 200, 200);\n border-style: none;\n}\n\nbody\n{\n color: rgb(200, 200, 200);\n background: black;\n}\n\nem\n{\n font-style: italic;\n font-weight: normal;\n color: rgb(200, 200, 200);\n background: black;\n}\n\nstrong\n{\n font-style: normal;\n background: black;\n font-weight: bold;\n color: rgb(200, 200, 200);\n}\n\nem strong, strong em\n{\n font-style: normal;\n font-weight: bolder;\n background: black;\n color: rgb(200, 200, 200);\n}\n\nb {\n font-weight: bold;\n}\n\ni {\n font-style: italic;\n}\n\n.warning\n{\n text-transform: none;\n font-style: normal;\n font-weight: bolder;\n background: #ff6;\n color: black;\n}\n\ndel\n{\n text-decoration: line-through;\n}\n\nins\n{\n text-decoration: none;\n background: #060;\n}\n\nvar, cite, dfn, .note\n{\n font-style: italic;\n}\n\naddress\n{\n font-style: normal;\n letter-spacing: .1em;\n }\n\nacronym\n{\n font-variant: small-caps;\n letter-spacing: 0.1em;\n}\n\nh1, h2, h3, h4, h5, h6, dt, th, thead, tfoot\n{\n color: rgb(132, 112, 255);\n background: black;\n }\n\nhr\n{\n color: rgb(127, 127, 127);\n background-color: rgb(69, 69, 69);\n border: 0;\n height: 1px;\n}\n\n\ncol, colgroup, table, tbody, td, tr\n{\n color: rgb(200, 200, 200);\n text-decoration: none;\n border-color: rgb(200, 200, 200);\n border-style: none;\n background: black;\n }\n\na:link\n{\n text-decoration: none;\n font-weight: normal;\n color: rgb(106, 90, 205);\n background: black;\n}\n\na:visited\n{\n text-decoration: none;\n font-weight: normal;\n color: rgb(119, 136, 153);\n background: black;\n}\n\na:active\n{\n text-decoration: none;\n font-weight: normal;\n color: ligthyellow;\n background: black;\n}\n\na:hover\n{\n text-decoration: none;\n color: lightyellow;\n background: black;\n}\n\na.offsite\n{\n text-decoration: none;\n font-weight: normal;\n color: rgb(106, 90, 205);\n background: black;\n}\n\n/* end affordances */\n\ndl.contents\n{\n float: right;\n padding-left: 20px;\n align: top;\n}\n\nbody\n{\n margin-top: 1.58em;\n margin-left: 12%;\n margin-right: 8%;\n margin-bottom: 1.58em;\n padding-top: 0;\n padding-left: 0;\n padding-right: 0;\n padding-bottom: 0;\n border-top: 0;\n border-left: 0;\n border-bottom: 0;\n border-right: 0;\n width: auto;\n text-align: justify;\n }\n/* end body box */\n\n\nSource: [[jao's css|http://hacks-galore.org/jao/style.css]]
!!!!!exclude-system-Tags\n excludeLists (6)\n excludeMissing (6)\n excludeSearch (15)\n systemConfig (20)\n systemTiddlers (5)\n!!!!!About Us\n<html><table style="border: none"><tr style="border: none"><td style="border: none"><img src="brandon.jpg" alt="Brandon Siegel" /></td><td valign="top" style="border: none">Brandon is currently a third-year student at Case Western Reserve University in Cleveland, Ohio, where he is majoring in Computer Engineering. He has approximately ten years of HTML experience, as well as six years of experience in both scripting (PHP, Perl, JavaScript, Lua) and enterprise (C++; Mips, ARM, and x86 assembly) computer languages, and in specialties such as dynamic web portals, web interfaces to existing hardware and software products, computer security, authentication, and encryption, and database administration. He is the lead developer on many open-source projects and has contributed to numerous others including the Mozilla project.</td></tr></table></html>\n\n!!!!!Center Picture\n<html><center><img alt="Personal Security Device" src="psd.jpg" /></center></html>\n<html><center><img alt="Personal Security Device" src="http://badvista.fsf.org/logos/1337.png/image_preview" /></center></html>\n!!!!!Silder Lists with Picture\n*[[Important Dates]]\n*[[Project Calendar|calendar/]]\n*<html><a target="_blank" title="External link to ProgressReport.pdf" href="ProgressReport.pdf" class="externalLink">Report <img src="pdf.png" alt="PDF" /></a></html>\n\n!!!!!Link Title & extraInfo\n''[[2006 Grants to Reduce Violent Crimes Against Women on Campus|http://www.fedgrants.gov/Applicants/DOJ/HQ/OJP/OVW-2006-1205/Grant.html]]''\n''//$400,000//''\n\nViolence against women -- including dating violence, domestic violence, sexual assault, and stalking -- is a serious problem on campuses, as it is across the nation. On campuses, however, unique issues arise. To address these particular circumstances, Congress created the Grants to Reduce Violent Crimes Against Women on Campus Program. The primary purpose of the Campus Program is to develop and strengthen victim services in cases involving violent crimes against women on campuses. The Campus Program also aims to strengthen security and investigative strategies to prevent and prosecute violent crimes against women on campuses.\n\n<html><hr /></html>\n''[[2006 NIJ Public Safety Interventions Grants|http://www.fedgrants.gov/Applicants/DOJ/HQ/OJP/2006-NIJ-1166/Grant.html]]''\n''//$250,000//''\n\nNIJ is seeking proposals to conduct process and outcome evaluations to improve public safety interventions at the local level. Effective law enforcement and crime prevention programs are critical to ensuring the safety of communities throughout the country. With the limited resources of many police departments, local agencies, and other groups, it is especially important to determine the effectiveness of public safety interventions.\n\n!!!!!Inline Email ICON\nThe Personal Security Device is currently under development. Soon you will be able to request a clicker by visiting any Case Western Reserve University Campus Security satellite office. If you wish to be notified when ~PSDs are available in your area, simply send an e-mail to [[casepsd@case.edu|mailto:casepsd@case.edu]] [img[E-Mail|email.png]] and we will add you to our mailing list.\n\n!!!!!pdf MenuICON\n*<html><a target="_blank" title="External link to EmacsCheatsheet.pdf" href="EmacsCheatsheet.pdf" class="externalLink">CheatSheet<img src="pdf.png" alt="PDF" /></a></html>
//{{{\nwindow.onClickToolbarCloseOthers = function(e) {\n if (!e) var e = window.event;\n clearMessage();\n if(this.parentNode.id)\n closeAllOtherTiddlers(this.parentNode.id.substr(7));\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n\nfunction closeAllOtherTiddlers(thisTitle) {\n clearMessage();\n var place = document.getElementById("tiddlerDisplay");\n var tiddler = place.firstChild;\n var nextTiddler;\n while(tiddler) {\n nextTiddler = tiddler.nextSibling;\n if(tiddler.id) {\n if(tiddler.id.substr(0,7) == "tiddler") {\n var title = tiddler.id.substr(7);\n if(!document.getElementById("editorWrapper" + title) && title != thisTitle) {\n place.removeChild(tiddler);\n }\n }\n }\n tiddler = nextTiddler;\n }\n window.scrollTo(0,0);\n}\n\nconfig.views.wikified.toolbarCloseOthers = {text: "close others", tooltip: "Close all articles except this one"};\n\nwindow.createTiddlerToolbar_orig_mptw_closeothers = window.createTiddlerToolbar;\nwindow.createTiddlerToolbar = function(title,isEditor) {\n createTiddlerToolbar_orig_mptw_closeothers(title,isEditor);\n if(true || !isEditor) {\n var theToolbar = document.getElementById("toolbar" + title);\n var lingo = config.views.wikified;\n var newButton = createTiddlyButton(theToolbar, lingo.toolbarCloseOthers.text, lingo.toolbarCloseOthers.tooltip, onClickToolbarCloseOthers);\n var newSpacer = insertSpacer(theToolbar);\n\n secondButton = theToolbar.childNodes[3];\n\n\n theToolbar.insertBefore(newSpacer,secondButton);\n theToolbar.insertBefore(newButton,newSpacer);\n\n }\n}\n//}}}
It is really easy to get code folding going with Python mode in Emacs. Just use the builtin outline-minor-mode and set up the outline-regexp and outline-level to work with Python. It really works well for me and has a nice menu or keyboard interface as well. \nHere is what I put in my .emacs to make it work.\n\n gb \n;; setup python mode \n(setq auto-mode-alist ; trigger python mode automatically\n (cons '("\s\s.py$" . python-mode) auto-mode-alist)) \n(setq interpreter-mode-alist \n (cons '("python" . python-mode)\n interpreter-mode-alist))\n(autoload 'python-mode "python-mode" "Python editing mode." t)\n ; add my customization \n(add-hook 'python-mode-hook 'my-python-hook) ; this gets called by outline to deteremine the level. Just use the length of the whitespace \n(defun py-outline-level () \n (let (buffer-invisibility-spec) \n (save-excursion \n (skip-chars-forward "\st ")\n (current-column)))) \n; this get called after python mode is enabled \n(defun my-python-hook () \n ; outline uses this regexp to find headers. I match lines with no indent and indented "class"\n ; and "def" lines. \n (setq outline-regexp "[^ \st]\s\s|[ \st]*\s\s(def\s\s|class\s\s) ")\n ; enable our level computation \n (setq outline-level 'py-outline-level) \n ; do not use their \sC-c@ prefix, too hard to type. Note this overides some python mode bindings \n (setq outline-minor-mode-prefix "\sC-c")\n ; turn on outline mode (outline-minor-mode t)\n ; initially hide all but the headers \n (hide-body)\n ; I use CUA mode on the PC so I rebind these to make the more accessible\n (local-set-key [?\sC-\st] 'py-shift-region-right)\n (local-set-key [?\sC-\sS-\st] 'py-shift-region-left)\n ; make paren matches visible (show-paren-mode 1)\n)\n\nSource: [[Code Folding with Emacs|http://mail.python.org/pipermail/python-list/2002-May/147723.html]]
Background: #fff\nForeground: #000\nPrimaryPale: #8cf\nPrimaryLight: #bcd\nPrimaryMid: #bcd\nPrimaryDark: #014\nSecondaryPale: #ffc\nSecondaryLight: #fe8\nSecondaryMid: #db4\nSecondaryDark: #841\nTertiaryPale: #eee\nTertiaryLight: #ccc\nTertiaryMid: #999\nTertiaryDark: #666\nError: #f88\n
| <<saveAndReload>> | [[Trash]] | <<toggleSideBar SideBar toogleSidebar show>> |\n| [[AllTagCloud|<<tagCloud>>]] | [[Origin SideBar]] | <<fontSize fontsize: >> |\n| !Plugin | !Site | !Menu&~SideBar |\n| [[DefaultTiddlers]] | [[SiteTitle]] | [[MainMenu]] |\n| [[MultiTagEditor]] | [[SiteSubtitle]] | [[SideBarOptions]] |\n| [[AutoOpenTiddler|AutoOpenTiddlersPlugin]] | [[SiteUrl]] | [[SideBarTabs]] |\n| [[Internal Macros]] | [[MarkupPreHead]] | [[TabMoreShadowed]] |\n| !Template | !Color & CSS | !Panel |\n| [[PageTemplate]] | [[ColorPalette]] | [[OptionsPanel]] |\n| [[EditTemplate]] | [[StyleSheet]] | [[AdvancedOptions]] |\n| [[ViewTemplate]] | [[StyleSheetColors]] | [[ImportTiddlers]] |\n| [[TabTimeline]] | [[StyleSheetLayout]] | [[PluginManager]] |\n
<<tiddlerList tags:linuxCulture>>
[[Timeline]]
*[[Mainframe]]\n*[[Datebase]]\n*[[J2EE]]
/***\n| Name:|DiscerningTagsPlugin|\n| Description:|Make the tag chooser ignore tags that are themselves tagged with 'excludeLists'|\n| Version:|1.0|\n| Date:|02-Nov-2006|\n| Source:|http://discerningtags.tiddlyspot.com/|\n| Author:|Daniel Baird <danielbaird@gmail.com>|\n| CoreVersion:|2.1.x|\nFor instructions on how to install plugins, see here:\nhttp://twfaq.tiddlyspot.com/#%5B%5BHow%20do%20I%20install%20a%20plugin%3F%5D%5D\n***/\n//{{{\nconfig.macros.tagChooser.onClick = function(e) {\n if(!e) var e = window.event;\n var lingo = config.views.editor.tagChooser;\n var popup = Popup.create(this);\n var tags = store.getTags();\n if(tags.length == 0)\n createTiddlyText(createTiddlyElement(popup,"li"),lingo.popupNone);\n for(var t=0; t<tags.length; t++)\n {\n var tagTiddler = store.getTiddler(tags[t][0]);\n if (!(tagTiddler && tagTiddler.isTagged('excludeLists')))\n {\n var theTag = createTiddlyButton(createTiddlyElement(popup,"li"),tags[t][0],lingo.tagTooltip.format([tags[t][0]]),config.macros.tagChooser.onTagClick);\n theTag.setAttribute("tag",tags[t][0]);\n theTag.setAttribute("tiddler", this.getAttribute("tiddler"));\n }\n }\n Popup.show(popup,false);\n e.cancelBubble = true;\n if(e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div>\n<div class='title' macro='view title'></div>\n<div class='editor' macro='edit title'></div>\n<div class='editor' macro='edit text'></div>\n<div class='editor' macro='edit tags'></div>\n<div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n<div class='toolbar' macro='toolbar +saveTiddler saveClose -cancelTiddler deleteTiddler closeTiddler'></div>
<<tiddlerList tags:emacs>>
!!!Files & Buffers\n| !~KeyBindings | !Descriptions | !~KeyBindings | !Descriptions |\n| ''C-x C-f '' | open a ''F''ile | ''C-x 1'' | kill other buffers |\n|bgcolor(#d4d8f6): ''C-x C-s'' |bgcolor(#d4d8f6): ''S''ave buffer to file |bgcolor(#d4d8f6): ''C-x 2'' |bgcolor(#d4d8f6): H-split |\n| ''C-x C-w'' | ''W''rite buffer to another file | ''C-x 3'' | V-split |\n|bgcolor(#d4d8f6): ''C-x C-c'' |bgcolor(#d4d8f6): ''C''lose all buffers,exit emacs |bgcolor(#d4d8f6): ''C-x 0'' |bgcolor(#d4d8f6): close current buffer |\n| ''C-x C-k'' | ''K''ill current buffer | ''C-x o'' | switch buffers |\n|bgcolor(#d4d8f6): ''C-x C-r'' |bgcolor(#d4d8f6): open a ''R''ead-ony buffer |bgcolor(#d4d8f6): ''C-x 5 2'' |bgcolor(#d4d8f6): new session,same buffer |\n| ''C-x C-q'' | limited writeable | ''C-x 5 f'' | new session,new buffer |\n|bgcolor(#d4d8f6): ''C-z'' |bgcolor(#d4d8f6): minimize emacs to backgroud |bgcolor(#d4d8f6): ''C-x 5 0'' |bgcolor(#d4d8f6): close session |\n\n!!!Moving Around\n| !~KeyBindings | !Descriptions | !~KeyBindings | !Descriptions |\n| ''M-v'' | previous screen | ''C-v'' | next screen |\n|bgcolor(#d4d8f6): ''C-p'' |bgcolor(#d4d8f6): ''P''revious line |bgcolor(#d4d8f6): ''C-n'' |bgcolor(#d4d8f6): ''N''ext line |\n| ''C-b'' | ''B''ack a char | ''C-f'' | ''F''orword a char |\n|bgcolor(#d4d8f6): ''M-b'' |bgcolor(#d4d8f6): ''B''ack a word |bgcolor(#d4d8f6): ''M-f'' |bgcolor(#d4d8f6): ''F''orward a word |\n| ''C-a'' | begin of the line | ''C-e'' | ''E''nd of the line |\n|bgcolor(#d4d8f6): ''M-a'' |bgcolor(#d4d8f6): begin of the sentence |bgcolor(#d4d8f6): ''M-e'' |bgcolor(#d4d8f6): ''E''nd of the sentence |\n| ''M-<'' | home | ''M->'' | end |\n|bgcolor(#d4d8f6): ''Esc C-a'' |bgcolor(#d4d8f6): begin of the function |bgcolor(#d4d8f6): ''Esc C-e'' / ''~C-M-e'' |bgcolor(#d4d8f6): end of the function |\n| ''C-u'' | multiply following cmd | ''C-u //10// C-n'' | c-n //10// times |\n|bgcolor(#d4d8f6): ''C-u C-n'' |bgcolor(#d4d8f6): C-n 4 times |bgcolor(#d4d8f6): ''C-u C-u C-n'' |bgcolor(#d4d8f6): C-n 16 times |\n| ''M-g g //33//'' | ''G''oto line //33// | ''M-//256// c-n'' | cursor more down //256// lines |\n|bgcolor(#d4d8f6): ''C-l'' |bgcolor(#d4d8f6): recenter the window around current cursor line |>|>|\n\n!!!Deleting & Recalling\n| !~KeyBindings | !Descriptions | !~KeyBindings | !Descriptions |\n| ''C-d'' | ''D''elete (next) 1 char | ''backspace'' | delete (previous) 1 char |\n|bgcolor(#d4d8f6): ''M-d'' |bgcolor(#d4d8f6): ''D''elete (next) 1 word |bgcolor(#d4d8f6): ''M-backspace'' |bgcolor(#d4d8f6): delete (previous) 1 word |\n| ''C-k'' | ''K''ill to the end of the line | ''M-k'' | ''K''ill the sentence |\n|bgcolor(#d4d8f6): ''C-g'' |bgcolor(#d4d8f6): quit current keystrokes |bgcolor(#d4d8f6): ''C-x u / C-_'' |bgcolor(#d4d8f6): ''U''ndo |\n| ''C-@'' | mark a region point | ''C-j'' | new line with autofill |\n|bgcolor(#d4d8f6): ''M-h'' |bgcolor(#d4d8f6): mark current paragraphy |bgcolor(#d4d8f6): ''Esc C-h / ~M-C-h'' |bgcolor(#d4d8f6): mark current function |\n| ''C-w'' | ''W''ipe region (cut) | ''M-w'' | ''W''ipe region (copy) |\n|bgcolor(#d4d8f6): ''C-y'' |bgcolor(#d4d8f6): ''Y''ank last chunk of kill ring |bgcolor(#d4d8f6): ''M-y (used after C-y)'' |bgcolor(#d4d8f6): ''Y''ank,retrieve the next-last chunk |\n\n!!!Searching & Replacing\n| !~KeyBindings | !Descriptions | !~KeyBindings | !Descriptions |\n| ''C-s'' | ''S''earch forward incremently | ''C-r'' | ''S''earch backward incremently |\n|bgcolor(#d4d8f6): ''~C-M-s'' |bgcolor(#d4d8f6): RE ''S''earch forward |bgcolor(#d4d8f6): ''~C-M-r'' |bgcolor(#d4d8f6): RE ''S''earch backward |\n| ''M-%'' | query replace mode |>|>|\n|~|bgcolor(#d4d8f6): ''SPACE'' (Y) |bgcolor(#d4d8f6): replace & move to next |>|\n|~| ''DEL'' | skip & move to next |>|\n|~|bgcolor(#d4d8f6): ''ESC'' (Q) |bgcolor(#d4d8f6): quit s/r |>|\n|~| ''@@color(#000000):!@@'' | global replace |>|\n|~|bgcolor(#d4d8f6): ''.'' |bgcolor(#d4d8f6): make the replacement then terminale |>|\n|~| ''C-r'' | enter a Recursive edit mode |>|\n|~|bgcolor(#d4d8f6): ''C-h'' |bgcolor(#d4d8f6): Help info |>|\n\n!!!Shell Commands\n| !~KeyBindings | !Descriptions | !~KeyBindings | !Descriptions |\n| ''M-x shell'' | shell prompt in current buffer | @@color(#000000):''M-|''@@ | shell cmd on region |\n|bgcolor(#d4d8f6): ''M-!'' //shell-cmd// |bgcolor(#d4d8f6): output to another buffer |bgcolor(#d4d8f6): ''C-u M-!'' |bgcolor(#d4d8f6): output to current buffer |\n| //shell mode// | ''C-c C-c'' | stop program |>|\n|~|bgcolor(#d4d8f6): ''M-p'' |bgcolor(#d4d8f6): recall ''P''revious cmd |>|\n|~| ''M-n'' | in shell history, ''N''ext cmd (M-p for previous) |>|\n|~|bgcolor(#d4d8f6): ''C-c C-z'' |bgcolor(#d4d8f6): suspend program |>|\n|~| ''C-c C-r'' | move cursor to the start of the output |>|\n|~|bgcolor(#d4d8f6): ''C-c C-o'' |bgcolor(#d4d8f6): comint-kill-output (flush output) |>|\n|~| ''C-c C-r'' | comint-show-output, cursor on the begin of output |>|\n|~|bgcolor(#d4d8f6): ''C-c C-e'' |bgcolor(#d4d8f6): to the End of output |>|\n|~| ''C-c C-p'' | move to ''P''revious output group |>|\n|~|bgcolor(#d4d8f6): ''C-c C-n'' |bgcolor(#d4d8f6): move to ''N''ext output group |>|
[[EmacsWiki Reference|http://www.emacswiki.org/cgi-bin/emacs/InteractivelyDoThings]]\n\nThe ido.el is now a default elisp package in Emacs 23. You can get the newest version from CVS.\nUse following elisp to enable ido-mode:\n{{{\n (require 'ido)\n (ido-mode t)\n}}}\n\nTyping C-x C-f will run ido-find-file. There are some advantages, the files can be found more quickly. However, the ido-cache will not be refreshed automatically when directories are modified. There are some useful commands.\n\n*C-d to enter dired.\n\n*C-l to run ido-reread-directory to refresh the current work directory.\n\n*C-j to stop automatically completing file names.\n\n For example, you have "test.01" and "test.02" in your work directory, but you want to create a new file "test" instead of finding "test.01" or "test.02". Then you should type C-j after inputting "test", to run ido-select-text.\nOr C-f to return to normal find-file.\n\n*Tab or ? to show completion help.\n\nDon't use ido-mode to find files on ftp server, since that is quite slow and requires to type user name and password. And similarly don't search files in other directories. Add following codes into .emacs :\n\n{{{\n ;; use normal find-file function for ftp files\n (setq ido-slow-ftp-host-regexps '(".*"))\n ;; don't search files in other directories\n (setq ido-work-directory-list-ignore-regexps '(".*"))\n}}}\n\nSource: [[QTech: Emacs ido.el [Anonymoused]|http://anonymouse.org/cgi-bin/anon-www.cgi/http://jasonal.blogspot.com/2006/06/emacs-idoel.html]]
Archive-name: GNU-Emacs-FAQ/reference-pointer\nPosting-Frequency: 2 times a month\nMaintainer: Jari Aalto A T cante net\nX-Last-Modified: Time-stamp: <2006-01-24 16:01:31>\n\nAnnounce: "Emacs references: pointers to resources, packages, papers, lisp"\n\n X/Emacs FAQ is available to you via keypress C-h F.\n The official GNU Emacs FAQ available also at\n http://www.faqs.org/faqs/GNU-Emacs-FAQ/\n\n The following listing is an excerpt from page\n http://tiny-tools.sourceforge.net/emacs-elisp.html\n\nEmacs first aid\n\n 1.1 Important Emacs links\n\n o List of some Emacs packages - categorized listing:\n http://tiny-tools.sourceforge.net/emacs-elisp.html\n o _Ell_, Stephen's concise Emacs Lisp List\n http://www.anc.ed.ac.uk/~stephen/emacs/ell.html\n o Emacs Wiki at http://www.emacswiki.org/ Full link list\n http://www.emacswiki.org/cgi-bin/wiki.pl?action=links&url=2\n o Check _Sourceforge_ for Emacs projects at http://www.sf.net\n The best method is to use CVS access for easy and\n efficient update. Learn more about CVS at\n http://www.cvshome.com/\n o _Savannah_ mimics the sourceforge for GNU projects at\n http://savannah.gnu.org/\n o IRC community for Emacs devotees at emacs#irc.freenode.net\n o Gnus - The Emacs Mail and newsreader - community at http://my.gnus.org/\n o Lisp archive project at http://www.lispmeralda.org/\n Old and possibly non-functional site at\n ftp://ftp.cis.ohio-state.edu/pub/emacs-lisp/\n o Emacs Newsgroup archives at <http://www.gmane.org>. Use server\n `news.gnus.org'. See also http://groups.google.com/groups?group=comp.emacs.\n o Google's Lisp directory\n http://directory.google.com/Top/Computers/Programming/Languages/Lisp/...\n o Emacs Usenet hierarchies are *comp.emacs* and *gnus.emacs*\n and sources list is archived at\n ftp://ftp-mailing-list-archives.gnu.org/mailing-lists/gnu-emacs-sources\n o Dot files for Emacs <http://sourceforge.net/projects/emacro>\n and <http://dotfiles.com/> or <http://www.dotemacs.de/>\n\n Other related URLs\n\n o GNU Emacs 19 teaching class (GOOD)\n http://www.cgd.ucar.edu/gds/thibaud/Emacs/slides.html\n o Emacs keybinding guide\n http://tiny-tools.sourceforge.net/emacs-keys.html\n Elisp package making memory list\n http://tiny-tools.sourceforge.net/emacs-package-make.html\n o A Collection of Tutorials on Emacs by Kai Grossjohann.\n http://www.xemacs.org/Links/tutorials_toc.html\n o Holger's Emacs Resources (short)\n http://www.coling.uni-freiburg.de/~schauer/emacs.html\n o List of Emacs implementations (historical)\n http://www.finseth.com/~fin/emacs.html by Craig Finseth\n\n2.0 GNU Emacs\n\n o _Homepage_ http://www.gnu.org/software/emacs/emacs.html and\n http://savannah.gnu.org/projects/emacs/ (CVS access)\n Report Development bugs to <emacs-pretest-...@gnu.org>\n o _Download_ at ftp://ftp.gnu.org/gnu/emacs/\n o Official GNU Emacs _FAQ_ at\n http://www.faqs.org/faqs/GNU-Emacs-FAQ/\n ftp://the-tech.mit.edu/pub/GNU-Emacs/faq and\n ftp://rtfm.mit.edu/pub/usenet/comp.emacs/\n o Richard Stallman's Personal Homepage at\n http://www.stallman.org\n\n3.0 XEmacs - Emacs the next generation\n\n o _Homepage_ http://www.xemacs.org/\n Mirror sites http://www.xemacs.org/Download/\n Ftp area ftp://ftp.xemacs.org/pub/xemacs/\n o XEmacs _betas_\n ftp://ftp.xemacs.org/pub/xemacs/beta/\n o _Rsync_ service is available. Try "rsync rsync.xemacs.org::"\n o XEmacs _FAQ_ http://www.xemacs.org/faq/xemacs-faq.html\n and Hyperachive at http://www.xemacs.org/list-archives/\n o _Xemacs-L_ Mailing lists. Send an email message to\n <majord...@xemacs.org> with the magic word `lists' in the body\n for a complete list of available mailing lists. subscribe list\n [address]\n o Ben Wing - The architect of XEmacs 20.x line\n http://www.666.com/xemacs/\n o List of XEmacs packages and _maintainer_ _info_\n ftp://ftp.xemacs.org/pub/xemacs/packages/package-index.LATEST.pgp\n o _CVS_ access information at\n http://www.xemacs.org/Develop/cvsaccess.html\n\n5.0 Win32 platform\n\n 5.1 Win32 Emacs ports\n\n ._Homepage:_ and _FAQ_ at http://www.gnu.org/software/emacs/windows/ntemacs.html\n ._Download:_ ftp://ftp.gnu.org/gnu/windows/emacs\n ._Cygwin:_ Emacs is in included in http://www.cygwin.com/\n\n In the download site, *barebin* has just the .exe's and a few other\n files, and is only useful in conjunction with the "src" tarball.\n This gives you the full source to everything, if you happen to want\n that. *bin* is usable by itself, but doesn't include the elisp\n source (that is provided by the "lisp" tarball). If you know you\n want the elisp source, you can just get "fullbin", which is\n basically "bin+lisp". *leim* is the Library of Emacs Input Methods,\n which is only of interest if you want to enter non-ascii characters\n in a convenient way. Emacs DOS port is (was?) maintained by Eli\n Zaretskii. See "NT Emacs Installation"\n <http://www.charlescurley.com/emacs.html> if the Emacs NT FAQ\n is too thick to for one coming from Windows background.\n\n 5.2 Win32 XEmacs ports\n\n There are two versions of XEmacs available for Windows platform. A\n Cygwin version, which is more like the "real thing" and a native\n Win32 version, also called the 'netinstall' version. The\n development of native version is coordinated by a mailing list at\n <xemacs...@xemacs.org>. If you are willing to contribute or want to\n follow the progress, mail to <xemacs-nt-requ...@xemacs.org> to\n subscribe.\n\n ._Win32_ _native:_ ftp://ftp.xemacs.org/pub/xemacs/windows/setup.exe\n ._Official:_ ftp://ftp.xemacs.org/pub/xemacs/binary-kits/win32/\n .http://www.xemacs.org/faq/xemacs-faq.html#Q1_0_10\n .ftp://ftp.xemacs.org/pub/xemacs/beta/\n ._Hyperarchive_: http://www.xemacs.org/list-archives/xemacs-nt/\n\nThe full table of contents\n\nTable of Contents\n\n 1.0 Description\n 1.1 Important Emacs links\n 1.1.1 Finding old Emacs packges or articles\n 1.1.2 Emacs mailing lists and newsgroups\n 1.2 Developer contact addresses and site list\n\n 2.0 GNU Emacs\n 2.1 Emacs Documentation\n 2.1.1 Free Emacs books\n 2.1.2 Commercial Emacs books\n 2.2 Other Lisp related documents and resources\n\n 3.0 XEmacs - Emacs the next generation\n 3.1 Emacs or XEmacs future plans\n 3.2 XEmacs and Emacs compatibility issues\n\n 4.0 Miscellaneous information\n 4.1 GNU Emacs history\n 4.2 Free software pointers\n 4.3 Free Software articles\n 4.4 Emacs Jokes\n 4.4.1 The Word Emacs\n 4.4.2 New commands in Emacs\n\n 5.0 Win32 platform\n 5.1 Win32 Emacs ports\n 5.2 Win32 XEmacs ports\n 5.2.1 Compiling XEmacs with cygwin\n 5.2.2 CVS access\n 5.2.3 Tips for debugging\n 5.3 Emacs or Unix-like Win32 programs\n 5.4 NTEmacs specific lisp packages\n 5.5 NTEmacs and printing\n 5.5.1 NT print\n 5.5.2 Gnu enscript\n 5.6 Cygwin\n 5.7 Win32 terminal programs\n\n 6.0 Emacs tips\n 6.1 Emacs startup and load-path\n 6.2 Loading files from .emacs\n 6.3 Many emacs startup files\n 6.4 Editing files as ROOT\n 6.5 Saving files as Unix\n\n 7.0 Byte compiling files\n 7.1 Compiling lisp files\n 7.2 Shell alias\n 7.3 Dired byte compilation\n\n 8.0 Reporting bugs or improvements\n 8.1 Activating debug\n 8.2 Use uncompiled packages\n 8.3 Use package's contact function\n 8.4 Requesting changes\n\n 9.0 Library kits\n 9.1 CEDET, Collection of Emacs Dev Env Tools\n 9.2 Tiny Tools kit\n 9.3 Ttn Emacs kit\n\n 10.0 Gnus\n 10.1 Gnus homepage\n 10.2 Gnus grouplens\n 10.3 Gnus-eyecandy.el\n 10.4 Gnus-bbdb.el (*)\n 10.5 Gnus-filterhist.el\n 10.6 Gnus-junk.el, Send UBE complaint\n 10.7 Gnus-ml.el, Mailing list minor mode for gnus (*)\n 10.8 Gnus-todo.el\n 10.9 Deja.el, Search dejanews with nnweb\n 10.10 Message-utils.el\n 10.11 Message-x.el, customizable completion in message headers\n 10.12 Messkeyw.el, automatic keyword support during composition\n 10.13 Ngn.el, insert newsgroup name into buffer using completion\n 10.14 Nnmaildir.el, one group per maildir\n 10.15 Nnir.el, search mail with various search engines\n 10.16 Nnir-grepmail.el --- A grepmail plugin for nnir.el\n 10.17 Nnimap.el, IMAP client (*)\n 10.18 Fogey-subscribe.el\n 10.19 Rmail-spam-filter.el\n 10.20 TinyGnus.el, additional gnus utilities\n 10.21 Uce.el, reply to unsolicited commercial email\n 10.22 Spamprod.el, generate spam complaint email\n 10.23 Vcard.el (*)\n\n 11.0 Mail\n 11.1 Getting remote mail\n 11.2 Bbdb.el, email database (*)\n 11.3 Bbdb-pgp.el (*)\n 11.4 Bbdb-mail-folders.el\n 11.5 Bbdb-expire.el, expiry and expire-proof entries for the BBDB\n 11.6 Blackbook.el, manage email aliases easily\n 11.7 EUDC, the Emacs Unified Directory Client (LDAP)\n 11.8 Epop.el, General POP support for all MUAs\n 11.9 Footnote.el (*)\n 11.10 Fortunesig.el\n 11.11 Feedmail.el, replacement for sendmail (*)\n 11.12 Ldbdb.el, Little Brother's Database interface\n 11.13 MH Mail user agent\n 11.14 Rmail-extras.el, support remote inboxes\n 11.15 Rmailsort.el, sort by date-author-time permanently\n 11.16 Signature.el\n 11.17 Tc.el, a lightweight to supercite\n 11.18 TinyMail.el, email minor mode + email notification package\n 11.19 TinyRmail.el, additional RMAIL utilities\n 11.20 Unmunge.el\n 11.21 Vm-complain.el, send spam complaint\n\n 12.0 Mime\n 12.1 Mime package setups, articles or pages\n 12.2 Rmime.el\n 12.3 Tm.el\n 12.4 Semi and apel\n 12.5 Extra tools for mime viewers\n\n 13.0 WWW\n 13.1 Apache-mode.el\n 13.2 Browse-help.el, WWW context-sensitive help\n 13.3 Css-mode.el, Cascading style sheet handling\n 13.4 Emacs-wiki.el, Emacs-friendly markup\n 13.5 Hbmk.el, Manage bookmarks in HTML\n 13.6 Html menus, write html page\n 13.7 Html-helper-mode.el - Visual basic, ASP, JSP\n 13.8 Html-toc.el\n 13.9 Htmlize.el, font-lock to html converter (*), XEmacs\n 13.10 Httpd.el, Emacs inetd webserver\n 13.11 Iso-sgml.el\n 13.12 Mkhtml.el, Create HTML with links\n 13.13 Psgml-mode.el, HTML, XML, SGML (*)\n 13.14 Psgml extension\n 13.15 Quickurl.el, insert URL at point\n 13.16 TinyUrl, url finder minor mode\n 13.17 Watson.el, query search engines\n 13.18 Web-mode.el, cvsweb\n 13.19 Wup.el, web page distribution\n 13.20 XAE, XML Authoring Environment\n 13.21 Xml-lite.el, an indentation-engine for XML\n 13.22 XSLT (Apache Xalan)\n\n 14.0 Version control\n 14.1 Accurev\n 14.2 Arch\n 14.3 BitKeeper\n 14.4 Clearcase\n 14.5 CVS software\n 14.5.1 CVS Download\n 14.5.2 CVS and Emacs\n 14.5.3 CVS Clients\n 14.5.4 Cvs documents\n 14.6 MKS Source Integrity (WinNT)\n 14.7 Perforce P4 revision control software\n 14.7.1 Comments\n 14.8 Razor\n 14.9 RCS\n 14.10 SCM Continuous Change Management\n 14.11 SCM CodeSave\n 14.12 SCM, Software Configuration Management links\n 14.13 StarTeam source control system\n 14.14 Subversion\n 14.15 Visual SourceSafe\n 14.16 Version control articles\n 14.17 Version control books\n 14.17.1 RCS Books\n 14.17.2 CVS Books\n\n 15.0 Programming\n 15.1 Ascii.el\n 15.2 C and Java code browser (Xref-Speller)\n 15.3 C-mode-addons.el, some addon functions for c-mode\n 15.4 C-includes.el\n 15.5 Cc-mode (*)\n 15.6 Cc-mode with correct tab-indent\n 15.7 Cc-tempo-electric.el\n 15.8 Cperl-mode.el (*), [X]Emacs\n 15.9 Delphi mode (*), Emacs\n 15.10 ECB, Emacs code Browser\n 15.11 EDE, Emacs development environment\n 15.12 Eiffel-mode.el\n 15.13 Else-mode.el, language sensitive editing package\n 15.14 Glasses.el, MakeThis Make_This\n 15.15 IDL Interactive Data Language (*)\n 15.16 Java buffi.el, compile multiple java projects\n 15.17 Java Expert System Shell (jess-mode)\n 15.18 Java Jdok.el, Javadoc template generator\n 15.19 Java-Find.el, find and visit Java source files\n 15.20 Java-Font-Lock20.el\n 15.21 Javahelp.el, Contextual java help\n 15.22 Jcall.el, call Java from Elisp\n 15.23 Jde.el, Java Development Environment (JDE or JDEE)\n 15.24 Java-open.el\n 15.25 Java Template, jtemplate.el\n 15.26 Lazy-look.el, context-sensitive language help\n 15.27 Lisp variants\n 15.28 Macro mode m4 (*)\n 15.29 Maplev.el, Maple code\n 15.30 Mathlab-mode.el\n 15.31 M56k.el, mode for Motorola's DSP56300 assembly code\n 15.32 Multiple major modes in same buffer\n 15.32.1 mml.el\n 15.32.2 mml.el\n 15.32.3 multi-mode.el\n 15.32.4 two-mode.el\n 15.33 OO-Browser\n 15.34 Showing tabs in buffer\n 15.34.1 Ascii-display.el\n 15.34.2 Tab-display.el\n\n 16.0 Lisp programming\n 16.1 Writing portable XEmacs and Emacs code\n 16.2 Autolisp.el, edit AutoCAD AutoLISP files\n 16.3 Bm-hcmplt.el, facility to display descriptions of completions\n 16.4 Checkdoc.el (*), Emacs\n 16.5 Cl-array.el, CL's multi-dimensional arrays\n 16.6 Closure.el (*), Emacs\n 16.7 Crm.el, completing read multiple\n 16.8 Eieio, subset of CLOS (Common Lisp Object System)\n 16.9 Elder.el, emacs lisp document writer\n 16.10 Eldoc.el, show Emacs lisp function arglist (*), [X]Emacs\n 16.11 Elint, Emacs lisp syntax checker\n 16.12 Ell.el, Browse the Emacs Lisp List\n 16.13 Elp.el, emacs lisp profiler (*), [X]Emacs\n 16.14 Eval-expr.el, Better eval expression prompt\n 16.15 Extre.el, extended regular expression syntax support\n 16.16 Find-func.el, find func definition near point (*) [X]Emacs\n 16.17 Getdoc.el\n 16.18 Gnueval.el, fill out GNU evaluation form\n 16.19 Hyperspec.el, browse Common Lisp specs\n 16.20 Ilisp.el, Inferior Lisp replacement\n 16.21 Lisp-index.el, Index Lisp files, with descriptions\n 16.22 Lispdir.el\n 16.23 Regexp-opt.el (*), Emacs\n 16.24 Minibuffer-complete-cycle.el, cycle Completion buffer\n 16.25 Obarray-fns.el, obarray-manipulating routines\n 16.26 Regress.el\n 16.27 Require statement tracing\n 16.28 Run-command.el, lib for running external commands\n 16.29 Sregex.el (*)\n 16.30 Texidoc.el, have texi embedded in defvar\n 16.31 Timerfunction.el\n 16.32 Tmenu.el, a text based interface to the menubar\n 16.33 Working.el, show progress while working\n 16.34 Xray.el, display internal object structures\n\n 17.0 Modes\n 17.0.1 Mason-mode.el\n 17.1 PHP modes\n 17.2 Project-am.el, a project mode for emacs based on automake\n 17.3 Ps-mode.el, mode for editing postscript code\n 17.4 Tmmofl.el, toggles other minor modes based on font lock info\n 17.5 Smb-mode.el, editing SAMBA files\n 17.6 Sawmill.el\n 17.7 SML-mode.el\n 17.8 Verilog-mode.el\n 17.9 Winmgr-mode.el, generic window manager mode\n 17.10 W32-help.el\n\n 18.0 Shell\n 18.1 ANSI-color.el, translate ANSI into text-properties (*)\n 18.2 Dircolors.el, provide the same facility of ls --color inside emacs\n 18.3 Eshell.el, Emacs shell (*)\n 18.4 Fshell.el\n 18.5 Mode-compile, remote compilation\n 18.6 Which.el, where is command\n\n 19.0 Processes\n 19.1 Analog.el, monitor lists of files or command output\n 19.2 Df.el, show disk usage\n 19.3 Run-command.el, running external commands\n 19.4 Top.el, running top(1) in emacs window\n 19.5 Wget.el, wget interface for emacs\n\n 20.0 Networking and Clients\n 20.1 AIM - AOL Instant messenger\n 20.2 Dig.el, Domain Name System dig interface (*), Gnus\n 20.3 Firewall.el, A tunnel for network connection\n 20.4 ICQ - I Seek You, XEmacs and Linux ONLY (eicq)\n 20.5 Junkbust.el, configuring the Internet Junkbuster Proxy\n 20.6 Lookup.el, electronic dictionaries\n\n 21.0 System administering and Linux\n 21.1 Apt-sources.el, Debian editing mode\n 21.2 Protocols.el, reading the contents of /etc/protocols\n 21.3 Services.el, reading the contents of /etc/services\n\n 22.0 Files, ftp, ssh\n 22.1 Efs, successor to ange-ftp (*)\n 22.2 Filecache.el, files using a pre-loaded cache\n 22.3 Fff.el, fast file finder\n 22.4 Ff-paths.el, searches certain paths to find files\n 22.5 Iman.el, man and info page completion\n 22.6 Sure-tags.el\n 22.7 Thumbs.el, thumbnail images files\n 22.8 Tramp.el, transparent remote accs, ssh (*)\n\n 23.0 File Backups\n 23.1 Auto-save.el (*)\n 23.2 Backup-dir.el, place backups to separate dir (*)\n 23.3 Backup-subdir.el, backup files in separate directory\n 23.4 Ebackup.el, Enhanced backup operation for Emacs\n\n 24.0 Compression and cryptography\n 24.1 Browse-tar.el\n 24.2 Crypt++\n 24.3 Mailcrypt.el (*)\n 24.4 Mc-safe-sign-message.el\n 24.5 Ssl-hacks.el\n 24.6 TinyPgp.el\n\n 25.0 Directory\n 25.1 Dired-a.el, extensions to dired\n 25.2 Dired-single.el, reuse the current dired buffer\n 25.3 Js-dired.el, lisp ls emulation for win32\n 25.4 Browsing ls-lR\n 25.5 Mc.el, Midnight commander emulation\n 25.6 Md5-dired.el, make dired sensitive to file changes\n 25.7 Dired-dd.el, Dired Drag and Drop\n 25.8 Dired-single.el\n 25.9 Dired-sort.el, sort by date-type-size-field\n 25.10 Dired-sort-menu.el,\n 25.11 Dired-tar.el\n 25.12 Wdired.el, rename files in dired\n\n 26.0 Drawing\n 26.1 Artist.el, hi-tech character based drawing package (*)\n 26.2 Boxquote.el, wrapping text\n 26.3 Gnuplot.el, mouse driven GUI for gnuplot program\n 26.4 Rebox.el, Handling of comment boxes in various styles\n 26.5 Rect-mark.el, deleting-manipulating-moving rectangles\n 26.6 Table.el,\n\n 27.0 Writing, reading and modifying documents\n 27.1 AUCTeX\n 27.2 Auto-capitalize.el, capitalize the first word\n 27.3 Auto-correcting words\n 27.4 Clipper.el, save strings of data for further use\n 27.5 Blank-mode.el, Minor mode to visualize whitespace\n 27.6 Deleting text\n 27.6.1 General deleting utilities\n 27.6.2 Deleting whitespace\n 27.7 Dict.el, retrieving definitions of words\n 27.8 DocBook IDE\n 27.9 Faq-mode-el, reading faqs\n 27.10 Flyspell.el and Ispell (*)\n 27.11 Glyph-highlight.el, display non-ascii chars\n 27.12 Ietf.el, IETF Document Retrieval\n 27.13 Longlines.el, automatically wrap long lines Some text\n 27.14 Maniac.el, fill like maniac\n 27.15 Mult-press.el, home, end key-magic\n 27.16 Pc-keys.el, Smart home and end keys\n 27.17 Rewrite.el, rewrite text files with regexps\n 27.18 RFC.el\n 27.19 Rfc-page.el\n 27.20 Rfc-util.el, RFC-util interface for emacs\n 27.21 Rfcview.el, view IETF RFCs\n 27.22 Translation.el, translation minor mode\n 27.23 QA.el\n 27.24 TinyTf.el, white paper minor mode\n 27.25 Templates: tempo, skeleton, expand, dmacro\n 27.26 Extra tools for document handling\n\n 28.0 Organizing content\n 28.1 Bookmark-menu.el, setup a menu of bookmarks\n 28.2 Desire.el, Emacs startup file organir\n 28.3 Ee.el, categorizing information manager for Emacs\n 28.4 Esheet.el, Emacs spreadsheet\n 28.5 Hideshow.el, display blocks of code (*), XEmacs, Emacs\n 28.6 Hier-imenu.el, Hierarchical index menu for emacs\n 28.7 Folding.el, keep your text or code organised (*), XEmacs\n 28.8 Outline modes\n 28.9 Outline-imenu.el\n 28.10 SES, Emacs spreadsheet\n\n 29.0 Tracking changes\n 29.1 Autorevert.el (*), Emacs\n 29.2 Blinking-cursor.el (*), XEmacs\n 29.3 Change-mode.el, changes made get highlighted (*)\n 29.4 Csdiff.el, component software diff\n 29.5 Etail.el, tail -f\n 29.6 Himark.el\n 29.7 Hi-lock.el, highlight words (*), Emacs 21\n 29.8 Highlight-current-line.el\n 29.9 Hl-line.el, highlight the current line (*), Emacs\n 29.10 Highline.el, Minor mode to highlight current line in buffer\n 29.11 Linemenu.el, highlight current line\n 29.12 Live-mode.el, periodically revert-file\n 29.13 Mic-paren.el, highlight sexps (*), Xemacs\n 29.14 Notes-mode.el, indexing system for on-line note-taking\n 29.15 Records.el\n 29.16 Remember.el, mode for remembering data\n 29.17 Simplemerge.el, resolving CVS conflicts (*), Emacs\n 29.18 Tail.el, tail -f\n 29.19 Tinymy.el, y-or-n-p autorevert by timer process\n 29.20 Time - Timecard-mode.el\n 29.21 Time - Timeclock.el (*)\n 29.22 Time - Timelog.el\n 29.23 Todoo.el, editing todo files\n 29.24 Todo-mode.el (*), Emacs\n 29.25 Worklog-mode.el, keep track of stuff you do\n 29.26 X-symbol (*), XEmacs\n\n 30.0 Buffers\n 30.1 A day with buffers\n 30.2 Popup menu based buffer selection utilities\n 30.3 Typing buffer name in echo area\n 30.4 Buffer utilities\n 30.5 Rolling buffers in same window\n 30.6 Window selecting utilities\n 30.7 Demax.el, Delete too narrow windows\n\n 31.0 Desktop\n 31.1 Overview of to state change packages\n 31.2 Desktop.el and extensions to it\n 31.3 Grabbox.el, project bookmarks\n 31.4 Protbuf.el, protect buffers from accidental killing\n 31.5 Session.el\n 31.6 TinyDesk.el, simple file and dir information saver\n 31.7 Windows.el\n\n 32.0 Screen and window\n 32.1 Escreen.el, mimic sun's screen(1)\n 32.2 Follow-mouse.el\n 32.3 Resize-help-window.el\n 32.4 Screen-lines.el, minor mode\n 32.5 Screenlines.el\n 32.6 Winner.el, restore old window configurations\n 32.7 Winring.el, Window configuration rings (*), Emacs 20.4\n\n 33.0 Mouse\n 33.1 Mouse-copy.el\n 33.2 Mouse-extra.el, one-click text copy and move\n 33.3 Strokes.el, mouse stroke commands (*), XEmacs\n 33.4 Xt-mouse.el, mouse support for non-windowed emacs (*), [X]Emacs\n\n 34.0 Amusement\n 34.1 Ascii animation\n 34.2 Comics.el, read www.comics.com\n 34.3 Elite game\n 34.4 Faith.el, Spread the word of Emacs\n 34.5 Thinks.el, draw bubbles\n 34.6 Zone.el, screen saver\n 34.7 Paperclip-mode.el\n\n 35.0 Music\n 35.1 Cddb.el, CD DataBase interface\n 35.2 Cda.el, interface to CD players\n 35.3 Cdrw.el, frontend to various commandline CDROM\n 35.4 Mp3-tools.el A simple Linux MP3 Tag Editor\n 35.5 Mp3player.el, Interface to mpg123 and winamp\n 35.6 Workbone.el, CD player for program workbone\n\n 36.0 Miscellaneous\n 36.1 After-save-commands.el, update xrdb(1) after save\n 36.2 Align.el (*)\n 36.3 Apm.el, Power Management From Within (X)Emacs\n 36.4 Archie.el, archie server search\n 36.5 Autoarg.el, easy arguent passing to commands\n 36.6 Auto-arg.el, passing arguents easily to commands\n 36.7 Bm-man.el, unix man page completion\n 36.8 Buffer-perm-map.el\n 36.9 C-comment-edit2.el\n 36.10 Calc.el\n 36.11 Calculator.el, A simple pocket calculator for Emacs\n 36.12 Color-mode.el\n 36.13 Color-themes.el, preview and install color themes\n 36.14 Comment.el\n 36.15 Cib.el, Complete into Buffer for Emacs\n 36.16 Complete-menu.el, complete items from x-popup\n 36.17 Ctypes.el, custom defined types for font lock\n 36.18 Dekeys, disable and enable keys without modifying keymaps\n 36.19 Diminish-mode.el, modeline display help\n 36.20 Etalk, run talk(1) in emacs buffer\n 36.21 File-log.el, keep change information for each file.\n 36.22 Gdialog.el, Widget frontend for directory-recursive text searches\n 36.23 Igrep.el, an improved interface to grep\n 36.24 Initsplit, code to split customizations into different files\n 36.25 Irc, internet relay char system (*)\n 36.26 Ishl.el, incremental search highlighting (*), Emacs\n 36.27 Lprint, print to your local printer\n 36.28 Mathlab.el\n 36.29 Master.el, scroll other buffer\n 36.30 Mss.el, Make smart Win32 shortcuts\n 36.31 Multi-term.el, manage multiple term buffers\n 36.32 Narrow-stack.el, recursive narrow\n 36.33 Next-screen-line.el, Move logical next line even if long display\n 36.34 Pager.el, Keep page up and down position\n 36.35 Pcomplete, context aware complete\n 36.36 Power-macros.el, assign macro to key\n 36.37 Printing.el, Printing utilities.\n 36.38 Redo.el, Redo/undo system (*), XEmacs\n 36.39 Rpm.el, Redhat Linux package browser\n 36.40 Rpm for Mandrake\n 36.41 Rpm-spec-mode.el\n 36.42 Setnu.el, permanent line numbers (*), XEmacs\n 36.43 Sql modes\n 36.44 Sqlplus-html.el, Render SQL*Plus HTML output on-the-fly.\n 36.45 Tablature-mode.el\n 36.46 Vi-dot.el, repeat the preceding command\n\n 37.0 Ported XEmacs or Emacs packages\n 37.1 Crisp.el, xemacs brief editor emulation\n 37.2 Pc-select.el, select region with cursor keys (*), Emacs\n 37.3 Ffap.el, find file at point (*), Emacs\n 37.4 Printing.el\n 37.5 Print - a2ps-print.el\n 37.6 Ps-print.el, print font lock color buffers (*)\n 37.7 Ps-print-interface.el\n 37.8 Uptimes.el, Emacs uptime\n\n 38.0 Emulation packages\n 38.1 Cua.el, Windows key-bindings\n 38.2 Fsf-mouse.el, FSF mouse emulation in XEmacs\n 38.3 Fsf-compat, FSF function library in XEmacs\n\n 39.0 Ancient packages or included in Emacs\n 39.1 Browse-url.el, delegate url to www browsers (*)\n 39.2 Custom.el (*), Emacs and XEmacs\n 39.3 Fdb.el, ignore emacs error signals\n 39.4 Filladapt.el, adaptive filling\n 39.5 Mview.el, view minor mode\n 39.6 Suggbind.el, keybind command reminder\n 39.7 Smtpmail.el (*)\n 39.8 Supercite.el, mail citing package (*)\n 39.9 Term.el (*)\n 39.10 W3.el browser (*)\n\nEnd \n\nSource: [[Emacs references and faqs - news.answers : Google 網上論壇|http://groups.google.com.tw/group/news.answers/browse_thread/thread/27bf0a0441e94d4f/a768cf4c011c41d0]]
~FullScreen Command Line with wmctrl\n\nIf you want to bind F11 to toggle full-screen, here is what you need:\n\n1. install wmctrl (sudo apt-get install wmctrl)\n\n2. edit your .emacs and add:\n{{{\n (defun switch-full-screen ()\n (interactive)\n (shell-command "wmctrl -r :ACTIVE: -btoggle,fullscreen"))\n\n (global-set-key [f11] 'switch-full-screen)\n}}}\nSource: [[EmacsWiki: FullScreen|http://www.emacswiki.org/cgi-bin/emacs-en/FullScreen]]
Common Use\n\nInvoke HideShow mode with M-x hs-minor-mode.\n\nFor Emacs 20:\n\n * C-c S show all\n * C-c H hide all\n * C-c s show block\n * C-c h hide block\n\nFor Emacs 21:\n\n * C-c @ ESC C-s show all\n * C-c @ ESC C-h hide all\n * C-c @ C-s show block\n * C-c @ C-h hide block\n * C-c @ C-c toggle hide/show\n\nExample\n\nIf you hide all (C-c H) the code looks as follows:\n\n ObjectInfo::ObjectInfo(FILE *fname)...\n ObjectInfo::~ObjectInfo()...\n\nIf you put the TextCursor on ~ObjectInfo(), and show block (C-c s), the code expands:\n\n ObjectInfo::ObjectInfo(FILE *fname)...\n ObjectInfo::~ObjectInfo() {\n if(animations)\n delete [] animations;\n }\n\nVersions and Language Support\n\nHideShow works with:\n\n * Lisp / Emacs Lisp / Scheme (ParenthesesRule)\n * Java / C / C++ / Perl (expressions delimited by curly braces)\n * PHP (use php-mode from http://php-mode.sf.net --GirishB)\n * Tcl\n * VHDL\n * Fortran\n\nHideShow is included with Emacs 20 and later. [The maintainer version, which is slightly more featureful (and perhaps slightly less stable) can be found at http://www.glug.org/people/ttn/software/hideshow/ --ttn]\n\nMaking it work with other languages can be simple or complex, depending on the regularity of the language’s syntax. See commentary and/or email ttn for hints.\nAutomatically Activating\n\nDoes anyone else have trouble viewing the text after this next paragraph?\n\nSteveWainstead contributes the following code for Emacs 20, which automatically activates HideShow for Perl, Java, or Lisp sources.\n\n ;; hideshow for programming\n (load-library "hideshow")\n (add-hook 'java-mode-hook 'hs-minor-mode)\n (add-hook 'perl-mode-hook 'hs-minor-mode)\n (add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)\n\nOther Options\n\nHere is a set of perhaps other useful options you can customize:\n\n ;; Hide the comments too when you do a 'hs-hide-all'\n (setq hs-hide-comments nil)\n ;; Set whether isearch opens folded comments, code, or both\n ;; where x is code, comments, t (both), or nil (neither)\n (setq hs-isearch-open 'x)\n ;; Add more here\n\nMaintainer version also has spiffy new variable: hs-set-up-overlay\nExtensions\n\nThe answer to the question “How do I get it to expand upon a goto-line? (like it does in search mode)” is by adding some advice.\n\nAdvice is similar to a hook. It may be executed before or after an Emacs function. It can affect both the parameters and the return value of the function. See AdvisingFunctions.\n\nFor expansion on goto-line, adding the following code to your .emacs file will do the trick:\n\n (defadvice goto-line (after expand-after-goto-line\n activate compile)\n\n "hideshow-expand affected block when using goto-line in a collapsed buffer"\n (save-excursion\n (hs-show-block)))\n\nSimilar solutions can most likely be found for the find-tag and revert-file problem questions below (unless you want to preserve all expanded/compressed parts of the code in the latter case)\nQuestions\n\nAlso, is there some fix for the revert-file problem (all the collapses just disappear upon reverting)? [An old version of hideshow.el used to include support for saving the hideshow state in a separate file in various ways. These functions were excised for aesthetic reasons and are now available in hideshow-state.el, which has been mouldering away for about half a decade. Perhaps summer or autumn 2005 will see an updated release. --ttn]\n\nAlso, how to get to expand upon a find-tag?\n\nIs anyone working to add Python support? I’ve been unable to find any evidence, and although I’m a lisp novice, I may attempt it.\n\n See here: http://sourceforge.net/projects/python-mode/ (Maybe by now this mode is popular enough to remove this question from here?) \n\nIs there a possibility to add some small “+” sign next to the sourcecode to toggle show/hide? E.g. like the one in the KDE editor component.\n\n S-mouse-2 toggles show/hide without need for a “+”. (At least it does in CVS Emacs.) You could map hs-toggle-hiding to a more convenient key too. Perhaps M-+ would suit your itch for a “+”. \n\nIs anyone working on ruby support?\n\n There is something: http://www.hyperionreactor.net/node/43 \n\nI found a problem with the (correct) behavior of HideShow. In the 1st situation (see below, 1st column), if one hides the 1st block, what is shown is not entirely satisfactory (2nd column). Much better would be the last example, i.e., as though the “else” was in the next line from the ’}’ which closes the 1st block.\n\n if (condition) { | if (condition) {... | if (condition) {...\n dosomething (); | // 2nd block | else if (othercondition) {\n // 1st block | } | // 2nd block\n } else if (othercondition) { | | }\n // 2nd block | |\n } | |\n\nThis problem shows up when the code is not one’s own, mainly, and it’s even worse when the file is not editable (say, e.g., under source control system).\n\nThe question: is this behavior configurable somehow, or it would require changes in the elisp source code?\n\nI thought (and tried) changing the closing block regexp, to make it match “something just before the closing curly brace”, but that’s nonsense because the curly brace itself must be included anyway in the regexp, thus including anyway the line containing it, which is still the same situation. Any suggestion?\n\nI found a quick solution by excluding the last line of the block. This can be bad for small blocks, but for large blocks it’s OK. The patch goes like this.\n\n --- hideshow-orig.el 2007-01-29 16:57:04.000000000 -0300\n +++ hideshow.el 2007-01-29 16:58:12.000000000 -0300\n @@ -512,6 +512,7 @@\n (q\n ;; `q' is the point at the end of the block\n (progn (hs-forward-sexp mdata 1)\n + (forward-line -1)\n (end-of-line)\n (point))))\n (if (and (< p (point)) (> (count-lines p q) 1))\n\nMay be this could be customized with a local variable like hs-block-includes-last-line. MarioStorti\n\nSource: [[EmacsWiki: HideShow|http://www.emacswiki.org/cgi-bin/emacs-en/HideShow]]
HideShow is a minor mode similar to OutlineMode – it hides and shows blocks of text. In particular, HideShow hides balanced-expression code blocks and multi-line comment blocks.\n\nOverview\n\n(see also OutlineMinorMode, AllOut)\n\nOutline mode is the default outline mode for Emacs. Use M-x outline-mode to enter it. It distinguishes between different header levels and the plain text. The default mechanism uses asterisks to determine header levels. Use the NEWS file as an example (C-h n):\n\n * Very important\n ** Less important\n *** A detail\n And the rest is text\n between the headers.\n\nYou can then use Headings, Show, and Hide menus to selectively show parts of the text, or the following keys:\n\n * C-c C-a show all\n * C-c C-t show only the headings\n * C-c C-s show subtree at cursor location\n * C-c C-d hide subtree at cursor location\n\nExample\n\nFor example, a document may look like this:\n\n * Heading\n \n This is a document that has a heading, and a body.\n The body will consist of two paragraphs with sub-headings.\n \n * Body\n \n This is an introduction to the body. The body has two sub-headings,\n each of which have their own paragraph.\n \n ** The First Paragraph\n \n This is the first of two paragraphs.\n It is not terribly impressive.\n \n ** The Second Paragraph\n \n This is the second of two paragraphs.\n It is not impressive either.\n\nYou can use hide-subtree (C-c C-d) to hide the Heading, and the two paragraphs:\n\n * Heading...\n \n * Body\n \n This is an introduction to the body. The body has two sub-headings,\n each of which have their own paragraph.\n \n ** The First Paragraph...\n \n ** The Second Paragraph...\n\nYou can use hide-body (C-c C-t) to hide all the body text, leaving only the headings (note the ellipsis indicating where body text has been hidden):\n\n * Heading...\n \n * Body...\n ** The First Paragraph...\n ** The Second Paragraph...\n\nAnd you can use show-all (C-c C-a) to redisplay everything and get back to where we started.\nCustomizing Heading Definition\n\nYou can also customize ‘outline-regexp’ which indicates which lines are considered heading. It is a regular expression to match the beginning of a heading. The smaller the match, the higher the level of the heading.\n\nThe default value matches asterixes and page breaks:\n\n "[*\sf]+"\n\nFor lisp-modes, the value matches comments starting with three semicolons and opening parens on the first column.\n\n ";;; \s\s|(...."\n\nFor man pages, something like this might be useful:\n\n " *[A-Z ]+"\n\nFor Wikipedia or txt2tags style headers:\n\n "^[=]+"\n\nJohanBockgård uses “[A-Z]\s\s|\s\ss-+[-+]” to give this result\n\nOPTIONS…\n\n -help This causes xterm to print out a verbose message...\n\n -132 Normally, the VT102 DECCOLM escape sequence that...\n\nUsing Roman Numerals as Headings\n\nHere’s how to make Emacs’ outline mode use “I., A., 1., a., i.” and so on as valid outline entries. Put the following at the end of your document (or among your LocalVariables if you already have them):\n\nLocal Variables:\nmode: outline-minor\noutline-regexp: " *\s\s([A-Za-z]\s\s|[IVXivx0-9]+\s\s)\s\s. *"\nEnd:\n\nThere, now you can use normal outline notation. If you use “outline” instead of “outline-minor” for mode, then you get font-lock as a bonus (but you lose whatever major mode you were in before). Note that it is looking for any number of spaces, followed by either a single letter or a Roman or Arabic numeral (multiple digits allowed), followed by any number of spaces, and the length of all of that together determines the outline level. So your outlines have to look like this:\n\n I. blah blah\n II. blah blah blah\nIII. blah blah\n A. This\n B. That\n\n…for this to work correctly. Interestingly enough, this didn’t work for me on the very first line of the file; I had to skip one line (an extra carriage return above “I”), then it worked as planned. Not sure why this is.\nSome hooks for special modes\n\n(add-hook 'change-log-mode-hook\n (lambda ()\n (setq outline-regexp "[[:digit:]]+")))\n; note that the "^" is *implicit* at the beginning of the regexp\n\nBetter use (set (make-local-variable ‘outline-regexp) “…”) as the above changes the global value.\nCycling\nCycling: What is it?\n\nInstead of using many different commands to show and hide buffer parts, ‘outline-cycle’ cycles through the most important states of an outline buffer. By default, it is bound to the ‘TAB’ key. This saves a lot of typing and thinking while editing your outline.\nCycling: How do I get it?\n\n * outline-magic (see below)\n * OrgMode includes cycling and many more features\n\nCycling: outline-magic\n\nThe outline-magic package by CarstenDominik provides the command ‘outline-cycle’ which changes the visibility of text and headings.\n\nIn addition to outline cycling, this extension provides four commands for structure editing. Using M-up, M-down, M-left, and M-right, you can easily move entries around:\n\n move up\n ^\n promote <- + -> demote\n v\n move down\n\nYou can get it here:\n\n * http://www.astro.uva.nl/~dominik/Tools/outline-magic.el\n\nIt seems that similar features are provided by AllOut.\nConverting Emacs Outline to Other Formats\n\nOutline mode is helpful for organizing plain text documents and program source code. It would be useful to have a converter for the Emacs outline format into other document and file formats. Here are a few projects trying to do just that.\n\n * EasyCodeOutline\n * EmacsOutlineToHtml - Converts the outline format to a web page.\n * EmacsPresentation - Converts outline to some useful format for public presentations.\n\nPrinting Outline files with a2ps\n\na2ps(1) includes a simple stylesheet for outline-mode (at least, the Debian package 1:4.13b-4.3 has it (not for me?, does anyone know where to find this?)). To use it for your file, do one of:\n\n * specify the language directly, e.g. a2ps -o print.ps -Eoutline myfile\n * find or create some magic(5) for the file(1) command to recognise outline files, then tell the a2ps map file about the output signature\n\nNote that it only understands the default ’*’ headings.\n\nSource: [[EmacsWiki: OutlineMode|http://www.emacswiki.org/cgi-bin/emacs-en/OutlineMode]]
C-h t是谈恋爱\n manual 才是真正的结婚\n Lisp Reference Manual 就成了解剖学了.....\n\n\n\nSource: [[同主题阅读|http://www.newsmth.net/bbstcon.php?board=LinuxApp&gid=519998]]
China: Support Bill Xu's campaign opposing proprietary banking requirements\n\nChina Merchants Bank excludes free software users.\n\nBecause the China Merchants Bank online banking service uses the ActiveX proprietary software, it excludes free software users from using its service. Bill Xu launched a campaign to oppose this, The FSF supports this campaign, and is asking free software users to join in. The campaign's URL is: <http://www.billxu.com/friend/rms/an.open.letter.to.cmb.html>.\n\nBill Xu is a free software supporter. He cooperates closely with the international free software community, and is launching a free software organization in China.\n\nSource: [[FSF - China: Support Bill Xu's campaign opposing proprietary banking requirements|http://www.fsf.org/news/open-letter-to-cmb]]
/***\n|Name|FontSizePlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#FontSizePlugin|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nResize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.\nYou can customize the maximum and minimum allowed sizes.\n(only affects tiddler content text, not any other text)\n\nAlso, you can load a TW file with a font-size specified in the url.\nEg: http://tw.lewcid.org/#font:110\n\n!Demo:\nTry using the font-size buttons in the sidebar, or in the MainMenu above.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nThen put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.\n\n!Usage\n{{{<<fontSize>>}}} results in <<fontSize>>\n{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>\n\n!Customizing:\nThe buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.\nTo change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.\n\n!Notes:\nThis plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.\n\n!History:\n*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.\n*25-07-06, version 0.9\n\n!Code\n***/\n\n//{{{\nconfig.fontSize={};\n\n//configuration settings\nconfig.fontSize.settings =\n{\n defaultSize : 100, // all sizes in %\n maxSize : 200,\n minSize : 40,\n stepSize : 10\n};\n\n//startup code\nvar fontSettings = config.fontSize.settings;\n\nif (!config.options.txtFontSize)\n {config.options.txtFontSize = fontSettings.defaultSize;\n saveOptionCookie("txtFontSize");}\nsetStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\sn","fontResizerStyles");\nsetStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\sn .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");\n\n//macro\nconfig.macros.fontSize={};\nconfig.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)\n{\n\n var sp = createTiddlyElement(place,"span",null,"fontResizer");\n sp.ondblclick=this.onDblClick;\n if (params[0])\n createTiddlyText(sp,params[0]);\n createTiddlyButton(sp,"+","increase font-size",this.incFont);\n createTiddlyButton(sp,"=","reset font-size",this.resetFont);\n createTiddlyButton(sp,"–","decrease font-size",this.decFont);\n}\n\nconfig.macros.fontSize.onDblClick = function (e)\n{\n if (!e) var e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nconfig.macros.fontSize.setFont = function ()\n{\n saveOptionCookie("txtFontSize");\n setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\sn","fontResizerStyles");\n}\n\nconfig.macros.fontSize.incFont=function()\n{\n if (config.options.txtFontSize < fontSettings.maxSize)\n config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.macros.fontSize.decFont=function()\n{\n\n if (config.options.txtFontSize > fontSettings.minSize)\n config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.macros.fontSize.resetFont=function()\n{\n\n config.options.txtFontSize=fontSettings.defaultSize;\n config.macros.fontSize.setFont();\n}\n\nconfig.paramifiers.font =\n{\n onstart: function(v)\n {\n config.options.txtFontSize = v;\n config.macros.fontSize.setFont();\n }\n};\n//}}}
/***\n|Name|FullScreenPlugin|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#FullScreenPlugin|\n|Version|1.1|\n|Requires|~TW2.x|\n!Description:\nToggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.\n\n!Demo:\nClick the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\nEdit the ViewTemplate to add the fullscreen command to the toolbar.\n\n!History:\n*25-07-06: ver 1.1\n*20-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nvar lewcidFullScreen = false;\n\nconfig.commands.fullscreen =\n{\n text:" fullscreen ",\n tooltip:"Fullscreen mode"\n};\n\nconfig.commands.fullscreen.handler = function (event,src,title)\n{\n if (lewcidFullScreen == false)\n {\n lewcidFullScreen = true;\n setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");\n }\n else\n {\n lewcidFullScreen = false;\n setStylesheet(' ',"lewcidFullScreenStyle");\n }\n}\n\nconfig.macros.fullscreen={};\nconfig.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = params[0]||" fullscreen ";\n var tooltip = params[1]||"Fullscreen mode";\n createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);\n}\n\nvar lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;\nStory.prototype.closeTiddler =function(title,animate,slowly)\n{\n lewcid_fullscreen_closeTiddler.apply(this,arguments);\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n\n\nSlider.prototype.lewcidStop = Slider.prototype.stop;\nSlider.prototype.stop = function()\n{\n this.lewcidStop();\n if (story.isEmpty() && lewcidFullScreen == true)\n config.commands.fullscreen.handler();\n}\n//}}}
config.options.chkHttpReadOnly = true;
\nI honestly don't remember when or where I found the information below. But I've cut-and-pasted it here (with a few minor adjustments) because it is a nice visual explanation of gradients.\n\n<<gradient horiz #bbbbbb #eeeeee #ffffff>>The new GradientMacro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.>>\n\nThe syntax for the gradient macro looks like this:\n{{{\n<<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>\n}}}\n\nInside double angle brackets there are ''four elements:'' \n#"gradient" tells TiddlyWiki what kind of macro this is.\n#"vert" is for vertical gradients and "horiz" is for horizontal gradients.\n#What follows is a sequence of the code for the two or more colors that you want in your gradient. You may use CSS or RGB ways of indicating colors. For more on colors, see [[here|Changing the colors of a TiddlyWiki]].\n#">>gradient fill>>" finishes off your macro.\n\n''Here is another gradient example:''\n| <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddddff #8888ff>>No images were harmed in the making of this gradient fill>> |\n\nHere's the code for the image above.\n{{{\n| <<gradient vert #ffffff #ffdddd #ff8888>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddffdd #88ff88>>No images were harmed in the making of this gradient fill>> | <<gradient vert #ffffff #ddddff #8888ff>>No images were harmed in the making of this gradient fill>> |\n}}}\n\nInline CSS definitions can be added to gradient fills like this:\n\n<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>\n\nHere's the code for the image above.\n{{{\n<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>\n}}}\n\n
\nTiddlyWiki uses Wiki style markup, a way of lightly "tagging" plain text so it can be transformed into HTML. Go into edit mode by double-clicking this tiddler or pressing the 'edit' button in the hidden menu above to see the code for the following formatting samples.\n\n! Header Samples\n!Header 1\n!!Header 2\n!!!Header 3\n!!!!Header 4\n!!!!!Header 5\n\n! Word lists with words and their definitions\nThis is an entry from the word list\n{{indent{This is its indented definition\n\nThis is the next entry in the word list \n{{indent{This is its indented definitionThis is its indented definitionThis is its indented definitionThis is its indented {{indent{definitionThis is its indented definitionThis is its indented definitionThis is its indented definitionThis is its {{indent{indented definitionThis is its indented definitionThis is its indented definitionThis is its indented definition\n\n! Unordered Lists:\n* Lists are where it's at\n* Just use an asterisk and you're set\n** To nest lists just add more asterisks...\n***...like this\n* The circle makes a great bullet because once you've printed a list you can mark off completed items\n* You can also nest mixed list types\n## Like this\n\n! Ordered Lists\n# Ordered lists are pretty neat too\n# If you're handy with HTML and CSS you could customize the [[numbering scheme|http://www.w3schools.com/css/pr_list-style-type.asp]]\n## To nest, just add more octothorpes (pound signs)...\n### Like this\n* You can also\n** Mix list types\n*** like this\n# Pretty neat don't you think?\n\n! Tiddler links\nTo create a Tiddler link, just use mixed-case WikiWord, or use {{{[[brackets]]}}} for NonWikiWordLinks. \n\nYou can also create "pretty links" - links that use ordinary words but that link to a specific tiddler or file or webpage. Here is an example: the code {{{[[helpful tiddler|TW glossary]]}}} creates a link to the TW glossary, but with the words "helpful tiddler." [[helpful tiddler|TW glossary]].\n\nNote that existing Tiddlers are in bold and empty Tiddlers are in italics. See CreatingTiddlers for details.\n\n! External Links\nYou can link to [[external sites|http://google.com]] with brackets. You can also LinkToFolders on your machine or network shares.\n\n! Images\nEdit this tiddler to see how it's done.\n[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]\n\n!Tables\n|!th1111111111|!th2222222222|\n|>| colspan |\n| rowspan |left|\n|~| right|\n|bgcolor(#DC1A1A):colored| center |\n|caption|c\n\nFor a complex table example, see PeriodicTable.\n\n! Horizontal Rules\nYou can divide a tiddler into\n----\nsections by typing four dashes on a line by themselves.\n\n! Blockquotes\n<<<\nThis is how you do an extended, wrapped blockquote so you don't have to put angle quotes on every line.\n<<<\n>level 1\n>level 1\n>>level 2\n>>level 2\n>>>level 3\n>>>level 3\n>>level 2\n>level 1\n\n! Other Formatting\n''Bold''\n==Strike==\n__Underline__\n//italic//\nSuperscript: 2^^3^^=8\nSubscript: a~~ij~~ = -a~~ji~~\n@@highlight@@ Unfortunately highlighting is broken right now.\n@@color(green):green colored@@\n@@bgcolor(#ff0000):color(#ffffff):red colored@@ Hex colors are also broken right now.
!!!About Me\nI am working on my Master Degree in Software Engineering at Tongji University, Shanghai, China. At present,my major interest is algorithm design. As a Linux-mania, I'm using [[KUbuntu|http://www.kubuntu.org/]] 6.10 Edgy on my laptop. Photography, Go(a kind of chess), Reading are my hobbies too.\n!!!Contract Infomation\n[img[E-Mail|email.png]] @@color(#990000):'' wikistick [at] gmail [dot] com ''@@
I don't like the original tall header of the TW at http://tiddlywiki.com. So I changed \n\n.headerShadow {\n position: relative;\n padding: @@4.5em@@ 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: @@4.5em@@ 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n''to the following:'' \n\n.headerShadow {\n position: relative;\n padding: @@2em@@ 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: @@2em@@ 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n.
Published: August 9, 2006\n\nby Dan Burger\n\nIBM has enlisted application software giant SAP to help promote System z mainframes and has come forth with a combination of investments in tech centers and rebates to customers as its primary plan to help SAP. To get things under way, Jim Stallings, the general manager of System z division, says IBM is earmarking $40 million over five years for the testing and support of SAP applications on System z and for enhancing the existing SAP technical centers.\n\nStallings calls this investment "mostly incremental" based on IBM's current level of involvement with SAP through the tech centers. An exact number that identified new money being spent in this effort was not offered by IBM.\n\nHowever, Stallings did say the tech centers would be instrumental in helping both new and existing mainframe customers understand the capabilities and the cost efficiencies of running SAP on Big Blue's System z mainframes. He particularly zeroed in on the advantages pertaining to DB2 running on the z9 Integrated Information Processor (zIIP), which is a mainframe engine setup as a DB2 accelerator, and the Integrated Facility for Linux (IFL), which is an engine set up to run Linux. The zIIPs and IFLs are expected to play a prominent role in server consolidation programs at SAP accounts, mainly because these specialized engines cost a lot less than real mainframe engines (and do not need to be running z/OS, either, which isn't cheap.) SAP is frequently seen in data centers running on Unix and X64 servers that are prone to multiplying like rabbits and thereby introduce costs relating to power, cooling, and software maintenance and management. You can bet that SAP applications running on a single system provides an advantage that IBM will continue to heavily promote.\n\nAnother advantage that Stallings wants to put on the front burner is that for high-end SAP application environments, with features like concurrent backup and highly efficient reorganization capabilities, mainframe performance shines. Stallings claims that the introduction of the zIIP provides at least 20 percent improvement in price/performance on DB2 workloads, such as supporting a set of SAP databases. zIIP processor, which takes certain DB2 routines and offloads them from the mainframe engines running z/OS and DB2, is available in both the System z9 BC and its larger and older sibling, the z9 EC. The zIIP was designed to increase general computing capacity and lower software costs for selected workloads. IBM does not impose IBM software charges on zIIP capacity.\n\nBecause customers are not familiar with advancements like the zIIP, Stallings says IBM is putting more money into the tech centers, where IBM and SAP can lead customers through the proof of concept and testing phases for such new technologies and get them ready to deploy them onsite. Part of the additional money IBM is committing to the mainframe tech centers will go toward increasing the engineering staff and adding customer training opportunities, which are considered to be a critical customer service.\n\nStallings also announced a new incentive plan aimed at companies that are moving to newer, bigger mainframes, coming into the mainframe fold for the first time, or considering SAP applications on System z. The incentive is a rebate program that offers rewards of up to $250,000. Of course, to get that kind of money, you'll have to spend a considerable amount as well.\n\nTo be eligible for the grand prize of a quarter million dollar rebate, companies need to invest in each category of hardware, software, and services IBM sells on the mainframe. In addition to the new or upgraded server and the $50,000 of SAP software, IBM also wants you to either purchase system storage or services, too. This offer is a three-legged stool, and you're ability to get milk from the rebate cow depends on getting comfortable with the stool IBM gives you. The rebate is calculated as a percentage of the server price. This rebate only applies to those of you located in the United States and its territories, Canada, and the Caribbean north district.\n\nThe System z9 hardware component of this deal is defined as a new System z9 server, a new model conversion to a System z9 server, or a new processor feature conversion on an existing System z9 server. All the z9 servers with list prices of $250,000 or less are eligible for some portion of the rebate. Selected models above that price range are also involved in the promotion, but you'll have to ask questions before you finalize any purchases or leases. The z9 hardware can be purchased or leased, but all contracts must be signed or dated August 8 or later. For the intricacies of various contracts and dates and which high-end severs (or conversions) qualify for rebates, please refer to announcement letter 306-174.\n\nA single z9 serial number can qualify for more than one rebate, as long as it was newly purchased or leased and subsequently upgraded, or upgraded more than once, and each System z9 hardware component acquired is accompanied by an eligible new SAP software license(s) with that minimum $50,000 SAP invoice price. And you should be aware that this is not the only way to get a rebate on a System z server. Inquire with IBM or your mainframe dealer about other offers unrelated to this deal.\n\nThe list of eligible service engagements that IBM wants you to choose from includes on demand assessment workshops that look at on demand technologies and IT management practices; server and storage environment studies designed to develop cross-platform or platform-specific technical solutions and business cases for consolidation; and infrastructures studies that examine the support of large scale, multi-tier applications, and service areas such as Web, file/print, e-mail, and branch applications. The length of these engagements vary from a few days to a few weeks to a few months, and the cost varies from approximately $15,000 to $1 million.\n\nThe list of eligible storage hardware products that you can fit into this promotion includes the TS1120 tape drive model E05; the TS1120 tape controller model E06; the 3584 tape library models L23, D23, L53, and D53; the Enterprise Tape Library models LXX; the Virtual Tape Server model B20; and the Total Storage DS8300 disk array.\n\nSource: [[Big Iron--IBM Turns to SAP to Promote Mainframes|http://www.itjungle.com/big/big080906-story01.html]]
Macros let you write tiddlers containing more exotic objects than just text. See also [[TiddlyWiki Markup]]. Here are the built-in macros:\n\n|!Macro|!Description|!Syntax|\n|allTags|List all the tags used in the current TiddlyWiki file<<br>>Each entry is a button that pops up the list of tiddlers for that tag<<br>><<slider sliderID [[Internal Macros/tags]] 'Click to show example output'>>|{{{<<allTags>>}}}|\n|br|Force a line break|{{{<<br>>}}}|\n|closeAll|Displays a button to close all displayed Tiddlers<<br>><<closeAll>>|{{{<<closeAll>>}}}|\n|gradient|<<gradient [horiz|vert] #bbbbbb #eeeeee #ffffff>>Produces a horizontal or vertical background gradient fill>><<br>>There can be 2 or more colours in the format: #rrggbb (hex), or RGB(r,g,b) (CSS)<<br>>Other CSS formatting can also be added, e.g. {{{<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>}}}|{{{<<gradient [horiz|vert] #bbbbbb #eeeeee #ffffff>>Some text here>>}}}|\n|list all|List all Tiddlers in a Tiddler|{{{<<list all>>}}}|\n|list missing|List all missing tiddlers|{{{<<list missing>>}}}|\n|list orphans|List all orphaned tiddlers|{{{<<list orphans>>}}}|\n|newJournal|Displays a button to create new date & Time stamped Tiddler (Date/time format optional)<<br>><<newJournal "DD MMM YYYY, hh:mm">> <<br>>You can also add optional tag names after the date format: <<newJournal "DD MMM YYYY, hh:mm" tag1 TagTwo>> |{{{<<newJournal [DateFormatString]>>}}} <<br>> {{{<<newJournal "DD MMM YYYY, hh:mm" tag1 TagTwo>>}}} |\n|newTiddler|Displays a button to create new Tiddler<<br>><<newTiddler>>|{{{<<newTiddler>>}}}|\n|permaview|Displays a button to change the URL link for all open Tiddlers - or the containing tiddler if used in the command bar (See the ViewTemplate)<<br>><<permaview>>|{{{<<permaview>>}}}|\n|saveChanges |Button to save all TiddlyWiki changes (or the current tiddler if used in the command bar (see EditTemplate)<<br>><<saveChanges>>|{{{<<saveChanges>>}}}|\n|search|Display a Search box<<br>><<search>>|{{{<<search>>}}}|\n|slider|Display a Slider (a collapsable display of another tiddler)<<br>>See the allTags entry for an example. Note: Put quotes around the label if needing spaces<<br>>where: ''ID''=cookie name to be used to save the state of the slider, ''Tiddler''=name of the tiddler to include in the slider, ''Label''=label text of the slider button, ''tooltip''=text of the buttons tooltip|{{{<<slider ID Tiddler [Label] [toolTip]>>}}}|\n|sparkline|Produces a sparkline graphic<<br>>e.g. <<sparkline 163 218 231 236 232 266 176 249 289 1041 1835 2285 3098 2101 1755 3283 3353 3335 2898 2224 1404 1354 1825 1839 2142 1942 1784 1145 979 1328 1611>>|{{{<<sparkline num1 num2 ... numN>>}}}|\n|tabs|Display Tabbed content (contents of tab provided by another tiddler)|{{{<<tabs indentifier tabLabel tabName Tiddler>>}}}|\n|tag|Display a Tag ~PopUp<<br>><<tag _Config>>|{{{<<tag tagName>>}}}|\n|tagChooser|Used in EditTemplate to add tags to the tags field. Doesn't actually add anything unless in edit mode (though it does show the list)<<br>><<tagChooser>>|{{{<<tagChooser>>}}}|\n|tagging|<<tiddler [[Internal Macros/tagging]]>>|{{{<<tagging [TiddlerTitle]>>}}}|\n|tiddler|Display contents of another tiddler inline|{{{<<tiddler Tiddler>>}}}|\n|timeline|Display a timeline list of tiddlers<<br>>where the sortfield is the sort order ("modified" or "created") and maxentries is the maximum number of entries|{{{<<timeline [sortfield] [maxentries]>>}}}|\n|today|Display Today's Date<<br>>e.g. <<today>>|{{{<<today [DateFormatString]>>}}}|\n|version|Display TiddlyWiki's version<<br>>e.g. <<version>>|{{{<<version>>}}}|\n\n!DateFormatString\nSeveral Macros including the today macro take a DateFormatString as an optional argument. This string can be a combination of ordinary text, with some special characters that get substituted by parts of the date:\n* DDD - day of week in full (eg, "Monday")\n* DD - day of month, 0DD - adds a leading zero\n* MMM - month in full (eg, "July")\n* MM - month number, 0MM - adds leading zero\n* YYYY - full year, YY - two digit year\n* hh - hours\n* mm - minutes\n* ss - seconds\n!Notes\nIf you need to supply a parameter that should be evaluated (e.g. a JavaScript variable), enclose the parameter in {{{{{}}} and {{{}}}}} rather than quotes. Note however, that the scope used in the evaluation is {{{global}}} rather than {{{local}}}. In other words, the evaluation is done ''before'' the parameter is passed to the macro/plugin so it cannot access any of the variables or functions defined within the macro/plugin.\n!Commands supported by the toolbar macro\n{{{\nconfig.commands = {\n closeTiddler: {text: "close", tooltip: "Close this tiddler"},\n closeOthers: {text: "close others", tooltip: "Close all other tiddlers"},\n editTiddler: {text: "edit", tooltip: "Edit this tiddler", readOnlyText: "view", readOnlyTooltip: "View the source of this tiddler"},\n saveTiddler: {text: "done", tooltip: "Save changes to this tiddler", readOnlyText: "done", readOnlyTooltip: "View this tiddler normally"},\n cancelTiddler: {text: "cancel", tooltip: "Undo changes to this tiddler", hideReadOnly: true},\n deleteTiddler: {text: "delete", tooltip: "Delete this tiddler", warning: "Are you sure you want to delete '%0'?", hideReadOnly: true},\n permalink: {text: "permalink", tooltip: "Permalink for this tiddler"},\n references: {text: "references", tooltip: "Show tiddlers that link to this one", popupNone: "No references"},\n jump: {text: "jump", tooltip: "Jump to another open tiddler"}\n };\n}}}\n(Julian Knight, 2006-04-06)\n<part tagging hidden>\nProduces a list (NB: <ul> ''not'' a popup) of links to tiddlers that carry the specified tag. If no tag is specified, it looks for tiddlers tagged with the name of the current tiddler.\nIn HTML, the list is formatted like so:\n{{{\n<ul>\n<li class="listTitle">List title label</li>\n<li><a class="tiddlyLink ..." href="javascript:;" onclick="..."\n refresh="link" tiddlyLink="ExampleOne">ExampleOne</a></li>\n</ul>\n}}}\n</part>\n<part tags hidden>\n<<allTags>>\n</part>
/***\n|Name|JumpToTopMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#JumpToTopMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a toolbar command and a macro, that create a button for quickly jumping to the top of your TW.\nHandy to place in the tiddler toolbar (edit the ViewTemplate)\n\nNote: You can add an extra toolbar to the bottom of tiddlers as well with buttons of your choice, to allow easy access to the buttons/commands in it.\n\n!Demo:\n{{{<<top>>}}}<<top>>\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\n\n!History:\n*23-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nconfig.macros.top={};\nconfig.macros.top.handler=function(place,macroName)\n{\n createTiddlyButton(place,"^","jump to top",this.onclick);\n}\nconfig.macros.top.onclick=function()\n{\n window.scrollTo(0,0);\n};\n\nconfig.commands.top =\n{\n text:" ^ ",\n tooltip:"jump to top"\n};\n\nconfig.commands.top.handler = function(event,src,title)\n{\n window.scrollTo(0,0);\n}\n//}}}
这两天刚装了两次Kubuntu,总得来说易用性很高。\n以前都是用Gnome系统,这次试用对KDE系统非常满意,打算长期使用下去。\n\n我喜欢用英文的系统(UTF-8)加中文输入支持(fcitx),硬盘FAT32分区挂到桌面上。\n由于Karronqiu做了一个easyubuntu.sh,给安装带来了很大方便。\n下面我回顾一下安装要点(不含开发工具包):\n\n1- Kubuntu 6.10 edge (注意安装语言选English,国家地区选China);\n\n2- 在Kmenu/System/Language Support里,选上中文支持(Chinese)。注意安装过程中需要用到Kubuntu 6.10的安装盘;\n\n3- 运行Karronqiu的一键脚本:easyubuntu.sh ,使用方法是把它保存到用户根目录下,我这里是 /home/huminsk,然后在Konsole里运行sh easyubuntu.sh,注意不要sudo,需要root密码的地方会提示你; 完成后sudo reboot; (参考页面)\n\n(BTW:这里面值得一提的是Kubuntu里Konsole的调出方法。习惯上我以前都是从桌面调,现在发现Kubuntu带了极其贴心的小程序katapult,用alt+space调出,输入kon在回车就会调出Konsole,同理,输入f可调出firefox,输入ama可调出amarok,实在是太方便了!)\n\n4- 修改(其实是新建)/etc/X11/Xsession.d/95xinput,内容如下:\n<<<\nexport LC_CTYPE=zh_CN.UTF8\nexport XMODIFIERS=@im=fcitx;\nexport XIM=fcitx;\nexport XIM_PROGRAM=fcitx;\nexport GTK_IM_MODULE="XIM";\nexport QT_IM_MODULE="XIM"\nfcitx\n<<<\n然后logout一下,会来就可以用ctrl+space调中文输入法了; (参考页面)\n\n5- 在桌面上新建两个目录准备在这里挂载分区:\n<<<\nsudo mkdir /home/huminsk/Desktop/WIN\nsudo mkdir /home/huminsk/Desktop/DATA\n<<<\n6- 下面挂载FAT32分区,修改 /etc/fstab,添加几行:\n<<<\n/dev/hda1 /home/huminsk/Desktop/WIN vfat user,utf8,umask=000 0 0\n/dev/hda5 /home/huminsk/Desktop/DATA vfat user,utf8,umask=000 0 0\n<<<\n然后保存,再sudo mount -a重新挂载一下看结果;这里我的活动硬盘插上后可以自动挂载,不必单独挂载;(参考页面)\n\n然后导入书签,安装gvim吧。\n这样基本就差不多了,中文美化我觉得没必要,Karron的一站式脚本我觉得解决得够好了。\n\nSource: [[The Magnificent TrEE : Min's Kiosk: Linux|http://huminsk.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&partqs=cat%3dLinux]]
*MUS\n**[[Google|http://www.google.com]]\n**[[GooglePages|http://pages.google.com]]\n**[[SlashDot|http://slashdot.org/]]\n*Linux\n**[[Free Software Foundation|http://www.fsf.org/]]\n**[[GNU is Not Unix|http://www.gnu.org/]]\n**[[GNU Emacs|http://www.gnu.org/software/emacs/]]\n**[[Kubuntu.org|http://www.kubuntu.org/]]\n**[[forum.ubuntu.org.cn|http://forum.ubuntu.org.cn/index.php]]\n*Emacs & Vim\n**[[GNU Emacs|http://www.gnu.org/software/emacs/]]\n**[[vim.org|http://www.vim.org/]]\n**[[Emacs Code Browser|http://ecb.sourceforge.net/]]\n**[[EmacsWiki.org|http://www.emacswiki.org/cgi-bin/wiki]]\n*Development\n**[[IBM Developerworks.cn|http://www-128.ibm.com/developerworks/cn/]]\n**[[DEV at SlashDot|http://developers.slashdot.org/]]\n**[[python.org|http://www.python.org/]]\n*~TiddlyWiki\n**[[TiddlyWiki.com|http://www.tiddlywiki.com/]]\n**[[TiddlySpot|http://tiddlyspot.com/]]
<<tiddlerList tags:webpearl>>
 Load Of War 可以说是一桌地道的好来坞大餐,黑色,讽刺的幽默台词,充满优秀创意与视觉享受的镜头语言,还有少不了的帅歌美女。同时它也是一部蕴涵丰富哲理,揭示政治,战争真实面目的经典之作。影片给人留下来的思考很多,战争,政治,道德,人性,对于此我想每个人都会有自己的理解。不谈电影本身是否成功,我想很多人最感兴趣和难忘的就是影片的经典台词了,这里整理一下,与大家分享,并做简单说明。\n  \n  “全世界一共有5.5亿支枪,那就是说每12个人有一支枪。唯一的问题是~~~~~我们如何让其他十一个人也有枪~~~~”\n  //这是电影的第一句台词,足够激发你继续看下去的兴趣了!\n  \n  “这不是钱的问题!我做这个,因为我很擅长!”\n  //妻子希望尤瑞收手不要继续从事军火生意时,尤瑞的回答!不管对不对,我欣赏他的执着,汗!\n  \n  “核导弹都放在发射架里,你卖的ak47才是大规模杀伤性武器 ”\n  //一真见血!\n  \n  “你看那些抽烟,每年死在抽烟上比死在武器上多得多,但是他们也不是照样卖,我卖的枪至少还带安全栓”\n  //无耻的人总有无耻的理由\n  \n  “车上装的什么”\n  “子弹”\n  “干什么用”\n  “个人用的”\n  “10万发子弹个人用?”\n  “我比较喜欢打枪”\n  —掏钱……\n  \n  “你们运输的是什么?”\n  “伞”\n  “你们在撒哈拉卖伞?”\n  “遮阳伞”\n  —掏钱……\n  //看看尤瑞是怎么过关卡的。\n  \n  “在全球爱滋病最流行的地方,4个人中就有一个人感染。安德烈和我开玩笑的方式,就是把两个漂亮的女人放在我床上,而方圆一百英里内找不到避孕套~~~~~”\n  //我觉得应该加上句:幸好我随身带着^_^\n  \n  “我仍然存活,存活的诀窍就是不加入冲突的任何一方,我们只远远地看着….”\n  //少管闲事总会让你更长寿,不过该管还是得管。\n  \n  我不卖武器给 本。拉登\n  不是因为道德问题\n  而是那个时候,他给的支票经常跳票\n  \n  “卖枪就像卖吸尘器一样,打电话,谈价钱,处理订单。我是什么都做的死亡商人,除了救世军之外不管什么军我都卖。我把乌兹枪卖给穆斯林,我把共产主义造的子弹卖给法西斯主义”\n  //世界的悲哀,到底是谁的错?\n  \n  作为一个军火商的最高境界是卖武器给别人来打自己的同胞?\n  //他真的应该去看心理医生了\n  \n  世界上一共有三种军火交易,白色–合法,黑色–违法,还有我最中意的颜色…灰色\n  //这段其实很强,最后和警察那段对话就基于此,如果是黑色就没人来敲门了。(此段为引用)\n  \n  在许可的24小时里面我会拘留你每一秒钟,因为我要拖延你的致命武器去杀人.我不认为是我拿走了你的一天,而是给了其他人一天.因为你不自由,世界上有些无辜的男人,女人,小孩才能多活一天.所以,,,,,,,,23小时55分钟以后….我再来见你\n  //我祝好人一生平安\n  \n  你要买多少公斤(M16)?5千公斤!\n  //我也想来10块钱的。\n  \n  如果没有我,有些国家根本打不了一场象样的战争。\n  //。。。。。。。。。。。。。\n  \n  我要告诉你让你下地狱,不过我想,你已经在了。\n  //这就是报应\n  \n  让我告诉你将会发生什么,这样可以让你有所准备.\n  很快会有人来敲门,你会被叫到外面去.\n  在过道里,会有一个比你官衔高的人站在那里.\n  首先他会祝贺你所做的一切,你让世界成为一个和平的地方.\n  你会得到奖状或者升职.\n  然后他会告诉你,我将会被释放.\n  你会反对,也许会用辞职来威胁他.\n  但最后我还是会被释放.\n  我被释放的原因和你认为我会被判刑的原因一样.\n  我和一些在世界上称自己为领导人的人打交道.\n  这些人当中有一些是你敌人的敌人.\n  世界上最大的军火交易商是你的老板,美国总统.他一天卖的比我一年卖的都多.\n  有时候在枪支上找到他的指纹是一件很尴尬的事情.\n  有时候他需要我这样的自由工作者来斥之那些他不可能支持的军队.\n  所以你称我为恶魔,但不幸的是对你我是一个必须存在的恶魔……….\n  //这就是政治!还有什么好说的 \n\nSource: [[Load Of War 经典台词及简评。|http://www.douban.com/subject/discussion/1005467/]]
[[Home|Timeline]][[My Articles|My Articles]][[Linux]]<<slider dev Development Development 'Code is not that Cold'>>[[Emacs]][[TiddlyWiki]][[Softwares]][[WebPearls|WebPearls]]\n[[Downloads]][[Configure]][[Links]]<<newTiddler>>
MicroEmacs - a text editor\n\n * So what?\n * Features\n * Screenshots\n * Reference Card\n * Debian and Ubuntu packages \n\nSo what?\n\nIf you have to deal with UNIX or at least with programming, then you have to be comfortable with editing files, for which task you need a handy text editor.\n\nThat was mainly my starting point when I came across MicroEmacs, which is the only editor that satisfies most of my needs.\nFeatures\n\n * Small in size and rather fast!\n * Available for all major platforms (Windows/DOS, UNIX)\n * Works without a graphical user interface like Windows or X, textmode is sufficient\n * color support, syntax highlighting\n * mouse support with X and Windows\n * extensible through its own makro language\n * stability\n * standard Emacs shortcuts for most functions\n * built-in file manager (usefull esp.on Windows)\n * GPL licensed \n\nScreenshots\n\nSSH session in color\n 1, 2, 3 mail reader \nWindows native\n configuration dialog, file manager, choose files with the mouse, help (clickable), HTML mode and Tetris games \nLinux (X version)\n Setup page, Patience game, file manager and plain view \n\nReference Card\n\nI wrote a refcard for MicroEmacs, because when I started working with XEmacs I found its refcard very usefull.\n\nDownload: MicroEmacs Reference Card (PDF 1.4) Creative Commons License\nThis content is licensed under a Creative Commons License.\nDebian and Ubuntu packages\n\nHere you can get the latest packages for Debian Sarge (3.1) and Ubuntu 6.06 LTS (Dapper Drake) on i386 machines. F In order to install them do the following:\n\n 1. Add these two line to the file /etc/apt/sources.list:\n\n deb http://jamesie.de/debian <dist> main\n\n #deb-src http://jamesie.de/debian dapper main\n\n where <dist> is either sarge or dapper. You need the second line only if you want to build the packages yourself.\n 2. Then update apt's list of repository metadata:\n\n apt-get update\n\n 3. Finally you are ready to install the packages. You can choose between several flavours:\n * me-jasspa is the most common version including X support.\n * me-jasspa-nox is a version without X support.\n * ne-jasspa contains only NanoEmacs (very small). \n You can install each of them by executing\n\n apt-get install <flavour>\n\nThanks to Patrick Das Gupta for debianizing MicroEmacs and providing a template for these instructions.\n\nSource: [[MicroEmacs - a text editor|http://jamesie.de/microemacs/index.en.html]]
/***\n|''Name:''|MultiTagEditorPlugin|\n|''Version:''|0.2.0 (Dec 29, 2006)|\n|''Source:''|http://ido-xp.tiddlyspot.com/#MultiTagEditorPlugin|\n|''Author:''|Ido Magal (idoXatXidomagalXdotXcom)|\n|''Licence:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|??|\n\n!Description\nThis plugin enables the addition and deletion of tags from sets of tiddlers.\n\n!Installation instructions\n*Create a new tiddler in your wiki and copy the contents of this tiddler into it. Name it the same and tag it with "systemConfig".\n*Save and reload your wiki.\n*Use it here [[MultiTagEditor]].\n\n!Revision history\n* v0.2.0 (Dec 29, 2006)\n** Added Selection column that allows excluding tiddlers.\n* v0.1.0 (Dec 27, 2006)\n** First draft.\n\n!To Do\n* Clean up text strings.\n* Figure out how to store selection so it isn't reset after every action.\n* Prettify layout.\n\n!Code\n***/\n//{{{\n\nmerge(config.shadowTiddlers,\n{\n MultiTagEditor:[\n "<<MTE>>",\n ""\n ].join("\sn")\n});\n\nconfig.macros.MTE =\n{\n AddToListLabel : "Add to List",\n AddToListPrompt : "Add Tiddlers to the List",\n listViewTemplate :\n {\n columns: [\n {name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},\n {name: 'Title', field: 'title', tiddlerLink: 'title', title: "Title", type: 'TiddlerLink'},\n {name: 'Snippet', field: 'text', title: "Snippet", type: 'String'},\n {name: 'Tags', field: 'tags', title: "Tags", type: 'Tags'}\n ],\n rowClasses: [\n ],\n actions: [\n //{caption: "More actions...", name: ''},\n //{caption: "Remove selected tiddlers from list", name: 'delete'}\n ]\n },\n tiddlers : [],\n HomeSection : [],\n ListViewSection : [],\n AddToListSection : [],\n \n handler : function( place, macroName, params, wikifier, paramString, tiddler )\n {\n this.HomeSection = place;\n var newsection = createTiddlyElement( null, "div", null, "MTE_AddTag" );\n createTiddlyText(newsection, "Tiddler Tags to edit: ");\n var input = createTiddlyElement( null, "input", null, "txtOptionInput" );\n input.type = "text";\n input.size = 50;\n newsection.appendChild( input );\n newsection.inputBox = input;\n createTiddlyButton( newsection, this.AddToListLabel, this.AddToListPrompt, this.onAddToList, null, null, null );\n createTiddlyButton( newsection, "Clear List", this.addtoListPrompt, this.onClear, null, null, null );\n createTiddlyElement( newsection, "br" );\n createTiddlyElement( newsection, "br" );\n this.AddToListSection = newsection;\n this.HomeSection.appendChild( newsection );\n\n newsection = createTiddlyElement( null, "div", null, "MTE_addtag" );\n createTiddlyButton( newsection, "Add Tag", "Add tag to all listed tiddlers", this.onAddTag, null, null, null );\n var input = createTiddlyElement( null, "input", null, "txtOptionInput" );\n input.type = "text";\n input.size = 50;\n newsection.appendChild( input );\n newsection.inputBox = input;\n createTiddlyElement( newsection, "br" );\n this.AddTagSection = newsection;\n this.HomeSection.appendChild( newsection );\n\n newsection = createTiddlyElement( null, "div", null, "MTE_removetag" );\n createTiddlyButton( newsection, "Remove Tag", "Remove tag from all listed tiddlers", this.onRemoveTag, null, null, null );\n var input = createTiddlyElement( null, "input", null, "txtOptionInput" );\n input.type = "text";\n input.size = 50;\n newsection.appendChild( input );\n newsection.inputBox = input;\n createTiddlyElement( newsection, "br" );\n this.RemoveTagSection = newsection;\n this.HomeSection.appendChild( newsection );\n\n this.ListViewSection = createTiddlyElement( null, "div", null, "MTE_listview" );\n this.HomeSection.appendChild( this.ListViewSection );\n ListView.create( this.ListViewSection, this.tiddlers, this.listViewTemplate, null );\n\n },\n\n\n ResetListView : function()\n {\n ListView.forEachSelector( config.macros.MTE.ListViewSection, function( e, rowName )\n {\n if( e.checked )\n {\n var title = e.getAttribute( "rowName" );\n var tiddler = config.macros.MTE.tiddlers.findByField( "title", title );\n tiddler.Selected = 1;\n }\n });\n config.macros.MTE.HomeSection.removeChild( config.macros.MTE.ListViewSection );\n config.macros.MTE.ListViewSection = createTiddlyElement( null, "div", null, "MTE_listview" );\n config.macros.MTE.HomeSection.appendChild( config.macros.MTE.ListViewSection );\n ListView.create( config.macros.MTE.ListViewSection, config.macros.MTE.tiddlers, config.macros.MTE.listViewTemplate, config.macros.MTE.onSelectCommand);\n },\n\n onAddToList : function()\n {\n store.forEachTiddler( function ( title, tiddler )\n {\n var tags = config.macros.MTE.AddToListSection.inputBox.value.readBracketedList();\n if (( tiddler.tags.containsAll( tags )) && ( config.macros.MTE.tiddlers.findByField( "title", title ) == null ))\n {\n var t = store.getTiddlerSlices( title, ["Name", "Description", "Version", "CoreVersion", "Date", "Source", "Author", "License", "Browsers"] );\n t.title = title;\n t.tiddler = tiddler;\n t.text = tiddler.text.substr(0,50);\n t.tags = tiddler.tags;\n config.macros.MTE.tiddlers.push(t);\n }\n });\n config.macros.MTE.ResetListView();\n },\n\n onClear : function()\n {\n config.macros.MTE.tiddlers = [];\n config.macros.MTE.ResetListView();\n },\n\n onAddTag : function( e )\n {\n var selectedRows = [];\n ListView.forEachSelector(config.macros.MTE.ListViewSection, function( e, rowName )\n {\n if( e.checked )\n selectedRows.push( e.getAttribute( "rowName" ));\n });\n var tag = config.macros.MTE.AddTagSection.inputBox.value;\n for(t=0; t < config.macros.MTE.tiddlers.length; t++)\n {\n if ( selectedRows.indexOf( config.macros.MTE.tiddlers[t].title ) != -1 )\n store.setTiddlerTag( config.macros.MTE.tiddlers[t].title, true, tag);\n }\n config.macros.MTE.ResetListView();\n },\n\n onRemoveTag : function( e )\n {\n var selectedRows = [];\n ListView.forEachSelector(config.macros.MTE.ListViewSection, function( e, rowName )\n {\n if( e.checked )\n selectedRows.push( e.getAttribute( "rowName" ));\n });\n var tag = config.macros.MTE.RemoveTagSection.inputBox.value;\n for(t=0; t < config.macros.MTE.tiddlers.length; t++)\n {\n if ( selectedRows.indexOf( config.macros.MTE.tiddlers[t].title ) != -1 )\n store.setTiddlerTag( config.macros.MTE.tiddlers[t].title, false, tag);\n }\n config.macros.MTE.ResetListView();\n }\n\n};\n//}}}
<<tiddlerList tags:myArticle>>
!NCE NoteBook
<<gradient vert #ffffff #ddddff #bbccdd>><<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>><<fontSize fontsize: >>\n<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
<!--{{{-->\n<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->
\n|Standard Periodic Table (ref. Wikipedia)|c\n|| !1 | !2 |!| !3 | !4 | !5 | !6 | !7 | !8 | !9 | !10 | !11 | !12 | !13 | !14 | !15 | !16 | !17 | !18 |\n|!1|bgcolor(#a0ffa0): @@color(red):H@@ |>|>|>|>|>|>|>|>|>|>|>|>|>|>|>|>||bgcolor(#c0ffff): @@color(red):He@@ |\n|!2|bgcolor(#ff6666): Li |bgcolor(#ffdead): Be |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccc99): B |bgcolor(#a0ffa0): C |bgcolor(#a0ffa0): @@color(red):N@@ |bgcolor(#a0ffa0): @@color(red):O@@ |bgcolor(#ffff99): @@color(red):F@@ |bgcolor(#c0ffff): @@color(red):Ne@@ |\n|!3|bgcolor(#ff6666): Na |bgcolor(#ffdead): Mg |>|>|>|>|>|>|>|>|>|>||bgcolor(#cccccc): Al |bgcolor(#cccc99): Si |bgcolor(#a0ffa0): P |bgcolor(#a0ffa0): S |bgcolor(#ffff99): @@color(red):Cl@@ |bgcolor(#c0ffff): @@color(red):Ar@@ |\n|!4|bgcolor(#ff6666): K |bgcolor(#ffdead): Ca ||bgcolor(#ffc0c0): Sc |bgcolor(#ffc0c0): Ti |bgcolor(#ffc0c0): V |bgcolor(#ffc0c0): Cr |bgcolor(#ffc0c0): Mn |bgcolor(#ffc0c0): Fe |bgcolor(#ffc0c0): Co |bgcolor(#ffc0c0): Ni |bgcolor(#ffc0c0): Cu |bgcolor(#ffc0c0): Zn |bgcolor(#cccccc): Ga |bgcolor(#cccc99): Ge |bgcolor(#cccc99): As |bgcolor(#a0ffa0): Se |bgcolor(#ffff99): @@color(green):Br@@ |bgcolor(#c0ffff): @@color(red):Kr@@ |\n|!5|bgcolor(#ff6666): Rb |bgcolor(#ffdead): Sr ||bgcolor(#ffc0c0): Y |bgcolor(#ffc0c0): Zr |bgcolor(#ffc0c0): Nb |bgcolor(#ffc0c0): Mo |bgcolor(#ffc0c0): Tc |bgcolor(#ffc0c0): Ru |bgcolor(#ffc0c0): Rh |bgcolor(#ffc0c0): Pd |bgcolor(#ffc0c0): Ag |bgcolor(#ffc0c0): Cd |bgcolor(#cccccc): In |bgcolor(#cccccc): Sn |bgcolor(#cccc99): Sb |bgcolor(#cccc99): Te |bgcolor(#ffff99): I |bgcolor(#c0ffff): @@color(red):Xe@@ |\n|!6|bgcolor(#ff6666): Cs |bgcolor(#ffdead): Ba |bgcolor(#ffbfff):^^*1^^|bgcolor(#ffc0c0): Lu |bgcolor(#ffc0c0): Hf |bgcolor(#ffc0c0): Ta |bgcolor(#ffc0c0): W |bgcolor(#ffc0c0): Re |bgcolor(#ffc0c0): Os |bgcolor(#ffc0c0): Ir |bgcolor(#ffc0c0): Pt |bgcolor(#ffc0c0): Au |bgcolor(#ffc0c0): @@color(green):Hg@@ |bgcolor(#cccccc): Tl |bgcolor(#cccccc): Pb |bgcolor(#cccccc): Bi |bgcolor(#cccc99): Po |bgcolor(#ffff99): At |bgcolor(#c0ffff): @@color(red):Rn@@ |\n|!7|bgcolor(#ff6666): Fr |bgcolor(#ffdead): Ra |bgcolor(#ff99cc):^^*2^^|bgcolor(#ffc0c0): Lr |bgcolor(#ffc0c0): Rf |bgcolor(#ffc0c0): Db |bgcolor(#ffc0c0): Sq |bgcolor(#ffc0c0): Bh |bgcolor(#ffc0c0): Hs |bgcolor(#ffc0c0): Mt |bgcolor(#ffc0c0): Ds |bgcolor(#ffc0c0): Rg |bgcolor(#ffc0c0): @@color(green):Uub@@ |bgcolor(#cccccc): Uut |bgcolor(#cccccc): Uuq |bgcolor(#cccccc): Uup |bgcolor(#cccccc): Uuh |bgcolor(#fcfecc): @@color(#cccccc):Uus@@ |bgcolor(#ecfefc): @@color(#cccccc):Uuo@@ |\n\n| !Lanthanides^^*1^^|bgcolor(#ffbfff): La |bgcolor(#ffbfff): Ce |bgcolor(#ffbfff): Pr |bgcolor(#ffbfff): Nd |bgcolor(#ffbfff): Pm |bgcolor(#ffbfff): Sm |bgcolor(#ffbfff): Eu |bgcolor(#ffbfff): Gd |bgcolor(#ffbfff): Tb |bgcolor(#ffbfff): Dy |bgcolor(#ffbfff): Ho |bgcolor(#ffbfff): Er |bgcolor(#ffbfff): Tm |bgcolor(#ffbfff): Yb |\n| !Actinides^^*2^^|bgcolor(#ff99cc): Ac |bgcolor(#ff99cc): Th |bgcolor(#ff99cc): Pa |bgcolor(#ff99cc): U |bgcolor(#ff99cc): Np |bgcolor(#ff99cc): Pu |bgcolor(#ff99cc): Am |bgcolor(#ff99cc): Cm |bgcolor(#ff99cc): Bk |bgcolor(#ff99cc): Cf |bgcolor(#ff99cc): Es |bgcolor(#ff99cc): Fm |bgcolor(#ff99cc): Md |bgcolor(#ff99cc): No |\n\n*Chemical Series of the Periodic Table\n**@@bgcolor(#ff6666): Alkali metals@@\n**@@bgcolor(#ffdead): Alkaline earth metals@@\n**@@bgcolor(#ffbfff): Lanthanides@@\n**@@bgcolor(#ff99cc): Actinides@@\n**@@bgcolor(#ffc0c0): Transition metals@@\n**@@bgcolor(#cccccc): Poor metals@@\n**@@bgcolor(#cccc99): Metalloids@@\n**@@bgcolor(#a0ffa0): Nonmetals@@\n**@@bgcolor(#ffff99): Halogens@@\n**@@bgcolor(#c0ffff): Noble gases@@\n\n*State at standard temperature and pressure\n**those in @@color(red):red@@ are gases\n**those in @@color(green):green@@ are liquids\n**those in black are solids\n
<<tiddlerList tags:linuxRef>>
/***\n|Name|SaveAndReloadMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#SaveAndReloadMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a button to save and reload TW. Useful if you are testing code and dont have AutoSave enabled.\n\n!Demo:\n{{{<<saveAndReload>>}}}<<saveAndReload>>\n\n!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\n\n!History:\n*24-07-06: ver 1.0\n\n!Code\n***/\n//{{{\nconfig.macros.saveAndReload={};\nconfig.macros.saveAndReload.handler= function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var label = params[0]||"Save & Reload";\n var tooltip = params[1]||"Save & reload";\n createTiddlyButton(place,label,tooltip,this.onclick);\n}\nconfig.macros.saveAndReload.onclick= function()\n{\n saveChanges();\n window.location.reload( false );\n}\n//}}}
/***\n|''Name:''|saveClose |\n|''Version:''|Revision: 1.1.1, 2006-04-10|\n|''Source:''|http://knighjm.googlepages.com/knightnet-default-tw.html|\n|''Author:''|[[Julian Knight]]|\n|''Type:''|Toolbar Macro Extension|\n|''Requires:''|TiddlyWiki 2.0.0 or higher|\n!Description\nExtends the TiddlyWiki commands for the toolbar macro by adding a button to save and then close the tiddler immediately.\nIt simply duplicates and mashes the code from the two pre-defined commands SaveTiddler and closeTiddler.\n!History\n|!2006-04-10 - 1.1.1|Minor improvements to versioning, no code changes, improve description and history|\n|!2006-04-07 - 1.1|Amended "source" and move master copy to my Google web space|\n|!2006-03-30 - 1.0|First release|\n!Useage\nAdd to your EditTemplate, e.g.:\n{{{\n<!-- ********* -->\n<div class='toolbar' macro='toolbar +saveTiddler saveClose -cancelTiddler deleteTiddler closeTiddler'></div>\n}}}\nIt does a save followed by a close.\n\n!Code\n***/\n//{{{\nversion.extensions.saveClose = {\n major: 1, minor: 1, revision: 1, date: new Date("Apr 10, 2006"), type: 'macro',\n source: 'http://knighjm.googlepages.com/knightnet-default-tw.html#saveClose'\n};\n\nconfig.commands.saveClose = {\n text: "save/close", tooltip: "Save then close this tiddler"\n}\n\nconfig.commands.saveClose.handler = function(event,src,title) {\n var newTitle = story.saveTiddler(title,event.shiftKey);\n story.closeTiddler(title,true,event.shiftKey || event.altKey);\n // story.displayTiddler(null,newTitle);\n return false;\n}\n//}}}\n/***\nThis plugin is released under the "Do whatever you like at your own risk" license.\n***/
/***\n|Name|ShowUpdatesPlugin|\n|Created by|SaqImtiaz|\n|Version|0.2 |\n|Requires|~TW2.x|\n!!!Description:\nAllows you to list tiddlers that have changed since the users last visit. You can list only all changed tiddlers, or filter them to only show tiddlers that have or do not have a specific tag. By default a simple list of the titles of changed tiddlers is created. However, using an extremely versatile syntax you can provide a custom template for the generated text.\n\n!!!Examples: \n[[ShowUpdatesDocs]]\n\n!!!Installation:\nCopy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.\n\n!!!Syntax:\n{{{<<showUpdates>>}}}\nadditional optional params:\n{{{<showUpdates excludeTag:TagToExclude onlyTag:TagToList maxEntries:10 write:CustomWriteParameter >>}}}\nexcludeTag: ~TagToExclude\nonlyTag: ~TagToList\nmaxEntries: max number of entries displayed when there are no updates. (default is 10, which can be changed in the config.macros.showUpdates.settings part of the code)\nwrite: if a write parameter is not provided, an un-numbered list of the updates is generated. Alternatively, you can specify a custom 'template' for the text generated. The syntax for the write parameter is identical to that of the forEachTiddler macro. Additonal documentation on this syntax will be provided soon.\nSome of the variables available in the write parameter are 'index', 'count' and 'lastVisit' where lastVisit is the date of the last visit in the format YYYYMMDDHHMM. Also areUpdates is a boolean that is true if there are new updates since the users last visit.\n\n!!!To Do:\n*refactor code to facilitate translations\n*a streamlined version without the custom write parameter\n\n\n!!!Code\n***/\n//{{{\nwindow.lewcidLastVisit = '';\nwindow.old_lewcid_whatsnew_restart = window.restart;\nwindow.restart = function()\n{\n if(config.options.txtLastVisit)\n lewcidLastVisit= config.options.txtLastVisit;\n config.options.txtLastVisit = (new Date()).convertToYYYYMMDDHHMM();\n saveOptionCookie('txtLastVisit');\n window.old_lewcid_whatsnew_restart();\n}\n\nTiddlyWiki.prototype.lewcidGetTiddlers = function(field,excludeTag,includeTag,updatesOnly)\n{\n var results = [];\n this.forEachTiddler(function(title,tiddler)\n {\n if(excludeTag == undefined || !tiddler.isTagged(excludeTag))\n if(includeTag == undefined || tiddler.isTagged(includeTag))\n if ( updatesOnly == false || tiddler.modified.convertToYYYYMMDDHHMM()>lewcidLastVisit)\n results.push(tiddler);\n });\n if(field)\n results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });\n return results;\n}\n\nconfig.macros.showUpdates={};\nconfig.macros.showUpdates.settings =\n{\n maxEntries: 10 //max items to show, if there are no updates since last visit\n}\n\nconfig.macros.showUpdates.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n var args = paramString.parseParams("list",null,true);\n var write = getParam(args, "write", undefined);\n var onlyTag = getParam(args, "onlyTag", undefined);\n var excludeTag = getParam(args, "excludeTag", undefined);\n var sortBy = "modified";\n var maxEntries = getParam(args,"maxEntries",this.settings.maxEntries);\n\n if (lewcidLastVisit) \n {var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,true);\n var areUpdates = tiddlers.length>0? true:false;}\n\n if (!lewcidLastVisit)\n {var countLine = "!!Recent Updates:";\n var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);\n var areUpdates = false;}\n else if (tiddlers.length == 0)\n {var countLine = "!!@@color:red;No new updates@@ since your last visit. @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@\sn!!Recent Updates:";\n var tiddlers = store.lewcidGetTiddlers(sortBy,excludeTag,onlyTag,false);}\n else\n {var countLine ="!!@@color:red;"+ tiddlers.length + "@@ new " + (tiddlers.length==1?"update":"updates") + " since your last visit: @@color:#999;font-size:70%;" + (Date.convertFromYYYYMMDDHHMM(lewcidLastVisit)).formatString(" (DD/MM/YY)") + "@@";}\n\n tiddlers = tiddlers.reverse();\n var lastVisit = lewcidLastVisit? lewcidLastVisit:undefined;\n var count = areUpdates == true? tiddlers.length : maxEntries;\n var sp = createTiddlyElement(place,"span","showUpdates");\n if (write==undefined)\n {\n wikify(countLine,sp);\n var list = createTiddlyElement(sp,"ul");\n for (var i = 0; i < count; i++)\n {\n var tiddler = tiddlers[i];\n createTiddlyLink(createTiddlyElement(list,"li"), tiddler.title, true);\n }\n }\n else\n {\n var list = '';\n for (var index = 0; index < count; index++) {\n var tiddler = tiddlers[index];\n list += eval(write); }\n wikify(list, sp);\n }\n}\n//}}}
<<gradient vert #ffffff #ddddff #bbccdd>><<gradient vert #ffffff #ddddff #bbccdd>><<search>><<closeAll>><<permaview>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>><<fontSize fontsize: >>
<<gradient vert #bbccdd #ddddff #ffffff>>\n\n<html><center><a href="http://badvista.fsf.org/"><img alt="BadVista" src="badvista.png" /></a></center></html>\n<html><center><a href="http://www.fsf.org/"><img alt="FSF Member Badge" src="http://badvista.fsf.org/logos/1337.png/image_preview" /></a></center></html>
/***\n|Name|SinglePageModePlugin|\n|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|\n|Version|2.2.3|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|\n|Description|Display tiddlers one at a time with automatic update of URL (permalink). Also, option to always open tiddlers at top of page|\n\nNormally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.\n\n!!!!!Usage\n<<<\nSinglePageMode allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time. When SinglePageMode is enabled, the title of the current tiddler is automatically displayed in the browser window's titlebar and the browser's location URL is updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.\n\nEven when SinglePageMode is disabled (i.e., displaying multiple tiddlers is permitted), you can reduce the potential for confusion by enable TopOfPageMode, which forces tiddlers to always open at the top of the page instead of being displayed following the tiddler containing the link that was clicked.\n<<<\n!!!!!Configuration\n<<<\nWhen installed, this plugin automatically adds checkboxes in the AdvancedOptions tiddler so you can enable/disable the plugin behavior. For convenience, these checkboxes are also included here:\n\n<<option chkSinglePageMode>> Display one tiddler at a time\n<<option chkTopOfPageMode>> Always open tiddlers at the top of the page\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''SinglePageModePlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for SinglePageMode handling^^\n\nWhen installed, this plugin automatically adds checkboxes in the ''shadow'' AdvancedOptions tiddler so you can enable/disable this behavior. However, if you have customized your AdvancedOptions, you will need to ''manually add these checkboxes to your customized tiddler.''\n<<<\n!!!!!Revision History\n<<<\n''2007.02.06 [2.2.3]'' in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)\n''2007.01.08 [2.2.2]'' use apply() to invoke hijacked core functions\n''2006.07.04 [2.2.1]'' in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.\n''2006.06.01 [2.2.0]'' added chkTopOfPageMode (TPM) handling\n''2006.02.04 [2.1.1]'' moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2005.12.27 [2.1.0]'' hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list). Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers\n''2005.12.27 [2.0.0]'' Update for TW2.0\n''2005.11.24 [1.1.2]'' When the back and forward buttons are used, the page now changes to match the URL. Based on code added by Clint Checketts\n''2005.10.14 [1.1.1]'' permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them\n''2005.10.14 [1.1.0]'' added automatic setting of window title and location bar ('auto-permalink'). feature suggestion by David Dickens.\n''2005.10.09 [1.0.1]'' combined documentation and code in a single tiddler\n''2005.08.15 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].\nSupport for BACK/FORWARD buttons adapted from code developed by Clint Checketts\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.SinglePageMode= {major: 2, minor: 2, revision: 3, date: new Date(2007,2,6)};\n\nif (config.options.chkSinglePageMode==undefined) config.options.chkSinglePageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkSinglePageMode>> Display one tiddler at a time";\n\nif (config.options.chkTopOfPageMode==undefined) config.options.chkTopOfPageMode=false;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTopOfPageMode>> Always open tiddlers at the top of the page";\n\nconfig.SPMTimer = 0;\nconfig.lastURL = window.location.hash;\nfunction checkLastURL()\n{\n if (!config.options.chkSinglePageMode)\n { window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }\n if (config.lastURL == window.location.hash)\n return;\n var tiddlerName = convertUTF8ToUnicode(decodeURI(window.location.hash.substr(1)));\n tiddlerName=tiddlerName.replace(/\s[\s[/,"").replace(/\s]\s]/,""); // strip any [[ ]] bracketing\n if (tiddlerName.length) story.displayTiddler(null,tiddlerName,1,null,null);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddler==undefined) Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)\n{\n if (config.options.chkSinglePageMode) {\n window.location.hash = encodeURIComponent(convertUnicodeToUTF8(String.encodeTiddlyLink(title)));\n config.lastURL = window.location.hash;\n document.title = wikifyPlain("SiteTitle") + " - " + title;\n story.closeAllTiddlers();\n if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);\n }\n if (config.options.chkTopOfPageMode) { story.closeTiddler(title); window.scrollTo(0,0); srcElement=null; }\n this.SPM_coreDisplayTiddler.apply(this,arguments);\n}\n\nif (Story.prototype.SPM_coreDisplayTiddlers==undefined) Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;\nStory.prototype.displayTiddlers = function(srcElement,titles,template,unused1,unused2,animate,slowly)\n{\n // suspend single-page mode when displaying multiple tiddlers\n var saveSPM=config.options.chkSinglePageMode; config.options.chkSinglePageMode=false;\n var saveTPM=config.options.chkTopOfPageMode; config.options.chkTopOfPageMode=false;\n this.SPM_coreDisplayTiddlers.apply(this,arguments);\n config.options.chkSinglePageMode=saveSPM; config.options.chkTopOfPageMode=saveTPM;\n}\n//}}}
@@color(#bcd):powered by ~TiddlyWiki@@
[img[banner.png]]@@color(#bbccdd):Wiki Stick@@
http://anubis.cwru.edu/clicker.html
<<tiddlerList tags:software>>
#popup{\n padding-left: 2px !important;\n padding-bottom: 2px !important;\n}\n\n#popup *{\n border: 0 !important;\n}\n\n#popup hr {\n border-top: solid 1px #ccc !important; \n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #ccc;\n width: 98%;\n}\n\n#popup a:hover{\n color: black !important;\n}\n\nbody {\n margin: 0px;\n background-color: #e4e4e4;\n font-size: 9pt;\n font-family: tahoma,arial,helvetica;\n}\n\na:link, a:visited, a:hover, a:active {\n text-decoration: none;\n}\n\n#header {\n border-bottom: 1px solid #458;\n margin-bottom: 0em;\n}\n\n#titleLine {\n color: #fff;\n background: #bcd;\n padding: 0.7em 1em 1em 1em;\n}\n\n#titleLine a {\n text-decoration: none;\n color: #9ab;\n}\n\n#siteTitle {\n font-size: 40pt;\n font-weight: bold;\n display: block;\n position: relative;\n bottom: 0px;\n left: 0px;\n padding-left: 20px;\n color: #9ab;\n}\n\n#siteSubtitle {\n font-size: 12pt;\n font-family: georgia,times;\n font-style: italic;\n color: #457;\n display: block;\n position: relative;\n bottom: 0px;\n left: 0px;\n padding-left: 70px;\n}\n\n#mainMenu {\n font-size: 12px;\n float: left;\n width: 13em;\n border: 1px solid #aaa;\n margin: .5em 1em .5em 1em;\n background: #f3f3f3 url(bg.gif);\n line-height: 125%;\n color: black;\n text-align: left;\npadding: 0;\n}\n\n#mainMenu .sliderPanel {\n display: inline;\n text-decoration: none;\n width: 12em;\n padding: .25em .5em;\n color: #444;\n text-transform: capitalize;\n}\n\n#mainMenu .tiddlyLink, #mainMenu .externalLink, #mainMenu a.button {\n display: block;\n text-decoration: none;\n padding: .25em .5em;\n color: #444;\n text-transform: capitalize;\n}\n\n#mainMenu a:hover {\n color: #000 !important;\n background-color: #bcd !important;\n}\n\n#displayArea {\n margin: 1em 14em 0em 15em;\n}\n\n#messageArea {\n background-color: #5a84ad;\n color: #fff;\n padding: 0.5em 0.5em 0.5em 0.5em;\n margin: 0em 0em 0.6em 0em;\n border-bottom: 1px solid #458;\n display: none;\n}\n\n#messageArea a:link, #messageArea a:visited {\n display: inline;\n text-decoration: underline;\n color: #ddf;\n}\n\n#messageArea a:hover, #messageArea a:active{\n color: #fff;\n}\n\n.tiddler {\n border: 1px solid #aaa;\n margin: 0 10px 20px;\n padding: 8px;\n padding-top:0;\n font-family: arial,georgia,times;\n background-color: white;\n width: auto;\n overflow: hidden;\n}\n\n.innerTiddler {\n padding: 0.7em 1em 1em 0.8em;\n font-size: 9pt;\n}\n\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n}\n\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n#displayArea .externalLink {\n text-decoration: underline;\n}\n.title {\n font-family: tahoma,arial,helvetica;\n font-size: 13pt;\n color: #469;\n font-weight: bold;\n }\n\n.toolbar {\n font-family: tahoma,arial,helvetica;\n font-weight: normal;\n font-size: 8pt;\n padding: 0em 0em 0em 1em;\n color: #aaa !important;\n visibility: hidden;\n}\n\n.toolbar a{\n padding: 0.2em 0.4em 0.2em 0.4em;\n color: #888 !important;\n}\n\n.toolbar a:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n}\n\n.toolbar a:active{\n color: #666;\n}\n\n.toolbar a.button:active{\n background-color: white;\n}\n\n.viewer a.button{\n border: 0;\n background-color: transparent !important;\n padding: 0em;\n color: #888 !important;\n border: 1px solid transparent;\n}\n\n.editorFooter a:hover, .footer a.button{\n color: #888 !important;\n background-color: #fff !important;\n}\n\n.editorFooter a:hover, .footer a:hover, .footer a:active{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n}\n\n.viewer a.button:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n}\n\n.viewer a.button{\n color: #666;\n}\n\n#popup {\n display: none;\n position: absolute;\n top: 1.5em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n}\n\n#popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n.body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n overflow: hidden;\n}\n\n.viewer {\n color: black;\n line-height: 140%;\n}\n\n.viewer a:link, .body a:visited{\n color: #922;\n}\n\n.viewer a:hover {\n color: #b44;\n background-color: transparent;\n text-decoration: none;\n}\n\n.viewer blockquote {\n font-size: 10pt;\n line-height: 150%;\n border-left: 3px solid #bcd;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer ol {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n/*==============================================Headings================*/\n\n.viewer h1,.viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n text-decoration: none;\n color: #469;\n padding-left: .6em;\nbackground-color: transparent !important;\nborder-bottom: 3px dotted #ccc;\n}\n\n.viewer h2 {\n font-size: 12pt;\n}\n\n.viewer h3 {\n font-size: 11pt;\n}\n\n.viewer h4 {\n font-size: 10pt;\n}\n\n.viewer h5 {\n font-size: 9pt;\n}\n\n.viewer h6 {\n font-size: 8pt;\n}\n\n.viewer table {\n font-size: 10pt;\n border-collapse: collapse;\n border: 2px solid #303030;\n margin-left: 1.0em;\n margin-right: 1.0em;\n margin-top: 0.8em;\n margin-bottom: 0.8em;\n}\n\n.viewer th {\n background-color: #bcd;\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer caption {\n font-size: smaller;\n padding: 3px;\n}\n\n.viewer hr {\n border-top: dashed 1px #606060;\n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #666666;\n}\n\n.highlight {\n color: #000000;\n background-color: #bcd;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n}\n\n.editor input {\n display: block;\n border: 1px solid black;\n}\n\n.editor textarea {\n display: block;\n font: inherit;\n border: 1px solid black;\n}\n\n/*\n=================Sidebar==========\n=================================\n*/\n\n\n#sidebar {\n float: right;\n width: 14em;\n font-size: 8pt;\n border-left: 1px solid #aaa;\n border-bottom:1px solid #aaa;\n}\n\n#sidebarOptions {\n color: #666 !important;\n background-color: #f3f3f3 !important;\n}\n\n#sidebar #sidebarOptions a:hover{\n background-color: #f3f3f3;\n}\n\n#contentWrapper #sidebar a:hover{\n color: #b44;\n text-decoration: underline;\n}\n\n#contentWrapper .sidebarSubHeading {\n font-size: 0.95em;\n color: #236;\n}\n\n#contentWrapper #commandPanel {\n padding-top: 0.5em;\n background-color: #f3f3f3;\n color: black;\n font-size: 8pt;\n}\n\n#contentWrapper #commandPanel a {\n display: block;\n padding: 0.3em 0.2em 0.3em 1em;\n color: #666;\n text-decoration: none;\n}\n\n#contentWrapper #commandPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;;\n}\n\n#contentWrapper #commandPanel input {\n margin: 0.4em 0em 0.3em 1em;\n border: 1px solid black;\n}\n\n#contentWrapper #optionsPanel {\n display: none;\n background-color: #f3f8ff;\n padding: 0.5em 0.5em 0em 0.5em;\n font-size: 7pt;\n color: black;\n}\n\n#contentWrapper #optionsPanel a:link, #optionsPanel a:visited {\n color: #666;\n font-weight: bold;\n}\n\n#contentWrapper #optionsPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.optionsText {\n margin-top: 0.25em;\n margin-bottom: 0.75em;\n}\n\n.optionsItem {\n}\n/*========================================================================*/\n#contentWrapper #sidebarTabs {\n background-color: #f3f3f3;\n padding: 0em;\n}\n\n#contentWrapper #sidebarTabs a {\n color: black;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:hover {\n color: #922; text-decoration: underline;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:active {\n color: black;\n}\n\n#contentWrapper .tabContentTags #popup {\n display: none;\n position: absolute;\n top: 1em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n margin-top: -2px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#contentWrapper .tabContentTags #popup hr {\n color: #ccc;\n}\n\nhr{\n color: black !important;\n}\n\n#contentWrapper .tabContentTags #popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n height: 1.2em;\n}\n\n#contentWrapper .tabContentTags #popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n#contentWrapper a.tab {\n font-weight: normal;\n display: inline;\n margin: 0px 1px; \n border:1px solid #aaa;\n border-bottom:none;\n}\n\n#contentWrapper a.tabSelected {\n background-color: #e6e6e6 !important;\n padding: 2px 4px 2px 4px;\n}\n\n#contentWrapper a.tabUnselected {\n background-color: #f3f3f3;\n padding: 2px 4px 0px 4px;\n}\n\n/*===========================================================================================*/\n/*===========================================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper .tabContents {\n background-color: #e6e6e6;\n border-bottom: solid #aaa 1px;\n}\n\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n background-color: #e6e6e6;\n color: #922 !important;\n}\n\n#contentWrapper .tabContents a:hover{\n color: #b44 !important;\n}\n\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #e6e6e6;\n padding: 2px 4px 0px 4px;\n}\n\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #ccc !important;\n padding: 2px 4px 2px 4px;\n}\n\n.txtMoreTab .tabContents {\n background-color: #ccc !important;\n border-bottom: solid #aaa 1px;\n}\n\n.txtMoreTab .tabContents a{\n background-color: transparent !important;\n}\n\n#licensePanel {\n padding: 0.5em 0.2em 0.5em 0.2em;\n}\n\n#licensePanel a {\n display: block;\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #555;\n}\n\n#licensePanel a:hover {\n text-decoration: none;\n color: #922;\n background-color: transparent;\n}\n\n#storeArea, #copyright {\n display: none;\n}\n\n#floater {\n font-size: 10pt;\n visibility: hidden;\n color: white;\n border: 1px solid #666;\n background-color: white;\n position: absolute;\n padding: 1em 1em 1em 1em;\n display:none;\n}\n\n@media print {\n\n#mainMenu {\n display: none;\n}\n\n#siteTitle {\n display: none;\n}\n\n#siteSubtitle {\n display: none;\n}\n\n#displayArea {\n margin: 1em 1em 0em 1em;\n}\n\n#sidebar {\n display: none;\n}\n\n}\n
/*{{{*/\nbody {\n background: [[ColorPalette::Background]];\n color: [[ColorPalette::Foreground]];\n}\n\na{\n color:#b44;\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::PrimaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n.headerShadow {\n color: [[ColorPalette::Foreground]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Foreground]];\n}\n\n.headerForeground {\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryMid]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.listBreak div{\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::TertiaryPale]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::Background]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n/*}}}*/\n\n\n\n\n\n\n\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 0px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}
/*{{{*/\n* html .tiddler {\n height: 1%;\n}\n\na img{\n border: 0;\n}\n\n\n#popup{\n padding-left: 2px !important;\n padding-bottom: 2px !important;\n}\n\n#popup *{\n border: 0 !important;\n}\n\n#popup hr {\n border-top: solid 1px #ccc !important; \n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #ccc;\n width: 98%;\n}\n\n#popup a:hover{\n color: black !important;\n}\n\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n\nbody {\n margin: 0px;\n background-color: #e4e4e4;\n font-size: 9pt;\n font-family: tahoma,arial,helvetica;\n}\n\na:link, a:visited, a:hover, a:active {\n text-decoration: none;\n}\n\n#header {\n border-bottom: 1px solid #458;\n margin-bottom: 0em;\n}\n\n#titleLine {\n color: #fff;\n background: #bcd;\n padding: 0.7em 1em 1em 1em;\n}\n\n#titleLine a {\n text-decoration: none;\n color: #9ab;\n}\n\n#siteTitle {\n font-size: 40pt;\n font-weight: bold;\n display: block;\n position: relative;\n bottom: 0px;\n left: 0px;\n padding-left: 20px;\n color: #9ab;\n }\n\n#siteSubtitle {\n font-size: 12pt;\n font-family: georgia,times;\n font-style: italic;\n color: #457;\n display: block;\n position: relative;\n bottom: 0px;\n left: 0px;\n padding-left: 70px;\n }\n\n#mainMenu {\n font-size: 12px;\n float: left;\n width: 13em;\n border: 1px solid #aaa;\n margin: .5em 1em .5em 1em;\n background: #f3f3f3 url(bg.gif);\n line-height: 125%;\n color: black;\n text-align: left;\n padding: 0;\n }\n\n#mainMenu .sliderPanel {\n display: inline;\n text-decoration: none;\n width: 12em;\n padding: .25em .5em;\n color: #444;\n text-transform: capitalize;\n }\n\n#mainMenu .tiddlyLink, #mainMenu .externalLink, #mainMenu a.button {\n display: block;\n text-decoration: none;\n padding: .25em .5em;\n color: #444;\n text-transform: capitalize;\n }\n\n#mainMenu a:hover {\n color: #000 !important;\n background-color: #bcd !important;\n }\n\n#undermainMenu {\n font-size: 12px;\n float: left;\n width: 13em;\n border: 1px solid #aaa;\n margin: .5em 1em .5em 1em;\n background: #f3f3f3 url(bg.gif);\n line-height: 125%;\n color: black;\n text-align: left;\n padding: 0;\n }\n\n#displayArea {\n margin: 1em 14em 0em 15em;\n }\n\n#messageArea {\n background-color: #5a84ad;\n color: #fff;\n padding: 0.5em 0.5em 0.5em 0.5em;\n margin: 0em 0em 0.6em 0em;\n border-bottom: 1px solid #458;\n display: none;\n }\n\n#messageArea a:link, #messageArea a:visited {\n display: inline;\n text-decoration: underline;\n color: #ddf;\n }\n\n#messageArea a:hover, #messageArea a:active{\n color: #fff;\n }\n\n .tiddler {\n border: 1px solid #aaa;\n margin: 0 10px 20px;\n padding: 8px;\n padding-top:0;\n font-family: arial,georgia,times;\n background-color: white;\n width: auto;\n overflow: hidden;\n }\n\n .innerTiddler {\n padding: 0.7em 1em 1em 0.8em;\n font-size: 9pt;\n }\n\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n }\n\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n }\n\n#displayArea .externalLink {\n text-decoration: underline;\n }\n .title {\n font-family: tahoma,arial,helvetica;\n font-size: 13pt;\n color: #469;\n font-weight: bold;\n }\n\n .toolbar {\n font-family: tahoma,arial,helvetica;\n font-weight: normal;\n font-size: 8pt;\n padding: 0em 0em 0em 1em;\n color: #aaa !important;\n visibility: hidden;\n }\n\n .toolbar a{\n padding: 0.2em 0.4em 0.2em 0.4em;\n color: #888 !important;\n }\n\n .toolbar a:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n }\n\n .toolbar a:active{\n color: #666;\n }\n\n .toolbar a.button:active{\n background-color: white;\n }\n\n .viewer a.button{\n border: 0;\n background-color: transparent !important;\n padding: 0em;\n color: #888 !important;\n border: 1px solid transparent;\n }\n\n .editorFooter a:hover, .footer a.button{\n color: #888 !important;\n background-color: #fff !important;\n }\n\n .editorFooter a:hover, .footer a:hover, .footer a:active{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n }\n\n .viewer a.button:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n }\n\n .viewer a.button{\n color: #666;\n }\n\n#popup {\n display: none;\n position: absolute;\n top: 1.5em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n }\n\n#popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n }\n\n#popup a:hover {\n background-color: #e4e4e4;\n color: black;\n }\n\n .body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n overflow: hidden;\n }\n\n .viewer {\n color: black;\n line-height: 140%;\n }\n\n .viewer a:link, .body a:visited{\n color: #922;\n }\n\n .viewer a:hover {\n color: #b44;\n background-color: transparent;\n text-decoration: none;\n }\n\n .viewer blockquote {\n font-size: 8pt;\n line-height: 150%;\n border-left: 1px solid #ccc;\n padding-left: 0.8em;\n margin-left: 2.5em;\n }\n\n .viewer ul {\n margin-left: 0.5em;\n padding-left: 1.5em;\n }\n\n .viewer ol {\n margin-left: 0.5em;\n padding-left: 1.5em;\n }\n\n /*==============================================Headings================*/\n\n .viewer h1,.viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n text-decoration: none;\n color: #469;\n padding-left: .6em;\n background-color: transparent !important;\n border-bottom: 3px dotted #ccc;\n }\n\n .viewer h2 {\n font-size: 12pt;\n }\n\n .viewer h3 {\n font-size: 11pt;\n }\n\n .viewer h4 {\n font-size: 10pt;\n }\n\n .viewer h5 {\n font-size: 9pt;\n }\n\n .viewer h6 {\n font-size: 8pt;\n }\n\n .viewer table {\n font-size: 10pt;\n border-collapse: collapse;\n border: 2px solid #303030;\n margin-left: 1.0em;\n margin-right: 1.0em;\n margin-top: 0.8em;\n margin-bottom: 0.8em;\n }\n\n .viewer th {\n background-color: #bcd;\n border: 1px solid #606060;\n padding: 3px;\n }\n\n .viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n }\n\n .viewer caption {\n font-size: smaller;\n padding: 3px;\n }\n\n .viewer hr {\n border-top: dashed 1px #606060;\n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #666666;\n }\n\n .highlight {\n color: #000000;\n background-color: #bcd;\n }\n\n .editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n }\n\n .editor input {\n display: block;\n border: 1px solid black;\n}\n\n.editor textarea {\n display: block;\n font: inherit;\n border: 1px solid black;\n}\n\n/*\n=================Sidebar==========\n=================================\n*/\n\n\n#sidebar {\n float: right;\n width: 14em;\n font-size: 8pt;\n border-left: 1px solid #aaa;\n border-bottom:1px solid #aaa;\n}\n\n#sidebarOptions {\n color: #666 !important;\n background-color: #f3f3f3 !important;\n}\n\n#sidebar #sidebarOptions a:hover{\n background-color: #f3f3f3;\n}\n\n#contentWrapper #sidebar a:hover{\n color: #b44;\n text-decoration: underline;\n}\n\n#contentWrapper .sidebarSubHeading {\n font-size: 0.95em;\n color: #236;\n}\n\n#contentWrapper #commandPanel {\n padding-top: 0.5em;\n background-color: #f3f3f3;\n color: black;\n font-size: 8pt;\n}\n\n#contentWrapper #commandPanel a {\n display: block;\n padding: 0.3em 0.2em 0.3em 1em;\n color: #666;\n text-decoration: none;\n}\n\n#contentWrapper #commandPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;;\n}\n\n#contentWrapper #commandPanel input {\n margin: 0.4em 0em 0.3em 1em;\n border: 1px solid black;\n}\n\n#contentWrapper #optionsPanel {\n display: none;\n background-color: #f3f8ff;\n padding: 0.5em 0.5em 0em 0.5em;\n font-size: 7pt;\n color: black;\n}\n\n#contentWrapper #optionsPanel a:link, #optionsPanel a:visited {\n color: #666;\n font-weight: bold;\n}\n\n#contentWrapper #optionsPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.optionsText {\n margin-top: 0.25em;\n margin-bottom: 0.75em;\n}\n\n.optionsItem {\n}\n/*========================================================================*/\n#contentWrapper #sidebarTabs {\n background-color: #f3f3f3;\n padding: 0em;\n}\n\n#contentWrapper #sidebarTabs a {\n color: black;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:hover {\n color: #922; text-decoration: underline;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:active {\n color: black;\n}\n\n#contentWrapper .tabContentTags #popup {\n display: none;\n position: absolute;\n top: 1em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n margin-top: -2px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#contentWrapper .tabContentTags #popup hr {\n color: #ccc;\n}\n\nhr{\n color: black !important;\n}\n\n#contentWrapper .tabContentTags #popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n height: 1.2em;\n}\n\n#contentWrapper .tabContentTags #popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n#contentWrapper a.tab {\n font-weight: normal;\n display: inline;\n margin: 0px 1px; \n border:1px solid #aaa;\n border-bottom:none;\n}\n\n#contentWrapper a.tabSelected {\n background-color: #e6e6e6 !important;\n padding: 2px 4px 2px 4px;\n}\n\n#contentWrapper a.tabUnselected {\n background-color: #f3f3f3;\n padding: 2px 4px 0px 4px;\n}\n\n/*===========================================================================================*/\n/*===========================================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper .tabContents {\n background-color: #e6e6e6;\n border-bottom: solid #aaa 1px;\n}\n\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n background-color: #e6e6e6;\n color: #922 !important;\n}\n\n#contentWrapper .tabContents a:hover{\n color: #b44 !important;\n}\n\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #e6e6e6;\n padding: 2px 4px 0px 4px;\n}\n\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #ccc !important;\n padding: 2px 4px 2px 4px;\n}\n\n.txtMoreTab .tabContents {\n background-color: #ccc !important;\n border-bottom: solid #aaa 1px;\n}\n\n.txtMoreTab .tabContents a{\n background-color: transparent !important;\n}\n\n#licensePanel {\n padding: 0.5em 0.2em 0.5em 0.2em;\n}\n\n#licensePanel a {\n display: block;\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #555;\n}\n\n#licensePanel a:hover {\n text-decoration: none;\n color: #922;\n background-color: transparent;\n}\n\n#storeArea, #copyright {\n display: none;\n}\n\n#floater {\n font-size: 10pt;\n visibility: hidden;\n color: white;\n border: 1px solid #666;\n background-color: white;\n position: absolute;\n padding: 1em 1em 1em 1em;\n display:none;\n}\n\n@media print {\n\n#mainMenu {\n display: none;\n}\n\n#siteTitle {\n display: none;\n}\n\n#siteSubtitle {\n display: none;\n}\n\n#displayArea {\n margin: 1em 1em 0em 1em;\n}\n\n#sidebar {\n display: none;\n}\n\n}\n\n\nbody {\n font-size: .75em;\n font-family: arial,helvetica;\n margin: 0;\n padding: 0;\n}\n\nh1,h2,h3,h4,h5 {\n font-weight: bold;\n text-decoration: none;\n padding-left: 0.4em;\n}\n\nh1 {font-size: 1.35em;}\nh2 {font-size: 1.25em;}\nh3 {font-size: 1.1em;}\nh4 {font-size: 1em;}\nh5 {font-size: .9em;}\n\nhr {\n height: 1px;\n}\n\na{\n text-decoration: none;\n}\n\ndt {font-weight: bold;}\n\nol { list-style-type: decimal }\nol ol { list-style-type: lower-alpha }\nol ol ol { list-style-type: lower-roman }\nol ol ol ol { list-style-type: decimal }\nol ol ol ol ol { list-style-type: lower-alpha }\nol ol ol ol ol ol { list-style-type: lower-roman }\nol ol ol ol ol ol ol { list-style-type: decimal }\n\n.txtOptionInput {\n width: 9em;\n}\n\n#contentWrapper .chkOptionInput {\n border: 0;\n}\n\n.externalLink {\n text-decoration: underline;\n}\n\n.indent {margin-left:3em;}\n.outdent {margin-left:3em; text-indent:-3em;}\ncode.escaped {white-space:nowrap;}\n\n.tiddlyLinkExisting {\n font-weight: bold;\n}\n\n.tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n/* the 'a' is required for IE, otherwise it renders the whole tiddler a bold */\na.tiddlyLinkNonExisting.shadow {\n font-weight: bold;\n}\n\n#mainMenu .tiddlyLinkExisting, \n#mainMenu .tiddlyLinkNonExisting,\n#sidebarTabs .tiddlyLinkNonExisting{\n font-weight: normal;\n font-style: normal;\n}\n\n#sidebarTabs .tiddlyLinkExisting {\n font-weight: bold;\n font-style: normal;\n}\n\n.header {\n position: relative;\n border-bottom: 1px solid #458;\n}\n\n.header a:hover {\n background: transparent;\n}\n\n.headerShadow {\n position: relative;\n padding: 2em 0em 1em 1em;\n left: -1px;\n top: -1px;\n}\n\n.headerForeground {\n position: absolute;\n padding: 2em 0em 1em 1em;\n left: 0px;\n top: 0px;\n}\n\n.siteTitle {\n font-size: 3em;\n}\n\n.siteSubtitle {\n font-size: 1.2em;\n}\n\n#mainMenu {\n position: absolute;\n left: 0;\n width: 10em;\n text-align: right;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n}\n\n#sidebar {\n position: absolute;\n right: 3px;\n width: 16em;\n font-size: .9em;\n}\n\n#sidebarOptions {\n padding-top: 0.3em;\n}\n\n#sidebarOptions a {\n margin: 0em 0.2em;\n padding: 0.2em 0.3em;\n display: block;\n}\n\n#sidebarOptions input {\n margin: 0.4em 0.5em;\n}\n\n#sidebarOptions .sliderPanel {\n margin-left: 1em;\n padding: 0.5em;\n font-size: .85em;\n}\n\n#sidebarOptions .sliderPanel a {\n font-weight: bold;\n display: inline;\n padding: 0;\n}\n\n#sidebarOptions .sliderPanel input {\n margin: 0 0 .3em 0;\n}\n\n#sidebarTabs .tabContents {\n width: 15em;\n overflow: hidden;\n}\n\n.wizard {\n padding: 0.1em 0em 0em 2em;\n}\n\n.wizard h1 {\n font-size: 2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.4em 0em 0.2em 0em;\n}\n\n.wizard h2 {\n font-size: 1.2em;\n font-weight: bold;\n background: none;\n padding: 0em 0em 0em 0em;\n margin: 0.2em 0em 0.2em 0em;\n}\n\n.wizardStep {\n padding: 1em 1em 1em 1em;\n}\n\n.wizard .button {\n margin: 0.5em 0em 0em 0em;\n font-size: 1.2em;\n}\n\n#messageArea {\nposition:absolute; top:0; right:0; margin: 0.5em; padding: 0.5em;\n}\n\n*[id='messageArea'] {\nposition:fixed !important; z-index:99;}\n\n.messageToolbar {\ndisplay: block;\ntext-align: right;\n}\n\n#messageArea a{\n text-decoration: underline;\n}\n\n.popup {\n font-size: .9em;\n padding: 0.2em;\n list-style: none;\n margin: 0;\n}\n\n.popup hr {\n display: block;\n height: 1px;\n width: auto;\n padding: 0;\n margin: 0.2em 0em;\n}\n\n.listBreak {\n font-size: 1px;\n line-height: 1px;\n}\n\n.listBreak div {\n margin: 2px 0;\n}\n\n.popup li.disabled {\n padding: 0.2em;\n}\n\n.popup li a{\n display: block;\n padding: 0.2em;\n}\n\n.tabset {\n padding: 1em 0em 0em 0.5em;\n}\n\n.tab {\n margin: 0em 0em 0em 0.25em;\n padding: 2px;\n}\n\n.tabContents {\n padding: 0.5em;\n}\n\n.tabContents ul, .tabContents ol {\n margin: 0;\n padding: 0;\n}\n\n.txtMainTab .tabContents li {\n list-style: none;\n}\n\n.tabContents li.listLink {\n margin-left: .75em;\n}\n\n#displayArea {\n margin: 1em 17em 0em 14em;\n}\n\n\n.toolbar {\n text-align: right;\n font-size: .9em;\n visibility: hidden;\n}\n\n.selected .toolbar {\n visibility: visible;\n}\n\n.tiddler {\n padding: 1em 1em 0em 1em;\n}\n\n.missing .viewer,.missing .title {\n font-style: italic;\n}\n\n.title {\n font-size: 1.6em;\n font-weight: bold;\n}\n\n.missing .subtitle {\n display: none;\n}\n\n.subtitle {\n font-size: 1.1em;\n}\n\n.tiddler .button {\n padding: 0.2em 0.4em;\n}\n\n.tagging {\nmargin: 0.5em 0.5em 0.5em 0;\nfloat: left;\ndisplay: none;\n}\n\n.isTag .tagging {\ndisplay: block;\n}\n\n.tagged {\nmargin: 0.5em;\nfloat: right;\n}\n\n.tagging, .tagged {\nfont-size: 0.9em;\npadding: 0.25em;\n}\n\n.tagging ul, .tagged ul {\nlist-style: none;margin: 0.25em;\npadding: 0;\n}\n\n.tagClear {\nclear: both;\n}\n\n.footer {\n font-size: .9em;\n}\n\n.footer li {\ndisplay: inline;\n}\n\n* html .viewer pre {\n width: 99%;\n padding: 0 0 1em 0;\n}\n\n.viewer {\n line-height: 1.4em;\n padding-top: 0.5em;\n}\n\n.viewer .button {\n margin: 0em 0.25em;\n padding: 0em 0.25em;\n}\n\n.viewer blockquote {\n line-height: 1.5em;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul, .viewer ol{\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer table {\n border-collapse: collapse;\n margin: 0.8em 1.0em;\n}\n\n.viewer th, .viewer td, .viewer tr,.viewer caption{\n padding: 3px;\n}\n\n.viewer table.listView {\n font-size: 0.85em;\n margin: 0.8em 1.0em;\n}\n\n.viewer table.listView th, .viewer table.listView td, .viewer table.listView tr {\n padding: 0px 3px 0px 3px;\n}\n\n.viewer pre {\n padding: 0.5em;\n margin-left: 0.5em;\n font-size: 1.2em;\n line-height: 1.4em;\n overflow: auto;\n}\n\n.viewer code {\n font-size: 1.2em;\n line-height: 1.4em;\n}\n\n.editor {\nfont-size: 1.1em;\n}\n\n.editor input, .editor textarea {\n display: block;\n width: 100%;\n font: inherit;\n}\n\n.editorFooter {\n padding: 0.25em 0em;\n font-size: .9em;\n}\n\n.editorFooter .button {\npadding-top: 0px; padding-bottom: 0px;}\n\n.fieldsetFix {border: 0;\npadding: 0;\nmargin: 1px 0px 1px 0px;\n}\n\n.sparkline {\n line-height: 1em;\n}\n\n.sparktick {\n outline: 0;\n}\n\n.zoomer {\n font-size: 1.1em;\n position: absolute;\n padding: 1em;\n}\n\n.cascade {\n font-size: 1.1em;\n position: absolute;\n overflow: hidden;\n}\n/*}}}*/
I got a new Emacs color theme from [[Alexandre Vassalotti|http://peadrop.com/blog/2007/01/06/pretty-emacs/]].\n\nIt looks great in Programming Modes ,especially in Python and Java Mode. \n\nPreview:\n[img[http://acotea.googlepages.com/emacs.png]]\n\nThe Lisp code:\n<<<\n(defun my-color-theme ()\n (interactive)\n (color-theme-install\n '(my-color-theme\n ((background-color . "black")\n (foreground-color . "white")\n (cursor-color . "white")\n (mouse-color . "white")\n (background-mode . dark))\n (default ((t (nil))))\n (bold ((t (:bold t))))\n (bold-italic ((t (:italic t :bold t))))\n (italic ((t (:italic t))))\n (font-lock-builtin-face ((t (:bold t :foreground "#E67321"))))\n (font-lock-comment-face ((t (:italic t :bold t :foreground "#8722c9"))))\n (font-lock-doc-string-face ((t (:italic t :bold t :foreground "#00b200"))))\n (font-lock-string-face ((t (:italic t :bold t :foreground "#00b200"))))\n (font-lock-constant-face ((t (:bold t :foreground "DodgerBlue2"))))\n (font-lock-function-name-face ((t (:italic t))))\n (font-lock-type-face ((t (:bold t :foreground "SteelBlue2"))))\n (font-lock-keyword-face ((t (:bold t :foreground "#E67321"))))\n (font-lock-preprocessor-face ((t (:foreground "#8722c9" :bold t))))\n (font-lock-reference-face ((t (:foreground "red3"))))\n (font-lock-variable-name-face ((t (:italic t :bold t :foreground "magenta3"))))\n (font-lock-warning-face ((t (:bold t :foreground "red"))))\n (erc-action-face ((t (nil))))\n (erc-notice-face ((t (:foreground "#878899"))))\n (erc-bold-face ((t (:bold t :weight bold))))\n (erc-command-indicator-face ((t (:bold t :weight bold))))\n (erc-dangerous-host-face ((t (:foreground "red"))))\n (erc-default-face ((t (nil))))\n (erc-timestamp-face ((t (:bold nil :foreground "gray45" :weight normal))))\n (erc-underline-face ((t (:underline t))))\n (erc-prompt-face ((t (:bold t :foreground "GoldenRod3" :weight bold))))\n (trailing-whitespace ((t (:background "red")))))))\n<<<
<<timeline>>
| !@@color(#666666):Player@@ | !@@color(#666666):Name@@ |!@@color(#666666):Position@@ |\n|>|>| Jeff Van Gundy |\n| 1 | Tracy McGrady | Swing Forward|\n| 2 | Luther Head | Shooting Guard|\n| 11 | Ming Yao | Center|\n|Figure. 1|c
<<sd "Feb 1, 2007 10:12:22">>\n<<tagCloud systemConfig systemTiddlers Trash hidden config excludeLists excludeMissing excludeSearch menuLink reference software table test systemConfigDisable>>
The Rampantly Unofficial Linus Torvalds FAQ\n\n...a collection of trivia and personal facts about Linus.\n1. Who is Linus Torvalds?\n\nHe wrote the Linux kernel. If you don't know that, why are you reading this?\n2. What does he look like?\n\nHere is a decent picture of Linus. It is Copyright 1999 by Gary Wagner. He has since had laser eye surgery and no longer wears glasses.\n3. How should I pronounce `Linus'?\n\nIf you're speaking Swedish (his milk tongue) it's /lee'nus/. You can hear this in an audio file if you have a sound card.\n\nIf you're speaking English, Linus answers to either /lie'nus/ (long i) or /li'nus/ (short i). We have a sound file of Linus pronouncing his name in English.\n4. Where is Linus from?\n\nFinland. He grew up in Helsinki (the capital of Finland and its largest city). He wrote the Linux kernel while a student at Helsinki University.\n5. When was he born?\n\nDecember 28th 1969.\n6. If Linus is Finnish, why is his birth language Swedish?\n\nFinland has a significant (about 6%) Swedish-speaking minority population. They call themselves finlandssvensk or finlandssvenskar and consider themselves Finns; many of their families have lived in Finland for centuries. Swedish is one of Finland's two official languages.\n7. What is Linus's middle name?\n\nMany people seem to think think Linus's middle name is "God". A few claim it ought to be Eric. But in fact his middle name is `Benedict'. He doesn't use it much.\n8. Where does Linus live?\n\nHe's now resident in Portland, Oregon, having moved to the U.S. from Helsinki in early 1997. He lived in Santa Clara and San Jose before going to work for OSDL\n9. Does Linus have a home page?\n\nHe has one at http://www.cs.helsinki.fi/~torvalds; it's got an animated penguin and cute pictures of his baby daughter Patricia Miranda Torvalds.\n10. What editor and mail reader does Linus use?\n\nLinus deftly avoids the most persistent religious war in the hacker community by using neither Emacs nor vi. He uses MicroEmacs. And, we are told, Pine as a mail reader.\n11. What is Linus's email address?\n\nYou can reach him at torvalds@osdl.org.\n\nNote: because Linus is who he is, he gets a staggering amount of email that he has to deal with. Don't waste his time. Linus is too nice a guy to hurt you if you abuse this address, but there are probably about a hundred thousand people who would be displeased enough to mess with you if you did.\n12. What does Linus do when he's not hacking Linux?\n\nHe works at Open Source Development Labs.\n\nHe plays with his baby daughters, Patricia Miranda and Daniela. We have a picture of his family.\n\nHe drinks beer (especially Guinness). Occasionally he shoots pistols. He does not combine these two activities.\n\nHe enjoys driving his Merecedes SLK 32 AMG.\n\nYes, he in fact has a life. We await enlightenment on his other leisure-time activities. Assuming he wants to talk about them.\n\nSource: [[The Rampantly Unofficial Linus Torvalds FAQ|http://www.catb.org/~esr/faqs/linus/]]
[img[linux_file_structure.jpg]]
/***\n|''Name:''|TiddlerListMacro|\n|''Version:''|2.0.10 (01-May-2006)|\n|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|\n|''Author:''|[[Jack]]|\n|''Type:''|Macro|\n|''Documentation:''|TiddlerListMacroDocumentation|\n!Usage\n{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}\nSee TiddlerListMacroDocumentation and TiddlerListMacroExamples\n!Code\n***/\n//{{{\nversion.extensions.tiddlerList = {major: 2, minor: 0, revision: 10, date: new Date("May 2, 2006")};\n// template = [header, item, separator, group, footer]\nconfig.macros.tiddlerList={\n formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},\n templates : {\n list : [ "%0\sn", "* %0\sn", "", "%group\sn", "%0\sn"],\n nlist : [ "%0", "# %0\sn", "", "%group\sn", "%0\sn"],\n span : [ "%0", "%0", " ", "%group", "%0"],\n stack : [ "%0", "%0", "\sn", "%group", "%0"],\n csv : [ "%0", "%0", ", ", "%0", "%0\sn"],\n table : ["|!%0|\sn", "|%0|\sn", "", "|%group|\sn", "|%0|\sn"]\n },\n dateFormat : "DD MMM YYYY"\n}\n\nif (!gCurrentTiddler)\n var gCurrentTiddler;\n\nconfig.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n // Some globals\n var count=0, groupCount=0, theGroup="", lastGroup="";\n var currentTiddler = tiddler;\n gCurrentTiddler = tiddler;\n var listWikiText="";\n var formats = this.formats;\n \n // SQL-Like parameters\n var parameters = paramString.parseParams("name",null,true);\n var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];\n var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";\n var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;\n var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";\n var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";\n var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";\n var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";\n var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";\n var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";\n var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";\n var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;\n var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";\n var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";\n pFormat = formats[pFormat]?pFormat:"list"\n \n // Separator\n var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])\n\n // Template for group\n var pGroupTemplate = this.templates[pFormat][3];\n if (parameters[0]["groupTemplate"])\n pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])\n pGroupTemplate = pGroupTemplate.replace("$))", ">>")\n \n // Template for group footer\n var pGroupFooterTemplate = "";\n if (parameters[0]["groupFooterTemplate"])\n pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])\n pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")\n \n // Template for item\n var pItemTemplate = this.templates[pFormat][1];\n if (parameters[0]["itemTemplate"])\n pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])\n pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")\n // Template for footer\n var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")\n\n // Get all tiddlers\n var tiddlers = store.reverseLookup("tags","excludeLists",false);\n\n // Sorting\n if(!pOrder)\n pOrder = "title";\n if (pOrder.match(/^\s-/i)) {\n pOrder = pOrder.substr(1)\n var sortDesc = true;\n }\n if (sortDesc)\n tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });\n else\n tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });\n\n // Header\n if (pHeader)\n listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)\n \n for(var t=0; t<tiddlers.length; t++) {\n tiddler = tiddlers[t];\n if (pTop==-1 || count<pTop) {\n if (pText=="" || tiddler.text.match(pText)) {\n if (pTitle=="" || tiddler.title.match(pTitle)) {\n if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {\n if (pFilter=="" || eval(pFilter)) {\n if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {\n count++;\n // Grouping\n if (pGroup) {\n theGroup = eval(pGroup);\n if(theGroup != lastGroup) {\n groupCount++;\n if (pGroupFooterTemplate && groupCount>1)\n listWikiText += pGroupFooterTemplate.replace("%group", theGroup)\n listWikiText += pGroupTemplate.replace("%group", theGroup)\n lastGroup = theGroup;\n }\n }\n // Separators\n if (count>1) listWikiText += pSeparator;\n //Plaintext title\n var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;\n // Custom parameter\n if (pCustomParameter)\n var custom="";\n try {\n custom = eval(pCustomParameter)\n } catch (e) {}\n // List individual tiddler\n listWikiText += formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,100),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)\n }\n }\n }\n }\n }\n }\n }\n \n // Last group footer\n if (pGroup && pGroupFooterTemplate && count>0)\n listWikiText += pGroupFooterTemplate.replace("%group", theGroup)\n\n // Footer\n if (pFooter) {\n pFooter = pFooter.replace("%count", count)\n listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)\n }\n \n // Render result\n if (!parameters[0]["debug"])\n wikify(listWikiText,place, null, currentTiddler)\n else\n place.innerHTML = "<textarea style=\s"width:100%;\s" rows=30>" + listWikiText + "</textarea>"\n \n \n // Local functions\n \n function paramFormat(param) {\n // Allow "\sn" in non evalled parameters\n return param.replace(/\s\sn/g, "\sn");\n }\n \n function formatItem(template, values, format) {\n // Fill template with values (depending on list format)\n if (format.match(/table/) && values[0].match(/\s|/))\n return ("%0\sn").format(values)\n else\n return template.format(values)\n }\n \n function compareArrays(array, values, logic) {\n // Compare items in array with AND("all") or OR("any") logic\n var matches=0;\n for(var v=0; v<values.length; v++)\n if(values[v].match(/^\s-/) && !array.contains(values[v].substr(1)))\n matches++;\n else if (array.contains(values[v]))\n matches++;\n return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))\n }\n \n}\n\nString.prototype.prettyTrim = function(len,prefix,postfix) {\n var result = this.trim().replace(/\sr\sn/g,' ').replace(/\sn/g,' ');\n if (!prefix) prefix = '';\n if (!postfix) postfix = '';\n if (result.length > len - 3)\n return prefix + result.substr(0,len) + '...' + postfix;\n else if (result.length > 0)\n return prefix + result + postfix;\n else\n return result;\n}\n\n//}}}
/***\n|Name|TiddlerPasswordPlugin|\n|Source|http://www.TiddlyTools.com/#TiddlerPasswordPlugin|\n|Version|1.1.0|\n|Author|Eric Shulman - ELS Design Studios|\n|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|~CoreVersion|2.1|\n|Type|plugin|\n|Requires||\n|Overrides||\n|Description||\n\nThis plugin blocks viewing of specific tiddler content by prompting for a NON-SECURE, UNENCRYPTED password before the tiddler is displayed. If the correct password is not entered, the tiddler is automatically closed. The process does not prevent tiddler content from being viewed directly from the TiddlyWiki source file's storeArea, nor does it encrypt the tiddler content in any way. Because it is relatively simple to bypass and/or disable the password prompting process, this macro should be thought of as a "latch" rather than a "lock" on a given tiddler.\n!!!!!Usage\n<<<\n{{{<<getTiddlerPassword>>}}} \n{{{<<getTiddlerPassword password>>}}}\n{{{<<getTiddlerPassword password "prompt message">>}}}\n{{{<<getTiddlerPassword - "prompt message">>}}}\n\nPlace the {{{<<getTiddlerPassword>>}}} macro at the beginning of your tiddler content. The macro prompts for a password until either A) the correct password is entered or B) the user presses the cancel button from the prompt box, in which case the tiddler is automatically closed so it cannot be viewed. If a valid password is input, it will be remembered only until the user closes the tiddler. Each time the tiddler is opened, the password must be re-entered.\n\nThe optional ''password'' parameter provides a "user-level" password for the tiddler in which the macro occurs. If no user password is provided, then only the admin-level password (see below) will be accepted. \n\nBy default, the prompt message reads: "Please enter a password to view '%0'" (where the %0 is automatically replaced by the name of the tiddler in which the macro occurs) To change this text, enter an additional macro parameter, following the user password.\n>Note: because the prompt text is likely to contain spaces, you should always enclose it in quotes (or use {{{[[...]]}}} if it contains quotes). In addition, to enter an alternative prompt without providing a user-level password, use "-" as a //placeholder// for the password parameter.\n\nNotes:\n* You can also set a hard-coded admin password (see below) to define a "universal passkey" that will grant access to all tiddlers protected by this script, regardless of the individual password used on each protected tiddler.\n* If you embed one or more password-protected tiddlers within another tiddler (by using the {{{<<tiddler TiddlerName>>}}} macro) the user will be prompted to provide the appropriate password for the EACH protected tiddler contained in the tiddler being rendered.\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TiddlerPasswordPlugin'' (tagged with <<tag systemConfig>>)\n\n''As soon as you have installed this plugin, you should change the default admin password in [[TiddlerPasswordConfig]].'' Note: the configuration tiddler is password-protected to prevent the admin password from being viewed (and/or modified) unless the current password is provided. By default, the admin password is set to "admin".\n<<<\n!!!!!Revision History\n<<<\n''2007.02.22 [1.1.1]'' updated documentation for using custom prompt text\n''2007.01.01 [1.1.0]'' added optional param for using custom prompt text \n''2006.12.03 [1.0.1]'' handler() uses passed-in 'tiddler.title' (if any), so that title of included protected tiddlers can be correctly displayed (instead of showng title of containing tiddler)\n''2006.12.02 [1.0.0]'' initial release - converted from GetTiddlerPassword inline script\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.getTiddlerPassword= {major: 1, minor: 1, revision: 1, date: new Date(2007,2,22)};\n\nconfig.macros.getTiddlerPassword = {\n msg: "Please enter a password to view '%0'",\n defaultText: "enter password here",\n retryMsg: "'%0' is not the correct password for '%1'. Please try again:",\n cancelMsg: "Sorry, you cannot view '%0' without entering a valid password.",\n thanksMsg: "Thank you, your password has been accepted.",\n handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var here=story.findContainingTiddler(place); if (!here) return;\n var title=tiddler?tiddler.title:here.getAttribute("tiddler");\n var who=here.getAttribute("logID");\n var userPass=params[0]?params[0]:""; if (userPass=='-') userPass="";\n var msg=params[1]?params[1]:this.msg;\n if (who==userPass||who==this.adminPass) return; // already 'logged in'?\n var who=prompt(msg.format([title]),this.defaultText); // ask for ID\n while (who && who!=userPass && who!=this.adminPass) // not correct ID?\n who=prompt(this.retryMsg.format([who,title]),this.defaultText); // ask again\n if (who==userPass||who==this.adminPass) // correct ID? mark tiddler logged in...\n { here.setAttribute("logID",who); alert(this.thanksMsg); }\n else // incorrect ID (e.g., entry cancelled by user)...\n { story.closeTiddler(here.getAttribute("tiddler")); alert(this.cancelMsg.format([title])); }\n }\n}\n// default admin password (may be overridden in TiddlerPasswordConfig)\nif (config.macros.getTiddlerPassword.adminPass==undefined)\n config.macros.getTiddlerPassword.adminPass="admin";\n//}}}
About\nTiddlySnip is a Firefox extension that lets you use your TiddlyWiki as a scrapbook! Simply select text, right click and choose 'TiddlySnip selection'. Next time you open your TiddlyWiki file, your snippets will be there, already tagged and organised.\n\nFull list of features.\nSample snippet saved with TiddlySnip\n\nGetting started with TiddlySnip is as easy as:\na) use the link on the right to install TiddlySnip\nb) configure TiddlySnip to your liking.\n\nIf you encounter any difficulties during the installation, have a look at our installation guide.\nWhat is a TiddlyWiki?\n\nSource: [[TiddlySnip - About|http://tiddlysnip.com/#About]]
<<tiddlerList tags:tiddlyWiki>>
<<timeline better:true excludeTag:hidden sortBy:created maxDays:256 maxEntries:20>>[[>>See All Posts|Almost All Posts - Timeline]]\n!!Tags Cloud\n<<tagCloud systemConfig systemTiddlers Trash hidden config excludeLists excludeMissing excludeSearch menuLink systemConfigDisable>>
/***\n\n|Name|ToggleSideBarMacro|\n|Created by|SaqImtiaz|\n|Location|http://tw.lewcid.org/#ToggleSideBarMacro|\n|Version|1.0|\n|Requires|~TW2.x|\n!Description:\nProvides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.\n\n!Demo\n<<toggleSideBar "Toggle Sidebar">>\n\n!Usage:\n{{{<<toggleSideBar>>}}} <<toggleSideBar>>\nadditional options:\n{{{<<toggleSideBar label tooltip show/hide>>}}} where:\nlabel = custom label for the button,\ntooltip = custom tooltip for the button,\nshow/hide = use one or the other, determines whether the sidebar is shown at first or not.\n(default is to show the sidebar)\n\nYou can add it to your tiddler toolbar, your MainMenu, or where you like really.\nIf you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:\n{{{ .HideSideBarButton {float:right;} }}}\n\n!History\n*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. \n*20-07-06: version 0.11\n*27-04-06: version 0.1: working.\n\n!Code\n***/\n//{{{\nconfig.macros.toggleSideBar={};\n\nconfig.macros.toggleSideBar.settings={\n styleHide : "#sidebar { display: none;}\sn"+"#contentWrapper #displayArea { margin-right: 1em;}\sn"+"",\n styleShow : " ",\n arrow1: "«",\n arrow2: "»"\n};\n\nconfig.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)\n{\n var tooltip= params[1]||'toggle sidebar';\n var mode = (params[2] && params[2]=="hide")? "hide":"show";\n var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;\n var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;\n var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");\n if (mode == "hide")\n { \n (document.getElementById("sidebar")).setAttribute("toggle","hide");\n setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");\n }\n};\n\nconfig.macros.toggleSideBar.onToggleSideBar = function(){\n var sidebar = document.getElementById("sidebar");\n var settings = config.macros.toggleSideBar.settings;\n if (sidebar.getAttribute("toggle")=='hide')\n {\n setStylesheet(settings.styleShow,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","show");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);\n }\n else\n { \n setStylesheet(settings.styleHide,"ToggleSideBarStyles");\n sidebar.setAttribute("toggle","hide");\n this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);\n }\n\n return false;\n}\n\nsetStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\sn","ToggleSideBarButtonStyles");\n\n//}}}
/***\n|''Name:''|TrashPlugin|\n|''Version:''|1.1.0 (Dec 12, 2006) |\n|''Source:''|http://ido-xp.tiddlyspot.com/#TrashPlugin|\n|''Author:''|Ido Magal (idoXatXidomagalXdotXcom)|\n|''Licence:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|??|\n\n!Description\nThis plugin provides trash bin functionality. Instead of being permanently removed, deleted tiddlers are tagged with "Trash." Empty the trash by clicking on the <<emptyTrash>> button in the [[Trash]] tiddler. Holding down CTRL while clicking on "delete" will bypass the trash.\n\n!Installation instructions\nCreate a new tiddler in your wiki and copy the contents of this tiddler into it. Name it the same and tag it with "systemConfig".\nSave and reload your wiki.\n\n!Uninstallation instructions\n1. Empty the [[Trash]] ( <<emptyTrash>> )\n2. Delete this tiddler.\n\n!Revision history\n* V1.1.0 (Dec 12, 2006) \n** added movedMsg (feedback when tiddler is tagged as Trash)\n** make sure tiddler actually exists before tagging it with "Trash"\n** fetch correct tiddler before checking for "systemConfig" tag\n* V1.0.3TT.1 (TiddlyTools variant) (Dec 11, 2006) \n** don't create Trash tiddler until needed\n** remove Trash tiddler when no trash remains\n** don't tag Trash tiddler with "TrashPlugin"\n** moved all user-visible strings to variables so they can be translated by 'lingo' plugins\n** use displayMessage() instead of alert()\n* v1.0.3 (Dec 11, 2006)\n** Fixed broken reference to core deleteTiddler.\n** Now storing reference to core deleteTiddler in emptyTrash macro.\n** Reduced deleteTiddler hijacking to only the handler.\n* v1.0.2 (Dec 11, 2006)\n** EmptyTrash now uses removeTiddler instead of deleteTiddler.\n** Supports trashing systemConfig tiddlers (adds systemConfigDisable tag).\n* v1.0.1 (Dec 10, 2006)\n** Replaced TW version with proper Core reference.\n** Now properly hijacking deleteTiddler command.\n* v1.0.0 (Dec 10, 2006)\n** First draft.\n\n!To Do\n* Make trash keep only n days worth of garbage.\n* Add undo.\n* rename deleted tiddlers?\n\n!Code\n***/\n//{{{\n\nconfig.macros.emptyTrash = \n{\n tag: "Trash",\n movedMsg: "'%0' has been tagged as '%1'",\n label: "empty trash",\n tooltip: "Delete items tagged as %0 that are older than %1 days old",\n emptyMsg: "The trash is empty.",\n noneToDeleteMsg: "There are no items in the trash older than %0 days.",\n confirmMsg: "The following tiddlers will be deleted:\sn\sn'%0'\sn\snIs it OK to proceed?",\n deletedMsg: "Deleted '%0'",\n\n handler: function ( place,macroName,params,wikifier,paramString,tiddler )\n {\n var namedParams = (paramString.parseParams(daysOld))[0];\n var daysOld = namedParams['daysOld'] ? namedParams['daysOld'][0] : 0; // default\n var buttonTitle = namedParams['title'] ? namedParams['title'][0] : this.label;\n createTiddlyButton ( place, buttonTitle, this.tooltip.format([ config.macros.emptyTrash.tag,daysOld ]),\n this.emptyTrash( daysOld ));\n },\n\n emptyTrash: function( daysOld )\n {\n return function()\n {\n var collected = [];\n var compareDate = new Date();\n compareDate.setDate( compareDate.getDate() - daysOld );\n store.forEachTiddler(function ( title,tiddler )\n {\n if ( tiddler.tags.contains( config.macros.emptyTrash.tag ) && tiddler.modified < compareDate )\n collected.push( title );\n });\n\n if ( collected.length == 0 )\n {\n if ( daysOld == 0 )\n displayMessage( config.macros.emptyTrash.emptyMsg );\n else\n displayMessage( config.macros.emptyTrash.emptyMsg.format( [daysOld] ) );\n }\n else {\n if ( confirm( config.macros.emptyTrash.confirmMsg.format( [collected.join( "', '" )] ) ) )\n {\n for ( var i=0;i<collected.length;i++ )\n {\n store.removeTiddler( collected[i] );\n displayMessage( config.macros.emptyTrash.deletedMsg.format( [collected[i]] ) );\n }\n }\n }\n // remove Trash tiddler if no trash remains\n if ( store.getTaggedTiddlers( config.macros.emptyTrash.tag ).length == 0 ) {\n story.closeTiddler( config.macros.emptyTrash.tag,true,false);\n store.removeTiddler( config.macros.emptyTrash.tag );\n }\n else\n story.refreshTiddler( config.macros.emptyTrash.tag,false,true );\n store.setDirty( true );\n }\n }\n}\n\n////////////////// hijack delete command\n\nconfig.macros.emptyTrash.orig_deleteTiddler_handler = config.commands.deleteTiddler.handler;\nconfig.commands.deleteTiddler.handler = function( event,src,title )\n {\n // if tiddler exists (i.e., not a NEW, unsaved tiddler in edit mode) and not bypassing Trash (holding CTRL key)\n if ( store.tiddlerExists( title ) && !event.ctrlKey )\n {\n // if Trash tiddler doesn't exist yet, create it now...\n if (!store.tiddlerExists( config.macros.emptyTrash.tag ))\n store.saveTiddler( config.macros.emptyTrash.tag,config.macros.emptyTrash.tag,\n "<<emptyTrash>>","TrashPlugin",new Date(),null );\n // set tags on tiddler\n store.setTiddlerTag( title,1,config.macros.emptyTrash.tag );\n store.setTiddlerTag( title,1,"excludeLists" );\n store.setTiddlerTag( title,1,"excludeMissing" );\n var tiddler=store.fetchTiddler(title);\n if (tiddler.tags.contains( "systemConfig" ))\n store.setTiddlerTag( title,1,"systemConfigDisable" );\n // close tiddler, autosave file (if set), and give user feedback\n story.closeTiddler( title,true,event.shiftKey || event.altKey );\n if( config.options.chkAutoSave )\n saveChanges();\n displayMessage(config.macros.emptyTrash.movedMsg.format( [ title,config.macros.emptyTrash.tag ] ));\n }\n else {\n config.macros.emptyTrash.orig_deleteTiddler_handler.apply( this, arguments );\n }\n story.refreshTiddler( config.macros.emptyTrash.tag,false,true );\n return false;\n };\n//}}}
<!--{{{-->\n<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler permalink references fullscreen jump'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date [[DD MMM YYYY]]'></span>)</div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->
!Vocabulary
<<tiddlerList tags:webpearl>>
<<showUpdates>>
/***\n|''Name:''|WikiBar|\n|''Version:''|2.0.0 beta3|\n|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|\n|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|\n|''Type:''|toolbar macro command extension|\n|''Required:''|TiddlyWiki 2.0.0 beta6|\n!Description\nWikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.\nBesides, with WikiBar-addons, users can extend the power of WikiBar.\n!Support browser\n*Firefox 1.5\n!Revision history\n*v2.0.0 beta3 (2005/12/30)\n** remove macros (replaced by TWMacro addon)\n** add wikibar command in toolbar automatically\n** rename DOIT to HANDLER\n** rename TIP to TOOLTIP\n*v2.0.0 beta2 (2005/12/21)\n** re-design Wikibar addon framework\n*v2.0.0 beta1 (2005/12/14)\n** Note:\n*** WikiBarPlugin is renamed to WikiBar\n** New Features:\n*** support TiddlyWiki 2.0.0 template mechanism\n*** new wikibar data structure\n*** new wikibar-addon framework for developers\n**** support dynamic popup menu generator\n*** support most new macros added in TiddlyWiki 2.0.0\n*** multi-level popup menu\n*** fix wikibar tab stop\n*** remove paletteSelector\n** Known Bugs:\n*** popup-menu and color-picker can't be closed correctly\n*** some macros can't be displayed correctly in previewer\n*** text in previewer will be displayed italic\n*v1.2.0 (2005/11/21)\n**New Features:\n***User defined color palettes supported\n####Get color palettes from [[ColorZilla Palettes|http://www.iosart.com/firefox/colorzilla/palettes.html]].\n####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.\n***WikiBar style sheet supported\n***Click on document to close current colorPicker, paletteSelector or aboutWikibar\n*v1.1.1 (2005/11/03)\n**Bugs fixed:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.1.0 (2005/11/01)\n**Bugs fixed:\n***WikiBar overruns (reported by by GeoffS <gslocock@yahoo.co.uk>)\n**New features:\n***Insert a color code at the cursor. (Thanks to RunningUtes <RunningUtes@gmail.com>)\n***Enable gradient macro. (Thanks to RunningUtes <RunningUtes@gmail.com>)\n***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)\n***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)\n**Enhanced:\n***Allow optional parameters in syntax.\n**Bugs:\n***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'\n*v1.0.0 (2005/10/30)\n**Initial release\n!Code\n***/\n//{{{\nconfig.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};\nconfig.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){\n if(!(tiddler instanceof Tiddler)) {return;}\n story.setDirty(tiddler.title,true);\n place.id = 'wikibar'+tiddler.title;\n place.className = 'toolbar wikibar';\n};\nfunction wikibar_install(){\n config.commands.wikibar = {\n text: 'wikibar',\n tooltip: 'wikibar on/off',\n handler: function(e,src,title) {\n if(!e){ e = window.event; }\n var theButton = resolveTarget(e);\n theButton.id = 'wikibarButton'+title;\n wikibarPopup.remove();\n wikibar_installAddons(theButton, title);\n wikibar_createWikibar(title);\n return(false);\n }\n };\n config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);\n var tiddler = store.getTiddler('EditTemplate');\n if(tiddler){\n tiddler.text = wikibar_addWikibarCommand(tiddler.text);\n }\n}\nfunction wikibar_installAddons(theButton, title){\n var tiddlers = store.getTaggedTiddlers('wikibarAddons');\n if(!tiddlers) { return; }\n theButton.addons=[];\n for(var i=0; i<tiddlers.length; i++){\n try{\n eval(tiddlers[i].text);\n try{\n wikibar_addonInstall(title);\n wikibar_addonInstall = null;\n theButton.addons.push({ok:true, name:tiddlers[i].title});\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }catch(ex){\n theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});\n }\n }\n}\nfunction wikibar_addWikibarCommand(tiddlerText){\n var div = document.createElement('div');\n div.style.display = 'none';\n div.innerHTML = tiddlerText;\n for(var i=0; i<div.childNodes.length; i++){\n var o=div.childNodes[i];\n if(o.tagName==='DIV'){\n if(o.className=='toolbar'){\n var macroText = o.getAttribute('macro').trim();\n if(macroText.search('wikibar')<=0){\n macroText += ' wikibar';\n o.setAttribute('macro', macroText);\n }\n break;\n }\n }\n }\n return div.innerHTML.replace(/\s"/g, "\s'");\n}\nfunction wikibar_processSyntaxParams(theSyntax, params){\n try{\n var pcr = 'AplWikibarPcr';\n var rx=null;\n var allParams=null;\n if(params){\n if(typeof(params)=='object'){\n for(var i=0; i<params.length; i++){\n if(params[i]){\n params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();\n rx = '(\s\s[%'+(i+1)+'\s\s])' + '|' + '(%'+(i+1)+')';\n theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );\n }\n }\n allParams = params.join(' ').trim();\n }else{\n allParams = params.replace(new RegExp('%','g'), pcr).trim();\n rx = /(\s[%1{1}\s])|(%1{1})/g;\n theSyntax = theSyntax.replace(rx, allParams);\n }\n }\n if(allParams){\n theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);\n }\n rx=/\s[%(([1-9]{1,}[0-9]{0,})|(N{1}))\s]/g;\n theSyntax = theSyntax.replace(rx, '');\n rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;\n if( theSyntax.match(rx) ){\n throw 'Not enough parameters! ' + theSyntax;\n }\n theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');\n return theSyntax;\n } catch(ex){\n return null;\n }\n}\nfunction wikibar_resolveEditItem(tiddlerWrapper, itemName){\n if(tiddlerWrapper.hasChildNodes()){\n var c=tiddlerWrapper.childNodes;\n for(var i=0; i<c.length; i++){\n var txt=wikibar_resolveEditItem(c[i], itemName);\n if(!txt){\n continue;\n }else{\n return txt;\n }\n }\n }\n return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);\n}\nfunction wikibar_resolveEditItemValue(tiddlerWrapper, itemName){\n var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);\n return (o? o.value.replace(/\sr/mg,'') : null);\n}\nfunction wikibar_resolveTiddlerEditorWrapper(obj){\n if(obj.id=='tiddlerDisplay'){return null;}\n if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}\n return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);\n}\nfunction wikibar_resolveTiddlerEditor(obj){\n if(obj.hasChildNodes()){\n var c = obj.childNodes;\n for(var i=0; i<c.length; i++){\n var o=wikibar_resolveTiddlerEditor(c[i]);\n if(o){ return o;}\n }\n }\n return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);\n}\nfunction wikibar_resolveTargetButton(obj){\n if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }\n if(obj.tiddlerTitle){\n return obj;\n }else{\n return wikibar_resolveTargetButton(obj.parentNode);\n }\n}\nfunction wikibar_isValidMenuItem(tool){\n if(!tool){ return false; }\n if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){\n for(var key in tool){\n if(key.substring(0,8)=='DYNAITEM'){ return true; }\n if(wikibar_isValidMenuItem(tool[key])){ return true; }\n }\n return false;\n }else{\n return (tool.HANDLER? true : false);\n }\n}\nfunction wikibar_editFormat(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByWord(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){return;}\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n if(!( fullText.charAt(ss-1).match(/\sW/gi) || fullText.charAt(ss).match(/\sW/gi) )){\n var m = frontText.match(/\sW/gi);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/\sW/gi);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n selText = fullText.substring(ss,se);\n }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByCursor(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n else if(ss===0 && (se===0 || se == fullText.length) ){\n endText = fullText;\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByLine(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(se>ss && ss>=0){\n if(this.byBlock){\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n else{\n se = ss;\n }\n }\n if(ss===0 && (se===0 || se == fullText.length) ){\n var m=fullText.match(/(\sn|\sr)/g);\n if(m){\n se = fullText.indexOf(m[0]);\n }else{\n se = fullText.length;\n }\n selText = fullText.substring(0, se);\n endText = fullText.substring(se, fullText.length);\n }\n else if(se==ss && ss>0){\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n m = frontText.match(/(\sn|\sr)/g);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{\n ss = 0;\n }\n m = endText.match(/(\sn|\sr)/g);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{\n se = fullText.length;\n }\n frontText = fullText.substring(0, ss);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length);\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n if(this.byBlock){\n if( (frontText.charAt(frontText.length-1)!='\sn') && ss>0 ){\n repText = '\sn' + repText;\n }\n if( (endText.charAt(0)!='\sn') || se==fullText.length){\n repText += '\sn';\n }\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editFormatByTableCell(param){\n var editor = param.button.editor;\n var params = param.params;\n clearMessage();\n if(!editor){ return; }\n var repText = wikibar_processSyntaxParams(this.syntax, params);\n if(repText===null){ return; }\n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n if(ss===0 || ss==fullText.length){\n throw 'not valid cell!';\n }\n se=ss;\n frontText = fullText.substring(0, ss);\n endText = fullText.substring(se, fullText.length);\n i=frontText.lastIndexOf('\sn');\n j=frontText.lastIndexOf('|');\n if(i>j || j<0){\n throw 'not valid cell!';\n }\n ss = j+1;\n i=endText.indexOf('\sn');\n j=endText.indexOf('|');\n if(i<j || j<0){\n throw 'not valid cell!';\n }\n se += j;\n frontText = fullText.substring(0, ss-1);\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se+1, fullText.length);\n if(this.key.substring(0,5)=='align'){\n selText = selText.trim();\n if( selText=='>' || selText=='~' || selText.substring(0,8)=='bgcolor(') {return; }\n }\n if(selText.length>0){\n repText = repText.replace('user_text', selText);\n }\n if(repText.indexOf('user_text')>=0 && this.hint){\n repText = repText.replace('user_text', this.hint);\n }\n editor.value = frontText + repText + endText;\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length - 2;\n editor.scrollTop = st;\n editor.focus();\n}\nfunction wikibar_editSelectAll(param){\n var editor = param.button.editor;\n editor.selectionStart = 0;\n editor.selectionEnd = editor.value.length;\n editor.scrollTop = 0;\n editor.focus();\n}\nfunction wikibar_doPreview(param){\n var theButton = param.button;\n var editor = param.button.editor;\n var wikibar = theButton.parentNode;\n if(!wikibar) { return; }\n title = theButton.tiddlerTitle;\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);\n var tiddlerWrapper = editorWrapper.parentNode;\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n previewer.parentNode.removeChild(previewer);\n editorWrapper.style.display = 'block';\n visible=true;\n }else{\n previewer = document.createElement('div');\n previewer.id = 'previewer'+title;\n previewer.className = 'viewer previewer';\n previewer.style.height = (editor.offsetHeight) + 'px';\n wikify(editor.value, previewer);\n tiddlerWrapper.insertBefore(previewer, editorWrapper);\n editorWrapper.style.display = 'none';\n visible=false;\n }\n var pv=null;\n for(var i=0; i<wikibar.childNodes.length; i++){\n try{\n var btn = wikibar.childNodes[i];\n if(btn.toolItem.key == 'preview'){ pv=btn; }\n if(btn.toolItem.key != 'preview'){\n btn.style.display = visible ? '': 'none';\n }\n }catch(ex){}\n }\n if(!pv) { return; }\n if(visible){\n pv.innerHTML = '<font face=\s"verdana\s">&infin;</font>';\n pv.title = 'preview current tiddler';\n }\n else{\n pv.innerHTML = '<font face=\s"verdana\s">&larr;</font>';\n pv.title = 'back to editor';\n }\n}\nfunction wikibar_doListAddons(param){\n clearMessage();\n var title = param.button.tiddlerTitle;\n var wikibarButton = document.getElementById('wikibarButton'+title);\n var ok=0, fail=0;\n for(var i=0; i<wikibarButton.addons.length; i++){\n var addon=wikibarButton.addons[i];\n if(addon.ok){\n displayMessage('[ o ] '+addon.name);\n ok++;\n }\n else{\n displayMessage('[ x ] '+addon.name + ': ' + addon.error);\n fail++;\n }\n }\n displayMessage('---------------------------------');\n displayMessage(ok + ' ok ; ' + fail + ' failed');\n}\nfunction wikibar_getColorCode(param){\n var cbOnPickColor = function(colorCode, param){\n param.params = colorCode;\n param.button.toolItem.doMore(param);\n };\n wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);\n}\nfunction wikibar_getLinkUrl(param){\n var url= prompt('Please enter the link target', (this.param? this.param : ''));\n if (url && url.trim().length>0){\n param.params = url;\n this.doMore(param);\n }\n}\nfunction wikibar_getTableRowCol(param){\n var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');\n if (!rc || (rc.trim()).length<=0){ return; }\n var arr = rc.toUpperCase().split('X');\n if(arr.length != 2) { return; }\n for(var i=0; i<arr.length; i++){\n if(isNaN(arr[i].trim())) { return; }\n }\n var rows = parseInt(arr[0].trim(), 10);\n var cols = parseInt(arr[1].trim(), 10);\n var txtTable='';\n for(var r=0; r<rows; r++){\n for(var c=0; c<=cols; c++){\n if(c===0){\n txtTable += '|';\n }else{\n txtTable += ' |';\n }\n }\n txtTable += '\sn';\n }\n if(txtTable.trim().length>0){\n param.params = txtTable.trim();\n this.doMore(param);\n }\n}\nfunction wikibar_getMacroParam(param){\n var p = prompt('Please enter the parameters of macro \s"' + this.key + '\s":' +\n '\snSyntax: ' + this.syntax +\n '\sn\snNote: '+\n '\sn%1,%2,... - parameter needed'+\n '\sn[%1] - optional parameter'+\n '\sn%N - more than one parameter(1~n)'+\n '\sn[%N] - any number of parameters(0~n)'+\n '\sn\snPS:'+\n '\sn1. Parameters should be seperated with space character'+\n '\sn2. Use \s" to wrap the parameter that includes space character, ex: \s"hello world\s"'+\n '\sn3. Input the word(null) for the optional parameter ignored',\n (this.param? this.param : '') );\n if(!p) { return; }\n p=p.readMacroParams();\n for(var i=0; i<p.length; i++){\n var s=p[i].trim();\n if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }\n if(s.toLowerCase()=='null'){ p[i]=null; }\n }\n param.params = p;\n this.doMore(param);\n}\nfunction wikibar_getMorePalette(unused){\n clearMessage();\n displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\s/\s/www.iosart.com/firefox/colorzilla/palettes.html');\n displayMessage('Save it as a new tiddler with \s"ColorPalettes\s" tag');\n}\nfunction wikibar_createWikibar(title){\n var theWikibar = document.getElementById('wikibar' + title);\n if(theWikibar){\n if(theWikibar.hasChildNodes()){\n theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');\n return;\n }\n }\n var tiddlerWrapper = document.getElementById('tiddler'+title);\n var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);\n if(!theTextarea){\n clearMessage();\n displayMessage('WikiBar only works in tiddler edit mode now');\n return;\n }else{\n if(!theTextarea.id){ theTextarea.id = 'editor'+title; }\n if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title; }\n }\n if(theWikibar){\n theWikibar = document.getElementById('wikibar'+title);\n }else{\n var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);\n theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');\n addClass(theWikibar, 'wikibar');\n var previewer = document.getElementById('previewer'+title);\n if(previewer){\n tiddlerWrapper.insertBefore(theWikibar, previewer);\n }else{\n tiddlerWrapper.insertBefore(theWikibar, editorWrapper);\n }\n }\n wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);\n if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){\n theTextarea.rows = config.options['txtWikibarEditorRows'];\n }\n setStylesheet(\n '.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',\n 'WikiBarStyleSheet');\n}\nfunction wikibar_createMenu(place,toolset,title,editor){\n if(!wikibar_isValidMenuItem(toolset)){return;}\n if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }\n for(var key in toolset){\n if(key.substring(0,9)=='SEPERATOR'){\n wikibar_createMenuSeperator(place);\n continue;\n }\n if(key.substring(0,8)=='DYNAITEM'){\n var dynaTools = toolset[key](title,editor);\n if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){\n wikibar_createMenuItem(place,dynaTools,null,editor,title);\n }else{\n dynaTools.TYPE = 'MENU';\n wikibar_createMenu(place, dynaTools, title, editor);\n }\n continue;\n }\n if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}\n wikibar_createMenuItem(place,toolset,key,editor,title);\n }\n}\nfunction wikibar_createMenuItem(place,toolset,key,editor,title){\n if(!key){\n var tool = toolset;\n }else{\n tool = toolset[key];\n tool.key = key;\n }\n if(!wikibar_isValidMenuItem(tool)){return;}\n var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');\n var toolIsMenu = (tool.TYPE=='MENU');\n var theButton;\n if(toolIsOnMainMenu){\n theButton = createTiddlyButton(\n place,\n '',\n (tool.TOOLTIP? tool.TOOLTIP : ''),\n (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),\n 'button');\n theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n theButton.isOnMainMenu = true;\n addClass(theButton, (toolIsMenu? 'menu' : 'item'));\n place.appendChild( document.createTextNode('\sn') );\n if(!toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = function(e){ wikibarPopup.remove(); };\n }\n }\n }else{\n theButton=createTiddlyElement(place, 'tr',key,'button');\n theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');\n theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);\n var tdL = createTiddlyElement(theButton, 'td','','marker');\n var td = createTiddlyElement(theButton, 'td');\n var tdR = createTiddlyElement(theButton, 'td','','marker');\n td.innerHTML = (tool.CAPTION? tool.CAPTION : key);\n if(toolIsMenu){\n tdR.innerHTML='&nbsp;&nbsp;&rsaquo;';\n }\n if(tool.SELECTED){\n tdL.innerHTML = '&radic; ';\n addClass(theButton, 'selected');\n }\n if(tool.DISABLED){\n addClass(theButton, 'disabled');\n }\n }\n theButton.tiddlerTitle = title;\n theButton.toolItem = tool;\n theButton.editor = editor;\n theButton.tabIndex = 999;\n if(toolIsMenu){\n if(config.options['chkWikibarPopmenuOnMouseOver']){\n theButton.onmouseover = wikibar_onClickMenuItem;\n }\n }\n}\nfunction wikibar_createMenuSeperator(place){\n if(place.id.substring(0,7)=='wikibar') { return; }\n var onclickSeperator=function(e){\n if(!e){ e = window.event; }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n };\n var theButton=createTiddlyElement(place,'tr','','seperator');\n var td = createTiddlyElement(theButton, 'td','','seperator');\n td.colSpan=3;\n theButton.onclick=onclickSeperator;\n td.innerHTML = '<hr>';\n}\nfunction wikibar_genWikibarAbout(){\n var toolset={};\n toolset.version = {\n CAPTION: '<center>WikiBar ' +\n config.macros.wikibar.major + '.' +\n config.macros.wikibar.minor + '.' +\n config.macros.wikibar.revision +\n (config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +\n '</center>',\n HANDLER: function(){}\n };\n toolset.SEPERATOR = {};\n toolset.author = {\n CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',\n TOOLTIP: 'send mail to the author',\n HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }\n };\n toolset.website = {\n CAPTION: '<center>aiddlywiki.sourceforge.net</center>',\n TOOLTIP: 'go to the web site of WikiBar',\n HANDLER: function(){ window.open('http:\s/\s/aiddlywiki.sourceforge.net/'); }\n };\n return toolset;\n}\nfunction wikibar_genWikibarOptions(title, editor){\n var toolset={};\n toolset.popOnMouseOver = {\n CAPTION:'popup menu on mouse over',\n SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],\n HANDLER: function(param){\n config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];\n saveOptionCookie('chkWikibarPopmenuOnMouseOver');\n var title = param.button.tiddlerTitle;\n var wikibar = document.getElementById('wikibar'+title);\n if(wikibar){ wikibar.parentNode.removeChild(wikibar); }\n wikibar_createWikibar(title);\n }\n };\n toolset.setEditorSize = {\n CAPTION:'set editor height: <input id=\s"txtWikibarEditorRows\s" type=text size=1 MAXLENGTH=3 value=\s"' +\n (config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\s"> ok',\n HANDLER: function(param){\n var input = document.getElementById('txtWikibarEditorRows');\n if(input){\n var rows = parseInt(input.value, 10);\n if(!isNaN(rows)){\n var editor = param.button.editor;\n editor.rows = rows;\n }else{\n rows=config.maxEditRows;\n }\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n config.maxEditRows = rows;\n }\n }\n };\n toolset.setEditorSizeOnLoadingWikibar = {\n CAPTION:'set editor height on loading wikibar',\n SELECTED: config.options['chkWikibarSetEditorHeight'],\n HANDLER: function(param){\n config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];\n saveOptionCookie('chkWikibarSetEditorHeight');\n if(config.options['chkWikibarSetEditorHeight']){\n var rows = config.options['txtWikibarEditorRows'];\n if(!isNaN(rows)){ rows = 15; }\n var editor = param.button.editor;\n editor.rows = rows;\n config.options['txtWikibarEditorRows'] = rows;\n saveOptionCookie('txtWikibarEditorRows');\n }\n }\n };\n toolset.SEPERATOR = {};\n toolset.update = {\n CAPTION: 'check for updates',\n DISABLED: true,\n HANDLER: function(){}\n };\n return toolset;\n}\nfunction wikibar_genPaletteSelector(){\n try{\n var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');\n if(!cpTiddlers) { return; }\n var palettes=[];\n palettes.push(wikibarColorTool.defaultPaletteName);\n for(var i=0; i<cpTiddlers.length; i++){\n palettes.push(cpTiddlers[i].title.trim());\n }\n var toolset={};\n for(i=0; i<palettes.length; i++){\n toolset[palettes[i]] = {\n TOOLTIP: palettes[i],\n SELECTED: (palettes[i]==wikibarColorTool.paletteName),\n HANDLER: wikibar_doSelectPalette\n };\n }\n return toolset;\n }catch(ex){ return null; }\n}\nfunction wikibar_onClickItem(e){\n if(!e){ e = window.event; }\n var theTarget = resolveTarget(e);\n if(theTarget.tagName=='INPUT'){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return;\n }\n var theButton = wikibar_resolveTargetButton(theTarget);\n if(!theButton){ return(false); }\n var o = theButton.toolItem;\n if(!o) { return; }\n var param = {\n event: e,\n button: theButton\n };\n if(o.HANDLER){ o.HANDLER(param); }\n if(o.DISABLED){\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n }\n return(false);\n}\nfunction wikibar_onClickMenuItem(e){\n if(!e){ e = window.event; }\n var theButton = wikibar_resolveTargetButton(resolveTarget(e));\n if(!theButton){ return(false); }\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n var title = theButton.tiddlerTitle;\n var editor = theButton.editor;\n var tool = theButton.toolItem;\n if(!tool) { return; }\n var popup = wikibarPopup.create(this);\n if(popup){\n wikibar_createMenu(popup,tool,title,editor);\n if(!popup.hasChildNodes()){\n wikibarPopup.remove();\n }else{\n wikibarPopup.show(popup, false);\n }\n }\n return(false);\n}\nvar wikibarColorTool = {\n defaultPaletteName : 'default',\n defaultColumns : 16,\n defaultPalette : [\n '#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',\n '#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',\n '#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',\n '#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',\n '#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',\n '#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',\n '#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',\n '#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',\n '#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',\n '#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',\n '#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',\n '#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',\n '#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',\n '#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'\n ],\n colorPicker : null,\n pickColorHandler: null,\n userData: null\n};\nwikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;\nwikibarColorTool.columns = wikibarColorTool.defaultColumns;\nwikibarColorTool.palette = wikibarColorTool.defaultPalette;\nwikibarColorTool.onPickColor = function(e){\n if (!e){ e = window.event; }\n var theCell = resolveTarget(e);\n if(!theCell){ return(false); }\n color = theCell.bgColor.toLowerCase();\n if(!color) { return; }\n wikibarColorTool.displayColorPicker(false);\n if(wikibarColorTool.pickColorHandler){\n wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);\n }\n return(false);\n};\nwikibarColorTool.onMouseOver = function(e){\n if (!e){ e = window.event; }\n var theButton = resolveTarget(e);\n if(!theButton){ return(false); }\n if(!wikibarColorTool) { return; }\n color = theButton.bgColor.toUpperCase();\n if(!color) { return; }\n td=document.getElementById('colorPickerInfo');\n if(!td) { return; }\n td.bgColor = color;\n td.innerHTML = '<span style=\s"color:#000;\s">'+color+'</span>&nbsp;&nbsp;&nbsp;' +\n '<span style=\s"color:#fff;\s">'+color+'</span>';\n e.cancelBubble = true;\n if (e.stopPropagation){ e.stopPropagation(); }\n return(false);\n};\nwikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){\n wikibarColorTool.skipClickDocumentEvent = true;\n wikibarColorTool.pickColorHandler = pickColorHandler;\n wikibarColorTool.userData = userData;\n wikibarColorTool.moveColorPicker(theTarget);\n};\nwikibarColorTool.convert3to6HexColor = function(c){\n c=c.trim();\n var rx=/^\s#(\sd|[a-f])(\sd|[a-f])(\sd|[a-f])$/gi;\n return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);\n};\nwikibarColorTool.numToHexColor = function (n){\n if(typeof(n)=='number' && (n>=0 && n<=255)) {\n s = n.toString(16).toLowerCase();\n return ((s.length==1)? '0'+s : s);\n }else{\n return null;\n }\n};\nwikibarColorTool.renderColorPalette = function(){\n if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){\n wikibarColorTool.palette=wikibarColorTool.defaultPalette;\n wikibarColorTool.columns=wikibarColorTool.defaultColumns;\n return;\n }\n tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();\n if(tiddlerText.length<=0) { return; }\n var cpContents = tiddlerText.split('\sn');\n var colors=[];\n columns = wikibarColorTool.defaultColumns;\n var tmpArray=null;\n errCount=0;\n for(var i=0; i<cpContents.length; i++){\n cpLine=cpContents[i].trim();\n if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }\n if(cpLine.substring(0,8).toLowerCase()=='columns:'){\n tmpArray = cpLine.split(':');\n try{\n columns = parseInt(tmpArray[1],10);\n }catch(ex){\n columns = wikibarColorTool.defaultColumns;\n }\n }else{\n tmpArray = cpLine.replace('\st', ' ').split(/[ ]{1,}/);\n try{\n color='';\n for(var j=0; j<3; j++){\n c=parseInt(tmpArray[j].trim(), 10);\n if(isNaN(c)){\n break;\n }else{\n c=wikibarColorTool.numToHexColor(c);\n if(!c) {break;}\n color+=c;\n }\n }\n if(color.length==6){\n colors.push('#'+color);\n } else {\n throw 'error';\n }\n }catch(ex){\n }\n }\n }\n if(colors.length>0){\n wikibarColorTool.palette = colors;\n wikibarColorTool.columns = columns;\n }else{\n throw 'renderColorPalette(): No color defined in the palette.';\n }\n};\nwikibarColorTool.displayColorPicker = function(visible){\n if(wikibarColorTool.colorPicker){\n wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');\n }\n};\nwikibarColorTool.moveColorPicker = function(theTarget){\n if(!wikibarColorTool.colorPicker){\n wikibarColorTool.createColorPicker();\n }\n var cp = wikibarColorTool.colorPicker;\n var rootLeft = findPosX(theTarget);\n var rootTop = findPosY(theTarget);\n var popupLeft = rootLeft;\n var popupTop = rootTop;\n var popupWidth = cp.offsetWidth;\n var winWidth = findWindowWidth();\n if(popupLeft + popupWidth > winWidth){\n popupLeft = winWidth - popupWidth;\n }\n cp.style.left = popupLeft + 'px';\n cp.style.top = popupTop + 'px';\n wikibarColorTool.displayColorPicker(true);\n};\nwikibarColorTool.createColorPicker = function(unused, palette){\n if(palette){ wikibarColorTool.paletteName=palette; }\n wikibarColorTool.renderColorPalette();\n wikibarColorTool.colorPicker = document.createElement('div');\n wikibarColorTool.colorPicker.id = 'colorPicker';\n document.body.appendChild(wikibarColorTool.colorPicker);\n var theTable = document.createElement('table');\n wikibarColorTool.colorPicker.appendChild(theTable);\n var theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n var theTD = document.createElement('td');\n theTD.className = 'header';\n theTD.colSpan = wikibarColorTool.columns;\n theTD.innerHTML = wikibarColorTool.paletteName;\n theTR.appendChild(theTD);\n for(var i=0; i<wikibarColorTool.palette.length; i++){\n if((i%wikibarColorTool.columns)===0){\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n }\n theTD = document.createElement('td');\n theTD.className = 'cell';\n theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);\n theTD.onclick = wikibarColorTool.onPickColor;\n theTD.onmouseover = wikibarColorTool.onMouseOver;\n theTR.appendChild(theTD);\n }\n rest = wikibarColorTool.palette.length % wikibarColorTool.columns;\n if(rest>0){\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns-rest;\n theTD.bgColor = '#000000';\n theTR.appendChild(theTD);\n }\n theTR = document.createElement('tr');\n theTable.appendChild(theTR);\n theTD = document.createElement('td');\n theTD.colSpan = wikibarColorTool.columns;\n theTD.id = 'colorPickerInfo';\n theTR.appendChild(theTD);\n};\nwikibarColorTool.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarColorTool.skipClickDocumentEvent) {\n wikibarColorTool.skipClickDocumentEvent = false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarColorTool.displayColorPicker(false);\n }\n return true;\n};\nfunction wikibar_doSelectPalette(param){\n clearMessage();\n var theButton = param.button;\n if(!theButton.toolItem.key) { return; }\n var palette = theButton.toolItem.key;\n var oldPaletteName = wikibarColorTool.paletteName;\n if(oldPaletteName != palette){\n try{\n wikibarColorTool.createColorPicker(theButton, palette);\n displayMessage('Palette \s"'+palette+'\s" ('+ wikibarColorTool.palette.length +' colors) is selected');\n }catch(ex){\n errMsg = ex;\n if(errMsg.substring(0,18)=='renderColorPalette'){\n displayMessage('Invalid palette \s"' + palette + '\s", please check it out!');\n wikibarColorTool.createColorPicker(theButton, oldPaletteName);\n }\n }\n }\n}\nvar wikibarPopup = {\n skipClickDocumentEvent: false,\n stack: []\n};\nwikibarPopup.resolveRootPopup = function(o){\n if(o.isOnMainMenu){ return null; }\n if(o.className.substring(0,12)=='wikibarPopup'){ return o;}\n return wikibarPopup.resolveRootPopup(o.parentNode);\n};\nwikibarPopup.create = function(root){\n for(var i=0; i<wikibarPopup.stack.length; i++){\n var p=wikibarPopup.stack[i];\n if(p.root==root){\n wikibarPopup.removeFrom(i+1);\n return null;\n }\n }\n var rootPopup = wikibarPopup.resolveRootPopup(root);\n if(!rootPopup){\n wikibarPopup.remove();\n }else{\n wikibarPopup.removeFromRootPopup(rootPopup);\n }\n var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');\n var pop = createTiddlyElement(popup,'table','','');\n wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});\n return pop;\n};\nwikibarPopup.show = function(unused,slowly){\n var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];\n var overlayWidth = 1;\n var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;\n if(curr.rootPopup){\n rootLeft = findPosX(curr.rootPopup);\n rootTop = findPosY(curr.root);\n rootWidth = curr.rootPopup.offsetWidth;\n popupLeft = rootLeft + rootWidth - overlayWidth;\n popupTop = rootTop;\n }else{\n rootLeft = findPosX(curr.root);\n rootTop = findPosY(curr.root);\n rootHeight = curr.root.offsetHeight;\n popupLeft = rootLeft;\n popupTop = rootTop + rootHeight;\n }\n var winWidth = findWindowWidth();\n popupWidth = curr.popup.offsetWidth;\n if(popupLeft + popupWidth > winWidth){\n popupLeft = rootLeft - popupWidth + overlayWidth;\n }\n curr.popup.style.left = popupLeft + 'px';\n curr.popup.style.top = popupTop + 'px';\n curr.popup.style.display = 'block';\n addClass(curr.root, 'highlight');\n if(config.options.chkAnimate){\n anim.startAnimating(new Scroller(curr.popup,slowly));\n }else{\n window.scrollTo(0,ensureVisible(curr.popup));\n }\n};\nwikibarPopup.remove = function(){\n if(wikibarPopup.stack.length > 0){\n wikibarPopup.removeFrom(0);\n }\n};\nwikibarPopup.removeFrom = function(from){\n for(var t=wikibarPopup.stack.length-1; t>=from; t--){\n var p = wikibarPopup.stack[t];\n removeClass(p.root,'highlight');\n p.popup.parentNode.removeChild(p.popup);\n }\n wikibarPopup.stack = wikibarPopup.stack.slice(0,from);\n};\nwikibarPopup.removeFromRootPopup = function(from){\n for(var t=0; t<wikibarPopup.stack.length; t++){\n var p = wikibarPopup.stack[t];\n if(p.rootPopup==from){\n wikibarPopup.removeFrom(t);\n break;\n }\n }\n};\nwikibarPopup.onDocumentClick = function(e){\n if (!e){ e = window.event; }\n if(wikibarPopup.skipClickDocumentEvent){\n wikibarPopup.skipClickDocumentEvent=false;\n return true;\n }\n if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){\n wikibarPopup.remove();\n }\n return true;\n};\nvar wikibarStore = {\n TYPE: 'MAIN_MENU',\n help:{\n TYPE:'MENU',\n CAPTION: '<font face=\s"verdana\s">?</font>',\n TOOLTIP: 'about WikiBar',\n options:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarOptions\n },\n about:{\n TYPE:'MENU',\n DYNAITEM: wikibar_genWikibarAbout\n }\n },\n preview:{\n TOOLTIP: 'preview this tiddler',\n CAPTION: '<font face=\s"verdana\s">&infin;</font>',\n HANDLER: wikibar_doPreview\n },\n line:{\n TOOLTIP: 'horizontal line',\n CAPTION: '<font face=\s"verdana\s">&mdash;</font>',\n syntax: '\sn----\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n crlf:{\n TOOLTIP: 'new line',\n CAPTION: '<font face=\s"verdana\s">&para;</font>',\n syntax: '\sn',\n HANDLER: wikibar_editFormatByCursor\n },\n selectAll:{\n TOOLTIP: 'select all',\n CAPTION: '<font face=\s"verdana\s">&sect;</font>',\n HANDLER: wikibar_editSelectAll\n },\n deleteSelected:{\n TOOLTIP: 'delete selected',\n CAPTION: '<font face=\s"verdana\s">&times;</font>',\n syntax: '',\n HANDLER: wikibar_editFormat\n },\n textFormat:{\n TYPE: 'MENU',\n CAPTION: 'text',\n TOOLTIP: 'text formatters',\n ignore:{\n TOOLTIP: 'ignore wiki word',\n CAPTION: 'ignore wikiWord',\n syntax: '~user_text',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n bolder:{\n TOOLTIP: 'bolder text',\n CAPTION: '<strong>bolder</strong>',\n syntax: "''user_text''",\n hint: 'bold_text',\n HANDLER: wikibar_editFormatByWord\n },\n italic:{\n TOOLTIP: 'italic text',\n CAPTION: '<em>italic</em>',\n syntax: '\s/\s/user_text\s/\s/',\n hint: 'italic_text',\n HANDLER: wikibar_editFormatByWord\n },\n underline:{\n TOOLTIP: 'underline text',\n CAPTION: '<u>underline</u>',\n syntax: '__user_text__',\n hint: 'underline_text',\n HANDLER: wikibar_editFormatByWord\n },\n strikethrough:{\n TOOLTIP: 'strikethrough text',\n CAPTION: '<strike>strikethrough</strike>',\n syntax: '==user_text==',\n hint: 'strikethrough_text',\n HANDLER: wikibar_editFormatByWord\n },\n superscript:{\n TOOLTIP: 'superscript text',\n CAPTION: 'X<sup>superscript</sup>',\n syntax: '^^user_text^^',\n hint: 'superscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n subscript:{\n TOOLTIP: 'subscript text',\n CAPTION: 'X<sub>subscript</sub>',\n syntax: '~~user_text~~',\n hint: 'subscript_text',\n HANDLER: wikibar_editFormatByWord\n },\n comment:{\n TOOLTIP: 'comment text',\n CAPTION: 'comment text',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByWord\n },\n monospaced:{\n TOOLTIP: 'monospaced text',\n CAPTION: '<code>monospaced</code>',\n syntax: '{{{user_text}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByWord\n }\n },\n paragraph:{\n TYPE: 'MENU',\n TOOLTIP: 'paragarph formatters',\n list:{\n TYPE: 'MENU',\n TOOLTIP: 'list tools',\n bullet:{\n TOOLTIP: 'bullet point',\n syntax: '*user_text',\n hint: 'bullet_text',\n HANDLER: wikibar_editFormatByLine\n },\n numbered:{\n TOOLTIP: 'numbered list',\n syntax: '#user_text',\n hint: 'numbered_text',\n HANDLER: wikibar_editFormatByLine\n }\n },\n heading:{\n TYPE: 'MENU',\n heading1:{\n CAPTION:'<h1>Heading 1</h1>',\n TOOLTIP: 'Heading 1',\n syntax: '!user_text',\n hint: 'heading_1',\n HANDLER: wikibar_editFormatByLine\n },\n heading2:{\n CAPTION:'<h2>Heading 2<h2>',\n TOOLTIP: 'Heading 2',\n syntax: '!!user_text',\n hint: 'heading_2',\n HANDLER: wikibar_editFormatByLine\n },\n heading3:{\n CAPTION:'<h3>Heading 3</h3>',\n TOOLTIP: 'Heading 3',\n syntax: '!!!user_text',\n hint: 'heading_3',\n HANDLER: wikibar_editFormatByLine\n },\n heading4:{\n CAPTION:'<h4>Heading 4</h4>',\n TOOLTIP: 'Heading 4',\n syntax: '!!!!user_text',\n hint: 'heading_4',\n HANDLER: wikibar_editFormatByLine\n },\n heading5:{\n CAPTION:'<h5>Heading 5</h5>',\n TOOLTIP: 'Heading 5',\n syntax: '!!!!!user_text',\n hint: 'heading_5',\n HANDLER: wikibar_editFormatByLine\n }\n },\n comment:{\n TYPE: 'MENU',\n commentByLine:{\n CAPTION:'comment by line',\n TOOLTIP: 'line comment',\n syntax: '/%user_text%/',\n hint: 'comment_text',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION:'comment by block',\n TOOLTIP: 'block comment',\n syntax: '/%\snuser_text\sn%/',\n hint: 'comment_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n monospaced:{\n TYPE: 'MENU',\n monosByLine:{\n CAPTION: 'monospaced by line',\n TOOLTIP: 'line monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n HANDLER: wikibar_editFormatByLine\n },\n monosByBlock:{\n CAPTION: 'monospaced by block',\n TOOLTIP: 'block monospaced',\n syntax: '{{{\snuser_text\sn}}}',\n hint: 'monospaced_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n quote:{\n TYPE: 'MENU',\n quoteByLine:{\n CAPTION: 'quote by line',\n TOOLTIP: 'line quote',\n syntax: '>user_text',\n hint: 'quote_text',\n HANDLER: wikibar_editFormatByLine\n },\n quoteByBlcok:{\n CAPTION: 'quote by block',\n TOOLTIP: 'block quote',\n syntax: '<<<\snuser_text\sn<<<',\n hint: 'quote_text',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n plugin:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for plugin',\n syntax: '\sn\s/\s/{{{\snuser_text\sn\s/\s/}}}\sn',\n hint: 'monospaced_plugin_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '\s/\s/user_text',\n hint: 'plugin_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '\s/\s***\snuser_text\sn***\s/',\n hint: 'plugin_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n },\n css:{\n TYPE: 'MENU',\n code:{\n CAPTION: 'code area',\n TOOLTIP: 'block monospaced for css',\n syntax: '\sn\snuser_text\sn\sn',\n hint: 'monospaced_css_code',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n },\n commentByLine:{\n CAPTION: 'comment by line',\n TOOLTIP: 'line comment',\n syntax: '',\n hint: 'css_comment',\n HANDLER: wikibar_editFormatByLine\n },\n commentByBlock:{\n CAPTION: 'comment by block',\n TOOLTIP: 'block comment',\n syntax: '',\n hint: 'css_comment',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n color:{\n TYPE: 'MENU',\n TOOLTIP: 'color tools',\n highlight:{\n CAPTION:'highlight text',\n TOOLTIP: 'highlight text',\n syntax: '@@user_text@@',\n hint: 'highlight_text',\n HANDLER: wikibar_editFormatByWord\n },\n color:{\n CAPTION:'text color',\n TOOLTIP: 'text color',\n hint: 'your_text',\n syntax: '@@color(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n bgcolor:{\n CAPTION:'background color',\n TOOLTIP: 'background color',\n hint: 'your_text',\n syntax: '@@bgcolor(%1):user_text@@',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByWord\n },\n colorcode:{\n CAPTION:'color code',\n TOOLTIP: 'insert color code',\n syntax: '%1',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByCursor\n },\n 'color palette':{\n TYPE:'MENU',\n DYNAITEM: wikibar_genPaletteSelector,\n SEPERATOR:{},\n morePalette:{\n CAPTION:'more palettes',\n TOOLTIP:'get more palettes',\n HANDLER: wikibar_getMorePalette\n }\n }\n },\n link:{\n TYPE: 'MENU',\n TOOLTIP: 'insert link',\n wiki:{\n CAPTION:'wiki link',\n TOOLTIP: 'wiki link',\n syntax: '[[user_text]]',\n hint: 'wiki_word',\n HANDLER: wikibar_editFormatByWord\n },\n pretty:{\n CAPTION: 'pretty link',\n TOOLTIP: 'pretty link',\n syntax: '[[user_text|%1]]',\n hint: 'pretty_word',\n param: 'PrettyLink Target',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n url:{\n TOOLTIP: 'url link',\n syntax: '[[user_text|%1]]',\n hint: 'your_text',\n param: 'http:\s/\s/...',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n },\n image:{\n TOOLTIP: 'image link',\n syntax: '[img[user_text|%1]]',\n hint: 'alt_text',\n param: 'image/icon.jpg',\n HANDLER: wikibar_getLinkUrl,\n doMore: wikibar_editFormatByWord\n }\n },\n macro:{},\n more:{\n TYPE: 'MENU',\n TOOLTIP: 'more tools',\n table:{\n TYPE: 'MENU',\n TOOLTIP: 'table',\n table:{\n CAPTION:'create table',\n TOOLTIP: 'create a new table',\n syntax: '\sn%1\sn',\n HANDLER: wikibar_getTableRowCol,\n doMore: wikibar_editFormatByWord\n },\n header:{\n TOOLTIP: 'table header text',\n syntax: '|user_text|c',\n hint: 'table_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TOOLTIP: 'create a tabel cell',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByWord\n },\n columnHeader:{\n CAPTION:'column header',\n TOOLTIP: 'create a column header cell',\n syntax: '|!user_text|',\n hint: 'column_header',\n HANDLER: wikibar_editFormatByWord\n },\n cell:{\n TYPE: 'MENU',\n CAPTION: 'cell options',\n bgcolor:{\n CAPTION: 'background color',\n TOOLTIP: 'cell bgcolor',\n syntax: '|bgcolor(%1):user_text|',\n hint: 'your_text',\n HANDLER: wikibar_getColorCode,\n doMore: wikibar_editFormatByTableCell\n },\n alignLeft:{\n CAPTION: 'align left',\n TOOLTIP: 'left align cell text',\n syntax: '|user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignCenter:{\n CAPTION: 'align center',\n TOOLTIP: 'center align cell text',\n syntax: '| user_text |',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n },\n alignRight:{\n CAPTION: 'align right',\n TOOLTIP: 'right align cell text',\n syntax: '| user_text|',\n hint: 'your_text',\n HANDLER: wikibar_editFormatByTableCell\n }\n }\n },\n html:{\n TYPE: 'MENU',\n html:{\n CAPTION: '&lt;html&gt;',\n TOOLTIP: 'html tag',\n syntax: '<html>\snuser_text\sn</html>',\n hint: 'html_content',\n byBlock: true,\n HANDLER: wikibar_editFormatByLine\n }\n }\n },\n addon:{\n TYPE: 'MENU',\n TOOLTIP:'3rd party tools',\n 'about addons':{\n TOOLTIP: 'list loaded addons',\n HANDLER: wikibar_doListAddons\n },\n SEPERATOR:{}\n }\n};\naddEvent(document, 'click', wikibarColorTool.onDocumentClick);\naddEvent(document, 'click', wikibarPopup.onDocumentClick);\nwikibar_install();\n//}}}
WikiStick是由胡旻维护的个人wiki系统。它采用TiddlyWiki构建,不需要服务器端的逻辑支持就可以实现部分高级功能。
// // Excludes any tiddlers from timeline that have been tagged with ''excludeTimeline''\n/*{{{*/\nconfig.macros.timeline.handler = function(place,macroName,params)\n{\n var field = params[0] ? params[0] : "modified";\n var tiddlers = store.reverseLookup("tags","excludeTimeline",false,field);\n var lastDay = "";\n var last = params[1] ? tiddlers.length-Math.min(tiddlers.length,parseInt(params[1])) : 0;\n for(var t=tiddlers.length-1; t>=last; t--)\n {\n var tiddler = tiddlers[t];\n var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);\n if(theDay != lastDay)\n {\n var theDateList = document.createElement("ul");\n place.appendChild(theDateList);\n createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));\n lastDay = theDay;\n }\n var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink");\n theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));\n }\n}\n/*}}}*/\n
/***\n|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|\n|''Version:''|1.0.6 (2006-11-07)|\n|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license]]|\n|''TiddlyWiki:''|2.0|\n|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|\n!Table of Content<html><a name="TOC"/></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>\n** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>\n* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>\n!Description<html><a name="Description"/></html>\nWith the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. \nEach part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts, use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.\n\n''Syntax:'' \n|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|\n|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//.|\n|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|\n|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Applications<html><a name="Applications"/></html>\n!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>\nAssume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.\n\nNotice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Citation Index<html><a name="Citation"/></html>\nCreate a tiddler "Citations" that contains your "citations". \nWrap every citation with a part and a proper name. \n\n''Example''\n{{{\n<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// \nin //Proc. ICSM//, 1998.</part>\n\n<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// \nThesis, Uni Stuttgart, 2002.</part>\n\n<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// \nin //Proc. ICSM//, 1999.</part>\n}}}\n\nYou may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>\nYou may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list\n{{{\n* Item 1\n* Item 2\n* Item 3\n}}}\ninto a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.\n\nUsing the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.\n\n''Example''\n{{{\n|!Subject|!Items|\n|subject1|<<tiddler ./Cell1>>|\n|subject2|<<tiddler ./Cell2>>|\n\n<part Cell1 hidden>\n* Item 1\n* Item 2\n* Item 3\n</part>\n...\n}}}\n\nNotice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".\n\nBTW: The same approach can be used to create bullet lists with items that contain more than one line.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Creating Tabs<html><a name="Tabs"/></html>\nThe build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.\n\nWith the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.\n\n''Example''\nThe standard tabs at the sidebar are defined by the following eight tiddlers:\n* SideBarTabs\n* TabAll\n* TabMore\n* TabMoreMissing\n* TabMoreOrphans\n* TabMoreShadowed\n* TabTags\n* TabTimeline\n\nInstead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:\n{{{\n<<tabs txtMainTab \n Timeline Timeline SideBarTabs/Timeline \n All 'All tiddlers' SideBarTabs/All \n Tags 'All tags' SideBarTabs/Tags \n More 'More lists' SideBarTabs/More>>\n<part Timeline hidden><<timeline>></part>\n<part All hidden><<list all>></part>\n<part Tags hidden><<allTags>></part>\n<part More hidden><<tabs txtMoreTab \n Missing 'Missing tiddlers' SideBarTabs/Missing \n Orphans 'Orphaned tiddlers' SideBarTabs/Orphans \n Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>\n<part Missing hidden><<list missing>></part>\n<part Orphans hidden><<list orphans>></part>\n<part Shadowed hidden><<list shadowed>></part>\n}}}\n\nNotice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.\n\nE.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:\n{{{\n<<forEachTiddler \n sortBy 'tiddler.modified' descending \n write '(index < 100) ? "* [["+tiddler.title+"]]\sn":""'>>\n}}}\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!!Using Sliders<html><a name="Sliders"/></html>\nVery similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature\n\n''Example''\nIn a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.\n{{{\n...\n<<slider chkAboutDetails About/Details details "Click here to see more details">>\n<part Details hidden>\nTo give you a better overview ...\n</part>\n...\n}}}\n\nNotice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.\n\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Revision history<html><a name="Revisions"/></html>\n* v1.0.6 (2006-11-07)\n** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.\n* v1.0.5 (2006-03-02)\n** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.\n* v1.0.4 (2006-02-28)\n** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.\n* v1.0.3 (2006-02-26)\n** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.\n* v1.0.2 (2006-02-05)\n** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)\n* v1.0.1 (2006-01-27)\n** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.\n** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.\n* v1.0.0 (2006-01-25)\n** initial version\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Code<html><a name="Code"/></html>\n<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n//{{{\n//============================================================================\n// PartTiddlerPlugin\n\n// Ensure that the PartTiddler Plugin is only installed once.\n//\nif (!version.extensions.PartTiddlerPlugin) {\n\n\n\nversion.extensions.PartTiddlerPlugin = {\n major: 1, minor: 0, revision: 6,\n date: new Date(2006, 10, 7), \n type: 'plugin',\n source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"\n};\n\nif (!window.abego) window.abego = {};\nif (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");\n\n//============================================================================\n// Common Helpers\n\n// Looks for the next newline, starting at the index-th char of text. \n//\n// If there are only whitespaces between index and the newline \n// the index behind the newline is returned, \n// otherwise (or when no newline is found) index is returned.\n//\nvar skipEmptyEndOfLine = function(text, index) {\n var re = /(\sn|[^\ss])/g;\n re.lastIndex = index;\n var result = re.exec(text);\n return (result && text.charAt(result.index) == '\sn') \n ? result.index+1\n : index;\n}\n\n\n//============================================================================\n// Constants\n\nvar partEndOrStartTagRE = /(<\s/part>)|(<part(?:\ss+)((?:[^>])+)>)/mg;\nvar partEndTagREString = "<\s\s/part>";\nvar partEndTagString = "</part>";\n\n//============================================================================\n// Plugin Specific Helpers\n\n// Parse the parameters inside a <part ...> tag and return the result.\n//\n// @return [may be null] {partName: ..., isHidden: ...}\n//\nvar parseStartTagParams = function(paramText) {\n var params = paramText.readMacroParams();\n if (params.length == 0 || params[0].length == 0) return null;\n \n var name = params[0];\n var paramsIndex = 1;\n var hidden = false;\n if (paramsIndex < params.length) {\n hidden = params[paramsIndex] == "hidden";\n paramsIndex++;\n }\n \n return {\n partName: name, \n isHidden: hidden\n };\n}\n\n// Returns the match to the next (end or start) part tag in the text, \n// starting the search at startIndex.\n// \n// When no such tag is found null is returned, otherwise a "Match" is returned:\n// [0]: full match\n// [1]: matched "end" tag (or null when no end tag match)\n// [2]: matched "start" tag (or null when no start tag match)\n// [3]: content of start tag (or null if no start tag match)\n//\nvar findNextPartEndOrStartTagMatch = function(text, startIndex) {\n var re = new RegExp(partEndOrStartTagRE);\n re.lastIndex = startIndex;\n var match = re.exec(text);\n return match;\n}\n\n//============================================================================\n// Formatter\n\n// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.\n//\n// @return true if a complete part section (including the end tag) could be processed, false otherwise.\n//\nvar handlePartSection = function(w) {\n var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);\n if (!tagMatch) return false;\n if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;\n\n // Parse the start tag parameters\n var arguments = parseStartTagParams(tagMatch[3]);\n if (!arguments) return false;\n \n // Continue processing\n var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);\n var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);\n if (endMatch && endMatch[1]) {\n if (!arguments.isHidden) {\n w.nextMatch = startTagEndIndex;\n w.subWikify(w.output,partEndTagREString);\n }\n w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);\n \n return true;\n }\n return false;\n}\n\nconfig.formatters.push( {\n name: "part",\n match: "<part\s\ss+[^>]+>",\n \n handler: function(w) {\n if (!handlePartSection(w)) {\n w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);\n }\n }\n} )\n\n//============================================================================\n// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers \n// as tiddlers.\n\nvar currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)\n\n// Return the match to the first <part ...> tag of the text that has the\n// requrest partName.\n//\n// @return [may be null]\n//\nvar findPartStartTagByName = function(text, partName) {\n var i = 0;\n \n while (true) {\n var tagMatch = findNextPartEndOrStartTagMatch(text, i);\n if (!tagMatch) return null;\n\n if (tagMatch[2]) {\n // Is start tag\n \n // Check the name\n var arguments = parseStartTagParams(tagMatch[3]);\n if (arguments && arguments.partName == partName) {\n return tagMatch;\n }\n }\n i += tagMatch[0].length;\n }\n}\n\n// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler \n// object, using fullName as the Tiddler's title. \n//\n// All remaining properties of the new Tiddler (tags etc.) are inherited from \n// the parentTiddler.\n// \n// @return [may be null]\n//\nvar getPart = function(parentTiddler, partName, fullName) {\n var text = parentTiddler.text;\n var startTag = findPartStartTagByName(text, partName);\n if (!startTag) return null;\n \n var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);\n var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);\n\n if (indexOfEndTag >= 0) {\n var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);\n var partTiddler = new Tiddler();\n partTiddler.set(\n fullName,\n partTiddlerText,\n parentTiddler.modifier,\n parentTiddler.modified,\n parentTiddler.tags,\n parentTiddler.created);\n partTiddler.abegoIsPartTiddler = true;\n return partTiddler;\n }\n \n return null;\n}\n\n// Hijack the store.fetchTiddler to recognize the "part" addresses.\n//\n\nvar oldFetchTiddler = store.fetchTiddler ;\nstore.fetchTiddler = function(title) {\n var result = oldFetchTiddler.apply(this, arguments);\n if (!result && title) {\n var i = title.lastIndexOf('/');\n if (i > 0) {\n var parentName = title.substring(0, i);\n var partName = title.substring(i+1);\n var parent = (parentName == ".") \n ? currentParent \n : oldFetchTiddler.apply(this, [parentName]);\n if (parent) {\n return getPart(parent, partName, parent.title+"/"+partName);\n }\n }\n }\n return result; \n};\n\n\n// The user must not edit a readOnly/partTiddler\n//\n\nconfig.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;\n\nTiddler.prototype.isReadOnly = function() {\n // Tiddler.isReadOnly was introduced with TW 2.0.6.\n // For older version we explicitly check the global readOnly flag\n if (config.commands.editTiddler.oldIsReadOnlyFunction) {\n if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;\n } else {\n if (readOnly) return true;\n }\n\n return this.abegoIsPartTiddler;\n}\n\nconfig.commands.editTiddler.handler = function(event,src,title)\n{\n var t = store.getTiddler(title);\n // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)\n // or the tiddler is not readOnly\n if(!t || !t.abegoIsPartTiddler)\n {\n clearMessage();\n story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(title,"text");\n return false;\n }\n}\n\n// To allow the "./partName" syntax in macros we need to hijack \n// the invokeMacro to define the "currentParent" while it is running.\n// \nvar oldInvokeMacro = window.invokeMacro;\nfunction myInvokeMacro(place,macro,params,wikifier,tiddler) {\n var oldCurrentParent = currentParent;\n if (tiddler) currentParent = tiddler;\n try {\n oldInvokeMacro.apply(this, arguments);\n } finally {\n currentParent = oldCurrentParent;\n }\n}\nwindow.invokeMacro = myInvokeMacro;\n\n// Scroll the anchor anchorName in the viewer of the given tiddler visible.\n// When no tiddler is defined use the tiddler of the target given event is used.\nwindow.scrollAnchorVisible = function(anchorName, tiddler, evt) {\n var tiddlerElem = null;\n if (tiddler) {\n tiddlerElem = document.getElementById(story.idPrefix + tiddler);\n }\n if (!tiddlerElem && evt) {\n var target = resolveTarget(evt);\n tiddlerElem = story.findContainingTiddler(target);\n }\n if (!tiddlerElem) return;\n\n var children = tiddlerElem.getElementsByTagName("a");\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var name = child.getAttribute("name");\n if (name == anchorName) {\n var y = findPos