\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 = findPosY(child);\n window.scrollTo(0,y);\n return;\n }\n }\n}\n\n} // of "install only once"\n//}}}\n\n/***\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of abego Software nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>\n***/\n
/***\n| Name:|StickyDate|\n| Created by:|Rodrigo Fonseca|\n| Location:|http://paularodrigo.homeip.net/stickydate.html|\n| Version:|0.1.0 (01-Aug-2006)|\n| Requires:|~TW2.x|\n!Description\nThis is a simple plugin and a macro that allow you to set an arbitrary and permanent modified date to a Tiddler.\nTo use it, insert the macro\n{{{\n<<sd "Aug 1, 2010 10:12:22">>\n}}}\nanywhere in the text of the Tiddler. If there are more than one occurrences, only the first will be considered. The date can be well in the future (as in the example) or in the past. The plugin actually uses the date in the macro to set as the modified date (that's why it's sticky). This is done when saving the Tiddler. The macro makes sure the content does not appear when rendering, but is still editable. (The plugin will not change the date of some tiddlers, mostly system and configuration ones. See the source code for what is filtered).\n\nWhy would you want that? I wanted to create a page with Tiddlers for helping me plan an upcoming trip. By setting the modified date in the Tiddlers to the date at which I wanted my notes to appear, I got a very cool way of listing all tiddlers for a particular day in my trip: flight info, hotel info, notes on what to do, etc.\n\nI hope you find this useful.\n!Installation\n* Copy the code to a new Tiddler and add the systemConfig tag to it. Save and reload the wiki.\n!Notes\n* The format of the string within the quotes is that of a javascript date string, which is accepted by the Date.parse() method. In other words, use something like "Aug 1, 2006 12:34:12". Don't forget the double quotes.\n!History\n* 01-Aug-06, version 1.0.0\n** intitial release\n!Code\n***/\n//{{{\n/* With code from the InstantTimestamp from http://simonbaird.com/mptw/#InstantTimestamp */\n\nversion.extensions.StickyDatePlugin = {major: 0, minor: 1, revision: 0, date: new Date(2006,8,1), \n source: "http://paularodrigo.homeip.net/stickydate.html"};\n\n/* Create a macro that does nothing with the <<sd "Date">> tag */\nconfig.macros.sd = {};\nconfig.macros.sd.handler = function (place, macroName, params, wikifier, paramString, tiddler) {};\n\nconfig.StickyDate = {\n excludeTags: [\n "noAutoCorrect",\n "CSS",\n "css",\n "systemConfig",\n "zsystemConfig",\n "Plugins",\n "Plugin",\n "plugins",\n "plugin",\n "javascript",\n "code"\n ],\n excludeTiddlers: [\n "StyleSheet",\n "StyleSheetLayout",\n "StyleSheetColors",\n "StyleSheetPrint"\n ]\n}; \n\nif (!Array.prototype.contains)\n Array.prototype.contains = function(item) {\n return (this.find(item) != null);\n };\n\nif (!Array.prototype.containsAny)\n Array.prototype.containsAny = function(items) {\n for (var i=0;i<items.length;i++)\n if (this.contains(items[i]))\n return true;\n return false;\n };\n\nTiddlyWiki.prototype.saveTiddler_sd_saveTiddler = TiddlyWiki.prototype.saveTiddler;\nTiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {\n\n tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;\n var conf = config.StickyDate;\n\n if ( !tags.containsAny(conf.excludeTags) \n && !conf.excludeTiddlers.contains(newTitle) ) {\n\n var regex = /\s<\s<\ss*sd\ss+"([^"]+)"\ss*\s>\s>/;\n var matches = regex.exec(newBody);\n var date;\n if (matches != null && matches.length > 1) {\n //alert('Found '+ matches[1]);\n date = new Date(matches[1]);\n if (date.toLocaleString().indexOf('Invalid') == -1) {\n //We have a valid date. Use this instead of the modified date.\n modified = date;\n }\n }\n }\n\n return this.saveTiddler_sd_saveTiddler(title,newTitle,newBody,modifier,modified,tags);\n}\n\n\n\n//}}}\n
!Sample TagCloud:\n<<tagCloud about>>\n\n!About TagCloud\nThis plugin was created by [[Clint Checketts]] list the current tags in alphabetical order and displays the more popular tags larger.\n\n!How to use TagCloud\nAfter intalling the [[tagCloud plugin]], in any tiddler call the tagCloud macro:\n{{{\n<<tagCloud>>\n}}}\nAny tags listed after the macro name will be excluded from the tag listing:\n{{{\n<<tagCloud systemTiddlers systemConfig>>\n}}}\nThe previous code listing will excluded the systemTiddlers and systemConfig tags from the listing.
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 1, date: new Date(2005,8,16)};\n//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman\n\nconfig.macros.tagCloud = {\n noTags: "No tag cloud created because there are no tags.",\n tooltip: "%1 tiddlers tagged with '%0'"\n};\n\nconfig.macros.tagCloud.handler = function(place,macroName,params) {\n \nvar tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);\n\nvar tags = store.getTags();\nfor (t=0; t<tags.length; t++) {\n for (p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";\n}\n\n if(tags.length == 0) \n createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);\n //Findout the maximum number of tags\n var mostTags = 0;\n for (t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n if (tags[t][1] > mostTags) mostTags = tags[t][1];\n }\n //divide the mostTags into 4 segments for the 4 different tagCloud sizes\n var tagSegment = mostTags / 4;\n\n for (t=0; t<tags.length; t++) if (tags[t][0].length > 0){\n var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);\n tagCloudWrapper.appendChild(document.createTextNode(" "));\n var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));\n theTag.setAttribute("tag",tags[t][0]);\n }\n\n};\n\nsetStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
<<sd "Aug 1, 1910 10:12:22">>\ntest Tiddler
Anymore...
Ubuntu forces drives to be checked once for every 30 times the filesystem is mounted. This means that on an average, once every 30 times you bootup your computer, the filesystem integrity is checked. This is very reasonable for a desktop, which is seldom rebooted. However, for a laptop, this means pain, since you may be planning on making a presentation, and Ubuntu may start a filesystem check just when you hook up your laptop to the projector and bootup! Today we will see how to disable (or force) the checking temporarily, and also how to adjust the period and frequency of the check.\n\nTo disable filesystem integrity check for the next bootup, create a file called /fastboot. So a\n$sudo touch /fastboot\nwill disable filesystem check for the next time you bootup. Since the /fastboot file is removed during bootup, this will disable filesystem check only once - for the one time you bootup after you create the /fastboot file (which need not have anything in it — hence the touch, which only creates the file)\nOn the contrary to force a filesystem check the next time you bootup, create a file called /forcefsck by doing\n$sudo touch /forcefsck\n\nNow, on to the more interesting business of how to change the number of bootups between filesystem checks, and modifying the period with which the filesystem is checked. The following applies to ext2 and ext3 filesystems.\n\ntune2fs is an utility that you can use to change both the number of bootups between filesystem checks, and the number of days/weeks/months between filesystem checks.\n\nFor example to have the filesystem checked once every 60 bootups use\n$sudo tune2fs -c 60\n\nTo have the filesystem check run periodically, say once a week, use\n$sudo tune2fs -i 1w\nchanging the “w” to “d” or “m” will have the check run once daily and once monthly - you get the idea.\n\nAs always, you can read\n$man tune2fs\nfor more detailed information and examples.\n\nSource: [[Ubuntu中文 论坛 :: 阅读主题 - 请问:如何取消硬盘挂载30次强行检查?|http://forum.ubuntu.org.cn/ntopic55820.html&sid=03016ca932a195efcdfaed749d347762]]
wget是一个Linux环境下用于从World Wide Web上提取文件的工具,这是一个GPL许可证下的自由软件,其作者为Hrvoje Niksic <hniksic@srce.hr>。wget支持HTTP和FTP协议,支持代理服务器和断点续传功能,能够自动递归远程主机的目录,找到合乎条件的文件并将其下载到本地硬盘上;如果必要,wget将恰当地转换页面中的超级连接以在本地生成可浏览的镜像。由于没有交互式界面,wget可在后台运行,截获并忽略HANGUP信号,因此在用户推出登录以后,仍可继续运行。通常,wget用于成批量地下载Internet网站上的文件,或制作远程网站的镜像。\n\n!!!!!''语法:''\n>wget [options] [URL-list]\nURL地址格式说明:可以使用如下格式的URL:\nhttp://host[:port]/path\n例如:\nhttp://fly.cc.fer.hr/\nftp://ftp.xemacs.org/pub/xemacs/xemacs-19.14.tar.gz\nftp://username:password@host/dir/file\n在最后一种形式中,以URL编码形式为FTP主机提供了用户名和密码(当然,也可以使\n用参数提供该信息,见后)。\n\n!!!!!''参数说明:''\nwget的参数较多,但大部分应用只需要如下几个常用的参数:\n-r 递归;对于HTTP主机,wget首先下载URL指定的文件,然后(如果该文件是一个HTML文档的话)递归下载该文件所引用(超级连接)的所有文件(递归深度由参数-l指定)。对FTP主机,该参数意味着要下载URL指定的目录中的所有文件,递归方法与HTTP主机类似。\n\n-N 时间戳:该参数指定wget只下载更新的文件,也就是说,与本地目录中的对应文件的长度和最后修改日期一样的文件将不被下载。\n\n-m 镜像:相当于同时使用-r和-N参数。\n\n-l 设置递归级数;默认为5。-l1相当于不递归;-l0为无穷递归;注意,当递归深度增加时,文件数量将呈指数级增长。\n\n-t 设置重试次数。当连接中断(或超时)时,wget将试图重新连接。如果指定-t0,则重试次数设为无穷多。\n\n-c 指定断点续传功能。实际上,wget默认具有断点续传功能,只有当你使用别的ftp工具下载了某一文件的一部分,并希望wget接着完成此工作的时候,才需要指定此参数。\n\n!!!!!''使用举例:''\n>wget -m -l4 -t0 http://oneweb.com.cn/\n将在本地硬盘建立http://oneweb.com.cn/的镜像,镜像文件存入当前目录下一个名为\noneweb.com.cn的子目录中(你也可以使用-nH参数指定不建立该子目录,而直接在当前\n目录下建立镜像的目录结构),递归深度为4,重试次数为无穷(若连接出现问题,\nwget将坚韧不拔地永远重试下去,知道任务完成!)\n\n另外一些使用频率稍低的参数如下:\n-A acclist / -R rejlist:\n这两个参数用于指定wget接受或排除的文件扩展名,多个名称之间用逗号隔开。例如,假设我们不想下载MPEG视频影像文件和.AU声音文件,可使用如下参数:\n-R mpg,mpeg,au\n\n其它参数还有:\n-L 只扩展相对连接,该参数对于抓取指定站点很有用,可以避免向宿主主机的其他目录扩散。例如,某个人网站地址为:http://www.xys.org/~ppfl/,使用如下命令行:\n>wget -L http://www.xys.org/~ppfl/\n则只提取该个人网站,而不涉及主机www.xys.org上的其他目录。\n\n-k 转换连接:HTML文件存盘时,将其中的非相对连接转换成为相对连接。\n\n-X 在下载FTP主机上的文件时,排除若干指定的目录\n\n另外,下面参数用于设置wget的工作界面:\n-v 设置wget输出详细的工作信息。\n-q 设置wget不输出任何信息。\n\n如果我们已经在一个HTML文档(或普通文本文档)中存储了所要提取的文件的连接,可以让wget直接从该文件中提取信息,而不用在命令行中提供URL地址,参数格式为:\n-i filename\n地址文件也可以不是HTML文档,例如,一个普通的文本文件,其中有需要下载的URL列表即可。\n我们可以用以下技巧提高下载速度:由于Linux是一个多任务系统,我们可以同时运行多个wget进程以提高下载速度,例如,先下载某主页文件(index.html),然后将该文件所列出的所有地址分别用一个独立的wget进程进行下载。\n\n至于其他的参数,可参考wget的man手册页,命令为:\nman wget\n\n{{{--}}}{{{--}}}\n\n!!!!!wget使用指南\n\nwget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.\n所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。\nwget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候, wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。\nwget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。\n!!!!!wget的常见用法\n''wget的使用格式''\n''Usage'': @@wget [OPTION]... [URL]...@@\n\n* 用wget做站点镜像:\n\n>wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/\n// 或者\n>wget -m http://www.tldp.org/LDP/abs/html/\n\n* 在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载\n\n>wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &\n// 或者从filelist读入要下载的文件列表\n>wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &\n\n上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。\n\n* 使用代理下载\n\n>wget -Y on -p -k https://sourceforge.net/projects/wvware/\n\n代理可以在环境变量或wgetrc文件中设定\n\n// 在环境变量中设定代理\n>export PROXY=http://211.90.168.94:8080/\n// 在~/.wgetrc中设定代理\n>http_proxy = http://proxy.yoyodyne.com:18023/\n>ftp_proxy = http://proxy.yoyodyne.com:18023/\n\nwget各种选项分类列表\n\n* 启动\n\n-V, {{{--}}}version 显示wget的版本后退出\n-h, {{{--}}}help 打印语法帮助\n-b, {{{--}}}background 启动后转入后台执行\n-e, {{{--}}}execute=COMMAND 执行`.wgetrc'格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc\n\n* 记录和输入文件\n\n-o, {{{--}}}output-file=FILE 把记录写到FILE文件中\n-a, {{{--}}}append-output=FILE 把记录追加到FILE文件中\n-d, {{{--}}}debug 打印调试输出\n-q, {{{--}}}quiet 安静模式(没有输出)\n-v, {{{--}}}verbose 冗长模式(这是缺省设置)\n-nv, {{{--}}}non-verbose 关掉冗长模式,但不是安静模式\n-i, {{{--}}}input-file=FILE 下载在FILE文件中出现的URLs\n-F, {{{--}}}force-html 把输入文件当作HTML格式文件对待\n-B, {{{--}}}base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀\n{{{--}}}sslcertfile=FILE 可选客户端证书\n{{{--}}}sslcertkey=KEYFILE 可选客户端证书的KEYFILE\n{{{--}}}egd-file=FILE 指定EGD socket的文件名\n\n* 下载\n\n{{{--}}}bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)\n-t, {{{--}}}tries=NUMBER 设定最大尝试链接次数(0 表示无限制).\n-O {{{--}}}output-document=FILE 把文档写到FILE文件中\n-nc, {{{--}}}no-clobber 不要覆盖存在的文件或使用.#前缀\n-c, {{{--}}}continue 接着下载没下载完的文件\n{{{--}}}progress=TYPE 设定进程条标记\n-N, {{{--}}}timestamping 不要重新下载文件除非比本地文件新\n-S, {{{--}}}server-response 打印服务器的回应\n{{{--}}}spider 不下载任何东西\n-T, {{{--}}}timeout=SECONDS 设定响应超时的秒数\n-w, {{{--}}}wait=SECONDS 两次尝试之间间隔SECONDS秒\n{{{--}}}waitretry=SECONDS 在重新链接之间等待1...SECONDS秒\n{{{--}}}random-wait 在下载之间等待0...2*WAIT秒\n-Y, {{{--}}}proxy=on/off 打开或关闭代理\n-Q, {{{--}}}quota=NUMBER 设置下载的容量限制\n{{{--}}}limit-rate=RATE 限定下载输率\n\n* 目录\n\n-nd {{{--}}}no-directories 不创建目录\n-x, {{{--}}}force-directories 强制创建目录\n-nH, {{{--}}}no-host-directories 不创建主机目录\n-P, {{{--}}}directory-prefix=PREFIX 将文件保存到目录 PREFIX/...\n{{{--}}}cut-dirs=NUMBER 忽略 NUMBER层远程目录\n\n* HTTP 选项\n\n{{{--}}}http-user=USER 设定HTTP用户名为 USER.\n{{{--}}}http-passwd=PASS 设定http密码为 PASS.\n-C, {{{--}}}cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许).\n-E, {{{--}}}html-extension 将所有text/html文档以.html扩展名保存\n{{{--}}}ignore-length 忽略 `Content-Length'头域\n{{{--}}}header=STRING 在headers中插入字符串 STRING\n{{{--}}}proxy-user=USER 设定代理的用户名为 USER\n{{{--}}}proxy-passwd=PASS 设定代理的密码为 PASS\n{{{--}}}referer=URL 在HTTP请求中包含 `Referer: URL'头\n-s, {{{--}}}save-headers 保存HTTP头到文件\n-U, {{{--}}}user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.\n{{{--}}}no-http-keep-alive 关闭 HTTP活动链接 (永远链接).\n{{{--}}}cookies=off 不使用 cookies.\n{{{--}}}load-cookies=FILE 在开始会话前从文件 FILE中加载cookie\n{{{--}}}save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中\n\n* FTP 选项\n\n-nr, {{{--}}}dont-remove-listing 不移走 `.listing'文件\n-g, {{{--}}}glob=on/off 打开或关闭文件名的 globbing机制\n{{{--}}}passive-ftp 使用被动传输模式 (缺省值).\n{{{--}}}active-ftp 使用主动传输模式\n{{{--}}}retr-symlinks 在递归的时候,将链接指向文件(而不是目录)\n\n* 递归下载\n\n-r, {{{--}}}recursive 递归下载--慎用!\n-l, {{{--}}}level=NUMBER 最大递归深度 (inf 或 0 代表无穷).\n{{{--}}}delete-after 在现在完毕后局部删除文件\n-k, {{{--}}}convert-links 转换非相对链接为相对链接\n-K, {{{--}}}backup-converted 在转换文件X之前,将之备份为 X.orig\n-m, {{{--}}}mirror 等价于 -r -N -l inf -nr.\n-p, {{{--}}}page-requisites 下载显示HTML文件的所有图片\n\n* 递归下载中的包含和不包含(accept/reject)\n\n-A, {{{--}}}accept=LIST 分号分隔的被接受扩展名的列表\n-R, {{{--}}}reject=LIST 分号分隔的不被接受的扩展名的列表\n-D, {{{--}}}domains=LIST 分号分隔的被接受域的列表\n{{{--}}}exclude-domains=LIST 分号分隔的不被接受的域的列表\n{{{--}}}follow-ftp 跟踪HTML文档中的FTP链接\n{{{--}}}follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表\n-G, {{{--}}}ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表\n-H, {{{--}}}span-hosts 当递归时转到外部主机\n-L, {{{--}}}relative 仅仅跟踪相对链接\n-I, {{{--}}}include-directories=LIST 允许目录的列表\n-X, {{{--}}}exclude-directories=LIST 不被包含目录的列表\n-np, {{{--}}}no-parent 不要追溯到父目录\n\n{{{--}}}{{{--}}}\n\n!!!!!参数太多让人眼花缭乱,我来献丑列举几个常见的用法:\n\n>wget www.aaa.com/bbb.zip\n最简单,一目了然。\n\n>wget www.aaa.com/bbb.zip {{{--}}}ref=www.aaa.com/ccc.html\n碰到需要引用相应页面的文件,主要是防止盗链。\n\n> wget -k -np -r www.aaa.com/bbb/\n抓取www.aaa.com网站下bbb目录的文件并将相应链接转换成本地可浏览的链接形式,用于本地镜像一个网站。\n\n上次下载漫画时用的一个脚本,很简陋:\n<<<\n#!/bin/bash\nfor i in `seq -w 100`\ndo\nwget www.aaa.com/bbb"$i".jpg {{{--}}}ref www.aaa.com/ccc.html\ndone \n<<<
Wireless Linux: 在~KUbuntu 7.10下安装 ~TP-Link ~WN510G无线网卡\nUpdate: Nov.3.2006\nAuthor: huminsk\n\n周四下午去徐家汇太平洋数码广场买了块~TP-Link ~WN510G无线网卡,准备到图书馆和教室联接无线网络。\n在~UbuntuChina有人告诉我说这块卡在Ubuntu6.10下即插即用,不用设置,很方便,但我发现事情并非如此。经过一下午的尝试,得到解决方案如下:\n\nStep1:\n仔细阅读 http://ndiswrapper.sourceforge.net/mediawiki/index.php/Main_Page ndiswrapper相关文档\n特别是installation.htm,list.htm和Troubleshooting.htm。\n\nStep2:\n准备好网卡在windows的驱动文件:ar5211.sys,net5211.inf,net5211.cat,注意这三个文件要放到一个目录下,如~/drivers;\n下载ndiswrapper 1.30到硬盘;\n如下解压ndiswrapper-1.30.tar.gz:\ntar -zxvf ndiswrapper-version.tar.gz\n\nStep3:\n进入解压后的主目录ndiswrapper编译和安装:\nmake distclean\nmake DISABLE_USB=1\nsudo make DISABLE_USB=1 install\n\nStep4:\n安装驱动:\nndiswrapper -i net5211.inf\n检查安装结果:\nndiswrapper -l\n今后自动载入:\nndiswrapper -m\n然后去/etc/ndiswrapper下看看是否存在net5211目录,目录下应有一些.conf以及.sys文件;\n\nStep5:\n载入模块:\nsudo depmod -a\nsudo modprobe ndiswrapper\n检查一下:\nlsmod | grep ndiswrapper\n\nStep6:\niwconfig\n怎么? 没有找到wlan0,看下一步。\n\nStep7:\n关键步骤,我就是在这一步耽误了很多时间!\n拔下网卡,重插一次!注意网卡指示灯的变化\n\nStep8:\niwconfig\n现在看到wlan0的信息了。\niwlist wlan0 scan\n去拿ip地址:\ndhclient wlan0\n看看ip信息:\nifconfig\n\n开Firefox,Google,OK了!\n\nStep9:\n还有问题?Google + Ubuntuforum + mailing-list\n\nSource: [[The Magnificent TrEE : Min's Kiosk: Linux|http://huminsk.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&partqs=cat%3dLinux]]
一直以来都狠喜欢Nicolas Cage出演的影片,尽管表情有时候略显呆滞(完全是得益于那一双"迷人睡眼"),但是演技狠到位,毕竟喜欢一个男性演员不能靠脸,有点儿跑题,呵呵...\n  \n  在整理自己认为精彩的台词时,才发现,原来整个影片都是妙语连珠,差点儿越整越多收不住手,呵呵...\n  \n  为了便于理解,一同整理了E文的版本,下面这就上菜了,呵呵...\n  \n  There are over 550 million firearms in worldwide circulation. That's one firearm for every 12 people on the planet. The only question is...how do we arm the other 11?\n  在这世界上一共有伍亿伍千万支军火在流通,那就是说每十二个人就有一支枪,唯一的问题是:我们如何让其他十一个人也有枪?(如何把武器卖给那另外的十一个人)\n  \n  The first time you sell a gun is a lot like the first time you have sex. You have absolutely no idea what you're doing. But it is exciting, and one way or another, it's over way too fast.\n  第一次卖枪的感觉,很大程度上就象第一次做爱一样,你根本不知道自己在干嘛,虽然很刺激,但很快就结束了。\n  \n  Here, I'd been running away from violence my whole life, and I should have been running towards it. It's in our nature. The earliest human skeletons had spearheads in their ribcages.\n  我的一生都想远离暴力,但其实我更该接近它才对,这是人类的天性,人类最早遗骸的胸腔中,就有矛头。\n  \n  -- What, you opening a gun shop?\n  -- Already more of those in America than McDonald's.\n  -- 怎么,你要开个枪店?\n  -- 美国的枪店已经比麦当劳还多了。\n  \n  Sir, sir, may I interest you in the shoulder-fired SA-7 surface-to-air missile? It's the older Chinese model. Not so effective against modern military aircraft, but deadly if used against a commercial airliner.\n  先生,有没兴趣看看肩扛式SA-7地对空导弹,中国造,过时的型号,用在现代军事战机上或许不行,不过打打商业客机,还是挺不错的。\n  \n  Bullets change governments far surer than votes.\n  改朝换代枪杆子要比选票更可靠。\n  \n  I supplied every army but the Salvation Army. I sold Israeli-made Uzis to Muslims. I sold communist-made bullets to fascists. I even shipped cargo to Afghanistan when they were fighting my fellow Soviets. I never sold to Osama bin Laden. Not on any moral grounds. Back then he was always bouncing checks.\n  除了"救世军",我卖武器给任何一支军队,我把以色列造的乌兹冲锋枪卖给回教徒,我把共产主义造的子弹卖给法西斯,我还把军火运到阿富汗,尽管他们在打我的苏联盟军,我从来没卖给过奥萨姆·本·拉登,不是因为道德问题,而是那时他的支票总是跳票。\n  \n  -- I don't think you're going just to sell Pepsi-Cola. Is this how you want to be remembered?\n  -- I don't want to be remembered at all. If I'm being remembered it means I'm dead.\n  -- 我不信你回去只是要卖百事可乐,这是你希望被后人纪念的方式吗?\n  -- 我根本不希望留名青史,如果是那样,就表示我已经死了。\n  \n  Since the end of the Cold War the Kalashnikov has become the Russian people's greatest export. After that comes vodka, caviar and suicidal novelists.\n  自从冷战结束后,卡拉什尼可夫(AK-47)成为了苏联主要的出口货物,接着是伏特加酒,鱼子酱和有自杀倾向的诗人。\n  \n  In the most AIDS infested region of the globe, where one in four is infected, Andre's idea of a joke was to put a young Iman and a young Naomi in my bed and no condom within 100 miles.\n  在全球艾滋病最猖獗的地方,四个人中就有一个人感染,安德烈和我开玩笑的方式,就是把两个漂亮的女人放到我床上,而且在方圆一百英里内找不到保险套。\n  \n  -- Hello, Mr. Yuri.\n  -- Hi.\n  -- We'd be happy to make you happy.\n  -- Uh...I can't. I'd love to, but I can't.\n  -- Don't worry. We don't have anything.\n  -- Oh. How do you know?\n  -- Do we look like it?\n  -- What if I have AlDS? Don't you worry?\n  -- You worry too much.\n  -- Why do you worry about something that can kill you in 10 years when there's so many things that can kill you today?\n  -- 你的快乐就是我们的快乐。\n  -- 噢...我狠想,但是我不能这么做。\n  -- 别担心,我们没有病。\n  -- 哦,妳们怎么知道的呢?\n  -- 我们看起来像有病吗?\n  -- 如果我有艾滋病呢?妳们不担心吗?\n  -- 你担心的太多了。\n  -- 为什么你现在担心一个十年后才会要你命的病,今天就能要你命的事物比比皆是。\n  \n  How many car salesmen talk about their work, huh? How many cigarette salesmen? Both their products kill more people every year than mine. At least mine has a safety switch.\n  卖车的会告诉你开车有危险?卖香烟的会告诉你吸烟会死?每年他们的商品比我的害死更多人,起码我的商品还有个保险栓呢。\n  \n  Do you know why I do what I do? I mean, there are more prestigious assignments. Keeping track of nuclear arsenals. You'd think that more critical to world security, but it's not. No, nine out of 10 war victims today are killed with assault rifles and small arms like yours. Those nuclear missiles, they sit in their silos. Your AK-47, that is the real weapon of mass destruction.\n  知道为什么我追查你到这里?我能选择其它更荣耀的任务,比方追查核武,你认为那对世界和平更重要?不对!今天十个战争受害者中有九人,是死于攻击性来福枪和小型武器,正如你的商品,那些核飞弹?它们还在发射井里待着呢,你的AK-47才是大规模杀伤性武器。\n  \n  Every faction in Africa calls themselves by these noble names Liberation-this, Patriotic-that, Democratic Republic of something-or-other. I guess they can't own up to what they usually are -- Federation of Worse Oppressors Than the Last Bunch of Oppressors. Often, the most barbaric atrocities occur when both combatants proclaim themselves freedom fighters.\n  每一个在非洲的派系,喜欢给自己起一些高尚的名字,解放这个,爱国那个,或者共和或民主什么的,也许他们不知道自己是什么,地球唯一喜欢战争的民族,往往最残忍的暴行都出自声称自己为自由战士的人们。\n  \n  Let me tell you what's gonna happen. This way you can prepare yourself. Okay. Soon there's gonna be a knock on that door and you will be called outside. In the hall there will be a man who outranks you. First, he'll compliment you on the fine job you've done, that you're making the world a safer place, that you're to receive a commendation and a promotion. And then he's going to tell you that I am to be released. You're going to protest. You'll probably threaten to resign. But in the end I will be released. The reason I'll be released is the same reason you think I'll be convicted. I do rub shoulders with some of the most vile, sadistic men calling themselves leaders today. But some of those men are the enemies of your enemies. And while the biggest arms dealer in the world is your boss, the President of the United States, who ships more merchandise in a day than I do in a year... sometimes it's embarrassing to have his fingerprints on the guns. Sometimes he needs a freelancer like me to supply forces he can't be seen supplying. So... you call me evil. But unfortunately for you, I'm a necessary evil.\n  让我来告诉你将会发生什么,这样可以让你有所准备,很快,会有人来敲门,你会被叫到外面去,在过道里,会有一个官阶比你高的人站在那里,首先,他会祝贺你所做的一切,你使世界成为一个和平的地方,你会得到嘉奖或升职,然后他会告诉你,我需要被释放,你会反对,你也许会以辞职来要挟他,但是在最后,我会被释放,我被释放的原因,和你认为我会被判刑的原因是一样的,我和一些世界上称自己为领导人的人打交道,这些人当中有一些人是你的敌人的敌人,世界上最大的军火交易商是你的老板,美国的总统,他一天卖的,比我一年卖的还多,有时,在枪支上找到他的指纹是一件很尴尬的事,有时,他需要像我这样的自由工作者,来支持那些他不方便支持的军队,所以,你称我为恶魔,但不幸的是,对你,我是一个必须要存在的恶魔。\n  \n  You know who's going to inherit the Earth? Arms dealers. Because everyone else is too busy killing each other.\n  你知道谁会坐拥这个世界?是军火商,因为其他人都在忙着自相残杀而最终灭亡。\n  \n  WHILE PRIVATE GUNRUNNERS CONTINUE TO THRIVE. THE WORLD'S BIGGEST ARMS SUPPLIERS ARE THE U.S., U.K., RUSSIA, FRANCE AND CHINA. THEY ARE ALSO THE FIVE PERMANENT MEMBERS OF THE U.N. SECURITY COUNCIL.\n  尽管军火走私愈演愈烈,世界上最大的军火供应商却是美、英、俄、法、中,他们同时也是联合国安理会五个常任理事国。 \n\nSource: [[《战争之王》[Lord of War] 精彩台词 (评论: Lord of War)|http://www.douban.com/review/1023154/]]
作者:胡博\n\n 1986年由广西电影制片厂拍摄的电影《血战台儿庄》是我国第一部反映国民党军队抗日的战争电影。这部影片展现了国民党抗日爱国将士那种英勇不屈、浴血卫国的悲壮场景,谱写了一首由国共合作、同仇敌忾、共御外侮、震憾中外的悲壮乐章。在影片临近结尾时,曾有这样一个镜头——当台儿庄战局陷入危急时,一支急驰的骑兵部队出现了。正是这支骑兵的出现,解除了台儿庄守军的危机,并使得中国军队对当面的日军展开全线反击,对中国军队在台儿庄地区取得的大捷起到了重要作用。\n\n 这支部队是什么来历呢?通过电影的一些片段,我们得知这支部队的番号是“国民革命军第二十军团”,指挥这支部队的将领名叫汤恩伯。可惜在电影《血战台儿庄》中,这支部队的情况没能得到完整的体现,观众对于这支部队的了解仅仅是一些影片前期20军团部分高级将领的对白以及最后那个骑兵奔驰的镜头而已。\n\n 笔者对于这支起到重要作用的部队未能在影片中被交代清楚而感到遗憾,同时也对这支部队在台儿庄战役中的具体动向感到好奇。于是通过各方面资料的搜集,对这支部队在战役中的情况有了一个全面的了解。下面就由笔者试着将这支部队在台儿庄战役中的动向作一交代。\n\n\n!!一、汤恩伯和他的二十军团\n\n 汤恩伯何许人也?看过影片《战上海》的朋友一定对里面的淞沪警备总司令汤云甫印象深刻。这个剧中的反面角色,被导演刻画的有声有色。其中在“军事会议”、“杀韩军长”、“为刘义授勋”等几出戏中的表现,使观众对其印象极为深刻。而这部影片中的“汤云甫”正是本文所要叙述的二十军团的军团长——陆军中将汤恩伯。有趣的是,笔者在寻得汤将军照片时,发现影片《血战台儿庄》和《战上海》里的两位演员与真实生活中的汤恩伯颇为神似,这不得不使笔者佩服挑选演员的演职人员的敬业精神。\n\n 汤恩伯(1899—1954),浙江义乌人。毕业于日本明治大学政经系、士官学校中国队第十八期步兵科。回国后加入国民革命军,担任过参谋、教导连连长、黄埔军校学生大队长、第6军教导总队附、黄埔军校军事教官、教育处副处长、军官教育连副连长、连长、洛阳分校主任。\n\n  1930年5月,军校教导部队和特种兵合编为教导第2师。作为一名全无队职经历的人,汤恩伯竟然被提升为该师第1旅的少将旅长。这虽然是当局对他的一种信任,但是也注定了他生平所参与的第一次战斗以失败告终。此后他又陆续担任过第4师副师长、第2师师长、第4师师长、第89师师长等职。在此期间,他参与了“围剿”红军以及进攻十九路军福建政府的的数次军事行动。1935年4月,他被国民政府叙阶为陆军中将,并于同年9月升任第13军军长。\n\n 抗日战争全面爆发后,他率领所部在怀来、南口至居庸关一线与日军血战十日,杀伤大量日军。战后,他率领13军开赴河北邢台整训,不久升任第20军团军团长。此后他率领20军团转战于同蒲路沿线,并于1938年1月初率部开赴河南南阳整补,并被编入第5战区作战序列中。\n\n 第20军团于1937年10月10日在河南新乡成立,初辖第13、52两个军。其中13军辖有第4、89两个师。第4师原为教导第2师,第89师原为军校武汉分校教导队和武汉北区要塞部队改编而成。这两个师皆为军校教导部队,具有示范性质,其装备精良、兵员素质亦极佳。52军辖有第2、25两个师。第2师原为第3、14、54三个师于北伐胜利后缩编而成,这个师在20军团中历史最长,战绩最为优秀。第25师则是由第4师抽调部队扩编而成,其官兵素质亦不差于另三个师,但是作战经验略为逊色。\n\n 1938年2月,第20军团在归德(今河南商邱,下同)整补时获得了第85军的番号,同时又纳编了第110师。110师为杂牌部队,其历史可追搠至冯玉祥国民军时期,几经改编于抗战爆发后扩编为骑兵第4军,后因军长檀自新图谋不轨而被包围缴械,并被改编为新编第5师。1938年1月,新5师与独立第46旅以及豫北师管区的5个新兵营一起被改编为补充第2师,旋改称110师。该师历史虽久,但是组织人事复杂,派系不同,装备又差,战力不强。\n\n 当军团长汤恩伯得到了扩编新军的命令后,他将第13军所辖的第4、89师编入85军序列,以新纳入建制的110师以及军团直属骑兵团编入13军序列,52军序列不变。上述各师皆为两旅四团制,总兵力达7万2千余人。\n\n\n!!二、临城附近之遭遇战\n\n 日军在攻占国民政府首都南京之后,将下一个目标指向了中国第5战区司令长官部驻地——徐州。同时,日军成立了以畑俊六大将为司令官的“华中派遣军”,企图与寺内寿一大将指挥的“华北方面军”南北对进,夹击徐州。\n\n 对于日军的这种企图,第5战区司令长官李宗仁上将于1937年12月底制定了以“第3集团军坚守济南,争取时间使5战区主力部队集结于兖州地区,准备对日军展开全线反攻。如兖州反攻失利,亦可利用在徐州地区构筑的防御工事以抗击日军”的作战方针。未料负责黄河沿线防务的第3集团军总司令韩复榘上将接连放弃济南、泰安、济宁等重要城市,以致日军长驱之入,山东大部沦陷,使李上将先前制定的作战计划流产。\n\n 徐州会战开始后,华北方面的日军以第5、10两个师团为主攻部队,并编组了坂本支队(以第5师团21旅团为基干)和濑谷支队(以第10师团33旅团为基干)分向临沂、滕县方向进击。但分别遭到了中国军队第22集团军、第3军团、第59军等部的顽强阻击,进展受阻。\n\n 1938年3月14日拂晓,日军赖谷支队在飞机、战车的掩护下,向滕县外围的两下店发起攻击。此时,第5战区司令长官李宗仁上将致电军委会,请求将军委会直接指挥的第20军团85军第4师调往滕县地区,暂受第2集团军指挥,作为预备队使用。\n\n 第20军团在经过南口、漳河诸役后,亦遭受一定损失,在经过归德的两个月整补之后,已基本恢复元气。然而军团长汤恩伯中将并不愿意将所部分割使用,于是电请军委会,希望能将20军团全部投入津浦路作战。军事委员会委员长蒋介石上将经过考虑之后,同意了汤恩伯中将的提议。于是汤军团长命令85军第4师作为先头部队于3月14日夜21时乘坐火车出发,89师于次日凌晨出发,全军务于17日拂晓赶至临城集结完毕。52军则由现驻地毫州向归德集结,继85军之后开赴临城。军团长汤恩伯中将与参谋长万建蕃少将也于此时乘坐汽车前往徐州第5战区司令长官部接受指示,军团部由参谋处长苟吉堂少将率领随后跟进。第13军所属各部仍留毫州待命。\n\n 3月15日,由赤柴八重藏大佐指挥的日军第10联队在突破滕县外围阵地后向滕县城关发动进攻。而当时的滕县守军仅2000余人,形势万分危急。第5战区司令长官李宗仁上将于15日11时再电20军团军团部,要该军团所属之85军第4师在抵达临城后立即以“先头一部开往滕县附近,增加22集团军正面之抗战”。\n\n 3月16日凌晨,第4师陆续抵达临城,随后在师长陈大庆少将的率领下赶赴滕县地区。而日军在15日遭到滕县守军的顽强抵抗时即派遣所属第63联队绕过滕县继续向临城方向前进。于是第4师在赶至滕县东南地区的龙山、虎山、党山、落凤山一线时与正在绕过滕县的日军第63联队突然遭遇,被迫就地阻击,与日军陷入混战。\n\n 16日中午,第89师267旅抵达临城。为了保证临城的安全,汤军团长急令267旅抢占官桥,并前伸至南沙河地区。此时日军第63联队联队长福荣真平大佐除以第2大队与第4师在龙山、虎山地区作战外,其主力在击退了89师的先头部队并夺取南沙河后继续南下,在官桥遭到了267旅533团的顽强阻击。在龙山、虎山地区,第4师正在龙山、虎山、落凤山一线与日军展开拉锯战。当党山、龙山两处阵地为日军突破时,第10旅旅长倪祖耀少将亲自上阵指挥反击,终于将龙山阵地夺回。在这一天的激战中,85军各部虽然暂时阻止了日军第63联队继续南下,但是却因为突然发生的战斗而未能赶赴滕县。\n\n 3月17日下午,日军第10联队突入滕县,守军指挥官王铭章中将殉国。随后第10联队主力继续南下,在与第63联队主力会合后集中兵力攻击官桥。官桥守军奋力阻击,终因势单力薄而放弃官桥,守军第89师267旅533团3营营长侯克少校于作战中殉职。\n\n 日军在攻占官桥后又迅速向临城突进。此时正值89师265旅530团在临城下车,该团尚未集结完毕即遭日军先头部队攻击,团长谭乃大上校立即命令所属第2营阻击日军,以第1营掩护第3营下车。然而以一营之力难抵日军机械化部队的冲击,第2营营长严以重少校又在指挥作战时阵亡。下午4时,临城失守。日军侵占临城后又冲入了530团的集结点,使该团一度陷入混乱。谭团长于是命令第1营与第2营残部继续抵抗日军,以第3营保证火车站安全,终于坚持至后续部队第529团的到来。第529团抵达后,第265旅所属部队即由旅长赖汝雄少将统一指挥,经过数次反击,终于挡住了日军的攻势,双方形成对峙态势。3月20日,该旅奉命放弃临城,并在师长张雪中少将的率领下,退往傅山、石岗地区待命。\n\n 就在第89师连失官桥、临城时,位于龙山、虎山地区的第4师在师长陈大庆少将的指挥下,对当面日军发动数次反击,并一度夺回党山。当官桥为日军攻占后,该师失去友军掩护,遂于入夜后退守峄县,并以所属第23团担负峄县城防。\n\n 3月18日,日军第63联队第2大队在炮兵的掩护下向峄县发起进攻。守军第23团团长陈纯一上校亲上城墙督战,不幸中炮阵亡,部队失去指挥。不久因日军突破南门,第4师于19日中午而放弃峄县,退往峄县以东山区继续战斗,继又退往韩庄。20日,韩庄在遭到日军第63联队第1、第2两个大队的夹击下失守。\n\n\n!!三、峄县、枣庄的反攻\n\n 在经过了临城地区的战斗之后,中日双方因各自的原因都暂停了大规模战斗,在3月21日至22日这两天里,双方的行动多在部队的调遣上。\n\n 日军赖谷支队在突破中国军队第20军团的防线后一路进展顺利,接连攻占临城、枣庄、峄县、韩庄等地。但是另一路的坂本支队却在临沂被中国军队第3军团和第59军的部队牢牢牵制。为此,负责指挥第5、10师团的第2军司令部派遣作战参谋冈本清福大佐前往兖州第10师团指挥部,向师团长矶谷廉介中将反应了5师团坂本支队所遭遇到的困境。矶谷师团长在听取了第2军司令部的意见后,命令濑谷支队暂时停止攻势“须确保韩庄、台儿庄运河一线,并警备临城、峄县,同时应以尽可能多的兵力向沂州(即临沂)方面突进,协助第5师团战斗”。\n\n 支队长濑谷启少将在接到命令后于3月22日10时以第10联队前往临沂方向策应坂本支队,以第63联队主力进驻峄县,并派遣该联队所属第2大队于23日向台儿庄前进,以“确保台儿庄附近运河一线”。但在不久之后,濑谷支队长根据航空队的空中侦察“发现有中国军队在微山湖上活动”,便终止了先前要第10联队全部东进的命令。濑谷少将改以第10联队主力集结于临城;命令第63联队除以一个大队攻击台儿庄外,主力集结于峄县;支队部(即第33旅团部)则驻枣庄。接应坂本支队的任务仅以第10联队第2大队来担负,且行动时间延后至3月24日由枣庄出发。\n\n 当徐州会战开始之后,军委会除命令20军团归属第5战区之外,另以孙连仲中将指挥的第2集团军转隶第5战区。第5战区李司令长官在临城失守后决心集中兵力将南下日军为歼于临城以南地区,并于3月21日将该计划向军委会蒋委员长汇报。该计划得到批准后,李司令长官命令第20军团“应集中主力于峄县东侧及枣庄西北方焦山头附近一带山地,于3月24日拂晓全线开始进攻,务先击破峄、枣之敌,向临城、沙沟两地附近侧击……”。\n\n 此刻的第20军团52军早在临城战斗期间的3月17日凌晨由归德出发,其先头部队第2师第6旅于17日夜靠近临城后得知临城正受日军进攻,于是改在临城东南的沙沟下车,并于次日掩护25师于韩庄集结完毕。随后该军主力在经过沙沟、利国驿的战斗之后将防务移交第4师,由军长关麟征中将率领开赴运河南岸布防。而85军此刻业以脱离与日军的接触,向青山地区转移。\n\n 汤恩伯军团长在接到命令后,立即要第52、85军秘密潜行至枣庄、峄县以东的向城和抱犊崮山区。其攻击计划是以第52军进攻峄县;以第85军进攻枣庄;以随后赶赴战场的110师接替52军运河防务并暂归第2集团军指挥,留驻毫州的第13军骑兵团与第2师骑兵团由第13军副军长鲍刚中将指挥集结于向城,对临沂方向警戒;临时配属20军团的第31师则以91旅进驻台儿庄,93旅前进至台儿庄以北的南洛、北洛地区,并于23日对峄县发动佯攻,吸引峄县日军出动,为20军团主力在24日的进攻创造条件。\n\n 3月23日拂晓,第31师93旅按时向峄县方向攻击,此时也正值日军第63联队第2大队开始了对台儿庄方向的行动。于是双方部队在獐山遭遇,93旅不支退守北洛。日军63联队第2大队则尾随93旅的撤退方向追击,并于入夜后攻占北洛。第31师93旅败退台儿庄。\n\n 3月24日,为支援20军团的反攻作战,中国空军第3大队所属第7、8两个中队的14架轰炸机于拂晓对韩庄、临城、枣庄的日军进行了猛烈的轰炸。但是由于3月23日的暴雨气候,山地道路变的十分泥泞。所以当中国空军在轰炸的时候,52军和85军皆未按时抵达攻击出发地。\n\n 24日中午时分,52军抵达青山至平山一线。下午16时,85军也终于抵达科拉崮至云谷山一线。军团长汤恩伯中将跟随85军行动,并亲自指挥85军。虽然第52、85军都在入夜前完成了攻击准备,但是却因为没能按时发起攻击,浪费了这宝贵的一天。致使31师孤军作战,节节败退,最后全部退入台儿庄。该师退入台儿庄之后于3月26日归还第2集团军建制,并奉命坚守台儿庄。\n\n 3月25日拂晓,前进至郭里集52军25师73旅突然发现村内有日军驻扎。该旅旅长张汉初少将立即命令所部乘日军未发现之机,在包围郭里集后以火攻战术,于下午16时全歼村内日军,并俘虏日军小队长一人。原来在24日出发前往临沂的日军第10联队第2大队第5中队正在此地露营,由于哨兵警戒疏漏,致使全军覆没。而20军团即因郭里集的这一次偶然遭遇而正式开始了反攻峄县、枣庄的战斗。\n\n 郭里集战斗正在进行之时,驻峄县的日军第63联队长福荣大佐接到了支队长濑谷少将关于增援台儿庄第2大队和解救郭里集友军的命令,于是他亲率所属第3大队、独立机枪第10大队、轻装甲车第10中队以及炮兵工兵等部紧急开赴郭里集。第52军军长关麟征中将在得知上述情报后判断日军可能会在第二天对郭里集地区发动大规模进攻,于是在郭里集战斗结束之后,并未按照原计划继续反攻,而是命令25师撤至郭里集东北山地隐蔽,仅命150团团长高鹏上校指挥两个连留在郭里集牵制日军。\n\n 3月26日,增援郭里集的日军赶至,并对村内的73旅两个连发动猛烈进攻。守军不支后退,而日军则紧追不舍,并以装甲车堵住街道,企图歼灭这两个连。由高鹏团长率领的这两个连在经过两个多小时的战斗后终于突破封锁线,与师部会合(其中一个连仅剩官兵3人)。而福荣大佐率领的增援部队在逼退中国军队第25师后即向台儿庄前进。\n\n 同属52军序列的第2师由于山路崎岖泥泞,其行动落后于25师,于26日拂晓方才赶至鹁鸽窝。该师师长郑洞国少将在抵达鹁鸽窝后得知当面有一日军小队驻扎,即以所属第12团将日军击溃。由于负责主攻峄县的25师未按计划进攻,第2师于是展开部队对枣庄方面警戒。\n\n 在郭里集战斗开始之际,85军的第4师也在89师的掩护下于25日凌晨2时自马山、卓山、黄山三面围攻枣庄。经6小时激战,以及当地反正矿警的引导下,第4师10旅19团于上午8时攻克了日军重要据点——中兴煤矿公司的水塔,随后该团又配合第20团攻占了东、西、北的三座碉楼。第4师接着又利用此水塔据点为突破口,向纵身插入,与城内日军展开激烈巷战,在歼灭了据守中兴中学的一个日军小队后,将日军压缩至村南。\n\n 3月27日,日军以步兵3000余人、装甲车20余辆在飞机的掩护下开始反扑,第4师因攻击时已损失惨重,被迫转入守势,于入夜后退出枣庄在城外继续作战。28日,85军与日军脱离战斗。\n\n 在台儿庄方面,守军第31师从24日开始即与日军第63联队第2大队彻夜激战。随后日军在经过两次增援后,在27日的兵力已经有第63联队主力和战车、炮兵、工兵等部。28日,台儿庄方面的日军在福荣大佐的统一指挥下对庄内发动第三次攻击,守军第31师损失惨重,其勤杂人员也都投入了战斗。形势已逐渐不利于庄内守军。\n\n 3月29日,日军第2军司令官西尾寿造大将见第63联队仍未攻占台儿庄,于是一面要第10师团增加在台儿庄方向的兵力,一面要第5师团停止对临沂的进攻,以主力速绕过临沂速援台儿庄。\n\n 鉴于台儿庄方面的战况严峻,而第20军团主力仍胶着于枣、峄地区。于是第5战区司令长官李宗仁上将一面电令第2集团军各部“限制歼敌”,一面命令第20军团停止对枣、峄的反击,将兵力转用于台儿庄方向,以配合第2集团军将庄内日军歼灭。\n\n 20军团接连三天作战,却进展缓慢,且日军濑谷支队已有集中主力攻占台儿庄的征兆,军团长汤恩伯中将在分析情况后于27日夜21时终于决定停止对峄县方面的攻击,并命令第52军先行南下支援台儿庄方面的作战,以85军在枣庄地区活动以牵制日军第33旅团部和第10联队的行动。\n\n 3月29日,第52军经兰陵镇向台儿庄东北沙江凹集中;第85军则退据平山、傅山、石城岗、女峰山一线构筑阵地并作佯攻峄县之势;军团长汤恩伯中将则前往四户坐镇指挥。入夜后,李宗仁司令长官又对20军团明确了作战任务,要85军对峄县佯攻,52军于30日赶至泥沟、北洛地区,协助第2集团军夹击台儿庄的日军。\n\n 第20军团虽然放弃了对枣、峄的反攻计划,但是在经过郭里集、枣庄的两次战斗之后,使日军濑谷支队长误认为20军团企图与己进行决战,所以在接下来的几天里始终按兵不动,做着与20军团决战的准备,坐视63联队孤军在台儿庄作战。当3月30日濑谷支队长终于判明了20军团的动向之后,方才率领第10联队等部南下台儿庄,并于入夜后抵达台儿庄以西的范口村。然而濑谷的这一失误,是导致日军在台儿庄惨败的一个重要因素。\n\n\n!!四、台儿庄地区的作战\n\n 3月29日夜,奉命配合第2集团军作战的中国军队第52军抵达甘露寺,并预定以所属第2师主力攻击南北洛和北大窑的日军,以第25师攻击红瓦屋屯的日军,企图将进攻台儿庄的日军濑谷支队压迫至台儿庄、枣庄支线以西而歼灭之。\n\n 30日中午11时,52军第2师开始对刚占领北洛东北方之官庄、北大窑不久的日军第10联队发动猛烈攻击,经5小时激战。第2师在25师75旅的增援下攻占官庄、北大窑,迫使日军退守郝庄至张楼一线。16时,第25师组织突击队绕至獐山、天柱山附近向日军背后配合该师主力发动进攻,经一小时激战,攻至贾家埠。已遭到52军前后夹击的日军第10联队被迫退守兰陵店、小集一带继续抵抗。同日,第85军在第2师一部的配合下对峄县发起佯攻,掩护52军之侧背,该军军长王仲廉中将并于次日以所属第89师迫近峄县东郊,做攻城之状。\n\n 3月31日中午11时,第25师攻克兰城店、三佛楼。12时又占水湖、王庄。日军第10联队等部接连败退,已呈被第20军团包围之势。同时在台儿庄方面作战的日军第63联队亦被第2集团军随后投入作战的第27、30师包围。胜利的天平已逐渐向中国军队倾斜。\n\n 然而,日军接下来所采取的措施以及临沂方向情况的改编,使得第20军团军团长汤恩伯中将改变了战区长官部制定的作战计划。正是这一部署,成为日后史学家们围绕着汤恩伯究竟是“迂回奋战”还是“梭巡不进”而争论不休。下面就让笔者来叙述究竟是什么原因使汤恩伯单方面改变了战区长官部的作战计划。\n\n 就在日军濑谷支队被中国军队第2集团军、第20军团包围之前的3月29日,日军第2军司令官西尾寿造大将命令在临沂作战的坂本支队中止进攻,以主力向台儿庄方面增援,以期避免第63联队可能被中国军队第2集团军的包围,也为攻占徐州加快速度。坂本顺少将在接到命令后留下了两个大队的兵力在临沂,给坚守临沂中国军队造成退却的假象,自己亲率主力共6个大队的兵力于入夜后绕过临沂向兰陵镇急驰。\n\n 当时防守临沂的中国军队并未发现这一紧急情况,甚至在4月1日坂本支队与第20军团一部发生战斗时,第59军军长张自忠中将仍以为与“敌之交战部队系板垣第5师团之大场第42联队及铃木第6联队……等,兵力约七八千人”,仍未察觉日军坂本支队主力的去向,放任坂本支队向台儿庄方向前进。日军坂本支队脱离临沂,使得临沂守军减轻了压力,仍旧保证了临沂不失,但是却给正企图夹击包围日军濑谷支队的第20军团造成了麻烦。\n\n 就在52军攻占水湖、王庄后不久,军团长汤恩伯中将接到了在向城地区对临沂警戒的第13军骑兵团团长李之山上校的报告,该报称:日军由临沂方面向台儿庄方面开来的日军2000余人,在飞机掩护下进犯向城,本团无力反击,请求注意侧背安全。目前该团在89师的支援之下正与日军相持于邵家庄。同一天,日军第10师团为了加强濑谷支队的攻击能力,将驻济宁的39联队第1大队派往台儿庄。\n\n 这一报告使军团长汤恩伯中将极为震惊,他除了大骂庞炳勋、张自忠作战不利、平白支援他们那么多弹药之外,更为自己部队可能遭到的东西夹击而忧虑不已。向城是临沂通往台儿庄的必经之路,如向城失守,那么20军团必遭夹击,而有覆没的危险。为了摆脱腹背受敌的不利境地,汤军团长以“避免与敌胶着,且戒冒险决战”的理由,决心违背战区长官部的作战计划,“将在内线的作战兵力转用于外线”。\n\n 汤军团长于31日15时发布命令如下:“一、第52军除留一部于台儿庄附近监视外,以主力依洪山镇为轴,外翼经该镇东北转向向城、爱曲、秋湖席卷,将日军卷入我包围线内。二、第85军由青山附近,分数纵队,强行向南桥、鲁坊一带之敌扫荡,并掩护第52军之侧背,排除台儿庄、峄县两面敌之尾追,并截留爱曲之敌,以阻其前进。”\n\n 这一决定固然使20军团免受夹击之危,但是却置战区长官部的作战计划于不顾,私自脱离战场,不仅放任日军坂本支队长驱直入台儿庄,同时也让濑谷支队的第10联队得以与庄内日军会师。日军两个支队的兵力汇集,使在台儿庄地区作战的中国军队第2集团军承受了相当巨大的压力,战局转而对中国军队不利。\n\n 4月1日凌晨,第20军团各部皆抵达新的作战位置,并于上午7时许对位于兰陵镇以北的日军第21联队一部发动进攻,并接连占领南桥、凤落等地。但是在向城方向却放开缺口让日军坂本支队主力进入,并进占兰陵。16时,汤恩伯中将命令52军速以主力迂回至作字沟日军侧背发动攻击,并以一部控制凤落至河湾一线。命令85军除以第4师进入兰陵至李庄一线布防并配合52军作战,以89师开赴军团部驻地四户作机动部队使用。同日,战区司令长官李宗仁上将见台儿庄方向情况危急,临沂守军已无力回头阻截,于是急命赶赴岔河镇的32军139师配属给第20军团,即刻阻击南下的坂本支队。\n\n 4月2日,部署就绪的第20军团各部对已经进入包围圈的日军坂本支队发动攻击,盘踞刘庄、爱曲、兰陵一带的日军第21联队后卫部队约三个中队的兵力被20军团迅速包围。据守刘庄的日军中队于午前被52军歼灭,据守爱曲、兰陵的日军则遭到85军正面攻击,损失惨重。入夜后,汤军团长命令52军接替85军第4师阵地,集中军团主力将据守兰陵、洪山的日军残部一举歼灭。\n\n 在台儿庄方向,日军濑谷支队已经进入台儿庄以东地区,并于19时突破守军第27师的阵地。另一路由临沂出发的坂本支队主力在岔河镇以西为守军第139师所阻,但是其先头部队已与濑谷支队的第10联队取得联系。\n\n 第5战区司令长官部在得知日军两路支队已经会合的消息后,又急忙命令由碾庄调来的75军进入岔河、由临沂调来的111师333旅进入鲁坊,均归第20军团指挥。李宗仁上将此时虽然对汤恩伯抗命不尊而恼火,但是对于歼灭包围圈内的日军仍是信心十足。\n\n 4月3日8时,军团长汤恩伯中将命令所属各部对当面之日军发动总攻(其中第4师开赴四户做军团预备队使用)。其中第52军与第85军相互配合,对刘庄至小锅里一线日军发动猛烈攻击。日军第21联队不支退守红炉口,但是又遭到了配属20军团作战的炮兵第7团的猛烈轰炸,终于在10时许,被中国军队第52军突破阵地,该联队残部在联队长片野定见大佐的率领下向西北方的尚岩败退。第20军团在这一天的战斗中,顺利歼灭了爱曲至兰陵之间的日军,同时也肃清了向城至秋湖沿线的日军残敌。在结束这里的战斗之后,汤军团长由命令89师迅速向岔河镇前进,企图将在岔河与中国军队第75军、第139师作战的坂本支队主力夹击歼灭。\n\n 4月4日,在台儿庄地区作战的濑谷支队长发现其侧翼和后方有被包围的危险,于是急忙命令第10联队向支队部靠拢。坂本支队则在岔河镇以西地区遭到了中国军队第75军、第85军和第139师的全力围攻,进展陷入停顿。当日军第5师团的板垣师团长发现坂本支队有被中国军队围歼的可能之后,立即向坂本支队发出了“脱离包围圈,返回沂州”的命令。\n\n 在85军方面,军长王仲廉亲临前线,督率89师对鸾墩、大顾珊的日军发动进攻,另以530团迂回日军后方,配合师主力的正面攻击。日军在遭到夹攻后终于不支后退,大顾珊为89师攻克,有利的配合了75军方面的作战。是役,该师第529团团长罗芳圭上校、团附李友余中校在指挥部指挥攻击时遭日军飞机轰炸而殉职。同日,第52军于中午11时开始向北洛、泥沟方向的日军发起攻击,企图切断濑谷支队的后方联系。\n\n 4月5日上午9时,日军第42联队集中1000余人的兵力对大顾珊发起反击。此时的大顾珊阵地由89师265旅529团和333旅665团防守,这两个团面对日军的猛烈攻击坚持不退,争夺甚为激烈。第89师师长张雪中少将于晚20时又投入第530团开始反击,终于彻底击退了日军,双方形成对峙态势。日军坂本支队长此时见攻击大顾珊失败,且补给线也被切断,遂于20时正式电告濑谷支队长关于师团长要坂本支队撤退的命令,其撤退时间预定于6日傍晚开始。\n\n 由兰陵镇、洪山镇沿桥头、甘露寺、孙楼、房庄一带对日军第63联队发起进攻的52军也遭到了日军的顽强抵抗。日军在在得到增援后又发起反击,并攻占底阁、杨楼。杨楼失守后,第25师师长张耀明少将命令所属第146团负责夺回。但是该团在反击时,遭到日军依托村寨据点的火力封锁,营长曹云剑少校在进攻时阵亡,146团反击失利。第52军继又投入75参战旅,终于收复了底阁、杨楼。\n\n 在这一天中,第20军团各部虽奋力进攻,并收复多处失地。但是仍未对台儿庄方面的日军进行有利的攻击,致使在台儿庄作战的第2集团军损失惨重,形势日趋危急。为此,军委会委员长蒋介石上将于是日12时致电汤恩伯:“台儿庄附近会战,我以10师之众对师半之敌,历时旬余,未获战果,刻军团居敌侧背,态势尤为有利,攻击竟不奏效,其将何以自解?应急严督所部于六、七两日奋勉图功,歼灭此敌,毋负厚望。”此一电文即所谓的蒋介石催促汤恩伯进攻之全文。\n\n 汤军团长在接到这一措辞严厉之电文后积极部署进攻,他命令第75军向萧汪、东庄、台儿庄攻击前进;第85军向低石桥、燕子井、岔河山、刘家湖攻击前进;第52军向泥沟、北洛攻击前进。当晚,20军团各部在接到命令皆对当面之敌发起猛烈进攻,接连突破日军阵地。\n\n 4月6日凌晨,日军濑谷支队长发现中国军队第110师(暂由第2集团军指挥)已进至泥沟、獐山以西,第52军已击溃第63联队第1大队逼近支队部,而坂本支队又遭到中国军队围攻无法向台儿庄靠拢。于是濑谷支队长认为“独立维持台儿庄战局困难”,于15时30分电告师团长矶谷中将“暂撤离台儿庄地区,部队向后方集结”。同时他还命令主力部队速向獐山集中,并以第63联队一部佯攻朱庄掩护支队主力后撤。此时在兖州的第10师团师团长矶谷中将在得到电报后立即要濑谷启少将中止撤退命令,但是濑谷少将身陷险境,深知今夜如不突围,等明天中国军队合围后就有被全歼的危险。所以濑谷支队长不顾矶谷师团长的反对,仍于20时下达了撤退命令。于是在日军战史记载的“沉重撤退”开始了。\n\n 可是日军要从已是一片混战的台儿庄战场全身而退并非易事,首先是庄内部队仍在激战之中,其次“紧急撤退”时的军用物资和阵亡官兵的尸体均无法及时运走。尽管濑谷支队长忍痛的将这些部队和物资所抛弃,但是仍旧遭到了中国军队第2集团军各部的追击,其庄内留守部队被迅速歼灭,重装备也因行动迟缓而被尽数破坏(重装备中有2门155毫米榴弹炮、4辆履带牵引车以及8辆轻装甲车)。\n\n 濑谷支队撤退的同时,在岔河镇以西的坂本支队也开始了突围作战。但是向临沂突围的方向有中国军队第75军、第85军等部,坂本支队此时根本无力从此方向突围。于是坂本支队长只能改变方向,由西北方突围,企图向濑谷支队靠拢。该支队于撤退途中先是受到中国军队第75、85军的追击,随后又遭到了52军的截击,损失极为惨重。\n\n 4月7日凌晨4时,濑谷支队主力已退至官庄,留在台儿庄内的部队则全部“为天皇尽忠了”。4月8日,濑谷支队集结兵力于峄县地区,并以一部占领獐山、白山。坂本支队则经过重重阻碍终于突围至枣庄以南的郭里集。随后两位支队长接到第2军司令部的命令,两个支队统由第10师团长矶谷廉介中将指挥,并奉命“在现驻地附近大力整顿兵力,搜集敌情,作好下一步进攻准备。”\n\n 鉴于日军在4月7日已撤出台儿庄地区,第5战区司令长官李宗仁上将于当日12时下达了追击作战的命令。4月9日,李宗仁上将亲往台儿庄地区指挥第2集团军和第20军团对峄县的反攻。第20军团此时所接受的任务是由东向西,与第2集团军相互配合,攻击峄县。军团长汤恩伯中将在领受任务之后以52军由东向西进攻,以85军由东南向西北进攻,形成包围之势。\n\n 4月10日夜,第20军团与第2集团军发起总攻。20军团所属之第2师于11日凌晨攻占九山。由于日军对于坚守峄县已有充分准备,且郭里集之坂本支队和青岛方向的援军也陆续赶至。4月15日,第20军团以及其余友军奉司令长官部的命令撤离峄县,台儿庄战役至此结束。\n\n 第20军团军团长汤恩伯虽然在台儿庄战役期间违反了战区长官部的命令,但是其对于台儿庄战役所做出的贡献仍是应该得到肯定的。战后,军团长汤恩伯中将、第52军军长关麟征中将、第85军军长王仲廉中将皆荣获青天白日勋章,此外第52军参谋长姚国俊少将、第52军参谋处长吴丽川少将、第110师师长张轸少将、第2师师长郑洞国少将、第2师参谋长舒适存少将、第25师师长张耀明少将、第25师参谋长覃异之少将、第4师师长陈大庆少将、第89师师长张雪中少将、第20军团参谋长万建蕃少将、第20军团参谋处长苟吉堂少将也都获得勋奖。\n\n 军团长汤恩伯后任第31集团军总司令、鲁苏豫皖边区总司令、第1战区副司令长官、黔桂湘边区总司令、第3方面军司令长官、徐州绥靖公署副主任、第1兵团司令官、首都卫戍总司令、陆军副总司令兼南京警备司令、代理陆军总司令、衢州绥靖公署主任、京沪杭警备总司令、福建省政府主席兼厦门警备司令、东南军政长官、“总统府”战略顾问、驻日军事代表团团长。1954年病逝。\n\n 第52军军长关麟征后任第32军团军团长、第31集团军副总司令、第15集团军总司令、第9集团军总司令、第1方面军副司令长官、云南省警备总司令、中央军校教育长、校长、陆军副总司令。国民政府垮台后移居香港。1980年病逝。\n\n 第85军军长王仲廉后任第31集团军副总司令、苏鲁边区挺进军司令、江苏省保安处长、第19集团军总司令、第31集团军总司令、整编第26军军长、第4兵团司令官。国民政府垮台后逃往台湾。1991年病逝。\n\n 第2师师长郑洞国后任第98军副军长、荣誉第1师师长、第5军副军长、新编第11军军长、第8军军长、新编第1军军长、驻印军副总指挥、第3方面军副司令长官、京沪警备司令部副司令、东北保安副司令长官、东北“剿总”副总司令兼第1兵团司令官。1948年在长春向中国人民解放军投诚。1991年病逝。\n\n 第4师师长陈大庆后任新编第2军军长、第29军军长、第31集团军副总司令、第19集团军总司令、第3方面军副司令长官、第1绥靖区副司令官、首都卫戍副总司令、衢州绥靖公署副主任、京沪杭警备副总司令。国民政府垮台后逃往台湾。1973年病逝。\n\n 第25师师长张耀明后任第52军副军长、军长、第9集团军副总司令、第38军军长、第4集团军副总司令、整编第38师师长、首都卫戍总司令、中央军校校长。国民政府垮台后逃往台湾。1972年病逝。\n\n 第89师师长张雪中后任第13军副军长、军长、第31集团军副总司令、第1战区政治部主任、第29集团军副总司令、黔桂湘边区副总司令、第3方面军副司令长官、第19集团军总司令、整编第22军军长、第7绥靖区司令官、第13绥靖区司令官、衢州绥靖公署副主任、第9编练司令部司令官、福州绥靖公署副主任。国民政府垮台后逃往台湾。1995年病逝。\n\n!!附:属中日双方作战序列\n中国军队:\n第20军团,军团长汤恩伯,参谋长万建蕃\n 第13军,军长汤恩伯(兼),副军长鲍刚,参谋长万建蕃(兼)\n 第110师,师长张轸,副师长王晓民,参谋长秦鼎新\n 第328旅,旅长辛少亭\n 辖第655团、第656团\n 第330旅,旅长李世勣\n 辖第659团、第660团\n 军直属骑兵团\n 第52军,军长关麟征,副军长张耀明,参谋长姚国俊\n 第2师,师长郑洞国,副师长赵振起,参谋长舒适存\n 第4旅,旅长钟祖荫\n 辖第7团、第8团\n 第6旅,旅长邓仕富\n 辖第11团、第12团\n 师直属骑兵团\n 第25师,师长张耀明(兼),副师长梁恺,参谋长覃异之\n 第73旅,旅长张汉初\n 辖第145团、第146团\n 第75旅,旅长戴安澜\n 辖第149团、第150团\n 第85军,军长王仲廉,副军长王万龄,参谋长张公达\n 第4师,师长陈大庆,副师长王毓文,参谋长金式\n 第10旅,旅长倪祖耀\n 辖第19团、第20团\n 第12旅,旅长石觉\n 辖第23团、第24团\n 第89师,师长张雪中,副师长张公达(兼),参谋长苟吉堂(兼)\n 第265旅,旅长赖汝雄\n 辖第529团、第530团\n 第267旅,旅长舒荣\n 辖第533团、第534团\n\n注:该序列为20军团参加台儿庄战役前期序列,后期加入的75军、139师、111师333旅、炮兵团以及短期配属的第31师本表从略。\n\n日本军队:\n第5师团坂本支队,支队长坂本顺\n 第11联队(缺一个大队),联队长长野佑一郎\n 第21联队,联队长片野定见\n 野炮兵第5联队,联队长武田馨\n 第42联队一个大队、山炮兵一个中队\n\n第10师团濑谷支队,支队长濑谷启\n 第10联队(缺一个半大队),联队长赤柴八重驵\n 第63联队,联队长福荣真平\n 野炮兵第10联队(缺一个半大队),联队长谷口春治\n 野战重炮兵第2联队(缺一个大队和半个联队部)\n 独立机枪第10大队、独立轻装甲车第10、12中队、临时野炮兵中队、中国驻屯炮兵联队第3大队、工兵第10联队第1中队、兵站汽车第15中队\n\n!!参考资料:\n中国抗日战争正面战场作战记\n抗日战史——徐州会战[台]\n中国事变陆军作战史第二卷第一分册(译稿)\n第二十军团鲁南会战各战役战斗详报\n中国陆军第三方面军抗战纪实[台]\n国民革命军陆军第五十二军军史[台]\n国民革命军陆军第十三军简史[台]\n国民革命军第二师简史(自编)\n国民革命军第四师简史(自编)\n国民革命军第二十五师简史(自编)\n国民革命军第八十九师简史(自编)\n徐州会战(原国民党放将领抗日战争亲历记)\n郑洞国回忆录\n征程回忆——王仲廉回忆录[台]\n张雪中将军口述[台]\n石觉先生访问记录[台]\n孙连仲先生年谱长编[台]\n汤恩伯史料专辑\n\n本文在写作过程中承蒙陈建威、冯杰、高明辉三位先生的帮助,在此一并致谢。 \n\nSource: [[[原创]二十军团台儿庄作战记——胡博 - 军事普及[1] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1989895&Page=1&BoardID=190]]
周末爬网最愉快的事就是发现好东西,这次又有斩获,很好的帖子,或许是老帖,但还是希望和大家再分享一次!\n\n 这就是我的战争,这就是苍狼的战争,这就是我们这些老山兵们的战争!时隔今日,我仍然深深地想念我的这些战友们,但愿天堂不寂寞!!!\n\n 苍狼是我的战友,不同部队却在一个战区甚至只隔着一道山峡,认识他我并不觉得是件好事,至少在战后如此,冲他这么不消停地缠我讲那些个陈仓烂谷子的事就有点"心烦",这小子人赖,摊上他也算我的命吧。\n\n 我看过他写的东西,我不赞成他这样写,我看不了这个,是从心里看不下去,他说要还历史一个本来面目,我说他这是亲者痛仇者快;为此我俩没少开嘴仗,结局自然是我输他赢,现下看来,真是比他白吃那么多年干饭了。\n\n 十九年,二百二十八个月,九百一十二个星期,我努力去回忆当年发生的那些个事,其实不用回忆,这么多年以来它们陈积在我心里丝毫没有散失过,相反却象一桶纯酒,时间越久味道越浓,只是这酒里发酵了太多的苦水酸劲整个变味了而已。\n\n 我用了整整一个晚上的时间去理那一大堆缠结在脑袋里的思绪,我不知道该从哪下嘴,讲哪哪都是重要的,对于我而言,虽然痛苦不堪,但每一个点滴都是极其珍贵的;还得讲狼战友,他的一句点拔总算稍微理清了一些我的头绪,咱们就从洞子讲起吧。\n\n 我与狼兄弟不同,他们的阵地较正规,战壕/工事/屯兵坑道,全乎;我们不行,打老山就是助攻,打下老山守的还是名不见经传的小高地,说它是小高地吧,其实也不小,如果合起身后那条庞大山系它该算一个突出部吧。我们高地地势低,二面受敌,距我最近阵地直线距离五百米,八四年是中越两国交恶最激烈的时期,攻下老山只是这场大戏的一个开端,越军并没有因此而有所收敛,相反以更强烈的军事动作报复我军。四二八以后,我连担负松毛岭前沿两个高地的防御任务,我所在的小高地就在我连防守区域的最前端,著名的李海欣高地距此仅八百米上下。阵地上有洞,那是越军挖的,后经我军改善加固。我与五个兵进的二号洞,那时一个洞就是一个哨位,上阵地前,上级做过动员说是:人在阵地在,要做好长期固守准备;不过没想到一呆就是三个多月。二号洞象个烟筒子,直进直出,洞口小只够一个人蹲着进出,洞里最高处也只能弯着腰站着,那年我二十一岁,身高一米七六,膀大腰圆,进洞时趴着,先脚后屁股再脑袋往里倒着钻,动作大了,脑袋还是挨着洞顶亲密了一回。上阵地的具体时间我记不住了,这点狼兄弟比我强,至少还有记日记的习惯;我只记得是五月初的事,后半夜上的阵地,友军没给我们留下多少东西,倒是留了一大堆垃圾,洞子里臭哄哄的,天黑也没分清是些啥玩意,呆了好一会熏透了才就着一点手电光查看清楚,原来是一堆装屎的空罐头盒子!唉,这帮犊子,够损的!\n\n 一进洞,我们就开始封闭阵地,所谓的阵地也就是各洞自家门前的一亩三分地,定向雷交插埋,手榴弹上下拉,洞口象结了一层蜘蛛网,我真担心别是没等来越军等来了四条腿的野物那可就惨透了。进洞第一班岗就是我,班长安排的,我就趴在洞口被复层上,眼前就是横七竖八的地雷绊线,洞外安静极了,只有风吹过树林的沙沙声和不知名的虫鸣声,我的眼睛里捕捉不到什么东西,老山雾重,夜暗里一片浑沌,其实,耳朵在这样的环境里也发挥不了多少功用,如果来个精明老到的特工就是摸到你面前你也不定能发觉,此时只有高地前沿埋设的高密度雷区才是我们真正的报警员和守护者;洞外宁静洞内却一刻也没有消停过,班长领着弟兄们大搞营建,一切为了我们的家啊!屎罐头被撩成了一堆,等着装箱外运,三个兵正用工兵锹给洞做手术呢,班长则领着余德旺归拢清点弹药物资;我知道这小洞子已经是我们这六号大兵的家了,也许还是我们共同的一座合葬大墓呢。\n\n 凌晨,小雨,稀稀落落,漂漂洒洒,算时间该是天亮的时候了,可洞外的天地仍然在浓雾中糊成了一团,班长守着洞口,我能看到他高高撅起的屁股,底下就是余德旺,正给班长续着烟呢;凭心而论,对他我还是有些看法的,特别是他的"马屁"劲,整天围着老班/老排转,只哪有官哪准少不了他的身影,为这连里好事者也特为他封了个雅号:余司令!我和林翔躺一块,紧挨着咱们"余司令",林老怪怪话多,连里有名的"针眼挑",他的嘴从来没闲过,这会又来话了,"唉,司令同志,咱哥们也来瘾了,赏脸来根烟啊。"我在旁捂着嘴笑,谁都知道余德旺家里穷,几块津贴费全省下贴补家用了,剩下两买盒烟还是为干部们特供的,平时自个根本不敢抽,还真没听说过哪个普通战士抽过他一口烟。余司令傻笑,这是他的招牌表情,还有两颗大爆牙!我笑的更利害了,林翔变戏法似的从钢盔里抽出一盒烟来,示威似的冲他晃了晃:算了,人家司令抽好烟,不抽咱这黑棒子。什么话到他的嘴里准变酸,和着他那阴阳怪气的音调,哥几个起了一身鸡皮疙瘩;在班里,没人能震得住他,班长也忌他三分,谁叫他比班长的兵龄还长了一年有余呢。整个洞里成分最好的当属金崇飞和张官民,这两人全营都有名气,出名的好脾气,所谓三棍子打不出来一个屁的说的就是他俩,与他们比,我和林老怪算是坏分子了。还有班长,这位四川小个子是全团的军事尖子,论眉眼没得说,论军事素质更是出类拔瘁,就一点,耳朵根子软,所以老让"余司令"这类"献媚"分子钻了空子,虽然我对班长可能存在的那点偏心眼有想法,但大体上还是敬佩占了主流,必竟跟他确实多了不少的安全感。\n\n 雾终于开始散去了,虽然不会彻底,但必竟可以大概齐的看清高地周遭的情境了:左侧一号洞是排指,距我们三十公尺上下的巨石底下就是三号洞,还有五号,那洞在哪我们看不见,但能听到他们铁锹挖工事的声音,班长说就在高地前沿的坡坎下,还有一个我们的警戒哨位就设在山腰上,距高地前沿二十来米。高地上原来有一条越军留下的交通壕,现在被我们改建成了一条假战壕,里头埋满了地雷,那是专门用来招待越军偷袭的;我们洞子就对着这条破战壕。\n\n 白天洞口架机枪,还是轮流观察,逗完余德旺,我替下了班长,昨晚加固的射击台正好放下一挺班用机枪,五颗手榴弹并排叠在编织袋上,这是班长的主意,万一有什么情况,先不开枪,手榴弹的干活,这玩意不容易暴露洞口位置,还便于给有邻哨位指示目标。我忠实地执行着班长的命令,不但射击台上摆着它,手里还握着它,拉火环就拴在手指上,这样可以保证对特殊情况的第一时间反应。我的脸贴在编织袋上,钢盔底下就露出两眼珠子瞪着洞外的一草一木,自打参战以来,除了见着几具越军死尸多听了几回炮响就没正儿八劲的干过仗,那时节对战争的恐惧还是相当强的,那是源于对死亡的本能反应;守在这样的小洞子里没人能不紧张,我就紧张的要命,洞外每一点风吹草动都能将我的全身细胞赶起来揪的跟发条似的。那个上午直到下哨,我的手里一直拽着手榴弹,一层手汗,等林翔换我下来,我才意识到汗水已经溻湿了整件上衣,缩回洞里抽着班长上的烟,好一会才觉出烟味了,那感觉就象做了一场梦似的。到中午,终于打炮了,那炮是越军的,先是一发两发的试射,弹着点全落在高地后边的大山梁上了,我的心里犯紧张,抓着枪就往洞口爬,班长眼快,一把揪住硬给我拖了回来,他的手有力极了,话音更生硬:你小子,怕傻了,几响小爆竹就把你吓挫了啊!他的话里明显带着不满,我那时年轻,真听不了这个,我就顶他,同样用我最生硬的口气:谁怕了!我想观察敌情也不行啊!还没等我俩话音落下,越军的大规模炮击开始了,我们都明白刚才的两发炮弹是越军在修正弹着点,但还是不大相信越军会选择我们这样的小高地开荤试刀,直到越军的炮弹把高地炸成了一锅滚水沸汤,我们才意识到小鬼子开始动真家伙了!洞口的林翔一直趴在射击台上,我能看到不远处的爆炸激起的参天烟障,还有满世界横飞乱撞的断木碎桩,不少直接就砸落在洞口上。这是我上阵地后碰到的第一次炮袭,躺在洞子里,我能感觉到整座山都在猛烈地爆炸中颤抖,洞子就象是一只小木船突然被甩进十二级的狂风巨浪里,前后左右,四面八方没有不晃荡的,没有不翻腾的,我的五脏六腑仿佛也被震离了位,摇散了架,全和在一块堆了,胸口堵,脑袋晕,跟晕船似的,嗓子眼里一阵阵干呕,恶心极了。我想到了死,只有死成了唯一的念头,我已经无法忍受如此突然如此强烈的震荡了!余司令在哭,我听不到他的哭声,但能看到他早已泪如滂沱的脸,班长的脸也不好看,铁青色,在洞里暗淡的光线里显得更加凄白无力了,倒是金崇飞仍是一副满不在乎的样子,他的怀里抱着枪,两眼眯缝着瞅着我们,象是瞅着一场全然与已他无关的话剧一样;我不知道我的思想在当时还在想着什么,可以说那时节的我已经完全失去了勇气,怯懦的本性被一场摧枯拉朽的炮击暴露无遗了。\n\n 炮击继续,并丝毫没有减弱的迹象,我们无法算清高地上到底落下多少发炮弹,但有几枚确实直接砸在了洞子顶上,如果没有坚强的山体整个支持着洞子结构,哥几个一准早变亡魂了。班长抱着电台呼叫排指,电台里除了一片咝咝音啥讯号都没有。还是余德旺,他的眼泪也许连着他的魂魄一块儿淌干流尽了,他就那么抱着班长的大腿直着嗓子喊妈,我的鼻子有点酸,我不想哭,可这小子一口一个亲娘老子真的让我再也无法控制自已的情绪了,我也想妈,想我那末老头先白的老娘,更想她回回依着门框等待我放学晚归的倦怡身影;我的亲娘,你现在在干什么呢?儿子也许再也看不到你了!儿子也许再也吃不到你亲手烙的荞麦饼了!守着洞口的林翔的一直没吭气,他的嘴里没停过烟,吸完一根接上一根,我能看到他起伏剧烈的后背,我还能看到他手里一直在晃动的手榴弹。洞里的气氛压抑极了,我明白大伙都被那个熟悉又莫生的字眼紧紧掐住了神精:死亡!我们惧怕它,却又不得不接受它,因为现在它是如此真实的存在于我们身边,甚至随时都会降临到我们身上,我们不想死,不仅仅是因为本能的生存渴望,更重要的是如果就此光荣那么作为一个士兵我们将无颜以对我们的称号和我们的职责!我不知道讲这些是否过于假大空了,但是在那个处于炮火中心的小洞子里,我的心一遍遍念叨着的就是这句话啊。\n\n 我也抽烟,洞外的炮火终于开始渐渐平息下去,我的心却始终无法从这翻江倒海般的狂澜中缓过神来。我的手抖的历害,他们的也一样,谁都不说话,班长不停地抚摸已经哑然无声的余德旺,而林翔的脸上也明显爬满了泪痕,我们挺过来了吗?我不知道,这才是战争的开端啊!我们还能撑住多少个今天这样的日子呢?\n\n 当电台里再次传来连续不断的信号音声,我们就象一群找到了娘的孤儿哇的一声哭了起来。\n\n 排长询问了我们的情况,并指示,密切监视越军动向,防止敌人反扑。班长领受命令的声音响极了,他想喊给我们听,又或是想告诉身边这群大孩子们:我们还是一个兵,是兵就得有个兵样!也许现在的我们,正是一帮有史以来最熊样的兵吧。\n\n 下午至黄昏,越军的零星炮击依然时断时续地骚扰着一线我军各阵地,而我军的反击炮火则将越军的纵深地域炸开了花。我们期待天黑,并且真的希望夜暗能让双方紧绷的神经稍稍放松一下。高地开始封闭阵地了,当最后一颗定向雷连接好电线的时候,天色已经完全为黑暗所笼罩了,洞里黑的象倒了瓶墨汁,伸手不见五指,只有六颗忽明忽暗的烟头标示着每个人的位置,我想睡,可屁股底下的泥洼子让人真不舒服,挪了三次了,没一次能甩掉它!我觉着象是泡在冰水里,我的体温正一点点被无处不在的湿冷掏空抽干,麻木自屁股开始已经扩散到全身了。\n\n 还没等我抬起屁股,"轰!"爆炸,不是炮击,地雷的闷响,紧接着机枪声,冲锋枪声响成了一片,是警戒哨!越军偷袭!洞里炸开了锅,抓枪的,掀手榴弹箱的,开电台的,战争!我们就象一群刚入学的小学生,面对全新的世界全新的生活充满了惊恐与不安。我第一个扑到了洞口,就着火光我能看到山坡下时隐时现的人影,那就是越军吗?我不敢相信自已的眼睛,警戒哨里射出来的子弹顺着山坡漫成了一片光流,不时有爆炸自越军藏身的山林里传来,一定是小鬼子们闯进了我们的雷区。我的心里兴奋极了,必竟敌人离我们还远,距离也让人们产生了安全的错觉。林翔也挤到了洞口,这小子开始往下投弹了,班长一直在屁股后头喊:"让开!投弹!"我摸着了手榴弹,就压在胸口下,我没分清方向,一股劲扔出去却半天没见动静,一愣神才明白过来:原来忘拉引线了!唉,这仗打的。\n\n 越军的偷袭行动持续了足有个把小时,高地上各洞神兵都开了火,排指的机枪一直没断过响,后来还有炮,是我们的炮,炮弹径直撞入高地下的原始从林里,火光更大了,但再也没过越军的身影,一定全死了,那炮那枪那火,没打死也得烧死啊!我们还唱歌,自打亲自投响了一颗手榴弹,我发觉心底深处那团顽固的恐惧竟然不见了,在爆炸突起的时候,我竟然忘记了死亡的存在。战斗象一记猛药,一下子让我找到了一个士兵的真正价值。\n\n 半夜,战斗结束,我们无法统记战果,各洞向排指汇报情况,我哨位战斗中消耗手榴弹二十枚,子弹不祥,无人员伤亡。排指命令各哨位加强戒备,要求警戒哨加设防步兵定向雷。\n\n 把小鬼子们干下去,洞里的兵早用烟候着我们了,我与林翔是洞里今晚的主角,连班长也变了调的拥抱我们,被兄弟们按回洞底,我俩就吹上了:他打了多少子弹,我扔了多少手榴弹;外边的火烧的多旺;外边的炮炸的多好看。第一次战斗的轻松彻底冲淡了人们心中对战争的恐惧和绝望,就连炮击中哭成了球的余德旺也挽袖子松扣子跃跃欲试起来。\n\n 天亮,仍然是雾,我不止一次爬到洞口想望着能看到点昨晚的战果,可是眼前除了白蒙蒙的一片啥也看不见,班长呼叫排指希望了解点什么,排指的回答更绝:想看吗?自个下去数去!电台里笑成了一片,各哨位都通播着呢。\n\n 五月的老山多雨,也许这地方长年都多雨吧,上去呆几天没这感觉,时间一长就觉出来了,不是雨就是雾,睛天少之又少,洞里永远是湿的,不但是湿还经常弄水灾,雨水泡洞子是最正常的事了。我的屁股早就泡烂了,皮肤病严重损耗着人们的精神和体力,我们渴望战斗,不是因为我们好战,而是因为在这样的环境下人若不找点事干迟早会给逼疯的!洞里有扑克牌还有一副军棋,这些都是张官民带上来的,我们也打牌,不上哨就打,争上游/抠王/五家,各式各样的牌都打,五寸厚的牌打成了三寸后来干脆一寸不剩,打不成牌就吹牛,吹牛的本事小青年都有那么一两手,可这人的肚里存货毕竟有限,那时真把牛皮吹破气了,等到连二十一世纪/二十二世纪的牛皮幻想也吹旧吹烂以后,人就只能干坐着发呆发傻发神精了。\n\n 我喜欢洞口,我就经常整天整天的守着洞口发愣,在战场上,我们是一群最没有自由的自由人,虽然没铁窗铁镣的禁锢,但是随时的炮击随处的冷枪同样完全驳夺了我们的自由,我们不能出洞,连探头都是危险的,生命在这里是如此的渺小如此的脆弱,经不起任何一次哪怕是无心的犯错。我的眼睛满世界游走在洞外的山野沟壑间,观察敌情的同时我还学会了观察自然,观察自然界里任何一点细微的变化,我还喜欢看那些偶尔经过的飞鸟,喜欢因为羡慕,如果它们也能捎上我那该多好啊!\n\n 我们掐着秒针撑过了五月的煎熬,等待我们的还是煎熬。\n\n 进入六月,越军的袭扰明显加强了,炮击冷枪每天都在进行,越军打我们,我们打越军。\n\n 六月,高地上也陆缓出现了伤亡。\n\n 六月二号,记得是这个时间,一入夜,越军的炮火急袭象开了闸门的潮水,一拔高似一拔,习惯了炮火的我们不仅能分辩出炮火的口径以及来路,甚至能根据弹丸划空时的啸声判断出炮弹的大至弹着点。过十点,炮火越发猛烈了,排指洞口的被复层被炸塌,哨兵轻伤,电台里吵吵极了,连部的声音;排指的声音;各哨位的声音,各种声音混杂在一起根本无法听清楚。我们洞口也落了不少炮弹,高地上的植被早给打着了,火光冲天,透着火光我们的视野开阔极了,班长唠叨:小鬼子这样打法一定搞不了偷袭了。我同意他的看法,你看这亮堂堂的山坡和林线,给他最好的伪装也隐蔽不了形动踪迹啊。\n\n 听炮声,越军似乎对我军全线实施了炮火袭扰,我军的反炮击并不猛烈,越方一侧只有纵深几个点响着惊天的爆炸声,也许我军的一线指挥们仍然没有吃透越军的真实意图吧。\n\n 排指洞口的险情终于排除了,送话机里传来的声音一个个都跟牛喘气似的。排座指示:今晚不要睡,随时准备抗击越军强袭,要求各哨位人不离枪,枪不离弹,手榴弹要开盖掏弦!\n\n 半夜,时间不明,越军终于上来了,三号洞首先打响,警戒哨位置一片爆炸声,那是爆破筒和炸药包的声音!火光里,阵地前沿人影倥偬,高地上到处是枪声和爆炸声,几分钟内整个高地打开了锅。班长死死守着洞口,任凭我们怎么拉也不下来,一忽儿,射击台上就堆了大片的弹壳,金崇飞与林翔顶着洞壁往外甩手榴弹,越军回射的子弹划着啸音不时敲击着洞口被复层以及四周的山体石壁。我和张官民给班长压弹盘,余德旺跪在地上开手榴弹盖,洞外惊天撼浪,洞内热火朝天,弟兄们喊着连自已也听不懂的怪音互相激励着,有了这些喊声人的心里真的产生了某种欣慰和安全感。\n\n 打了将近半个小时,排指呼叫我哨位:警戒哨失去联系,并有人在该位置朝我方投弹射击,要求我哨位出击作战,摸清情况,并视情况恢复警戒阵地。\n\n 第一个跃出洞口的是班长,接着是林翔,还有金崇飞,我则扑上了射击台,我的眼里都是泪,脑子里净是班长斩丁截铁的话:共产党员跟我上,共青团员继续打!\n\n 我恨死了我的团员身份,我恨死了自已的不长进,虽然洞外炮火连天,弹雨纷飞,但我依然强烈期待着能与越军来一次面对面的较量,并渴望在流血与死亡中得到一个士兵灵魂的真正升华。\n\n 我在打点射:长点射,短点射,冲着一切可能的目标,不时有人影在弹火中跌倒,有爬起来的,也有没有起来的;我不知道我是否射中了敌人,更加不清楚是否已经杀了敌人,也许杀了,而且不止一个,但此时,战果已经不重要了,重要的是高地仍然在我们手中,哨位仍然在我们手中!\n\n 警戒哨那儿枪声密集,班长他们一直没有回来,我的眼里看不到那地儿,凭耳朵只能猜到战斗还在继续,并且相当激烈!我想冲出去,我想接应我的战友们,可本能告诉我不能这样做,我的职责是守好哨位,至少班长的命令是这样的。余德旺一直抱着我,从我开始射击就这样一直抱着我,他在喊班长,班长的走象是抽走了他的主心骨,他的崩溃几乎是一瞬间的事,激烈的枪声盖过了他的哭声但挡不住他的泪雨,我的脖子里一定滴落了不少他的泪水。张官民拖开了他,"软蛋!"这是在骂他吗,可我觉得骂到了我的心里,我也是软蛋!我的战友兄弟正在洞外拼死作战!他们一定需要我们的支援,而我呢!我竟然只懂得趴在编织带上疯狂射击?!我是怎样冲出去的已经记不清了,只记得冲出洞口的一刹那我的心被一种因恐慌而摧生的激愤完全塞满了!我象一个初上舞台的小丑,此起彼伏的爆炸就是聚光灯,数不清的子弹划过我的身边,爆炸就在身前身后发生,刮起的劲风掀飞了我的钢盔,我要死了,我的第一个念头就是死,我会死去的,一定会的!我不顾一切的奔跑,手里的机枪机械地朝着远处向我扑来的黑影射击,我不知道我的行为是否够得上勇敢,但心底里涌起的悲壮却再一次战胜了对死亡的恐惧,而使我更加投入的履行着一个士兵的职责。\n\n 跳下坡坎,底下就是警戒哨,我的脚下踩到了什么,软乎乎,滑腻腻,失去重心的身子不受控制地载倒在地上。我的面前是一具烈士遗体,准切的说是一截烈士遗体,爆炸整个摧毁了他的下身,脸部一定被弹片伤害过,整个血糊糊的,分不清眉目来。我的心被拉到了嗓子眼里,呼吸象是滞息了,这就是真实的战场,我想我是被突如其来的惨象吓晕吓傻吓蒙了!全身的感观都集中在烈士身上,有人扑过来我不知道,被人扑倒再拉起,我也不知道,当那人大而有力的手重重地扇在我的脸上时我才恢复已经僵硬的神精来;"跟我打!"是金崇飞!我的眼里还在冒着金星,我被他拖着往警戒哨里扑,一挨地我已经完全恢复过来了。班长,林翔都在,他们没有看我一眼,他们的所有神精细胞都集中在战斗里。我的机枪终于响起来了,第一梭子弹就覆盖了那篷摇曳不定的草丛,惨叫声自那儿传来,接着是爆炸声,金崇飞的手榴弹长了眼似的往那儿砸过去,我打着了越军!杀人的兴奋几乎半秒内就走遍了全身,我有种说不出来的畅快,我的手里也沾上了敌人的血,死亡真的不再可怕了,杀了人再被人杀一切都是那么顺理成章的事,没有一点值得感叹惊惧的!我现在要做的无非就是努力杀人,多杀一个够本,再杀一双赚两。\n\n 剧烈的战斗让人觉不出时间的流逝,当敌人完全退去,当枪声彻底停息的时候,东方第一缕白芒已经刺破夜幕透射进刚刚结束血雨腥风的苦难人间了。\n\n 我累极了,从未有过的疲惫让我瘫软在泥地里,旁边的烈士已经不再那么触目惊心了。此时我才发现身边除了三个洞友还有二个警戒哨位的兵,一个头部负伤,绷带上的血迹结成了疤,他的眼是那样的无神,没有一丝光泽,他也在盯着地上的烈士。隔一小会,副连长领着排长过来了;警戒哨完全被越军破坏,连里决定放弃该哨位,兵力收缩,全力固守坑道工事。\n\n 激战一夜高地上共牺牲了二个人,伤了三个,死的另一个是三号洞的兵,他被越军近距离投掷的手榴弹炸死。同时,我们也击毙了一定数量的越军,伤者不祥,仅高地前沿就有越军遗弃尸体六具,我们还缴获了九枝冲锋枪/一具六零火箭筒,我还捡了三条越军铜扣腰带。\n\n 晨八时许,担架队上阵地,伤员优先抬下去,牺牲者则由连炊事班组织人员背下阵地。\n\n 下午,有民兵向我高地输送补给,我洞分得两箱手榴弹一箱机枪子弹还有两听午餐肉,营指还给弟兄们捎上来一条烟。\n\n 越军并没有终止对我高地的袭扰,小规模偷袭经常发生,夜里跟本睡不着,就是不打枪不打炮也睡不着,随时随地的偷袭反偷袭把人们的生物钟都给搞颠倒了:夜里精神,白天睡觉的大有人在。这是两个有着相同作风相同思想甚至相同战术的军队,与越军作战简直是与我们自已的影子在打仗,绝对的艰苦,绝对的危险,绝对的血腥。\n\n 洞里来蛇了!这个发现是余德旺的功劳,他小便,刚一转身就撞上了,两条花里呼哨的蛇纠缠在一起,一米多长,三角形的脑袋上长着一对闪着邪光的小绿眼;他没敢动,只是在那叫唤,我们犯激凌,都以为有情况,张官民动作快,连滚带爬的差点没压上它们。老山的蛇不怕人!我们拢一堆冲它们指手划角商量对策,它们倒好,当仁不让的继续占据着有利地形冲咱弟兄们"咝咝"吐蛇信,还示威呢!"拿枪打了算,""使手榴弹砸吧,""都不中,还是用衣服来个天罗地网生擒活捉吧,"七嘴八舌个半天,没有一个主意行得通的。弟兄们没辙了,人与蛇就那么干耗着,谁也不让谁,谁也不侵犯谁,只是保持着原始的警惕互相监视着对方。相持了约摸半个来小时,蛇们终于挺不住了,溻下身子大摇大摆地爬出了洞口。蛇一出洞,洞中人类集体松气,这是一个新发现,百无聊赖的人们象是哥伦布发现了新大陆叽叽喳喳吹开了,话题自然离不开蛇。第一次与这以阴险毒辣而著名的生灵的交手是和平的,但自打这天起,蛇们似乎摸熟了来洞的路径,时不时的光顾给我们带来了另一种生存危机,谁都知道东郭先生的故事,对它没有多少人会有好感,于是乎,见惯了蛇的人们开始变着法儿整治这些尚未犯下实际罪行的嫌疑犯们,兵们杀蛇也吃蛇,不但吃而且还扒皮,我对蛇肉的迷恋就是打那时候培养起来的。但凭心而论,碰到的这么多蛇里还真没有攻击过我们的,别的洞有,据说还有死于蛇口的,但我们洞确实没有发生过,所以我的心里一直对它们存有谢意,那是因为它们的不定时存在也使我们得到了精神与身体的绝好调剂;真感谢老山的蛇!真想念老山的蛇啊!\n\n 六月未,越军的袭扰突然减少甚至消失了,这并不正常,都说"大战前的宁静"也许指的就是这种情况吧。\n\n 对越军大规模反扑我军有警觉,若干年后,我曾听说过关于那次大反扑我军所做的大量情报工作的事情,当然,这些是后话了,也不是我能分析清楚的。还是讲洞吧,无数次的炮击改变了高地的地貌,山包上原本茂密的植被不见了,整个一光头山,就连几块硕大的巨石也被炮火炸碎炸散化为齑粉。各哨位都有不同程度的损坏,五号洞最惨,洞口塌了好几次,还压伤过人,洞顶被复层已经被重炮轰平轰烂了,人在洞里随时都有被活埋的危险;连里指示如果无法修复即放弃该哨位。排里不干,五号洞的弟兄更不干,那时的军人视荣誉为生命,让他放弃阵地还不如直接拉出去枪毙来的干脆!作为妥协,连指同意加固哨位并就近择址新挖洞子。连着几天军工送上来的都是构工材料,我们也挖,不过我们挖的是战壕,挖的是射击掩体,各哨位都在干,也许各排各连各营乃至整个战区的我军阵地都在做着与我们相同的事情吧。\n\n 土工作业都在夜里干,白天不行,越军的观察哨甚至连我们的眼睛大小都能看清楚,更别说扛着材料满山跑了;夜里也危险,冷炮多,还得防敌偷袭,常常是干活的人一半,警戒的又得分出一半,又不能发出声响,真把弟兄们累垮了!我们用了一个星期左右依托几个哨位在高地上挖出了一条环形战壕和两条交通壕还有若干个火力支撑点,这样的工程也许算不上浩大,但在那样的环境里确实是难能可贵了。\n\n 有了工事,晚上终于可以轮着出来放风了,当然是在风高月黑的时候。阵地上排了三个警戒哨,分别监视三个方向。黑夜是军工们的天堂,为了防止误伤,我们也规定暗语暗号,有口令,有鸟鸣,还有兽叫,阵地不同,方式也不同,谁也不敢含糊,一出错可是人命关天的大事啊。\n\n 七月,它应该是继四月以后,老山战史中最值的玄耀的一个月份,因为有了"七。一二!"可七月也是我生命中最为黑暗的一个时段;过了七月就出事!七月一日上午,我与弟兄们正在洞里睡大觉,冷不丁越军冲高地打来一炮,声音沉闷极了,是152加榴炮,兄弟们全被惊醒了,人还迷糊着呢,洞外就传来了哭叫声。我与张官民往洞外挤,班长骂:"大响午的,出去找死啊!"我回:"就看看出啥事了,一会回。"钻出洞子才知道刚才那炮炸了苏群力了,他可能是出来透口气,又或者是别的什么原因,反正是一出洞就挨上了这一炮。弹片齐刷刷地切掉了他的左臂,身上全是外翻的口子,真正的血如泉涌啊!他们班子正扑在他身上嚎啕大哭,两个兵在后头拦都拦不住。排长半爬着过来了,他嘶声竭力地命令我们回洞躲炮,张官民顶他:"这不没打炮吗!"还没等他话音落,"啾-----"又是一发炮弹直着砸了下来,人们全惊呆了,我则不顾一切地往回窜,身后的爆炸声响极了!趴在地上,好一会才回过神来,耳朵不行了,听不见声音,看着张官民冲我张嘴,好半天才听到一点不似人声的喉音,我被炸聋了吗?!愣神间,张官民不顾一切地把我往洞里推,林翔和班长则由洞里探出半个身子拽着我往里拖,我想当时的我一定完全被吓傻了,那模样一定可怕极了。人没进洞,越军的第三发第四发第五发炮弹就自南方划着憾人的颤音飞了过来,"越军炮击!"这是我恢复听力后听到的第一个声音,甚至盖过了剧烈的爆炸声。我被拉进了洞子,可是张官民却不见了!我们真的吓蔫了,班长疯了似的吼着他的名字,我想爬出去,可我俩都被身后弟兄们死死抱着动不了,我们一遍遍地呼唤他,可等来的却是排山倒海般的爆炸声。我哭了,眼泪象决了口的长河涌流出来,我的心更象被一把利刃割裂刴碎了,疼极了!他是为了掩护我啊,如果他不推我,那么现在消失的就应该是我啊!\n\n 炮击是什么时候结束的已经无从记忆了,我只记得当我们冲出洞子在浮土里扒到张官民的时候真的痛苦极了,没人怀疑他的死亡,但他却真的活了下来,爆炸的气浪将他抛出了战壕,弹片击穿了他的大腿还有他的肩膀,但他必竟活了下来!连里担架组抬走了他,望着他们消失在山间的身影,我忽然明白过来,我的生命已不再属于我自已,它应属于张官民,而他将生的希望留给我是为了什么呢?其实就是为了战友间的情谊,我们都一样,战争中的士兵生命是最无私的,为了这些最无私的生命舍弃自已的生命,才是一个军人最高尚的地方。\n\n 为了祖国而战,是一种动机; 为了荣誉而战,是一种信念;为了战友而战,才是战阵中最根本最纯洁最伟大的责任!\n\n 七月五日,大雾,军工往返高地多次,我军白天赶修工事,无战事。\n\n 七月六日/七日,越军以一门迫击炮对我高地实施袭扰射击,连指要求:人员不得出洞,加强戒备,防止敌人偷袭。\n\n 七月八日,天未亮观察哨报告高地前沿有人影晃动,排指命令进入工事作好战斗准备,至晨七时许,无特殊敌情发现。\n\n 七月九日至十日,整个战区一片宁静,越军象是从战区突然消失不见了,我高地对面敌人阵地空无一人,开饭时也无炊烟升起。\n\n 七月十一日,我与余德旺奉命向越方前出至高地山脚埋设防步兵地雷,高地及连指组织轻重火力及二门100迫击炮为我们提供火力支援。从阵地下到山脚,一路上顺风顺水,并末遇到越军阻击,我俩沿山脚林线共埋设地雷二十六颗,设置手榴弹八枚;回撤途中余德旺摔伤左脚。\n\n 十一日上半夜,警戒哨报告高地前沿有异常声响,排指组织各哨位侦听,历时一个多小时未听见特殊声响,各哨位继续休息。\n\n 过午夜,山底下真的传来了隐约含糊的人声,这次不会是幻听了,三个哨位同时听到了细如蚊呐的对话声还有折断树枝的"喀嚓"声;排指命令各哨位做好战斗准备,全体战斗员进入战壕,定向地雷连接好起爆线,只等越军送上门来了。我与金崇飞趴在一块,我俩摆开了两箱拧好盖的手榴弹,黑夜可以给士兵提供最好的隐藏但也最容易暴露士兵的位置,因为枪火可以给你的敌人指示直接的目标;还是手榴弹好,即隐蔽又威力,特别是在老山这样地形复杂的山地,更能起到枪炮所不能替代的作用,十个兵里头没有一个不爱它的。\n\n 山脚下的声音一直若有若无的响着,既不前进也不后退甚至连位置也没移动过;我们备战已经将近两个小时了,人的神精从最初的亢奋渐渐转入低迷之中,我的眼又酸又痛,黑暗里它们根本无法起到哪怕是一丁点的作用,相反由于注意力的高度集中而加速了疲惫的进程。\n\n 爆炸声!火光自越军潜伏地域猛然升腾起来,打炮了吗?可是我们并没有听见炮弹划空的声音啊!是地雷,我的心里禁不住激动起来,说不定敌人踩的就是我埋的雷呢!"轰!"又是一声巨响,这次是炮击,来自北方的炮弹一瞬间在阵地前五百米处炸开了一朵耀眼的光花;我下意识地把脑袋往战壕里缩,我已经能清楚地听到从北方从我军的纵深地域骤然响起的片片沉雷,紧接着是数不清的尖锐啸声划过头顶砸向我军前沿不远处。眼前的景象壮观极了!根本无法用语言来形容,满山遍野植满了火树银花,我们听不见爆炸声,因为爆炸声已经连成了一片,我们分不清天和地,因为天和地乃至空气都已经被猛烈地炮火宣染成了灰色。战壕里的士兵们再度兴奋起来,不少人伸长了脖子凝视眼前这场毕生难见的雄伟景象。\n\n 阵地前除了爆炸声再也没有别的声响了,尽管炮火印红了半边天,但能见度依然不高,我们找不着越军存在的迹象,只有心里的感觉预期着越军的到来。\n\n 过四点,炮停,阵地前各种声响突然吠杂起来;呻吟声就在不远处传来,还有压抑的命令声以及拆断树枝踢掉石块的声音,越军上来了!\n\n 四号哨位报告:阵地前二十米出现模糊身影;三号哨位报告:阵地前有人往高地扔石块;排指和五号哨位也相继发现敌情。我哨位当面却异常寂静,没有声音没有人影甚至连风也是静止的。班长的机枪一直在转方向,枪口就在我的眼边晃,他会发现什么吗?我的眼睛不敢看他,黑暗里我只能目不转睛地注视前方。金崇飞的手敲着我的后背还有他手里的手榴弹,他一定比我还紧张,因为很快我就觉出他不是在敲我而是一种不由自主地颤抖;战争就是这样,哪怕是一个身经百战的士兵也仍然无法完全克服大战前的紧张与不安,更何况我们呢!\n\n 照明弹!一颗两颗三颗;排指机枪响,一响枪,越军马上有了反应,我能听到来自前方各处的吼声,声音很大;我还是看不见人,班长手里的机枪一直没响,我能注意到那不停转动的枪口;还有余德旺,他的身子甚至探出了战壕。排指那边打开了锅,曳光弹象莹火虫,手榴弹象大爆竹,借着火光我们终于看清了眼前的坡地:人啊!全是人啊!弯着腰的,趴着的,蹲着的等等,越军都到眼面前了!我们拼命地投弹,甚至连枪都忘了放,投弹,两个一组,三个一束,阵地前炸开了花,我能听到弹片尖锐地呼啸声,我还能听到弹火里敌人的鬼哭狼嚎声!余德旺最大胆,我不知道他的胆子是从哪冒出来的,自一开打他就窜上了战壕,手榴弹可劲砸,左右开弓地砸,烟火里他就象一尊战神。隔壁哨位有火箭筒,排指还有门八二无,这些重火器的射击不时在阵地上掀起一一潮高似一潮的热浪。到天亮,天亮越军的攻击更加猛烈了,还有越军的炮兵,各种炮弹简直要把整个山头给摧毁荡平了。\n\n七点左右,越军攻上四号哨位,并以两个班的兵力向我哨位攻击前进,我军各哨位组织交插火力阻击越军,十五分钟把小鬼子干下去。战斗至上午,越军攻击部队突破我高地右翼战壕,并逼迫我军一部兵力撤回猫耳洞固守待援;战斗进入白热化阶段!\n\n 我与班长一直堵着洞口,他疯了似的端着机枪转劲扫,数不清的子弹划过他的身边,他不自知;数不清的碎石砸在他的身上,他也不自知!我的心里象是堵了一块棉花,我不能相信眼前的这一切景象,更不能接受身边骤至的死亡。金崇飞的手断了,一枚手榴弹擦着他身前爆炸,一团烟火盛开在他的身上,惨号!痛哭!没等我们扑过去,他已经摔到坡下去了。余德旺抢救金崇飞,越军打过来的弹雨紧贴着他的脚后跟,我只能趴在壕壁上拼命射击,他们的身后就是越军,越军的身后则是由我军各炮群打出来的一堵火墙,火墙里则是一场死神开设的分尸宴 !\n\n 枪弹追着余德旺的屁股打,我与班长则拼了老命地压制紧跟不舍的越军;说实话,我真没想过他们俩能活着爬回来,但他们真的活下来了!这也是一种福份,是余德旺和金崇飞共有的福份,要不,你说那满世界乱飞的弹片咋就伤不到他一丝一毫呢,没有他,也就没有了金崇飞。\n\n 阵地上象是口烧沸了水的大铁锅,就连空气也随时随地的被高潮迭起的战斗撩拔的火热滚烫!晌午,可能是这个时间吧,来自我军强大炮兵的火力支援突然沉寂下来了,这让所有一线士兵们的心骤然跌入了谷底,没有了炮,我们还能坚持下来吗?越军越涌越多了!山坡上,石缝里,到处都是越军蠕动的身影;各哨位几乎都到了崩溃的临界点。\n\n 我们快没子弹了!这是极其现实的问题,而越军的弹雨密集的象在下雨,有好些时候我们连头都无法露出掩体了。班长命令我们撤回洞里去,这是没有办法的,既然战壕守不住那就只有退缩到洞里,那时节,我们的心里真的绝望到极点了!\n\n 邻近几个哨位也都钻洞了,我能听见外面刺耳难听的越南话,象是欢叫更象是鬼哭狼嚎!\n\n 班长已经第二次负伤,整个左半身都在血里泡着,可谁也拉他不下来,他就那么抱着机枪死死地阻击着企图爬上阵地的越军。\n\n 我挤不进射击台,我想帮忙,我想战斗,可我除了不停地替他压子弹真的帮不上什么忙了。身后余德旺一直紧紧地抱着已经处于深昏迷状态的金崇飞,我不敢看他们,我不敢看极可能在下一秒钟就会死去的战友兄弟。我给班长包扎伤口,越军就在前方十来米远的地方怪叫着,他们的人真多,也确实非常勇敢,那么多子弹那么多炸弹每一块弹片都能夺去他们的生命,可他们仍然不遗余力地往上冲。山坡上一地的越军死尸,白乎乎的晃眼极了;隔壁哨位有火箭筒,翻卷的火舌不时撞入越军的攻击队形,那满天扬起的肢体/钢盔/破枪,真的美极了!\n\n 班长终于挺不住了,他的血几乎流光了,浸湿了大地也浸湿了我的军衣和身心;班长死了!!!我不能相信眼前的事实,更无法接受由此引发的巨大恐惧,长时间的相处已经让我对怀里这位小个子老兵产生了深深地依恋,我不能承认他的猝死,我就那么死命地按着他早已干涸的伤口,就那么无休无止地为他做着人工呼吸;我已经精神失常,我已经彻底崩溃了。\n\n 林翔扑上了射击台,他接下了班长的机枪,甚至还来不及擦干枪上厚重的血污,敌人已经扑到了洞口。\n\n 我们应该感谢林翔,他是我们的救命恩人,如果没有他果断的行动我们早就成为越军的枪下亡魂了。\n\n 换上新弹仓的机枪刚一发出怒吼就瓦解了越军这次原本极有希望的进攻,他们终于抵受不住如此惨烈的伤亡,他们的神经并不比我们坚强多少!四散奔逃的越军就连基本的战术动作也没有了,任凭子弹找到并击穿他们的后背;也许是因为这边突现的转机,猛攻相邻哨位的越军部队竟然出现了动摇的迹象,这是一次机会!哪怕就是一个白痴也能清楚地意识这个问题。我与林翔不顾一切地往洞外爬,什么也顾不上了:手榴弹,冲锋枪,轻机枪,炸药块,能招乎的全用上了,真的一点都没剩下。到处是火光,到处是弹片,到处是哭号,我们象猎手,而眼前的越军就是一群丧魂落魄的羔羊;余德旺背着金崇飞居然也钻了出来,两个人三只手一把枪,他们就那么相扶相拥着射击,金崇飞的断臂还在渗血,每一发子弹的强大后座力一定象把钢锥穿刺绞扯着他的神经,只几个短点射,就已经让他汗流满面了。\n\n 我的泪水象断了线的珍珠,我们再一次用忠勇和无畏打败了同样坚强的对手,虽然他们只是暂时的退却,虽然我们已经看的到越军的第二梯队正翻过山腰洪水似的席卷而来!可我们还是战胜了他们,不仅仅是因为悬殊的兵力对比,更是因为在两军决死勇气的对决中我们战胜了他们,中国士兵战胜了越南军人!止这一点,就足够验证两支军队的优劣比较了;即便我们全部战死,但我们仍然是胜利者,这是显而易见的。\n\n 我们为死亡做准备:最后一次装理军容,最后一次擦亮刺刀,最后一次凝视身边的战友们,死去的活着的,用不了多长时间就不会有这些分别了。\n\n 不知道为什么,当死亡推开生命最后的屏障,我却在深沉的痛楚里体会宁静,一种解脱的宁静;我不知道这些勇气从何而生,当我面对死亡挺起胸膛的时候,心里仅剩的只有豪迈和雄壮了。硝烟弥漫的阵地上充满了怪异的安静,只有越军混浊的喘息声一步步向我们逼近;来吧,快些到来吧,我们已经准备好了中国军人特有的牺牲方式,我们就要死去,并且是心甘情愿的死去,但我们会让你们体会到比死亡更加恐惧的经历!\n\n 北方,我的家乡在遥远的北方,而我就要在这片南国的红色山岭上壮烈地死去,我是多么的想念我的家乡还有我的亲人们啊!此刻我的灵魂全然脱离了躯壳,它在风中飘荡,它会去哪里?会去北方吗?会去天堂吗?我想为即将到来的牺牲哭泣,可眼泪却变做了一丝轻蔑的冷笑,我知道这是英雄主义在做祟,这是军人的傲骨在做祟;当山风吹散硝烟,当越军爬过坡坎,我突然明白:我终于成为一名真正的军人了,而思想的蜕变演化却是因为必然的死亡;这是我第一次也是最后一次为军人这项高尚英勇的职业深深地感动并激励着。\n\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: [[但愿天堂不寂寞:老山兵们的松毛岭[转载] - 精品转载[1] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=2000367&Page=1&BoardID=21]]
你从未用过的 10 条 Linux 命令?\n\n这 10 条 Linux 命令依次是:\n\n 1. pgrep:比如,你可以使用 pgrep -u root 来代替 ps -ef | egrep '^root ' | awk '{print $2}',以便抓取属于 root 的 PID。\n 2. pstree:我觉得这个命令很酷,它可以直接列出进程树,或者换句话说是按照树状结构来列出进程。\n 3. bc:这个命令在我的系统中没有找到,可能需要安装。这是用来执行计算的一个命令,如使用它来开平方根。\n 4. split:这是一个很有用的命令,它可以将一个大文件分割成几个小的部分。比如:split -b 2m largefile LF_ 会将 largefile 分割成带有 LF 文件名前缀且大小为 2 MB 的小文件。\n 5. nl:能够显示行号的命令。在阅读脚本或代码时,这个命令应该非常有用。如:nl wireless.h | head。\n 6. mkfifo:作者说这是他最喜欢的命令。该命令使得其他命令能够通过一个命名的管道进行通信。嗯,听起来有点空洞。举例说明,先创建一个管道并写入内容:\n\n mkfifo ive-been-piped\n ls -al split/* | head > ive-been-piped\n\n 然后就可以读取了:head ive-been-piped。\n 7. ldd:其作用是输出指定文件依赖的动态链接库。比如,通过 ldd /usr/java/jre1.5.0_11/bin/java 可以了解哪些线程库链接到了 java 依赖(动态链接)了哪些库。(感谢 NetSnail 的指正。)\n 8. col:可以将 man 手册页保存为无格式的文本文件。如:\n\n PAGER=cat\n man less | col -b > less.txt\n 9. xmlwf:能够检测 XML 文档是否良好。比如:\n\n curl -s 'http://bashcurescancer.com' > bcc.html\n xmlwf bcc.html\n perl -i -pe 's@<br/>@<br>@g' bcc.html\n xmlwf bcc.html\n bcc.html:104:2: mismatched tag\n 10. lsof:列出打开的文件。如:通过 lsof | grep TCP 可以找到打开的端口。\n\n这 10 条 Linux 命令,有些的确比较鲜为人知。我个人也只用过其中很少的几个命令,像 col、split、lsof 等等。当然,有些大牛们可能全部都用过。通过引荐本文,希望我们能够更加重视 Linux 命令的使用。\n\nSource: [[LinuxTOY » 你从未用过的 10 条 Linux 命令?|http://linuxtoy.org/archives/10-linux-commands-youve-never-used.html]]
!!三、一念之差——仵德厚\n\n 人的一生都在做选择题。选对了,前途无量;选错了,后悔终生。对于党国的那些将军来说,1949年正是他们戎马生涯中最为关键的一年。因为在这一年里所做的决定将直接关系到他们未来的命运。在这一年中,选择起义的将军们大都成为了新中国的栋梁。而对于那些选择效忠党国的将军来说,就出现了两种情况。一种是跑到了台湾,他们在军界、政界都有所发展,哪怕那些不得志的将军们也都有各自的谋生方法。但另一种情况就显得不那么尽如人意了,因为他们在这一年不但结束了军旅生涯,而且有了另外一种身份——战俘。本篇所要叙述的主角——仵德厚,就是在做关键的人生选择题时比较失败的一位。\n\n 仵德厚,字宏仁。1910年4月1日(清宣统二年二月二十二)出生在陕西省三原县城的一户普通人家。仵父在当地的一家商号中当徒工,以微薄的收入支撑着仵家六口。仵家虽然贫穷,但仵父深知文化知识的重要性,他拼着家里再穷都要让排行老大的仵德厚去读书。于是在那个知识分子为数不多的年代中,仵父以其独到的见解为今后仵德厚在军中的发展打下了基础。\n\n 遗憾的是,在仵德厚13岁那年考入县立中学后,家中再也负担不起仵德厚的学费了。在支撑了不到一年之后,仵德厚被迫辍学。两年后,终于将学费筹措出来的仵父仵母再次要仵德厚去考中学。而仵德厚也不负众望的考入省立第三师范中学。仵父没有想到是,这所学校在三个月后就因为闹学潮而被迫停课了。\n\n 当时,正在为自己出路担忧的仵德厚得知冯玉祥的部队在招学兵,便决定投笔从戎,到冯的学兵团当了一名学兵。当年的这个学兵团要放到现在,可以叫作军乐学校。为什么呢?这个学兵团有个规矩,那就是起床有《早起歌》,睡觉有《睡觉歌》,吃饭有《吃饭歌》,站岗有《站岗歌》,入伍有《新兵歌》,行操有《服从歌》和《简明军律》,演讲有《国耻歌》,犯错有《悔改歌》,诸如此类,品种一应具全,好似一个学兵做任何事都要先唱歌一样。而仵德厚作为一名有文化根基的“知识分子”,自然被点名带头唱歌。如此往复,这军事知识到没学多少,嗓子到是练的不错了。后来仵德厚被编入军事政治速成学校时,该校仍旧沿袭这一“优良传统”。\n\n 但要说西北军的好传统那也是有的,那就是能吃苦,这点是当年中国任何军阀部队都比不了的,不过主因却是因为西北地区的贫瘠所致。比如你粮食短缺吧,那就整天躺着,我不运动就不容易饿;再比如缺少火柴点火取暖,那大伙晚上就起来跑步吧,生命在于运动嘛。仵德厚就是在这样一个恶劣的环境中成长起来的。\n\n 仵德厚毕业后被分配到第3师当班长。也就是在那个时候,仵德厚认识了今后对他有提携之恩的营长张金照。张虽出生于行伍,但自打当上军官后就很重视部下的文化水平,毕竟那年头有文化的谁愿意去当兵呢。仵德厚的到来引起了张的重视,很快,仵就被提拔为排长了。\n\n 仵德厚当上排长的时候,正值他所爱戴的冯老总和晋、桂等军阀联合反蒋。就在他志得意满建立勋业的时候,不幸降临了。他得了癍疹伤寒病,当他被送到医院时,主治大夫只瞧了一下,就建议直接送太平间去,要不是送仵来医院的班长发狠,恐怕仵德厚那时候就去见耶稣了。或许是耶稣对他的眷顾,十几天后,仵德厚竟然奇迹般的病愈了。痊愈的同时,这位寸功未立的小排长竟然又接到了升任连长的任命。原来就在他生病的时候,他所在的连队遭到了中央军的猛烈进攻,结果全连上下近半都由连长带着去伺候耶稣了。生了场病就能升官,换了谁都愿意啊。您说这仵德厚是幸运呢还是倒霉呢?\n\n 中原大战的结果是冯、阎联军的惨败,仵德厚也再次为自己的前途产生了忧虑。好在团长张金照找到了出路,带着部队去依附吉鸿昌。当时投靠中央的西北军主要分为五支,分别为宋哲元部、孙连仲部、石友三部、吉鸿昌部和梁冠英部。早在冯老总发迹时,他的部队就分为河北、河南两派。其中河北派以张之江为首,河南派以李鸣钟为首。而张金照既属于河南派,自然会在同属一派的吉、梁两部中择一而仕。加上张金照曾在吉的部队当过连长,于是就决定带着部队投奔吉鸿昌。就这样,反对中央的“叛军”摇身一变成为了接受中央政府指挥的国军,而仵德厚也当了国军第30师88旅176团2营5连的上尉连长了。\n\n 吉鸿昌原本也算是冯老总的得力干将。中原大战失利后,吉带着自己的11师和那些依附他的部队投靠了南京中央,被委任为第22路军总指挥。但是这只辖有两个师拥兵近三万人的部队内部并不团结。22路军30军军长张印湘一直想夺权,时间一长,吉、张的矛盾就浮现出来了。他俩的矛盾又经中央所派政工干部的挑唆,致使吉鸿昌被逼“出国考察”。吉离开部队后,中央又派了西北军的老长官李鸣钟来接管,没想这位老先生跑到司令部什么事都不管,每天悠然自得的品茶,而他的参谋长又像一个传令兵一样,只负责将上边的命令就传达下去。这样一来,原本就有矛盾的22路军可就乱喽。上级不管下边也就算了,可没粮没饷这不要了下面的命嘛。此外再加上政工人员的使坏,几个旅长干脆直接冲到总部“勤王”去了。吉鸿昌这个时候又想办法回来拉部队,这无异于火上浇油。其最终结果就是,吉鸿昌被彻底赶跑,李鸣钟被迫辞职,张印湘也被撤职关押。下面的旅长也是撤的撤,离的离,曾经盛极一时并且使中央有所顾及的22路军就这样瓦解了。\n\n 失去军事首脑的22路军最终缩编为一个30军,并被调归孙连仲的26路军指挥。这孙连仲在原来的西北军中属于河北系,正所谓一朝天子一朝臣,孙一接管,就对30军实行大换血,许多河南系军官因此被迫离开30军另寻出路。\n\n 那么同属河南系的仵德厚怎么办呢?别急,他的老上级张金照有办法。当时张与30军内另一个旅长冯安邦交好,而冯又与孙沾了点亲戚关系。这样一来,张金照不但没有离职,反而在冯推荐下被提升为30师副师长。张金照既然留下了,那么深得张赏识的仵德厚自然也就水涨船高,升为176团第3营营长了。\n\n 抗日战争全面爆发后,仵德厚所在的部队也随之投入抗击侵略者的战争中。他跟随部队先后转战河北、山西、河南、江苏数省,为国家、为民族立下汗马功劳。而1938年的台儿庄战役,更是成了仵德厚一生的闪光点。\n\n 当时友军第31师被日军包围在台儿庄内苦苦支撑,而位于31师外围的30师几次派遣部队入庄增援,都被日军击退。仵德厚在这种情况下,主动提出愿意入庄增援,结果还真让他给冲了进去。仵德厚入庄后还没喘口气,就看到一个土黄色的物体向他靠近。他仔细一看,竟是31师师长池峰城。原来日军炮火的猛烈程度已经使身穿灰蓝色军装的31师官兵浑身沾满黄土,竟然一个个全成了“泥人”了。\n\n 见面后的仵德厚当时就得到了一个坏消息。原来在仵德厚营入庄的同时,日军一部也已经从西北角打开缺口入庄了。池峰城要仵德厚组织力量发动逆袭,一定要将该股日军敢出去。接到命令的仵德厚决定抽调40名精壮组成敢死队,作为一把尖刀掩护所属三个连发起反击。他要每个敢死队员除身背原有装备的四枚手榴弹外,还身背大刀,步枪上刺刀,胸前再佩挂一袋四枚手榴弹。除轻机枪手外,每战斗小组再肩扛一箱手榴弹,并于入夜后发起夜袭,一举将入庄的日军赶出庄外。此后他这个营始终牢牢掌握住西北角,不让日军前进一部。当日军在各路国军的夹攻下终于开始撤退时,仵德厚的这个营已经不足百人了,而这个营的所有军官也无一幸免的非死即伤。可以说,台儿庄战役的告捷,仵德厚和他的第3营有着一份不可磨灭的功勋。战后,仵德厚被提拔为第176团上校团长。\n\n 在武汉会战中,仵德厚所在的30师被配属给71军担负沙窝地区的阻击任务。这次战役比台儿庄战役更为艰苦,日军集中主力对30师阵地连番进攻。而176团也在仵德厚的指挥下同仇敌忾,顽强的阻击日军,最后胜利的完成了任务。根据仵德厚自己的回忆,他的176团头一天就伤亡达500余人,到友军接防时,部队只剩下100多人。\n\n 1938年对于仵德厚来说,是名利双收的一年。但自从这年过去之后,他所信奉的耶稣似乎不再眷顾他了。就在1938年11月第42军军长冯安邦殉国之后,孙连仲终于对失去仰仗的河南派高级干部下了杀手。这首当其冲的,就是30师师长张金照。1939年3月,孙连仲以“帮助张金照养病”为由,将他调任第2集团军高参,部队由河北派的张华棠接管。仵德厚虽然在这次“大手术”中得以保留了团长的位子,但失去靠山的他根本无法在派系观念浓重的军队中继续发展,他不得不在之后的作战中更加卖命以稳定自己的位子。就在仵德厚埋头于苦闷之际时,他认识了一位将决定他后半生命运的人——戴炳南。\n\n 戴炳南是山东即墨人,在西北军中深得27师师长黄樵松的倚重。仵德厚和戴炳南的第一次见面是在1942年5月由第2集团军选送中央军校高教班第九期受训时认识的。当时黄樵松因为收容中共地下党而不容于孙连仲,黄的下台,自然也使戴失去了靠山。仵戴两人见面时,同属人生低谷期,且当时的遭遇又何其相似。于是两人一拍即合,结为异姓兄弟,并约定日后互相提携共同发展。不过在军校受训结束之后,仵戴两人仍回自各的部队服务。由于两部驻地不通,两人的联系也暂时中断了。\n\n 1945年8月15日,日本政府宣布无条件投降,抗战终于胜利了。这个时候,仵德厚所在的30军奉命北上接收,结果在邯郸遭到了八路军的重创,仵的师长王震也在战斗中阵亡了。殿后的仵德厚运气比较好,他带着自己的89团一路“转进”,终于带着百来号人突围到了安阳。也就是在这个时候,灰头土脸的仵德厚第二次见到了同样是突围而出的戴炳南。兄弟两人三年没见,此番又是劫后余生,自然是抱头痛哭,互诉苦处。\n\n 30军重建后,仵、戴仍官拜原职,戴的老长官黄樵松也回到了30军当副军长,一切似乎风平浪静。但使他们都没有想到是,30军在1946年5月整编为师后,这两人的部队都被裁撤了。而且命运也对他们开了一小玩笑,仵德厚被调任整编第27旅副旅长,戴炳南则被调任整编第30旅副旅长。\n\n 仵德厚到了27旅报道后,便被架空了,甚至连副旅长本职所要负责的训练事务都被参谋长给“代理”了。“既然27旅这么不欢迎我,还是早点脱离这是非之地吧”,仵德厚干脆以治疗痔疮为名跑西安去了。这一治就治了整整一年,直到1947年8月27旅由临汾前线调回西安时才归了队。\n\n 仵德厚翻身的机会终于在1947年10月到来了。当时整27旅旅长因故调职,所留遗缺由直整30师副师长黄樵松极力保举戴炳南接任。而戴一到27旅,就按照黄樵松的授意对旅部实行大改组,这样一来,黄、戴掌握了27旅,而副旅长仵德厚也取得了实权。大伙皆大欢喜,终于能出头啦,换谁都高兴啊。\n\n 1947年12月,黄樵松带着27旅移驻潼关。仵德厚就是在那里打了他复权后的第一仗——伏击解放军的运输队。这次伏击战仵德厚打赢了,除了缴获一些装备外,还意外的获得了几斤烟土。大伙乐呵呵的把战利品运回师部,除了必须的犒劳之外,那批烟土就由旅长戴炳南亲自封存转交卫生队保管了。当时谁也没有想到,这几斤烟土就是导致黄、戴失和的导火索。\n\n 1948年7月,阎锡山的晋军主力被解放军包围在太原。绝望中的阎老西几次三番向中央求援,终于盼来了半个整30师。当整30师官兵接到增援太原的命令时,大伙明显都不愿意去。一座孤城,进去了无异于飞蛾扑火,傻子才去呢。首先不愿意干的就是黄樵松,接着仵德厚也“病”倒了。但迫于军令,仵德厚最终还是跟着黄樵松搭上了最后一架飞机前往太原。这是仵德厚第一次那么近距离的接触黄樵松,这个时候他还不知道,四个月后,他和黄将走向完全不同的两条道路。\n\n 整30师抵达太后恢复了30军的番号,副师长黄樵松也升为了30军军长。戴炳南任27师师长,仵德厚任副师长。30军初到太原不久,仵德厚就带着27师在夺回牛驼寨据点的战斗中立了功。这次战斗使阎老西对30军的战斗力大加赞赏,连呼黄军长是“将才”,30军是“救星”。\n\n 就在这个时候,当年在潼关缴获的那批烟土“作祟”了。原来黄樵松这个时候想起了那批烟土,他打算要30军西安留守处把这批烟土换成钱给官兵购置新鞋,改善部队待遇,没想留守处的回复“烟土被戴师长取走了”。也怪黄樵松没有仔细调查,就直接认为烟土是让戴炳南私吞的。戴炳南知道后,无名火立时就上来了,他马上召开全师大会,要全师官兵证明他“戴某人”没有私吞,并且当着大伙的面把这批烟土给烧了。\n\n 戴炳南没想到跟随多年的老长官会怀疑他,加上黄去143师当师长时,没把他从27师一起调过去,害的他在27师受到歧视。旧怨新恨涌上新头,戴炳南与黄樵松之间的裂痕就这样产生了。可黄樵松竟然还不知道戴已经对他有意见,等他与解放军联系起义的时候,还第一个把事情告诉了戴,终于酿成了自己悲惨的结局。\n\n 现在外界流传的说法是戴炳南得知黄要起义后,立即叫来仵德厚,在仵立下誓言后将事情告诉了仵。说完后,仵坚决不同意起义,接着戴又找来了团长欧乃农,欧也不同意,于是戴就把黄起义的事向阎老西告发了。这个过程是戴炳南被解放军俘虏后的交代材料,个中过程坊间流传甚广,就不多说了。但四十年后,仵德厚在自己的回忆录中却叙述了一个完全不同的说法。笔者现将这段回忆转录于下,至于谁说的才是正确的,就由各位看官自己判断吧。\n\n 我(指仵德厚)和戴(炳南)各回自己的窑洞。可是没多久,戴过来把我叫去他的窑洞,说:“今天军长把我叫去说准备投降共产党,他把计划都说了,说今晚就把军部搬到城里去,让工兵营占领东北城墙……让共军进城,逼阎长官投降……”。我很吃惊,说“我怎么没听说啊!”“还没听说。都派王震宇到共产党那里去了!”戴又进出几趟显得很烦躁。后来戴打电话把欧耐农叫来,要我出去一下,他们谈了一阵才又把我叫进去。戴说:“你看,午桥(欧耐农的字)都不同意!”又说“军长已经和共产党讲好了,条件是再编一个旅,一年不离开太原。”说了一阵,欧耐农就走了。戴炳南叫勤务兵拿酒来,这时我也退出,回自己的窑洞。他喝了一阵闷酒,又把我叫过去,说“午桥都不同意,是不是?我要给阎长官说去!”我说:“你跟黄樵松这么多年,去报告了,他不就完了?”戴说:“黄樵松投了共产党,还会要你我?阎长官人忠厚,给他说了,队伍还是咱的。你在这边布置部队,把警戒线招呼起来,我现在就去。”我叫起来:“叫我在这里,你跑了!不是叫我送死吗?你去报告,阎长官来了,共产党来,都要收拾我;叫我送死!你去!你去!明天我回西安去,你愿咋做就咋做!”他也叫起来:“咱们换贴兄弟,到这个时候你跟我拉钩啊!”说完,他就趁着酒胆上车走了,我也就命令布置警戒线,任何人不许进出。……有的资料里说,戴炳南在对我说黄樵松起义的事之前,先要我跪下对天盟誓,实际并无其事。\n\n 以上就是仵德厚对这一事件的回忆经过。笔者在这里不谈这段回忆的真假与否,但是根据事后发展的历史来看,仵德厚在选择跟随黄樵松还是跟随戴炳南的选择题上,得了零分。设身处地的想一下,也不难发现。30军当时的主力就是27师,而27师的指挥权是掌握在戴炳南手中的,不管黄樵松如何决断,必须得到戴的支持,而做为副师长的仵德厚,也肯定会被这位掌握实际军权的人所左右。此外,30军高级军官的家小都在西安,黄樵松愿冒家小被囚的危险实施起义,但他的部下会愿意吗?很显然,他并没有考虑这一点。\n\n 事情结局是黄樵松被逮捕,后压赴南京枪决。戴炳南因为告密有功被提升为军长,而仵德厚也得以升任第27师少将师长。从短期看,仵德厚为党国尽了忠,同时他还因为这件事当上了师长,并从一名校官晋级为将军。但从长远来看,这实在是一件影响他后半生的蠢事。\n\n 1949年4月24日,太原城破。那位曾经出卖黄樵松的戴炳南在藏匿中被逮捕。仵德厚也在城破之时下令部队放下了武器。仵德厚的戎马生涯至此谢幕了。\n\n 仵德厚再次和戴炳南见面时,已经是7月8日解放军召开公审大会的时候了。他和戴炳南以及军部副官长鲍德荣、戴的小舅子高尊愈被关押在一处,当时戴炳南除了对同压一室的其余三人说了声对不起外,就是一个劲的烟抽。当天下午,戴炳南就因为出卖黄樵松的罪名被枪决了。仵德厚因属从犯,被判处十年徒刑。和戴炳南相比,他到是幸运的多。\n\n 1959年,已经年近半百的仵德厚在山西第一监狱刑满释放。但等待他的并不是自由,而是无期限的“劳动教养”,直到1975年才彻底获得自由。那一年,仵德厚已经65岁了。回顾这65年,竟有27年是在失去自由的情况下度过的。而在他终于获得自由,返回陕西泾阳的住宅时,他的夫人已经去世,他所要面对的也仍旧是贫穷的日子。无论仵德厚怎样努力,仵家仍然是当地最穷的一户。\n\n 此时的仵德厚或许会想,当年要是跟随黄樵松起义的话,现在的生活又会是个怎样的情况呢?可惜历史无法改变,仵德厚只能接受现实,默默无闻的过完他的下半辈子。\n\n 值得欣慰的是,一位作家在2005年将仵德厚的事迹公之与众。一时间,“抗日名将”、“抗日英雄”、“台儿庄敢死队长”等等称呼随之而来。仵德厚在过完近三十年的无名生活之后,又一次像当年在台儿庄战役结束后那样出名了。历史是公正的,仵德厚虽然在太原为自己所做的决定付出了惨重代价,但是他曾经在抗日战场上的英勇事迹仍旧得到了人们的尊敬。\n\n 2007年6月6日,仵德厚在陕西省泾阳县龙泉乡雒仵村因病逝世,享年97岁。对于一位已经付出了这么多代价的老兵来说,我们还需要对他指责什么呢?\n\nSource: [[(原创)党国的那些将军们 - 的相关回复[1] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1945934&BoardID=-4&Page=1&TopicPage=8]]
作者:德迷\n\n 中华民国的三十八年,是个饱经战乱之祸的年代。有战争,那自然就搞出了许多个军事人才,通俗一点的说法就是“名将”。笔者这里的主角,泛指那些同样经历战乱年代的、曾经在国民党军队中服务的普通将领。由于他们普通,许多奇闻逸事往往就被埋没。这些将军们有的尽职尽忠,有的争权夺利,有的贪污腐化,如此种种,实在是大有谈资可用。\n\n!一、见死不救——李天霞\n\n 是人就会有私欲,你做到将军自然也不例外,哪怕你当初是为了多么崇高的信念而奋斗过。但是随着思想的变化,有的人因为克制不住,从此论入万劫不复的地步。在国民党军队里,贪污腐化本属正常,只要你能打胜仗,照样重用。然而却有那么一位贪污腐化、连遭败绩的将军却也活的有滋有味,这就是出奇的地方了。他就是李天霞。\n\n 说起李天霞,到也堪称“著名将领”。有趣的是,他之所以出名,并非因为战功显赫,却是因为孟良崮“见死不救”而出的名。且不管事情经过如何,事后李天霞运用“神机”免去牢狱之灾;事息,仍旧官拜军长,生活依旧。这,就是他称“奇”的地方。\n\n 李天霞,原名耀宗,1908年2月28日(清光绪三十四年正月二十七)出生于江苏省宝山县。现在许多人都说他是上海人,这并非错误。那是因为宝山县在日军占领时期被划入了上海市。幼年时期的李天霞是个勤奋好学、吃苦耐劳的莘莘学子,也有着一颗拳拳报国之心。当他得知黄埔军校开始召生的时候,便毅然携同邻县的李鼎三、李梦麟等人赶赴广州投考。在黄埔军校第三期步兵科学习时,李天霞结识了同期同学王耀武,两人私交不错,后来李的晋升之路,多得助于王。\n\n 由于李天霞就学期间术科成绩优秀,毕业之后被留在学校,先后担任军校第四期步兵科第1团3营8连排长、第五期步兵科第1总队区队附等职。等到第五期学员毕业之后,李天霞再也按耐不住学校的无聊生活,便向上级呈送了下部队的报告。正好李天霞的好友,时任第22师4团2营营长的王耀武下属有一个连长职位开缺,于是在王的帮助下,李天霞接任了这个连的连长职务。\n\n 还是中下级军官时的李天霞,是个敢打敢拼的年轻俊才,王耀武每升一级,便将原职交由李接掌,不为其它,就因为李作战勇敢,加上又是王的同窗挚友。于是,王升独立第14旅第1团团长,李任第1团营长;王升补充第1旅旅长,李任第1旅第3团团长;王升第51师师长,李任副师长兼第306团团长;51师由三团制扩编为两旅四团制后,李又以副师长的身份兼任第153旅旅长。等到王耀武当上74军军长之后,接任51师师长的李天霞俨然是该军中的二号人物。在1939年就当上国军师长的黄埔三期生屈指可数,李天霞对此是十分自豪的。\n\n 有趣的是,李天霞的平步青云似乎到此停了下来,因为74军里涌现出了另一位杰出的年轻将领——张灵甫。早在51师由三团制扩编为两旅四团制时,张灵甫就是李的直属下级,官拜第305团团长。抗日战争全面爆发后,两人在淞沪会战和武汉会战中出生入死,互相帮助。在战火的洗礼下,战友之间的感情似乎有着一股无形的力量将李、张两人紧密联系在一起。武汉会战中张灵甫立功受奖,王耀武拟提张为旅长,征求李天霞的意见。李二话不说,当即表示愿意交出旅长之职于张。南昌会战中,张灵甫亲自率部进攻日军时不幸右腿负伤。李天霞得知后立即下命令将张灵甫抢下火线,转往后方治疗。应该说在那个时候的,两人之间的关系还是不错的。但是这一关系在南昌会战之后发生了变化。\n\n 南昌会战中的李天霞,彻底暴露了其缺乏果断见解以及综观全局的弊端。不过已经察觉李天霞这一致命缺点的王耀武相信,李经过历练还是可以有所提高的。然而两年过后,李天霞却并不长进,反而演变成在独立作战时不知所措的尴尬境况。王耀武不能将74军交给这样的将军指挥,但顾及多年来的交情,他决定将李天霞调往后方,以副军长兼镇独师管区司令的身份督练新兵,或许等和平来临之后,李天霞仍能在军队中有更好的发展。\n\n 李天霞认为,作为74军的第二号人物,接掌74军是势在必得的事。但在这个时候,自己不仅被剥夺了兵权,还被“贬”到大后方去训练新兵,他觉得王耀武不应该这么对他。失望之余,他将师管区公务弃置一旁,整日以看京剧度日。逐渐的,在受到腐败气息的影响下,李天霞经受不住诱惑,搞起了走私,玩起了女人,从此过起了“歌舞升平”的日子。李天霞的腐败,与官场失意有很大关系。但是客观的说,也正是由于他前期仕途过于顺利,滋长了自己的骄傲情绪,不能深刻认识到自己的缺点才造成的。李天霞在贵州两年无丝毫建树,他的“政绩”恐怕就是自己的成群妻妾和那些京剧演员的娴熟表演吧。而昔日的下级张灵甫却与他形成了鲜明对比,张在前线奋勇作战机智果敢,深得王耀武厚爱,在军中威望日增,人们似乎已经忘记了在74军之中还有一位姓李的副军长。\n\n 李天霞在1944年出任第100军军长后,不仅没有丝毫收敛,反将那些不良风气带进了部队,将这支在前线作战的抗日劲旅转变成一支“军纪散漫”的部队。俗话说上梁不正下梁歪,于是在100军内,走私嫖娼渐成风气。李天霞甚至在公开场合喊出“作战不忘跳舞,跳舞不忘作战”的口号,一时间舆论哗然,李军长之名不径而走。到了100军整编为第83师之后,友军皆戏称83师为“跳舞部队”。此外李天霞在总结自己以往的作战经验时,对于自己犹移不决、缺乏果断的行为归纳为“稳打稳扎,出奇制胜”,实在让人汗颜。\n\n 李天霞对于没能当上74军军长始终耿耿于怀,当74军军长的位子再次出缺时,坐上这个位子的念头又浮现在他脑海之中。李天霞利用走私所得到处活动关系,甚至连74军的第一任军长俞济时也为他说起了好话。不过角逐的结果再一次使他失望。国防部在1946年4月发表了以张灵甫接任第74军军长的任命。\n\n 对于这个四期学弟能在众多角逐74军军长的人选中脱颖而出,李天霞忿忿不平。想当初在153旅旅长继任人选的问题上,我可是立即让出了这个职务给你张灵甫。现在临到角着74军军长时,你不但不考虑我对你的提携,不考虑我是你的学长,就这么厚着脸皮的接了下来,连一个谦虚的辞让都不说,你把我李天霞当做什么人?\n\n 李天霞在角逐74军军长落马后,又想起了一年前在南京盛传自己的一个情妇和张灵甫有染的传闻。他不经查实,便认定有这么一回事。如今张灵甫又抢了自己74军军长的位置,旧仇新恨,全部涌上心头。此时的李天霞恐怕要后悔起当年将负伤的张灵甫抢下前线救治的“愚蠢”行为了。因为现在的张灵甫对于李天霞来说,只是一个“卑鄙小人”。这样一个观念一直维持到张灵甫在前线阵亡才算结束,同时也使李天霞这个名字刻在耻辱者的名单上了。\n\n 内战全面爆发后,李天霞带着整编第83师转战山东战场。起初有些战绩,比如攻占鲁南重镇临沂的就是83师63旅的先头部队。不过也有败绩,比如他的57团就在盐城被解放军歼灭过,连团长钟雄飞也被对手俘虏了。当1947年国防部在山东投入重点进攻之时,李天霞做为第1纵队司令官,除了指挥自己的83师之外,还指挥有张灵甫的74师。仇人相见分外眼红,李天霞自然不会给张灵甫好眼色看,不过在表面上还得亲切的叫他“灵甫兄”。\n\n 李天霞的缺点再次被暴露了出来。83师在攻占临沂后,李天霞不知道从哪里得到了一个“共军有13个纵队集结在83师正面”的报告。他未经核实,在电告徐州指挥部后便自做主张的命令部队后撤40里。这一愚蠢决定,直接让友军的侧翼暴露了出来。解放军立即利用这个机会实施穿插进攻,一度使74师面临腹背受敌的危险。事后张灵甫气愤不过,当即向徐州方面弹劾李天霞“作战消极”。\n\n 83师是保住了,纵队司令官的职务却丢了。此外在撤退的时候,负责断后的44旅130团被解放军包围歼灭,他就拿这件事说话,宣称“如不是我李天霞当机立断,第1纵队早就覆没了”。而在实际上,他要是不下令撤退,连一个营都不会损失,他的130团是因为落了单才会遭此厄运。\n\n 当张灵甫决定带着整编第74师固守孟良崮的时候,曾经致电汤恩伯,要求与74师左右相邻的25、83两个师迅速向自己靠拢。而当李天霞在接到汤恩伯的这一命令后,明显不愿意帮助张灵甫,毕竟他的怨气还没消呢。但军令不可违,他为了保存自己的兵力,仅派了一个57团去占领垛庄(期间又是先以一个连打着19旅的旗号招摇),以策应74师侧翼。你张灵甫不是号称一个74师就能顶住共军二、三十万人马的进攻吗?那就让我看看你的本事吧。当时谁也没有想到,就是这个小小的垛庄,注定了74师在孟良崮覆没的命运。\n\n 57团只是一个由新兵和伪军重新建立起来的部队,原来的精锐早在盐城就消耗殆尽,以这样一个团来守垛庄,根本无异于自掘坟墓。而对于解放军来说,占领垛庄是围歼74师的关键所在。李天霞的这个昏招让解放军如愿以尝了。\n\n 当垛庄遭到解放军的凌厉攻势之后,57团迅速溃败下来,该团团长罗文浪无奈只得率领残部向74师靠拢。垛庄的失守,直接造成了74师主力与所属57旅被分割的局面,同时也断绝了两翼友军与74师的联系,李天霞再想去救也已经来不及了。一直到74师覆没的时候,位于左右两翼的友军都没能向74师成功靠拢。\n\n 现在的大部分著作几乎都公认74师的覆没,主要是因为李天霞“见死不救”所造成的,笔者以为不妥。当74师被围时,奉命救援的部队达7个军(师)之多,离74师最近的除了83师外,还有25师和第7军,可以说这三个部队是救援74师的主力。如果说83师见死不救,那么25师和第7军跑哪里去了?黄百韬和张淦同样负有不可推卸的责任。除此之外,让我们再看看这三个部队在奉命解围时的实力。25师是三旅六团,第7军由于没有整编,是两师六团,而83师呢?\n\n 整编第83师辖有三个旅七个团(其中44旅辖三个团)。孟良崮战前,所属44旅130团覆没,旅部和131团负责临沂防务。战斗开始后,担负掩护任务的57团又被围在包围圈内,所以当时李天霞所能指挥的部队只有19旅56团、44旅132团和63旅187、189两个团。就兵力而言,整25师有五个团可用(一个团留守后方),第7军有六个团可用。这两支部队可以全力解围,而李天霞却只有四个团。虽然在解围的第二天,国防部命令第7军的172师配合83师进攻,但是李天霞根本就指挥不动这个部队。在解围开始之前,83师所属的63旅就在马山被华野六纵的阻援部队牢牢牵制,无法脱离战斗(一直到5月17日才摆脱)。所以李天霞手头能动的就只有56团和132团了。\n\n 以李天霞的性格,不管情况如何,他是不会这么轻易的把手头仅有的两个团全部投入战斗。此外44旅本属土木系,是因为整67师师部撤消后才奉命拨入83师建制的。加上130团已经出了事,如果132团再出事,他不能向陈诚交代,只能留做预备队。在经过一番痛苦思考后,李天霞做出了一个影响他一声名誉的事情,对于这个他不想也不愿意去解救的74师,仅派了56团的两个营去执行解围任务。以两个营的兵力去突破解放军华野二、八两个纵队所布置的阻击防线,明眼人都知道结果如何。\n\n 5月16日下午三时,当74师与83师电台联络中断的时候,李天霞预感到这次似乎真的玩过火了,如果74师覆没,自己难逃干系。这位平时以“儒将”自诩的“著名将领”有了一丝寒意。慌乱间,他不顾参谋长的反对,也顾不得是否会得罪陈诚,把所有能调集的部队全部投入了战斗,但在这个时候已经来不及了。两个小时后,74师师部被解放军占领。第二天,散留在山区的74师残部也被解放军歼灭。李天霞的部队一直到了17日下午六时许才赶到了孟良崮山下,这时所能看到的,就只能是遍地的残骸了。张灵甫和他的精锐部队都完蛋了,他李天霞也出名了。\n\n 74师真的完蛋了,南京不会放过我的,怎么办?究竟该怎么办?\n\n 这个问题在李天霞的脑袋里不止思考了几万次。好在他的83师是第一个抵达孟良崮的部队,情况再坏,也还有那两位号称亲带五个团拼死前进的黄百韬和不计一切代价欲解友军之围的张淦在前面挡着。在经过一夜的辗转难眠之后,他立即派人去南京和徐州疏通关系,并决定不惜血本的给上级、同事行使贿赂手段,希望他们能出面为他李天霞说几句话。\n\n 5月26日,李天霞在临沂师部被逮捕并押送南京候审。不过他的金条起了作用。他的长官俞济时、同僚周志道等人都为他开脱。此外加上黄百韬置至死地而后生的一力承担战败责任,事后李天霞仅被处于“撤职查办”的处罚。很快他就被释放了,失去军职的李天霞在上海、南京两地过起了纸醉金迷的腐败生活。\n\n 一年后,李天霞被任命为第1绥靖区副司令官兼整编第73师师长,担负南通地区的防务。当解放军于1949年突破国军江防防线后,李天霞带着他的73军撤守平潭岛。同年8月,解放军进攻平潭岛,李天霞在稍经接触后就打报告给他的上级李延年,说是部队损失惨重,已无力再战,请求立即撤退。结果李延年误信这一不实报告,下达了放弃平潭的命令。当两李撤抵台湾,国防部追究责任的时候,李天霞又买通了李延年的参谋长,两人将一切责任都推给了李延年。结果李延年被判18年牢狱,李天霞因属“从犯”,被判刑10年。事后他再次动用金钱行使贿赂,结果仅在服刑一年后便被保释,并官拜澎湖防卫司令部中将副司令。如此“奇人”尚属少有。\n\n 据闻李天霞退役后凭借着当年的积蓄开起了贸易公司,结果劣性不改,因赌博输光了家财,失落中动起了圈钱念头,结果又以诈骗的罪名再次锒铛入狱,他老婆也因为这件事而另嫁他人。晚年的李天霞极为落魄,1967年2月11日死在了台湾。 \n\nSource: [[(原创)党国的那些将军们 - 军事普及[3] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1945934&BoardID=190&Page=3&TopicPage=1]]
作者:德迷\n\n!二、忠贞成仁——胡长青\n\n 李天霞的一生,毕竟只是部分党国将领的缩影,但这并不代表全部,毕竟为党国成仁的忠贞之士还是有的。这其中就有一位名叫胡长青的将领。\n\n 说起胡长青,各位看官可能并不熟悉。此人参加过南昌起义,当过红色革命者。可惜没能坚持。后重入国军发展,官拜中将军长。胡长青的早年戎马生涯尚属顺利,但是在当上军、师长的时候,命运却总与他过不去,迫使他在八年内竟然自杀过三次。俗话说,要取得成功,就得不断总结以往失败的经验。可悲的是,在胡长青的军旅生涯中,自戕也成了他必须总结的经验了。在这点上,恐怕在大场自杀未死的朱耀华也得自叹不如。笔者在这里并非是为了嘲笑这位战死沙场的将军。相反,笔者希望通这位胡将军经历,使各为看官能从另一个角度了解那些为党国尽忠的将军们。\n\n 胡长青,字南章。1907年10月2日(清光绪三十三年八月二十五)出生于湖南省临湘县坦渡乡林家台。胡家书香门第,胡父自然也要求儿子做一个文化人。假如胡长青能秉承父训专心治学的话,或许将来当位大学教授到也不是件坏事。可是历史不容假设,对于这位胸怀大志的年轻俊才来说,这条道路不是他所希望走的。于是他在湖南第3联合中学毕业后,便放弃继续深造的机会,毅然投笔从戎,南下报考黄埔军校。\n\n 已经开办到第四期的黄埔军校设立有步兵、炮兵、工兵、政治和经济五个科目。胡长青在通过考试并经过了入伍生训练之后,于1926年3月被编入了工兵大队。当时的工兵大队下分两个队,其一为普通队,学的就是和工兵有关的知识。而另一队叫通讯队,是当时军校的新立科目。所以这位名为工兵科学员的胡长青学习的到是通讯专业。\n\n 从该队学员毕业后的发展情况来看,笔者认为这一期的通讯教育是失败的。因为在这七十四名学员中仅有两人在通讯部门有所发展,其余全部改行到其他兵种服务了(阵亡另算),胡长青也属于改行者之一。他在1926年10月毕业后被分配到第24师(原第4军独立团扩编)。当时分配工作的负责人也没看他的毕业证书上所写的通讯专业,就把胡长青给分配到工兵连当排长去了,于是我们这位主角成为了他这个通讯队中第一批“转业”的人员之一,并且成为了与其科别相符合的“工兵”。\n\n 胡长青的“转业”是成功的。宁汉分裂时,南京方面策动武汉方面的夏斗寅部和川军杨森部对武汉发起进攻。胡所在的第24师在纸坊击溃了这两支部队,他自己也因为作战有功,为师长叶挺所赏识。武汉稳定后,胡长青随部东征,去讨伐他的校长。后来叶挺准备在南昌起义时,特地召集了一批所信任的军官策划此事,胡就是其中之一。为了能使部队在起义后得到稳定,叶挺决定对所部军官予以提升,胡长青就这样当上了连长。此举果然有效,胡在得到提升后便打消了疑虑,决定跟着叶走。一开始起义部队搞的有声有色,胡也认为自己所选择的是一条光明大道。但是随着周遍形势的恶化,以及国民党各路部队的围攻,他动摇了。就在起义部队开始南下之时,他只身脱离部队跑回老家去避难了。\n\n 还是遵循父训,做个文人吧!胡长青这么想着。可他注定适应不了安分的生活,于是在一年后便投靠他的学长胡宗南去了。胡宗南见胡长青相貌堂堂,与自己同姓,又是自己的学弟,就收下了他。先让他当个通讯参谋,接着又资助他考入陆军大学第九期,待至毕业后委任其为第1师独立旅少校营长。又过一年,升其为第2旅中校参谋主任。等到了1935年,胡长青已经是第1师参谋处的上校处长了。在短短六年间,胡由一名在野军人成为一名上校军官,如此恩惠使他对胡宗南感激不尽。这或许也是胡长青在最后关头没有向解放军投降,而是坚持到底的原因之一。\n\n 1937年抗日战争爆发后,已经是第1旅副旅长的胡长青参加了淞沪会战。为了报答胡宗南的知遇之恩,他在战斗中身先士卒,受伤后仍奋战不退。胡宗南算是见识了胡长青这种不要命的打法,本着爱护这位人才的想法,胡宗南决定将他调离火线,去当补充旅第2团团长。胡长青对于这个任命颇有微词,他在前线拼死作战就是为了报恩,可结果却被调离了作战岗位,当时就发了一肚子牢骚。胡宗南一面安抚,一面表示遗缺准备由第2团团长杨杰来兼任。胡长青见老长官确属善意,而自己的好友又能升为副旅长,便高兴的上任去了。可是结果谁也没有想到,就在7天后杨杰在战场上阵亡了。胡长青对此痛心不已,因为当时杨杰是以副旅长的身份在西塘桥阻击日军战死的,如果当时胡长青不下火线的话,那么阵亡就不是杨杰了。此外还有另一个人也要大呼幸运,他就是第1团团长王应尊,因为胡宗南最初是打算由王来当这个副旅长的。\n\n 1938年2月,已经完全伤愈的胡长青被提拔为补充旅少将旅长,继又调任第24师72旅旅长。1938年9月,他以第8师副师长的身份调往军校第7分校服务,先后做过军校第16期入伍生团团长、第4总队总队长。命运弄人这话是一点都不错的。此时的胡长青真可谓是风光无限,前途无量。可是从1942年4月1日胡长青奉调第45师师长开始,他坎坷的后半身生涯来临了。\n\n 第45师是一支在1938年新建的部队,初属范汉杰的27军系统,后来27军为胡宗南逐步吞并,45师也就由胡所信任的胡长青来接管。当时45师正在太行山区开展游击作战,环境是很恶劣的,尤其是粮饷补给问题经常发生短缺的情况。胡长青一方面要维持整个部队的稳定,另一方面又要使这支部队能有些战绩,这可真是累坏了这位老兄。\n\n 胡长青实在倒霉,他到任才两个月就碰上了日军对27军防区——陵川的第四次扫荡,结果兵员不整的45师在王家坪受到重创,不过这一次45师至少守住了阵地,受到了上级的嘉奖。但是在一年后,当日军第五次对陵川实施扫荡的时候,27军军长刘进率先“转进”河南,剩下三个师长又互相不信任,这直接导致了45师的“战绩”只能以溃败来形容。胡长青羞愤之余,决定以自戕来承担责任。他支开身边随从人员,并且掏出手枪准备自戕。这时正好被一个冒失闯入师部的勤务兵看到,立即抢上前去把手枪夺了下来,接着部属先后进入,经过一番劝解终于使胡长青打消了这个念头。就这样,胡长青的第一次自杀以“未遂”结束。这个救下师长一命的勤务兵名叫史青林,从此成为了胡的亲信随从。\n\n “自杀未遂”的胡长青先是带着百来号残兵败将跑到河南,在收拢了一些人马后又跑到西安将45师重新组建了起来。后来他的部队被编入第5军,并且装备了美械,战斗力得到大幅提升。然而第5军并不属于胡宗南系统,当时的军长邱清泉想方设法要将这支部队予以吞并,便提议将胡调升为副军长。胡长青为了对老长官能有交代,自然是极力“谦辞”,加上胡宗南那边也予以施压,其结果就是胡长青升任第5军副军长并兼任第45师师长。对于这一结果,邱清泉苦笑不得,但他对于45师是不会轻易放弃的。\n\n 进了虎口的羊,如何能跑掉?1946年9月29日,胡长青在山东定陶进攻解放军时被一颗子弹打中右胸,身负重伤。胡长青受伤倒地后,那位曾在山西救过胡长青、现在已经是少尉卫士的史青林急忙将师长抬回师部。结果师部的军医说伤势太重,必须立即送到后方大医院去动手术。于是胡长青又被送到了南京中央医院施以手术,方才脱离危险。\n\n 胡长青走了,邱清泉笑了,这可是千载难逢的好机会啊。他立即命令副军长高吉人去45师师部接替指挥权,并且撤换了胡的亲信——第135团团长詹庚北,改以自己的亲信——人力输送营营长周中梁担任。师长走了,135团团长被迫离职,133和134两个团的团长也被邱清泉拉拢过去,剩下一个副师长郭吉谦就只能忍气吞声了。胡长青竭尽全力想保留下来的种子,最终还是被邱清泉吞并了。\n\n 1947年1月,胡长青在伤愈后被任命为整编第69师师长,他得到命令前往广州整顿部队,后率部移防郑州。1948年9月,他的99军(整69师改称)开赴固镇,预备投入徐蚌战场,继因国军作战失利,被迫退守安徽宣城,担负起湾址至青弋一线的江防任务。\n\n 1949年的形势对国民党已经越来越不利,国民政府只能寄希望于依托长江天险来争取恢复元气的时间。但解放军根本不给国民党军队以喘息之机,便于同年4月20日夜发起了渡江战役。国民党各路江防部队根本无力抵挡,胡长青的99军也不例外,他的92师和268师全部溃散,99师逃往上海。坐镇宣城军部的光杆司令胡长青见大势已去,再次萌生了自杀的念头。“即便我胡长青不能阻挡住共军的进攻,但以自杀明志,总算是为党国尽了忠吧”。胡长青举起手枪对准自己的胸膛扣动了扳机。这回曾经两次救他的小同乡不在身边,于是,枪声如他所愿的响起了……\n\n 当年国军将领自杀成仁的还真不在少数,比如引爆手榴弹自杀的刘戡,用手枪对腹部射击的邱清泉,对着口腔射击的鲁英麟,还有对太阳穴射击的戴之奇等等,自杀方式各有千秋。胡长青这回选择的是对心脏开枪,可是要击中心脏谈何容易。果然,胡长青射偏了。重伤后的他被副军长刘建修赶紧送到上海的陆军医院急救。也算是胡长青命大,两次胸部中弹,一次伤肺、一次伤心,结果都给救活了。\n\n 俗话说大难不死必有后福,可这话用在胡长青身上就不准了。\n\n 1949年9月,正在广州修养的胡长青接到了老上级胡宗南的邀请,前往四川三台接任第69军军长一职。随着国府在大陆的垮台,胡长青的69军也随之败退西康。当时的国民政府辖区除了台湾,就只剩下这个西康省了。在此危难之际,胡宗南委胡长青以重任,要其代理第5兵团司令官一职,担负起守备西康“半壁江山”的重任。“你是我最后能依托的肱骨啦!”胡宗南这么对胡长青说,胡长青自也感激老长官对他如此信任。然而以此残兵对付解放军常胜之师谈何容易。1950年3月,胡长青所部最终在越西地区溃败。他的老长官见状抛弃了胡长青,自管自的坐上飞机逃往了台湾。而胡长青指挥残部东打西逃,部队越打越少,恶劣的条件比起当年的太行山是有过之而无不及。3月28日,当他抵达喜德时又遭到彝族武装的袭击,结果身负重伤。此时的胡长青已是叫天不应叫地不灵,在坚持到孟获岭时,绝望中的胡长青第三次选择了自戕成仁的道路。他举起手枪对准了太阳穴就扣动了扳机。时为1950年3月31日。胡长青终于得尝所愿的为党国尽了忠。\n\n 真可谓,成也宗南,败也宗南。\n\n 胡长青生前受家庭影响,虽在军旅亦不忘“治经史”,被称之为“儒将”。他死后,台湾当局在凤山军校内特建“长青楼”,以表纪念。同时还命胡的外甥胡家麒继承胡长青的香火。1971年7月,胡长青又被台湾当局追晋为陆军二级上将。那位曾经两次救过将军性命的史青林一直追随胡长青左右,直到3月28日被彝族俘虏的那一天。后来他干脆就在越西娶妻生子,安居乐业了。 \n\nSource: [[(原创)党国的那些将军们 - 军事普及[3] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1945934&BoardID=190&Page=3&TopicPage=4]]
胡安·卡洛斯一世是今日西班牙的国王,也几乎是西班牙人心中崇拜的偶像。\n\n在西班牙旅行的时候,看到国王的画像,和西班牙人谈起国王,回味一下,又感觉“偶像”的概念在这里有点不一样。他当然是一个政治人物。可是西班牙人对这位国王的崇拜,不是子民对国王的臣服,也不完全是对君主的敬意,里面还有一点“迷”的味道,如同在着迷一个明星。国王长得挺拔神气,在西班牙人眼中不是神话般高大领袖的形象,倒是有点对欣赏俊勇男子的意思。反过来,他们既赞赏他的平民化,又不妨碍他们牢牢记得,这是他们时刻引为骄傲的君主。虽然今天胡安·卡洛斯一世在西班牙的位置,以及所起的作用,和英国女王不相上下,可是,在西班牙人眼中,金色冠冕不是一个皇家摆设。这位国王在精神上是一个对西班牙有实际意义的支撑。西班牙国王胡安·卡洛斯一世来自欧洲最古老的皇室家族波旁王朝,却是现代民主西班牙的象征。西班牙人会永远记得,胡安·卡洛斯一世是西班牙民主转型过程中一个最关键的人物。\n\n  西班牙内战前最后的国王\n\n  今天的西班牙国王,1938年出生在意大利的罗马。\n\n他出生的时候,祖父阿方索十三世已经流亡海外。阿方索十三世是西班牙内战前最后一位国王,他当政的时期,世界和西班牙政局都在激烈动荡。他竭力使西班牙在第一次世界大战中维持中立,却无法应对十月革命对本来已经岌岌可危的国内局势的冲击。事后,历史学家说,在那个时候,西班牙只有“军队和无产阶级的对决”。这也是此后西班牙内战对决的基本阵营。\n\n  在局面终于面临崩溃的时候,1931年,阿方索十三世选择了引退,去国流亡。历史书上记载着这样一个故事,在最后时刻,他手下官员报告说要惩处抓住的反国王人士,阿方索十三世说了一句被载入史册的话:“我再也不要看到流出一滴西班牙的血了。”史家公认,他确实是想避免西班牙的更多流血冲突。可是,他在位的后期,西班牙已经是暴力冲突的流血之地。他能够做的,也就是洁身自好,让自己的手上不再更多溅上西班牙人的鲜血。而作为一个君主,这等于是在承认,自己无力面对和处理国家的混乱。阅读西班牙历史,对欧洲君主制传统会有更多了解。无疑,君主把国家看作是“自己的”,可是,从另一面说,这种传统也意味着,国王必须“爱自己的子民”,这是国王的责任。面对上个世纪最初20年里左右翼思潮涌入西班牙,在那块炙热干旱的土地上形成互不相让的冲突局面,面对暴力和混乱,阿方索十三世出走后还说过另一句被载入史册的话:“我再也不爱我的人民了!”这句话所传达的绝望,大概只有王族能够真正理解。\n\n  在他离开的时候,他看到了旧制度下君主的悲哀。临离开王宫的时候,他手下的人对他说,在外面大厅里,有将近50个人在那里等候着和他告别。宫外的局面已经非常危险,他非常感动地说,我一定要见见他们,竟然现在还有人冒如此危险前来告别。当他走进大厅,他发现,那都是宫中的仆人和厨娘,还有这些人的家属甚至孩子们。当他是一国君主时,围绕在他身边的显贵们,一个都没有出现。他回到自己房间的时候,发青的嘴唇一直在颤抖。\n\n  阿方索十三世流亡法国又转到罗马,直至去世,再也没有离开。欧洲的王室有一种说法,就是王室应该是游走的,你必须深入自己的民众,让百姓了解你,你也了解自己的百姓。而胡安·卡洛斯一世的家族是被迫流浪在外。阿方索十三世的儿子,胡安·卡洛斯一世的父亲起初想住在今天以电影节闻名的法国戛纳,可是,不久西班牙内战爆发,在西班牙共和政府的压力下,法国政府迫使他们离开。他们先到意大利的米兰,然后转到罗马。胡安·卡洛斯一世就在这个时候出生,正是西班牙内战的后期。给他施洗的是一个红衣主教,也就是后来的教皇皮乌斯十二世。西班牙内战后,意大利在法西斯墨索里尼带领下又开始备战,环境凶险。他的父母后来去了葡萄牙。虽然流亡在外,胡安·卡洛斯一世似乎从一出生就在西班牙的氛围里,他的父亲就是一个王子,他长在一个王子的环境里。不论他的家在哪里,父母身边永远围绕着许多西班牙人,其中不乏王室支持者。他从小是听着许多西班牙的真实故事长大的,而这些故事又常常带着暴力和血腥。做皇后的祖母告诉她,在她的婚礼那一天,一个无政府主义者如何朝她的马车扔上一束鲜花来,而鲜花里包裹着一个炸弹。于是,新婚的白色衣裙溅上了马儿和车夫的血。当然,还有祖父阿方索十三世离开西班牙的故事。\n\n  多少年后,胡安·卡洛斯一世曾经被问到,你是在什么时候觉得自己是个西班牙人的。沉稳的国王突然有点激动,他说,我躺在襁褓中,耳边听到的就已经满是西班牙、西班牙了。\n\n  流亡中的西班牙王子\n\n  有的时候,君主责任甚至是一个过于沉重的负担。\n\n他的父亲唐·胡安相信,自己可能有朝一日会承继父亲王位,而他在自己的王位还完全没有着落的时候,已经想到必须给儿子严格的王子教育,因为儿子将是自己的王位继承人。\n\n  于是,胡安·卡洛斯一世在8岁时就被送进了纪律严格的寄宿学校。校门一关,父母音讯全无,小王子感觉自己已经被父母抛弃了。他后来猜想,或许是父亲不让母亲给他打电话,流亡中的父亲深知西班牙是一个长期以来局势凶险的国家,本能促使他要把王子的性格训练得坚强起来,否则未来他将无法应付这个坚硬国家。最后,还是祖母前来探望,他才总算离开学校。祖母也是他的教母,是巴黎公爵的女儿,流亡中的西班牙皇后。在祖母的温暖陪伴下,他回到父母身边。可是,好景不长。1948年冬天,在里斯本一个清冷的车站,年方10岁的胡安·卡洛斯一世在父母的送别下,永远告别了和父母一起的家庭生活,独自前往西班牙。其原因是,他必须完成王子的教育,而根源又是他未来的君主责任。\n\n  在胡安·卡洛斯一世的祖父离开西班牙之后,西班牙就是共和国,通过选举,左右都执掌过政权,也都在自己执政的时候,无法消除敌对,也无法免除暴力。西班牙人当时没有认识到,真正的民主政治必须是在反对派可存在的状态下运作。他们忽略了这一点,就是在民主政治下,任何一方执政,反对方都必须有现实意义上的平等地位。选举得胜的一方,是获得包容对方、主导建设国家的机会,而不是获得一个利用民众给予的国家资源,去消灭对方的有利位置。在野一方,在提出反对意见的时候,也应该是出于对全民有利的考量,同样不可以有那种恨不能要消灭对方的仇恨和行动。它的前提,就是双方要认同一个核心价值。这是实行民主制度的先决条件,否则,民主制度就变成没有规则约束的游戏,两圈一玩儿就玩儿不下去了。上世纪30年代西班牙共和国的左右双方恰恰是缺乏共同的核心价值,民主游戏也就肯定运作不下去,从政治对抗开始,走到不是你死,就是我活的局面,所有的人都被拖向两端,中间地带反而无法生存。当最后是内战决出胜负的时候,不论哪一方赢,民主游戏都只能煞车。走到这一步,只能说西班牙注定要有一段独裁政权的命运。\n\n  西班牙独裁者佛朗哥被公认是个出色的军人,却是个谜一样的政治人物。在所有人都认为他是纳粹同党、法西斯分子的时候,他却和希特勒周旋,不仅使得德国兵没有踏入西班牙一步,而且使得西班牙奇迹般置身于二战战火之外,甚至还一度成为犹太人逃亡的一条通道。他既冷酷镇压左翼,也镇压要求接回流亡国王的极右保皇派。他曾经宣称自己尊重西班牙传统,将在合适的时候恢复君主政体。人们认为他最在意的是自己的权力,他在西班牙维持了40年独裁统治。可是,出乎意外的是,他并没有自己坐上王位。二战结束后不久,佛朗哥把年幼的胡安·卡洛斯一世接回西班牙,让这位“西班牙王子”在自己的国土上接受传统王室应该接受的严格教育。事实证明,他理解中的君主政体,和保皇派的理解并不相同。可是,人们仍然不知道他葫芦里到底卖的什么药。\n\n  1948年11月,那个寒冷的里斯本火车站,10岁的胡安·卡洛斯一世没有哭,他觉得父母不希望看到自己哭。面对“西班牙”,这位10岁的王子充满困惑的心情。西班牙王室在近代历史上可不是一个轻松的位置。他记得有一个对西班牙王室忠心耿耿的人写过一本书,其中有三条警告:第一条是永远不要住在马德里的王宫;第二条是永远要对“上层”紧闭你的大门,而对“中层”打开大门,他们才是社会的脊梁;第三条是,在你从流亡中归来,不要打开你的行囊,因为你随时要准备再次卷起铺盖走人。\n\n  流亡者总是每分钟都在咀嚼自己的“丧失”,失去的东西很具体,从小熟悉的景观、气味、色彩和感觉,甚至还有那些“家乡才有、别处无法寻觅到的食物”。这些都在加深流亡者的情结,更何况一个王室的政治流亡。在胡安·卡洛斯一世眼中,父亲的流亡是真实的。父亲生在西班牙,在那里度过了青少年岁月,离开西班牙的时候已经18岁。对父亲来说,死在流亡中是世界上最坏的事情,而他们就始终处在这样的焦虑下,内战正打得凶,假如左翼胜利,他们就永远休想回国。虽然战争的结果是另一方胜利,可是,唐·胡安仍然有很多年无法回西班牙,不得不作出这样的痛苦决定,让幼年的儿子先回去接受必须的教育。就这样,10岁的胡安·卡洛斯一世离开父母,独自前往西班牙。\n\n  从西班牙王子到未来国王候选人\n\n  火车跨越边境,陪同他的人说:“殿下,这就是西班牙了!”小胡安·卡洛斯一世把自己的脸紧紧贴在车窗上。\n\n可以想象他的失望,西班牙很多地区是一片干旱的大地。胡安·卡洛斯一世形容自己第一眼看到的西班牙,就是龟裂的土地、贫穷的村庄、麻木的老人。他后来形容自己脑子里只有一个念头:这就是我父亲整天念念不忘的那同一个西班牙吗?\n\n  那么,你爱西班牙吗?胡安·卡洛斯一世说,作为一个王子,他受到的基本教育,是要用“心”而不是眼睛去看西班牙。去西班牙之前,父亲对他与佛朗哥的会见很焦虑不安,他再三关照说,你认真听他说话,自己尽可能少开口,做一些礼貌应答就可以。后来胡安·卡洛斯一世才知道,自己到达西班牙后,本来安排马上要见佛朗哥,可是就在那个时候,发生了一个君主主义者的学生在监狱被殴打致死的事件,当时正在安葬,有上千拥护绝对君权的民众冲击墓园。王子来到西班牙的消息很快传开,这些民众又试图从墓园到他住的地方去,表示对旧君主制的支持。这样更加剧了紧张气氛,会见也就延后了。\n\n  在他终于见到佛朗哥的时候,他觉得佛朗哥比照片上感觉要矮小。佛朗哥称他为殿下,从一个孩子的眼睛看出去,他很和蔼。以后很多年里,佛朗哥给他安排的教育,是欧洲传统的王室教育,和今天英国威廉王子大概差不多,只是他更多地接受学者的私人授课。上世纪50年代初,佛朗哥和胡安·卡洛斯一世的父亲唐·胡安见了一面,讨论他的大学教育和军队训练。父亲希望他在国外名校上大学,然后回西班牙读军校。佛朗哥认为这样不妥,因为部队里都是十七八岁的年轻人,读完大学回来,胡安·卡洛斯一世的年龄就会比军中同伴大一截,很难再和同伴建立深厚的同袍之谊。佛朗哥还认为,胡安·卡洛斯一世应该先在西班牙完成军事训练取得军衔,再在西班牙国内完成大学教育。他们谈了两个小时,最后是父亲让步,原因是他不得不承认佛朗哥的看法是对的。佛朗哥逐渐使得唐·胡安信服了他对儿子的教育安排。各军兵种的军校和军队服役,使得他因此在军队里有一批忠心耿耿的朋友,这在西班牙特别重要。和英美传统不一样,军人在他们认为的国家危难之际,要“挺身而出”出来干预政治,这种观念和做法,长期在西班牙被认为是一个“优良传统”。胡安·卡洛斯一世认为,假如不是他在军队的根基,他是绝对不可能做到他后来做的事情的。\n\n  在佛朗哥时代,胡安·卡洛斯一世和当时所有的西班牙人一样,留在宗教传统中。胡安·卡洛斯一世还记得在一个天寒地冻的日子里,12岁的他被带到天使山的修道院参加弥撒,在地理上,天使山正好是伊比利亚的中心。山顶上有一个巨大的基督雕像,张开双臂迎接信者。1919年,他的祖父阿方索十三世曾经在这里举行仪式,郑重誓言把西班牙置于神的庇护之下。为了纪念这个仪式,在那里修建了一个天主教加尔默罗白衣修道院。1936年内战早期,一群左翼士兵,在这里审判了这个耶稣雕像,判其死刑。酒醉的士兵在这里盲目地扫出子弹,这个地方一度因此成为左翼的胜利象征。王子记得,他在寒冷中听这些故事,他从历史中看到西班牙的图景:它总是被划分为两个极端,胜利者在一端,被征服者在另一端。这一切和他父亲的梦想,一个团结的西班牙图景,完全相反。此后他在修道院参加弥撒,他似乎期待能够永远保存弥撒留给他的和平感受。\n\n  1962年胡安·卡洛斯一世成婚。他已经结束了学业,他去问佛朗哥,我应该做什么,佛朗哥说,让西班牙人民认识你。他先随几个副总理学习政务,然后走遍西班牙的城市和大小乡镇。多半西班牙人欢迎他,可是,也有人向他扔土豆和西红柿。\n\n  7年后的1969年7月,佛朗哥宣布,胡安·卡洛斯一世将成为他未来的权力继承人,在他自己死去之后,胡安·卡洛斯一世将登基成为西班牙国王。这是佛朗哥一个人的决定,这个决定并不顺理成章。先是王位的继承有争议。胡安·卡洛斯一世的父亲唐·胡安,是阿方索十三世的第三个儿子。前面两个王子一个有病,另一个是聋哑人,也都没有表现出未来国王的素质。因此,阿方索十三世自己最终是要把王位传给唐·胡安。但是,前面两个王子并不愿意放弃王位,直至他们去世,争议也没有消除。他们的儿子们,也就是阿方索十三世的其他孙子们,在不断声明自己对王位的权利。\n\n  排除其他支系以后,另一个争议自然是在父子之间。唐·胡安还在,佛朗哥对儿子的任命等于是剥夺了父亲的王位继承权。在胡安·卡洛斯一世成长过程中,他在放假时还曾回到父母身边,平时也一直在电话中交流。最终,父亲是一半无奈、一半出于父爱和对儿子的信任,接受了这个现实。他在经历痛苦之后,对儿子说,很抱歉,是我当年自己的决定,把你置于如此为难的状况中。\n\n  外界认为最可能生变的,是在1972年,阿方索十三世有一个孙子娶了佛朗哥最钟爱的外孙女。当时胡安·卡洛斯一世还没有登基,许多人转而支持作为佛朗哥外孙女婿的那个王孙当国王,可是佛朗哥并没有因此改变他认定的主意。\n\n  向彼岸的缓慢过渡\n\n  西班牙内战是一个震动世界的事件。\n\n很少有这样的事情,能够这样把大半个世界都拖进一个国家的内战中去。对西班牙内战的研究,对随后40年佛朗哥政权的解读,都在很长时间里,被战争和内部的残酷对抗所封杀。研究者深入不进去,还没有进门,就被漫出来的血污没了膝盖,再进去就没顶了。所以,简化地给一个是非判断,是最安全的做法。于是世界上的左翼就认定佛朗哥一方是法西斯,而右翼则认定,失败了的共和派是苏俄的赤色分子。可是,别人尽可以在外面隔岸指点,西班牙人已经被圈在里面。分裂、暴力对抗、血流成河,从一个已经无法改变的现实,渐渐变成无法改变的历史。生活在西班牙,里面的人有一个如何走出历史陷阱的问题。\n\n  可以说,在独裁统治下,所有的人在如何走出历史的问题上,都是被动的。唯一似乎有更多“主动”空间的人,就是佛朗哥。对胡安·卡洛斯一世的前途和培养方式,成为了解佛朗哥的一个窗口。佛朗哥是一个独裁者,可是,独裁者和独裁者之间,在某种意义上来说,也可以有本质差别:就是有明白的独裁者和不明白的独裁者。这话听上去很奇怪,其实是很真实的存在。明白的独裁者知道民主社会是一种历史潮流,自己只是一个冲突社会无可奈何的结果,是一个历史过渡人物。而不明白的独裁者,会梦想独裁制度是社会的必然,会如古代帝制一样,千秋万代传下去。从胡安·卡洛斯一世的回忆中,可以看到,佛朗哥非常明白,自己只是一个过渡人物。\n\n  佛朗哥只给胡安·卡洛斯一世提供一流的教育机会,很少和他谈起政治,也几乎不给他处理政治问题的指点和劝告。面对佛朗哥时代的西班牙社会,年轻的王子会不由自主地主动问佛朗哥,在这样或那样的情况下,我该怎么办?胡安·卡洛斯一世回忆说,在这个时候,佛朗哥会说:“我真的不知道。可是,在任何情况下,殿下,你都没有必要做那些我不得不做的事情。当你成为国王的时候,时代已经变化了,西班牙的人民也将和现在不同。”在胡安·卡洛斯一世要求旁听政治上层的会议时,佛朗哥还是那句话:“这对你是没有意义的,因为你不可能去做我要做的事情。”\n\n  对于胡安·卡洛斯一世,这是非常困顿的状态,国家冲突的历史,再加上他处在父亲和佛朗哥之间的复杂关系。可以说,他后来成长起来,他的民主政治理念的形成,是他所接受的西方传统教育的逻辑结果,包括欧洲的历史、法律、政治学,等等。这样的教育不但是佛朗哥一手安排的,而且,佛朗哥显然知道这样教育的结果是什么。国王后来回忆说,他的政治法学老师,后来是改革初期最好的帮手和议长,曾经告诉他,你不必担心自己要向保守派发誓维护佛朗哥时代的原则,我们可以逐渐合法地改变它,我们一条条法律地逐步修改。最终,他们确实这样做了,而且做到了。\n\n  他回忆说,佛朗哥非常相信“瓜熟蒂落”这样的民间老话,相信时间的流逝会解决许多当时不可能解决的冲突。胡安·卡洛斯一世成长的时代,也是西班牙逐渐变化的时代。非常重要的一点是,内战之后有了新一代的西班牙人,胡安·卡洛斯一世是和他们一起成长起来的年轻人。他没有内战一代人相互之间的深仇大恨。\n\n  胡安·卡洛斯一世的状况很是复杂,一方面,他知道在很多年里,他的一举一动都可能被汇报给佛朗哥,另一方面,他在佛朗哥的安排下接受最好的教育。佛朗哥没有儿子,后来,胡安·卡洛斯一世感觉,在某种意义上佛朗哥把他当做自己的儿子。可是,佛朗哥天性是一个态度冷静、沉默寡言的人,从不对他流露感情。佛朗哥给了胡安·卡洛斯一世充分的和自己父亲交流的条件。胡安·卡洛斯一世认为,从政治理想来说,给他最大影响的就是自己的父亲。不可否认的是,佛朗哥给王子安排的教育,正是他接受父亲理想的坚实基础。\n\n  可是,胡安·卡洛斯一世也回忆到自己和父亲的分歧。父亲住在距离西班牙那么近的地方,却不能回来,而他则在马德里年复一年地读书。父子之间的交流一度因为对“西班牙”的认识而变得困难。胡安·卡洛斯一世说,18岁就流亡海外的父亲,就像任何一个长久流亡、长久没有回到故乡的人一样,故国越来越变成一个梦幻,西班牙成了他旧日记忆和想象的反射。可是,胡安·卡洛斯一世自己生活在这里,呼吸着这里的空气,他对自己说,父亲告诉我的那个西班牙已经是过去了,西班牙在变化,今天生活在那里的男人和女人,已经不是他记忆中的西班牙人。可是,他又不能对父亲直说:“你错了,父亲,一切已经都变样了!你的西班牙和我的西班牙已经不再是同一个地方!”父亲一度对他很生气:“你怎么变得和佛朗哥的看法一样。”胡安·卡洛斯一世对父亲说,因为他和佛朗哥生活在同一个现实的西班牙。还有一个重要原因,就是他时时在以一个未来执政者的眼光来看这个复杂的西班牙政局。所幸的是,父亲最后能够接受“西班牙在变化中”的现实,开始愿意倾听儿子对现实西班牙的介绍和儿子一些看法的来源。这种交流使得理想和现实之间有了一个调整,这对未来的西班牙国王非常重要。\n\n  在胡安·卡洛斯一世眼中,佛朗哥是个明白人,完全知道在他死后西班牙绝不会维持不变。对于作为他的权力继承人的“国王”位置,他也并不认为是旧制度下的绝对君权。胡安·卡洛斯一世也明确表明,在他执掌西班牙之后,他要实行民主制度。在去世之前,佛朗哥逐步向下属转移权力,他的部下也开始尝试对于新闻自由等立法的尝试。可是,独裁体制本身,以及地下反对派和地区独立运动的冲击,往往使得任何改革都处于进两步退一步的摇摆中,不可能有本质的转折。在佛朗哥病危的时候,胡安·卡洛斯一世去看他,佛朗哥拉住他的手,用力握住说:“陛下,我对您唯一的请求是维持西班牙的团结。”在表面上看,佛朗哥似乎留给他一个完整的西班牙,在他的统治下,西班牙人似乎是“团结的”,可是,胡安·卡洛斯一世清楚地知道,这个团结只是一个假象。因为,处于另一端的西班牙人并不能发出自己的反对声音。在那一端,有流亡海外的左翼政党,有在高压下如火山间歇喷发的区域独立运动等等。在高压撤出的那一刻,很可能立即分崩离析。\n\n  独裁政治与生俱来的问题,就是权力的滥用,独裁政治下有太多的侵犯人权的残酷事件发生。独裁政治的另一个问题,哪怕是明白自己只是一个过渡政权的独裁者,仍然本能地害怕权力的退让,因为手上沾染的鲜血太多。因此,即便是明白的过渡者,也往往把过渡时期的长度定为自己生命的长度。这都是具有民主思维的胡安·卡洛斯一世所无法认同、甚至常常感到难以忍受的,虽然他比其他任何人更理解佛朗哥的复杂处境。这也是他和佛朗哥在感情上始终无法真正走近的根本原因。试图提前脱离这种独裁困境的一个尝试,是以明确的对独裁者不予追究的承诺,来换取他早日交出权力,换得国家的早日解脱。这就是智利对皮诺切特的做法。皮诺切特是一个和佛朗哥十分相近的独裁者。智利人民让皮诺切特在独裁执政17年后提前交出了权力。可是,智利对皮诺切特处理的后续发展证明,这样的做法显然还是具有极大的争议。最后开始试图起诉皮诺切特的正是后来民主化以后的西班牙。\n\n  在这样的独特处境下,胡安·卡洛斯一世学到了“观察、倾听、自己保持沉默”。1974年,胡安·卡洛斯一世对一位历史学家说:“我要做一个现代的国王,维护国内和平,否则任何进步、任何发展、任何公正都是不可能的。而目前我还不能有任何作为。”佛朗哥的统治维持了40年,在胡安·卡洛斯一世看来,变化应该可以更早到来,后期的佛朗哥其实是在浪费他和西班牙人民的时间。然而也由于他对佛朗哥的更多了解,在胡安·卡洛斯一世成为国王以后,人们注意到,他从来不在公众面前批评佛朗哥。\n\n  新的起点\n\n  1975年11月20日,统治西班牙40年的独裁者佛朗哥终于去世。\n在佛朗哥的葬礼上,只有智利的皮诺切特前来出席。\n\n  佛朗哥政权本身是一个独裁政权,树敌无数。而胡安·卡洛斯一世又是佛朗哥一手培养起来的国王候选人,因此,在那一天,胡安·卡洛斯一世对站在他身边的人说,他一点不知道,现在,他是将戴上西班牙人民给他的王冠,还是将看到一个“人民卫队”向他走来,手里拿着逮捕令。\n\n  两天后,1975年11月22日,胡安·卡洛斯一世正式宣誓,加冕成为国王,世界各国政府的政要大多出席了他的加冕仪式。\n\n  胡安·卡洛斯一世是当时整个政府中唯一的“新人”,全套班子都是佛朗哥留下的。这些人感到紧张,他们知道变化是必然的,可是他们不知道变化会如何发生。他们的担心并非没有理由,因为在西班牙历史上,几乎只有两个极端的轮换,没有整个国家和睦的政治共处。假如另外一端上台,他们本人的安危都会成为问题。而整个国家和睦的政治共处,正是胡安·卡洛斯一世所追求的父亲的政治理想:“要做全体西班牙人的国王。”\n\n  胡安·卡洛斯一世明白,自己最终的角色,应该是君主立宪制度下英国女王那样的虚位君主。可是,现在,如同佛朗哥是内战后的一个过渡,他必须是介于佛朗哥独裁统治和真正的君主立宪制之间的过渡。他必须利用佛朗哥留给他的权力来尽快地、和平地完成这个过渡。\n\n  在以后的几年里,胡安·卡洛斯一世所做的事情,是将西班牙从专制政体安全平稳地过渡到一个君主立宪的民主体制,所有的反对派都被容许公开站出来,表达自己的意见,争取公众的选票,被所有的人称为是20世纪的一个奇迹。时过境迁之后,在西班牙,“就连最保守的人都承认,哪怕是佛朗哥本人在,也会认为已经死亡的东西不可能维持不变。”\n\n  胡安·卡洛斯一世一生都敬重自己父亲要团结所有西班牙人的政治理想,在他自己成功主导西班牙民主转型之后,他感觉,父亲的政治理想通过自己的手实现了。他说,我不必否认这是一个奇迹。没有一个国王做到过这样的事情。“我是一个合适的人,合适的时候,恰在合适的位置之上。”\n\nSource: [[冰点特稿:西班牙国王卡洛斯一世的命运和理想 - 精品转载[14] - SonicBBS|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1837368&Page=14&BoardID=21]]
苏联专家在中国基本状况及政策变化\n\n向国外派遣大量专家和顾问,是战后苏联从政治、经济、军事、外交和文化各个领域不断扩大对社会主义国家和第三世界的影响的一个重要方面,也是冷战时代社会主义国家之间关系中的一种特别现象。人们注意到,无论派出国的动机和初衷怎样,其结果都是事与愿违。以苏联为例,1948年斯大林对苏南冲突的第一反应就是撤退在南斯拉夫的所有专家,1956年波苏关系危机时哥穆尔卡首先采取的措施也是要求苏联撤出在波兰的顾问,而1960年中苏分裂展示给世人的信号又是赫鲁晓夫宣布召回全部在华专家。同样现象一定程度上也存在于南阿、中越、苏匈、苏阿关系当中。仅此一点就值得引起历史学家去思考社会主义国家关系中派遣专家问题的方方面面。\n\n本文专门讨论1949-1960年在华苏联专家的问题。苏联派往中国的专家人数最多,时间最长,对于在中国建立斯大林模式的经济体制也起到过非同寻常的作用。所以,加强这方面的研究,不仅对于理解派遣专家现象、探讨社会主义国家关系特点、分析中苏同盟破裂的原因和美国分化中苏关系的战略具有特殊意义,而且有助于启发人们去思考中国走向现代化发展道路的诸多历史因素。\n\n为了满足中国的政权和经济需要\n\n早在1948年夏,苏联已经派遣专家技术小组到中共建立的东北根据地帮助修复铁路,第二年刘少奇访苏后,又带回一批制定经济恢复计划的专家。到中华人民共和国成立前夕,在华苏联专家已有600余人。据中国的档案文献,1949-1960年来华工作的苏联专家总计至少应超过2万人。\n\n这么多的专家是如何到中国来的?如果说战后苏联向东欧国家派遣专家(主要是军事、安全顾问)是出于控制和渗透的目的,因而多少有些强加于人,那么,到中国来的苏联专家,无论是在经济、文教部门,还是在军事或行政单位,则完全是为了满足中国共产党巩固新政权和发展经济的需要,完全是中国政府请来的。\n\n大量苏联专家和技术人员来华帮助中国恢复国民经济\n\n中国共产党长期从事武装斗争和农村工作,而管理城市和进行经济建设的经验和人才则严重缺乏,因此,掌握政权以后就特别需要学习,尤其是向苏联学习。在这方面,聘请大量苏联专家来华工作,无疑是一条重要而快捷的途径。正是为了满足中国的需要,20世纪50年代初莫斯科提供的直接帮助之一,就是派遣大批工业技术和军事训练专家以及国家行政管理顾问来华工作。\n\n缺乏可靠的科学技术人才是新中国恢复经济和发展生产所面临的一个严重问题。1949年10月中央财政经济委员会主任陈云告诉苏联大使罗申,恢复国民经济的一个重大障碍是缺少懂专业而又忠于人民政府的技术干部。新中国从国民党那里接收下来的工程师和专家总共只有2万人,而他们大多数人的政治观念是反动的、亲美的。以最大的鞍山钢铁企业为例,那里的70名工程师中竟有62名是日本人,他们在心理上仇视中国人,尤其是中国共产党。据中国有关统计资料,作为全国钢铁工业中心的东北,在日本人被遣送回国后,其技术人员占该行业人员总数的比例已经降至0.24%。到1951年7月,周恩来仍然认定,技术干部严重不足“将是中国工业化的一个主要障碍”。尽管中国政府正在努力“组织训练班和技术大学,派大批学生到苏联留学,但目前战争还在继续,这个问题很难解决”。由于缺乏专家,中方甚至无法提出要求苏联提供经济援助的货物清单,以至毛泽东提出要求设立中苏共同委员会,请苏联专家“来华与我们共同商定全部或主要部分货单”。显然,大量苏联专家和技术人员来华,对于中国国民经济的恢复,不仅是必要的,而且是急需的。据中国档案材料,自1950-1953年先后到中国帮助经济建设工作的苏联专家共计1093人。如果按照苏联的统计材料,1951-1953年到中国工作的高级专家已有1210人。这些数字大概都没有把铁路专家计算在内,据铁道部1953年的工作报告,仅1950年5月长春铁路公司正式成立以来,就先后聘请苏联专家1500人。\n\n在经济建设的起步阶段,首先需要技术支持的就是基建工程的设计力量,而在这方面中国确实无能为力。到1953年,全国总共只有78个设计单位,每个单位一般不足500人。如此单薄的力量根本无法满足中国全面恢复经济和建设的需要。于是,应中国政府要求,苏联派遣了大批设计专家来华。与确定第一批苏联援建项目相适应,1950年2月毛泽东和周恩来访苏时聘请了第一批16个苏联设计组。朝鲜战争爆发后,为了建设东北部地区工业基地,中国政府又聘请了第二批3个苏联设计组。第三批23个苏联设计组是1951年聘请的。这样,到1951年夏,仅设计专家,苏联就派来了42个小组,其中30个安排在东北地区。为了执行一五计划,中财委决定再请求苏联政府派出5个综合专家组于1952年下半年来华进行全国性规划、配置和设计工作,其任务是全国电气化规划,全国钢铁工业的发展远景和产品品种方案确定,全国机械制造工业现有工厂调整和新厂建设规划,全国船舶工业工厂及铁路机车车辆制造厂的调整、扩建和新建规划,同时还有6项地质勘察工作需请求苏联帮助。\n\n苏联派遣军事技术和训练专家帮助中国军队掌握新式武器\n\n建国初期中共对苏联还有一个急切需求,就是派遣军事技术和训练专家。中国军队虽英勇善战,但武器装备实在太落后,炮兵数量有限,空军根本不存在,仅有的一些海军舰只破旧不堪,甚至还保留着清朝末年的战船。这样的装备,既要保证国家的空防和海防,又要渡海解放台湾,还要出兵朝鲜与美军作战,显然力不从心。而从苏联大量购进飞机、军舰及其他现代化武器后所面临的问题是部队文化素质太低,自己无法立即掌握和使用新式武器。据统计,1952年中国军队128万排长以上的军官,达到大学文化程度的只有2.14%,具有高中水平的占12%,还有27.21%的人是文盲。刘少奇后来向苏联大使尤金承认,那时中国军队的一些指挥员不是其所辖兵种的内行,有些空军团长没当过飞行员,炮兵军官没当过炮兵,他们“应该接受培训,以便能够管理机械化的部队”。于是,苏联不仅需要提供武器,还必须派遣教官和军士来帮助中国军队掌握新式武器。\n\n为了帮助中国建立6所空军学校,1949年底根据双方协定,苏联派出了从校长到地勤人员的全套人马,总计878名专家。与此同时,苏联海军顾问711人也分三批先后来华。朝鲜战争爆发后,中国领导人更是频繁地向斯大林提出派遣军事顾问的请求,既是为援助朝鲜对美作战,也是为改善中国军队素质,苏联基本上满足了这些要求。如1950年8月,在中国尚处于战略防御阶段时,苏联便增派了38名空军顾问来华,1951年2月又派出15名军事顾问。同年9月,战争进入僵持阶段,毛泽东要求苏联派83名顾问到志愿军部队工作。尽管斯大林不太情愿,但在中方一再坚持下,苏联还是同意派遣以陆军大将扎哈罗夫为首的5人专家小组进驻在朝志愿军总部工作。此后,1951年11月苏联再次应中方要求派出19名空军顾问。直到战争接近尾声,对于1953年1月中国请求派12名海军航空兵顾问的电报,斯大林答复可补派3人,其余从已在华的顾问中派出。\n\n中共在国家管理方面的主要难题也是干部文化水平低下。根据1950年3月中共中央组织部长陆定一接见苏联驻华代办谢巴耶夫时通报的材料,当时华北有150万党员,其中130万是文盲或半文盲。在区委以上领导人员中,近50%没有文化或文化不高。中共准备用2-3年时间在党的基层干部中扫除文盲,用5年时间在一般党员中扫除文盲。依靠这样一支干部队伍当然是无法对偌大中国进行有效管理的。因此,中共一方面动员各部门干部到苏联学习、参观,一方面聘请大量苏联专家来华协助政府进行管理。苏共中央的档案提供了1954年第1季度苏联顾问在华工作范围和地区的证据:当时在中共中央和政府各部委的顾问达403人,这个数字大约占当时在华经济专家人数的1/3,而且其中318人,即3/4以上的顾问集中在北京。这些顾问遍及中共中央和政府所有部门,从安全、军事、情报,到体育、卫生,无所不在。由此可以想见,中共对国家尤其是城市的管理,最初是何等地需要和依赖于苏联专家传授的经验。\n\n苏联派往中国的专家,不仅是中国要求的,而且往往是应中国临时和紧急之需。建国之初张家口以北地区发生鼠疫,威胁平津,毛泽东请求苏联空运疫苗和血清,并派遣防疫专家来北京。第二天斯大林便回电答应了这一要求。1949年底中国人民大学开学时确定使用50名苏联教师讲课,两天后苏联部长会议便答复立即先行派遣9名教员到人大任教。同时,苏联还满足了中国政府的另一个临时请求:向中国派遣一组海军专家,携带必要的器材,帮助打捞沉没于长江的“重庆号”战舰。1950年1月6日苏联外长维辛斯基通知毛泽东,为排除吉林水电站的故障,苏联政府已决定按中方要求在5天内派出4名苏联专家到中国。1953年7月中共中央党校(马列学院)扩大招生,需要增聘4位苏联教授来校讲课,苏联方面立即满足了这一要求,如此等等。\n\n专家派遣和管理工作的混乱局面\n\n从上述情况可以看出,20世纪50年代初期很多专家来华是为了解决中国之急需,而且专家的聘请与派遣,往往是在国家领导人之间直接交涉的,没有确定的主管部门统一管理,也没有相应的计划和措施。所以,尽管高层对此十分重视,但向中国派遣专家的工作是相当混乱的。\n\n最初在华苏联专家负责人是莫斯科驻中共中央的代表柯瓦廖夫,1950年毛泽东访苏时,斯大林认为此人不懂政治,作为铁路专家,其技术也不全面,所以推荐时任苏共中央人事局局长和有色冶金工业部副部长的阿尔希波夫担任总顾问。为此,联共(布)中央政治局专门做出决议,在苏联驻华大使馆设立经济参赞职务,并批准阿尔希波夫以二级特命全权公使衔担任这一职务。斯大林曾指示,苏联专家的任务就是把所有的知识和技能告诉中国人,直到他们学会为止。苏联专家到中国后由中方分配工作,受中方各级负责人的领导。在苏共十九大期间,苏联国家计委主席萨布洛夫还向刘少奇和李富春建议:“苏联专家不能太多,更不要专家包办”,“不一定事事派苏联专家去。派专家一定要专业对口才行。\n\n”不过,苏联多年形成的官僚体制使得领导人的良好愿望无法贯彻下去。通过凯佩尔教授对大量苏联专家的采访可以得知,派遣专家的问题最初是由联共(布)中央直接负责的,但具体负责人关注的只是专家的政治背景。而对于专家如何在中国开展工作,却没有任何足够的准备,既没有发给他们一些有关中国的材料,也不要求他们到中国后学习最基本的汉语知识。因此,大多数受聘者对中国的历史、政治和当前形势竟然一无所知,有报告说,马上要出发到中国去的教师甚至都没有看过刚从那里返回的苏联专家写的在华工作总结。\n\n中国没有及时做好接受专家的各项准备工作\n\n实际上,尽管中国迫切需要苏联专家,但并没有及时做好接受专家的各项准备工作。例如,1949年底大量专家来华,一时间住满了北京饭店和解放宾馆,接待单位只能在北京以外设法为他们安排住宿;有时由于缺少足够的翻译人员而不得不减少聘请的专家人数。鉴于这种情况,1950年在周恩来领导下成立了苏联专家工作指导小组,日常工作由外交部苏联东欧司司长伍修权和政务院财经委员会副秘书长杨放之主持。中方最先成立的苏联专家事务管理部门是“北京苏联专家服务局”,专门负责接待、住宿等生活问题。\n\n安排专家工作方面的准备同样非常仓促。如中央各部和东北等地区的主管部门纷纷提出聘请专家的要求,却没有事先为苏联专家设计组准备好必要的资料,多数设计组来到中国后还要搜集设计资料,以至不能依照合同如期完成工作,必须延长留在中国的时间。1951年鞍山钢铁厂对收集原始资料工作没有统一领导,零星分散,没有专责,结果使电气、土建、水道、供热、总平面图等方面的设计工作缺乏相互配合,导致返工延误。按中国重工业部统计,1953年以前,除由苏联专家在华直接领导收集资料的项目外,所有各厂矿的文献和资料大都延期交付。据初步计算,延期提交的原始资料,约占全部原始资料的一半以上。此外,由于中方提供的资料不准确造成设计失误的事情也时有发生。其结果,不但增加了设计费用,推迟了建设工期,也因苏方专家延期返国,耽误了他们在国内的原有工作。\n\n为了克服在聘请苏联专家方面各自为政的现象,中央财经委在1951年4月发出通知,要求各大行政区有关聘请设计专家事项,应呈由中央主管部核转中财委呈请政务院批准。政务院核准后,经中财委通知主管部及贸易部,由贸易部会同主管部与外国驻华商务代表接洽办理。必要时由贸易部授权驻外商务参赞处在国外洽商办理。4个月后,中央人民政府再次强调,财经、文教、政法等所有系统聘请外国专家的批准权限均在政务院。专家到职后的薪金、待遇等事项亦由政务院通知有关部门统一办理。\n\n中苏双方的沟通和联系也十分欠缺。如1954年12月9名苏联女教师来人民大学任教,中方却一直未得到通知;两位国家安全机关的专家已经到达北京,中国有关方面竟无人知道此事。还有,计划专家班高夫刚刚派到中央财经委员会计划局工作不足一个月,苏联总顾问便通知将其调赴东北经济计划委员会工作。既没有同专家本人商量,也不征求计划局的意见。此外,由于中方有些部门在聘请专家方面缺乏计划,考虑不周,往往在报请中央批准后又要求改变专家种类或名额。这些都是造成双方交涉困难,出现麻烦的原因。\n\n周恩来出面协调援华专家问题\n\n为解决上述问题,中苏双方加强了高层接触。1953年6月8日,周恩来接见苏联大使库兹涅佐夫和军事总顾问柯托夫、政府部门代总顾问布拉金(阿尔希波夫为洽谈一五计划援华问题回国),接受了苏方提出的今后统一由苏联大使馆办理各系统增聘、延聘、辞聘专家的手续的意见,并表示今后凡带方针政策性和涉及各部门全面计划性的工作问题,都吸收首席顾问或专家组长参加党委会议进行讨论。6月13日,周恩来致信毛泽东等人提出:为统一管理苏联专家工作,并负责对苏联专家的聘请和分配,建议政务院下设以伍修权为组长的专家工作小组,以及专家工作办公室和专家招待处,为专家工作小组的办事机构。拟于月内召集一次中央各部委负责人会议,讨论改进专家工作问题。9月9日,中共中央做出《关于加强发挥苏联专家作用的几项规定》。此后不久便成立了国务院外国专家工作局,杨放之任局长,进一步加强了对专家工作的管理。从1954年起,苏共中央的档案中也开始出现了有关专家工作计划的记载。\n\n苏联专家来华的高潮时期朝鲜战争结束后,中国以一五计划为核心开始了大规模的经济建设,对于苏联专家的需求猛然增加。与此同时,莫斯科新领导人,特别是赫鲁晓夫,也注重调整对华政策,加强中苏两党和两国的合作。苏联专家来华工作由此出现了高潮。\n\n仅1954年1月份,苏联即向中国派去343名专家。根据中国技术进口公司统计,是年1-3季度工矿企业新到苏联专家467人。到年底,除期满回国者,在工业部门的苏联技术专家已达820人。据对外贸易部副部长李强估计,中国聘请的技术专家,“1954年比1953年增加两倍多,1955年比1954年可能还要多些”。鉴于一五计划主要是为中国工业化奠定基础,所以,从此期来华专家的比例看,主要集中在基础工业部门。到1954年底,在中国各厂矿企业的苏联和东欧各国专家,82.4%集中在重工业部、一机部、二机部和燃料工业部系统。可见,1954年苏联专家大规模来华仍然是根据中国的需要。据苏方的统计,在1954-1957年工业项目建设过程中,按照经济和技术合作协定,苏联除向中国提供了大量机器设备、设计图纸、技术资料和各种制品生产许可证外,还派遣了近5000名专家,其中1954年983名,1955年963名;1956年1936名,1957年952名。到1956年底,在华工作的苏联专家人数达到最高峰,为3113人,其中技术专家2213人,经济顾问123人,科学和文化领域的顾问和专家403人,军事顾问和专家374人。如果按照中方的估计,此期苏联专家人数还要多。\n\n在短时间内派遣大量专家来华,苏联的管理工作难免出现差错。时任苏联外交部第一远东司司长的费德林1954年1月向苏共中央报告说,答应往中国派遣的50名地质专家,结果只来了21名,而卫生保健专家根本就没有来。更为糟糕的是,某些部派来的专家明显没有能力或身体欠佳。苏联共青团中央书记谢列平也报告说,到中国考察的结果表明,由于选人不当,把一些专业水平不高的顾问派到了中国。一位在冶金部工作的苏联顾问,不仅对中国的冶金状况缺乏了解,甚至对苏联先进的炼钢工艺也不熟悉。谢列平认为这简直是耻辱。1957年外交部的几份报告反映,苏联国内各部委和行政机关对派遣专家问题没有给予足够重视,把一些素质不高的人派到了中国,很多专家事前毫无准备,一些人工作状况很糟糕,甚至有人还触犯了中国的法律。由于对派遣条件控制不严,有的部门把年老体弱无法工作的人派到中国,以至有几个人长期患病,到中国只是养病,直到身体康复又被送回国。教育部门派遣专家在时间安排上有很大漏洞,有些教师到中国后,学校正在放假,根本无事可做,而几个月后又该回国了。外交部还向苏共中央抱怨说,已决定派往中国的39名专家中,至今有31人的材料还被搁置在出国委员会。\n\n其实责任并不完全在苏方,中方聘请不当,准备不足,也是造成苏联专家在华期间工作量不足,到期又不能返回的主要原因之一。很多企业没有根据工作进度安排聘请计划,便贸然请来大批专家。如陕西兴平中速柴油机厂急急忙忙发出聘用专家的申请,但8位苏联专家到厂后,发现建厂计划推迟,甚至主厂房还未建起,结果无所事事。还有兰州化工厂、洛阳铜加工厂、洛阳高速柴油机厂及中山大学和西北工业大学的实验室,都因原材料或仪器供应不上而造成专家工作延期。长春汽车制造厂则有16位专家因聘期不当,不能发挥作用而提前回国。还有3位负责职工技术培训的苏联专家已经到厂,而该厂的招工工作尚未开始,只得由苏联调回。\n\n这些情况的发生,自然会引起双方的矛盾,特别是在中苏关系出现裂痕的时候,专家工作中的问题便成为双方相互指责的借口。\n\n苏联的谨慎政策和中国的少而精原则\n\n1956年10月波苏冲突时,苏联被迫答应撤退在波兰的军事专家,并在10月30日发表《关于发展和进一步加强苏联同其他社会主义国家的友谊和合作的基础的宣言》,表示愿意考虑撤退在其他国家工作的苏联专家。此事对在华苏联专家也产生了影响。\n\n实际上,中国聘请苏联专家的政策已经开始有所改变。1957年2月6日陈云在国务院常务会议上谈到,我们需要苏联专家,但有些部门过去请得多了些,以后要严格控制。随后国务院发出通知,规定“今后在聘请专家方面必须严格掌握精简的原则,凡可聘可不聘的坚决不聘,凡能缓聘的坚决缓聘”。中国改变聘请专家政策的考虑,一方面是从经济角度出发,目的是缩减聘请专家的庞大开支。另一方面,是对某些在军队和政府部门的苏联顾问有意见。早在苏共二十大以后,毛泽东已经开始思考“以苏为鉴”和不能照搬“苏联模式”的问题了,因此再保留大量可能影响中国政策方针或体制建设的顾问显然是没有必要了。当赫鲁晓夫提出撤走所有顾问的建议时,毛泽东表示反对,并主张把所有的顾问都换成专家。随后,中国政府逐渐确定了聘请苏联专家的新方针。\n\n赫鲁晓夫尚未离开北京,周恩来即将两国政府关于苏联军事专家在中国工作问题的议定书草案送毛泽东审阅。议定书规定:苏联根据中国政府请求而派来的军事专家归中国政府支配,如果所在单位继续需要他们,应即改为专家,在双方商定的期限内,继续工作。8月23日国务院通知:“各部门聘请苏联专家必须严格贯彻少而精的原则,只有工作上确属需要的新技术、新专业和薄弱环节才可聘请专家,同时,要注意凡能聘请短期专家解决的,就不要聘请长期的专家,凡能够几个单位合聘的就要合聘。”10月20日中共中央和国务院再次联合发出通知,一方面强调绝大部分苏联专家是优秀的技术人才,对他们应热情相待,并虚心向他们学习;一方面重申只有在非聘请专家不可的部门和技术环节才能聘请专家,聘期以短期为主,一般不要延聘。\n\n苏联方面也加强了对聘请专家手续的管理。1958年12月苏联经济专家负责人符明转告中方,今后将严格按照派遣专家的新协定办事。过去中方往往在聘期届满时才提出延期问题,苏方为了满足聘请部门的要求,一般都同意先把专家留下来,以后再补办手续,今后使馆就没有权力这样做了。中方要求延聘专家往往并非是工作十分迫切需要,今后最好不要再延聘专家。确属非延聘不可的专家,希望在专家满期前2-3个月提出请求,以便在专家满期以前办好延聘手续。此后,中方进一步对聘请专家的专业、聘期、来华日期和聘请条件提出了严格要求,并规定了审查制度和相应程序。\n\n由于执行新政策,苏联向中国派遣专家的数量逐年减少:1957年952人,1958年915人,1959年699人,1960年410人。再加上不断有专家到期回国,从1957年开始,在华工作的专家人数更呈现下降趋势。有材料说,1957年在华苏联专家共2419人,1958年为1285人。如果与前引苏方统计数字相比,则在华苏联专家1957年减少了694人,1958年减少了1134人。至于1960年4月在华工作的苏联专家总数(约1500人)还多于1958年,其原因在于中国许多单位要求延长在华专家的聘用期。\n\n这里应该指出的是,在1957年以后聘请专家的低潮中,并非所有部门都减少了对苏联专家的要求,有些单位甚至还增加或新聘了苏联专家,这主要表现在国防新技术领域。不过,随着中苏关系恶化,特别是1959年10月双方高层领导人之间发生严重争吵后,聘请专家的工作日益陷入僵局。1960年5月国务院再次强调,聘请苏联专家的原则是继续贯彻自力更生为主,争取外援为辅的方针;聘请专家只限于为保证苏联援建项目的需要和发展高、精、尖、新的现代技术以及培养高等学校开设新专业或新课程的师资;聘请专家必须严肃认真,全面规划,通盘考虑,严格审查。苏联方面对专家来华则更加严格限制,特别是在中国实际急需的领域。7月3日聂荣臻报告:苏联的援助在国防科技领域已经封口,对国民经济中的新技术则尽量控制,对已经签订的协议采取拖延和推托的态度。对此,周恩来批示:“独立自主,自力更生,立足国内”;“专家问题:一、满期的一般不留,热诚欢送;十分必要而专家本人又好,可提出延聘,如不同意,即不再留。二、未满期的我们一律不退,帮助他们好好工作,他要撤走,留一次,不成,即不再留;如不征求同意即撤走,应表示遗憾。三、新聘的,要少提或不提,十分必要的提出后不同意,即不再提。”至此,苏联全面撤退专家的迹象已经显露,而中方也有了心理准备。\n\n中苏两国同属社会主义阵营,又有同盟条约做保证,相互之间提供援助本在情理之中。中国需要专家,而苏联也愿意给予帮助,双方最初的热情感人至深,但在具体执行派遣或聘请专家的政策时,中苏都没有从国家关系的法律角度认真考虑问题,缺乏严密的计划、具体的规定和详细的措施,致使矛盾和摩擦不断出现,即使中苏关系没有恶化,这种状态也无法长期维持。(原载《当代中国史研究》2002年第1期,本文系《新华文摘》节选版本 沈志华)/(编辑:前线)\n\nSource: [[同志+兄弟的年代 前苏联专家援华揭秘 - 精品转载[10] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1847752&Page=10&BoardID=21]]
哲学啊,你丫真是宇宙间最奇妙的科学。\n象牙塔内管教学子景仰,\n花前月下能让少女倾情。\n居庙堂之高可为愚民纲领,\n处江湖之远则为骗人把戏。\n你谈笑风生,看客纷纷为你解囊,\n你振臂一呼,万民可以为你赴死。
作者:STUKA\n\n  汤恩伯,浙江义乌人,杭州体育学校,明治大学政经系,日本士官学校中国队第十八期步兵科毕业。北伐初期回国,加入北伐军任总司令部参谋、第一师学兵连连长、黄埔军校第六期一大队大队长;后改任第六军教导总队(总队长李国良)总队附。留学的中下级军官一般都会先调教育单位,这是清朝留下来的传统。汤氏在军事教育方面表现不俗,为其一生事业之基础。第六军解散之后,汤氏改任黄埔军校军事教官、第八期大队长,并迅速升任教育处副处长。\n\n  一九二九年六月,军校成立军官教育连,由教育长张治中兼任连长,调训优秀下级军官,汤氏任副连长(该连下辖祝绍周第一排、惠济第二排、胡琪三第三排、王毓文第四排、唐光霁第五排、陈廷谋第六排)。同年九月,汤氏升任连长(副连长改祝绍周)。五年之后为中央军校洛阳分校主任。一九二九年十二月,军校成立军官教育团,扩大在职军官再训练,汤氏兼任军校军官教育团(团长张治中)步兵营营长。\n\n  一九三○年五月,军校教导部队和特种兵合编为教导第二师。汤氏在部队中一向任教育职务,全无连、营、团之任职经历,居然被提升为教导第一旅旅长,晋任之速,足使到台后的彭孟缉、余伯泉、孙立人膛乎其后。教导第二师虽然首战不利,但汤氏依然任旅长,改第四师后调升副师长兼第十旅少将旅长。\n\n  一九三一年二月,围剿红军不利的中央军精锐第二师急需整顿,蒋介石于是调汤氏接任第二师中将师长。五年之间由中尉到中将,足见蒋介石赏识之重。但汤氏毕竟缺乏实战经历与军中人脉,而且在大军指挥上也显的生疏,所以初到第二师即遭严重失利,损失近一团。\n\n  一九三二年五月,汤氏调任由钱大钧一手组建的第八十九师任师长。第八十九师在汤氏接任之后即隶豫鄂皖剿总,开赴战场与红军作战。汤氏此时才逐渐显露其战术天才,在碉堡攻势的战略方针指导下,第八十九师之各场战役尚称顺利。\n\n  一九三四年二月,汤氏调任第四师师长,该师为其老部队,所以在系统关系上接任尚无问题。汤氏接掌第四师之后旋兼赣粤闽湘鄂五省剿匪军第十纵队指挥官,统一指挥第四师、第十师、第八十八师与第八十九师,参与讨伐福建政府的战役。闽变平定后,第十纵队参与第五次围剿,进击赣南,与北路军第五纵队会师。一九三四年十一月,汤部调湘西追击红军萧克所部,旋调长沙整训。一九三五年六月调鄂南通城,进剿红军徐彦刚第十六师,并将该师消灭,徐彦刚不久后也被当地农民杀害。\n\n  一九三五年四月,汤恩伯叙任陆军中将军衔。同年九月,汤氏升任第十三军军长,晋升速度令人侧目。但在与红军的恶战中汤氏已经积累了相当的实战经验,之后其战术天分乃能光耀于抗战。第十三军的两个师都是中央军中装备精良的劲旅,尤其如虎添翼。\n\n  一九三五年十月,第十三军急调晋南围堵红军,一路追击到陕北的绥德、米脂、晋北宁武、朔县、右玉,并由杀虎口出塞,进驻绥东,作为百灵庙战役的后盾。中央军在追击红军到西北地区之后开始经营晋陕绥,汤部即驻绥东,控制平绥铁路,并一度兼任陕北剿匪善后办事处主任。\n\n  一九三七年七月抗战军兴,汤恩伯即奉命率第十三军开南口布防。南口为西北关钥,一九二六年刘汝明与奉军血战之处,在战略地位上非常重要,第十三军在怀来、南口与居庸关一线与日军血战十日,直到张垣被日军突破,才不得不突围。南口血战在抗战史上威名显赫。\n\n  第十三军突围之后调河北刑台整训,汤氏升任第二十军团军团长,辖第十三军与第八十五军。是时正遇河北两路战线崩溃,汤军团抵挡突进的日军第十四师团于漳河,直到十月底才将防务交给第三十二军,急调晋东,再度应援第二战区,转战同蒲路。一九三八年一月,第二十军团调南阳整训,二月即调归德,成为鲁南会战之中坚。三月,第二十军团急开临城,参与鲁南会战,并指挥第五十二军。汤氏在此役中显露其战略素养,第二十军团到临城之后猛攻枣庄峄县,日军以一个旅团进援台儿庄,汤恩伯一个反手拍将日军第十师团圈入包围圈,再沿台枣公路猛烈冲杀,贯穿日军阵线四公里,第二集团军则在台儿庄正面坚拒,使日军在两面夹攻前大溃。台儿庄大捷是抗战初期的传奇故事,汤军团之功不可没也。\n\n  一九三八年五月第五战区总撤退,汤恩伯率部撤往南阳。第五战区对撤退路线之规划甚差,所以第二十军团宁可自择路线,使李宗仁长官对汤氏衔恨甚深。一九三八年五月,汤氏兼任第五战区陇海兵团总指挥(副总指挥刘汝明),旋调上高兼任第九战区第一兵团总司令,为武汉会战后盾。一九三八年六月,汤氏升任第三十一集团军总司令。七月,蒋介石有意整顿一支攻击军,对日军后方进 行战略突进,汤恩伯即受任为军委会突击军军长。\n\n  这段历史少有人知,这个突击军辖第四师、第八十九师、第二○○师。其中的第二○○师当时是不折不扣的装甲师,军部并配署完整的特种兵,可以说突击军是中国的第一支装甲军!这个突击军在上高整编,但是战局恶化过速,使军委会不得不放弃反攻大计,而将汤集团军使用于瑞昌、阳新、通山一带阻击战。\n\n  一九三八年十月,武汉会战接近尾声,第三十一集团军调往邵阳整补。一九三九年元月开宜城,再度隶属第五战区。五月参与随枣会战,纵横襄花路,成为日军口中的坚强部队。十二月冬季攻势奉蒋介石手谕进击第三师团,大获全胜,成为冬季攻势中最辉煌的一段。一九四○年五月枣宜会战,第五战区主战场虽然全面失利,中央兵团完全崩溃,但是第三十一集团军仍打的有声有色。一九四一年二月豫南会战与敌大战于舞阳,日军再度惨遭重击。华北日军对汤氏衔恨至深,以汤恩伯部为天字第一号大敌。\n\n  一九四○年汤氏兼任鲁苏豫皖四省边区总司令与边区党政军分会主任,这是当时的一个流行作法,将战区中的党政军大权集于军事长官之手。汤氏兼长民政之后豫南大灾,但汤部大事扩军,部队素质良莠不齐。汤部为了维持军费,只好在重灾之区大事征敛,河南省税征起著名的“汤粮”。汤恩伯部一度发展至四个集团军,含大量游杂部队共三十万官兵,大半靠河南一省支持。所以河南四害,水旱蝗汤之谣不胫而走。一九四二年一月,汤氏兼任第一战区副司令长官,成立副长官部。一九四三年九月兼任第十九集团军总司令,中美合作所第十训练班主任。一九四四年四月,日军发起豫中会战,第一战区防线全面崩溃,汤恩伯部野战军安全撤出中州,可谓战略性转进。这次撤退常被形容为如何狼狈,其实汤部之退尚称可佳。日军检讨即称“作战目的虽在捕捉汤之主力,而在禹县等地获得局部性胜利,但其主力则在汤之巧妙指挥下逸脱,始终未能捕获意志顽强的汤兵团”。结论出自最嘉遮掩的日寇之口,可觇其实。\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: [[Untitled Document|http://www.mgjs.com/01wenzhang/03renwu/tangenbo.htm]]
在Blogger Beta中,(自動)隱藏NavBar or 將NavBar置底\n\nAdd to del.icio.us • Add to HEMiDEMi\n\n11/5 update: 新增(自動)隱藏NavBar\n自動隱藏NavBar (Peek-A-Boo Blogger Navbar)\n所謂自動隱藏NavBar,就跟windows裡自動隱藏工具列一樣,平常是隱藏的,要用到NavBar的功能時,將滑鼠移至上方,NavBar就會出現了! 在CSS中 " body{ "之前加入下列紅色語法\n\n/* Use this with templates/template-twocol.html */\n#navbar-iframe{opacity:0.0;filter:alpha(Opacity=0)}\n#navbar-iframe:hover{opacity:1.0;filter:alpha(Opacity=100,\nFinishedOpacity=100)}\nbody {\n background:$bgcolor;\n margin:0;\n只適用於 FireFox & Opera,IE7目前只能隱藏,沒辦法自動出現\n\nRefernce:Blogger v3.0: Hovering Peek-A-Boo Blogger Navbar\n\n在CSS中,body後加入下列語法\n\n隱藏NavBar (Hide the NavBar)\n/* === Hide the NavBar === */\n.Navbar {\nvisibility:hidden;\ndisplay: none;\n}\n/* === Hide the NavBar === */\n\n將NavBar置底 (Place the NavBar at the bottom of the page)\n/* === Place the NavBar at bottom ===*/\nbody { position: relative; }\n.Navbar{\nposition: absolute;\ntop: inherit;\nbottom: -32px;\nleft: 0px;\nmargin-bottom: 0;\n}\n/* === Place the NavBar at bottom ===*/\n\n\nReference Link:Remove the NavBar\n\nSource: [[shenez's blog: 在Blogger Beta中,(自動)隱藏NavBar or 將NavBar置底 [Anonymoused]|http://anonymouse.org/cgi-bin/anon-www.cgi/http://shenez.blogspot.com/2006/10/navbar-or-navbar.html]]
不失为简便快速的方法。\n我自己编译的Emacs23还有一个小瑕疵——Auto Completion的minibuffer总是占据整个Frame,而不是半个,有点小小的不爽。\n更新:这个问题依旧。\n\n!!添加source\n{{{\ndeb http://debs.peadrop.com feisty backports\ndeb-src http://debs.peadrop.com feisty backports\n}}}\n\n!!添加验证\n{{{\nwget http://debs.peadrop.com/DD385D79.gpg -O- | sudo apt-key add -\n}}}\n\n!!更新source\n{{{\n$sudo apt-get update\n}}}\n\n!!安装Emacs-snapshot\n{{{\n$sudo apt-get install emacs-snapshot-nox # 非X版本\n-*-or-*-\n$sudo apt-get install emacs-snapshot-gtk # GTK版本\n}}}\nSource: [[在Ubuntu下安装Emacs 23 - V2EX|http://www.unlockyourweb.com/index.php?q=aHR0cDovL3d3dy52MmV4LmNvbS90b3BpYy92aWV3LzEzOTg4Lmh0bWw%3D&hl=1ed]]
这两天把系统换成了kubuntu,原因大概是kubuntu的一些软件对我的吸引力较大,比如amarok,kopete,kftpgrabber等,其实gnome也蛮好的,但是前一段时间想找个顺手的ftp软件居然都找不到,又不想在gnome里面用太多的kde软件,因为风格不对,看起来别扭,一怒之下就换成了kde。\n但是换成了kde之后就是我恶梦的开始,scim这个输入法和kde冲突的利害,登录也报错,很多程序也频繁崩溃,郁闷得要死.于是就换成了fcitx,一切都美好了.\n我发现ubuntu源里面的fcitx是3.11版的,而最新的是3.21,并且加入了拼音加加4的词库,我在windows里面一直是拼音加加的老用户,拼音加加的词库很不错.而fcitx的词库感觉还不是很好,很多常用词的位置都不对.所以就想安装fctix3.21.\n\n首先把系统中原有的fcitx卸载\n<<<\nsudo apt-get remove fcitx\n<<<\n在sources.list里面加上源代码的源,其实就是复制一份,把前面的deb改成deb-src\n然后 sudo apt-get build-dep fcitx\n这个时候到fcitx的主页上下载最新的源代码. http://www.fcitx.org/main/?q=node/9\n我下载的是 fcitx-3.2.1.tar.bz2\n然后解压.\n就是老一套\n<<<\n./configure\nmake\nsudo make install\n<<<\n完成之后再执行下面的语句\n<<<\nsudo sh -c " echo 'export XMODIFIERS=@im=fcitx ; export GTK_IM_MODULE="fcitx" ; export QT_IM_MODULE=XIM ; fcitx ' > /etc/X11/Xsession.d/95xinput "\nsudo chmod 755 /etc/X11/Xsession.d/95xinput\n<<<\nctrl+alt+backspace重启一下X,再登录进来应该就可以了.\n在源代码目录下的doc目录有个pdf文档,可以看看.\nfcitx的配置文件在 ~/.fcixt/下面.注意这些文件是gb2312编码的,所以要选择一个好的编辑器.我的配置好的vim可以正确识别.修改完成之后同样要保存为gb2312的编码,否则fcitx不能识别. 修改完成,调出fcitx,按下 ctrl+L就可以重新读取配置信息.\n\n----\n[转]fcitx蓝紫色简单风格\n<<<\ncd ~/.fcitx\ncp config config_bak\ngedit config\n<<<\n如果没有gedit,按照如下步骤。\n<<<\ncd ~/.fcitx\niconv -f gb2312 -t utf8 config -o config_bak\nvim config_bak\nrm -r config\niconv -f utf8 -t gb2312 config_bak -o config\n<<<\n\n只是按照我的使用习惯设置的,请按照个人使用习惯更改。虚拟键盘颜色没有改动,可根据配色方案自行更改。\n\n配色方案:\n<<<\n[界面]\n候选词个数=3\n主窗口是否使用3D界面=0\n输入条使用3D界面=0\n主窗口隐藏模式=1\n显示虚拟键盘=0\n是否自动隐藏输入条=1\n输入条是否居中=1\n首次显示输入条=0\n#输入条固定宽度(仅适用于码表输入法),0表示不固定宽度\n输入条固定宽度=0\n序号后加点=1\n光标色=102 159 66\n主窗口背景色=255 255 255\n主窗口线条色=203 202 186\n主窗口输入法名称色=153 153 153 102 159 66 56 134 230\n输入窗背景色=255 255 255\n输入窗提示色=2 89 196\n输入窗用户输入色=255 0 132\n输入窗序号色=0 66 200\n输入窗第一个候选字色=0 99 200\n#该颜色值只用于拼音中的用户自造词\n输入窗用户词组色=0 99 200\n输入窗提示编码色=255 0 132\n#五笔、拼音的单字/系统词组均使用该颜色\n输入窗其它文本色=56 134 230\n输入窗线条色=203 202 186\n输入窗箭头色=193 227 151\n虚拟键盘窗背景色=220 220 220\n虚拟键盘窗字母色=80 0 0\n虚拟键盘窗符号色=0 0 0\n<<<\nSource: [[The Magnificent TrEE : Min's Kiosk: Linux|http://huminsk.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&partqs=cat%3dLinux]]
作者:萧中剑\n \n  1900年7月9日,天津西郊外,八里台,一场突围血战正在打响。\n\n  一位将军身穿作为大清帝国武官礼服的朝衣补褂,挥舞着一柄雪亮的军刀,在战火硝烟弥漫的第一线横刀跃马、奋力督战,高喊着:“此吾致命之所也,逾此一步非丈夫矣!”\n\n  军刀的闪亮和他身上黄马褂的鲜艳,在战场上格外耀眼。\n\n  主帅在前沿身先士卒、猛冲督战,部下无人退缩、奋力向前,眼看着阵地前的小桥就要重新得手,将军快马加鞭;然而,越往前冲,越是四面环射的密集弹雨,数弹飞来,将军顿时戎装焦烂、身受重伤,鲜艳的黄马褂上立刻鲜血流淌,但他依旧向前猛冲;眼见众多的炮弹、子弹紧追着他和战马,在战场上形成一个烟火的核心,一匹战马倒下,他再换乘另一匹,接连换乘四匹后,将军的两条腿也先后被打断,一颗炮弹在身旁爆炸,他在马上摇摇晃晃,但依然没有从马上跌下来,还在带领麾下的将士们向前猛冲!终于,又是几颗子弹飞来,洞穿了他的头胸,血流遍体的将军轰然栽下马来,滚落在阵地上,永远地闭上了他的双眼。\n\n  于是,在这样一个极普通的日子,这位名叫聂士成的中国将军,就这样死了!\n\n  那个作战一贯悍勇、打起仗来生死不顾的皖南汉子死了;那个曾率轻骑察看边情、以西法绘图、为祖国国防献计筹策的中国人,死了;那个能征善战、在台湾击退法军,又在甲午中日战争中扼守辽东摩天岭、使日军不能前进一步的中国职业军人,死了。\n\n  在1900年前后的西方,职业军人往往联系着白手套、军礼服式的高贵优雅,既有王公贵族的垂青,又有着万千少女的崇拜;但在当时的中国,军人却算不上什么高尚的职业字眼:连年战乱,在老百姓的眼里,“兵匪一家”,都会打家劫舍、都会烧杀抢掠——当兵的军人,同作为下三滥罪犯的土匪没有什么本质区别;再加上外患纷争中,大清国的将士们大多都“内战内行、外战外行”,几乎没打赢过一场对外战争,因此,古时“男儿何不带吴钩、收取关山五十州”式的从军尚武之志,几近荡然无存;相反地,如“好男不当兵,好铁不打钉”这般贬低军人地位的习语,反倒流传的自然而然。\n\n  然而,死去的聂士成,却恰恰是当时中国军人中的异类。\n\n\n战功赫赫\n\n  异类之一,首先在于他是一个称职的职业军人,不但内战内行,外战也打得十分漂亮。武童出身的他自从咸丰九年(1895年)踏进军营那天起,从军打仗就成了他一生相伴的职业:先是随袁甲三攻打捻军,1862年改属淮军任把总,又参与了镇压太平军、捻军等活动,并因此升任总兵;1884年中法战争爆发,是他率军赴台支援作战、将敌军赶出了台湾;在几年后的甲午战争中,从朝鲜的牙山、成欢到中国东北的摩天岭,他又在白山黑水之间同日本人打了整整半年多,使敌人头痛不已;再到1900年前后的镇压义和团和反抗八国联军入侵……无论是内战还是外战,中国19世纪中叶后的主要战争,几乎全有他的份儿,纵观其平生,大多冒矢石、历风雪,一路枪林弹雨、刀光剑影,半生戎马倥偬、横戈万里,数度出生入死、立下赫赫战功,实在称得上是一员少有的战将。\n\n\n勇冠三军\n\n  聂士成的异类之二,是其英勇。聂士成自小好行侠仗义,入伍后一直作战英勇,在镇压东西捻军时屡建战功,累迁至总兵、提督,并被授予“力勇巴图鲁”勇名,与王孝祺、章高元并称“淮军后起三名将”;中法战争中,法军入侵台湾,先控台湾海峡、后占基隆,凶锋极盛、气焰嚣张,当时北洋淮军诸将无一人敢于迎战,聂士成却敢于主动请战、赴台支援解燃眉之危,南北洋海军不敢护航运兵,他最后索性率850余将士坐乘英国货船渡海抵台,数度战胜法军,旋解台湾之危;甲午中日一战,清军统帅叶志超贪生怕死,狂奔五百里、从前线一直逃过鸭绿江,其急急如丧家之犬之丑行,堪令所有中国军人蒙羞,但聂士成却敢于在大敌当前、“诸军皆退、辽西危棘”的险境中,“悉力以御”,以孤军扼守辽东九连城(今丹东西北)虎山(摩天岭),与众将士卧雪餐风、坚守十昼夜,“敌不能越”,昔日田光赞荆轲曰:“血勇之人,怒而面赤,脉勇之人,怒而面青,骨勇之人,怒而面白,荆轲当属神勇之人,怒而色不变”——神勇之称,聂士成当之无愧:此役,他本人身先士卒、奋勇杀敌,其军之作战顽强、杀敌之勇猛,同当时其他清陆军部队的朽腐无能形成了反差鲜明的对比,因此一战而名扬天下,于是便有了后来黄遵宪在《聂将军歌》中的“聂将军、名高天下闻”之赞誉。\n\n\n智计双全\n\n  倘若仅是一介悍勇鏖战的赳赳武夫,历史可能早已把聂士成这号人忘得一干而净;然而他不是:他不仅有超人的勇气,而且有极强的谋略眼光和思维;既是战将,亦为智将。据《清史稿 聂士成传》记载,早在甲午战前的1893年,颇有职业军人战争敏感的聂士成就开始“单骑巡边”,踏勘东三省边陲地形,以“熟悉其道路之险要、径行之难易”,“历东三省俄罗斯东境、朝鲜八道”,共行程23000余里,特将中俄、中朝边境山川险要及邻国要塞驻军分布绘制成地图,以求知己知彼,“以为方略、深得地利、备异日与强邻战事之需”,遂编成《东游记程》一书,“读其书如亲履其地、二万三千余里疆界牙错出入、不藉图记,一览尽得之”,是当时一本很有价值的军事地理手册。未过两年,甲午中日战争爆发,聂士成从入朝作战开始,所做的地理资料和知识就在实战中派上了大用场,中国军队在朝鲜唯一一场比较漂亮的战役——成欢伏击战,就是他善用地形、因地制宜抗击日寇的杰作:先令部下在山顶构筑火炮阵地、“见敌过后轰击之”,又在日军必经的安城渡桥附近设下精锐伏兵300人、“敌半渡即出击”,同时还在大道两旁巧设数道伏兵、伺机伏击日军。是役,日军遭袭后不知虚实,慌忙溃退,清军伏兵四起、枪林弹雨、炮火凶猛,日军伤亡惨重,因急于撤退、又在桥上自相拥挤难以行进,纷纷坠入河中,“溺死甚重”,死伤千余,吃了大亏;而清军大多“埋伏地中、从暗击明、故死伤仅百余人”。在其后的摩天岭坚守战中,所部兵少,聂士成便在树林中“张旗帜、鸣角鼓为疑兵”,步步设防,重重埋伏,时出时没,“乘间出奇截杀、雕剿”,大量游击歼敌;同时,他还乘敌不备、连连以攻代守,亲率精锐绕过正面日军、包抄夜袭其侧后,克复连山关、分水岭,追杀日军至草河口,又频频袭击其主要据点,迫使日军由主动进攻转入被动防御,前后麓战四个月,日军始终只能望山兴叹、不能越摩天岭防线一步,其高明的作战艺术,于此战可见一斑。在淮军诸将中,聂士成抵御外敌入侵的赫赫战功,使其宛如一颗光芒四射的流星,足以同晚清战史上诸民族英雄昭日月、泣鬼神,为世人所缅怀。 新法练军 在军队建设上,聂士成也颇有过人之处。\n\n  自1896年起,他开始仿照德国营制操法,编组训练武毅军(即后来的武卫前军),从装备到训练,都与旧式清军截然不同:装备上,以德制旧毛瑟步枪为训练用枪,以奥制曼利夏步枪、马枪、新式小口径毛瑟枪为备战用枪,并装备其它各类少量步枪与马枪,配合训练及作战使用;实有火炮数量为:克虏伯七五炮16门,克鲁伯六○炮32门,格鲁森五七陆路快炮与过山快炮共约32门,克鲁伯三七快炮、麦克心炮2门(即马克沁重机枪);炮弹约分四种:开花弹(用于摧毁炮台、营垒、城墙)、子母弹(攻击敌人密集队形)、葡萄弹(攻击冲锋散兵)、实心钢弹(击穿钢甲铁甲船使用)(见武卫前军营务处汪声玲著《芦杨剩稿》)。训练上,完全按照西式新法行事:设立随营学堂以研究军事教育,“专为造就人才而设”,把算法、地制、测绘、兵法、汉语、洋文、枪炮操作等,全列为教学内容;聂军训练极其严格认真,军队编制名额不能空缺,士兵不得充当杂役,技艺必须熟练,除单兵之战技训练外,还讲求战术及实兵演练,规定官兵每天必须操演两次,练习枪炮射击、掘造地营(防御工事)、快步翻山越岭、临敌队形变换、坚守阵地、夜战、刺杀等科目,每年练习行军一次,熟悉地形地势,体验战时生活(类似于今天军营中的长距离拉练)……\n\n  正是由于装备精良和平时的苦练,才有了这支军队在实战中极强的战斗力:在与八国联军作战中,联军也承认“华军虽众,皆不足虑,所可畏者,聂军门所部耳;盖聂军有进无退,每为各军之先;虽受枪炮,前者毙,后者又进,其猛处诚有非他军所可比拟者”,又称聂军“所带军械均系极佳之毛瑟快枪,并有极好炮队,该兵士即将新式各炮安置于天津城内炮台上……租界房屋无一处不被击毁者……自与中国交兵以来,从未遇此勇悍之军”。\n\n\n命运悲歌\n\n  当然,聂士成并不是一个完人。他在将枪口对准外敌的同时,也毫不留情地镇压国内底层民众的任何起义--从镇压太平军到杀戮义和团,作为忠于大清帝国的杰出将领,他一生都在为了朝廷而战。正是由于这份愚忠,纵然戎马一生、能征善战,命中注定他跳不出时代和历史的局限,最后终于敲定了他命运的悲剧性。\n\n  没落封建王朝政府决断之反复无常,难以常理揣测;作为军人,聂士成顶得住战场上的明枪实弹,却躲不开背后封建官场射来的暗箭:义和团运动初起之时,聂士成受上命大力镇压,然而未过多久,当清帝国统治者发现这场农民“暴乱”有很大利用价值时,曾为朝廷立过无数战功的聂士成便成了政治游戏的替罪羊,马上被血淋淋地推上无情牺牲的祭坛,清廷下谕:聂士成新法练军,擅杀爱国分子,着即正法。而此时,聂士成正位于抵御八国联军入侵的天津保卫战前线,面对如此惨淡境遇,常人往往一蹶不振、心如死灰,但他却在这样的命运怪圈中,坦然无畏地走向他的战场。“国有道,不变塞焉;国无道,不变塞焉”,古代大儒孟老夫子的节操标准,竟在聂士成这位武将身上展现得淋漓尽致。\n\n  悲壮者,无壮,不足以言悲。就在聂士成在天津城外战死前不久,其母托人捎来口信:“聂家无孬种!”聂本人也曾在直隶总督裕禄面前立下壮誓:“士成在一日,天津有一日;天津如失守,士成不见大帅!”在八里台之战——其生命中最后一战中,聂士成实际上已是身处绝境:正面,是6000多人的西方联军,背后,500名日军步步逼近;部下连日苦战、喋血八昼夜,粮弹告罄;己方友军,早已不打招呼地提前“转进”,进退无路、腹背受敌、无援可增,唯有孤军死战。西方人讲:“一个好的水兵,应该死在水里;一个职业军人最好的归宿,是在战场上战斗至被最后一颗子弹击中而死”——如果这个命题成立的话,聂士成可以闭上他的双眼了,“男儿到死心如铁,看试手、补天裂”,作为军人,在抵抗外敌入侵的战争中一战而再战,直到流尽自己的最后一滴血——他已经找到了他人生的最好归宿。\n\n  千古艰难惟一死,功名是非,全待留取身后世人评说。历史是公正的:尽管百年来有关聂士成的评价一直众说纷纭,但他抵御外敌、功劳赫赫、尽忠职守、血战而死,实是无可争议——在这一点上,任何时候的每一个中国人投去的,都是充满敬意的眼光。\n\n  “勇烈贯长虹,想当年马革裹尸,一片丹心忍作怒涛飞海上;精诚留碧血,看今日虫沙历劫,三军白骨悲歌乐府战城南”,聂士成力战而死、为国捐躯,得此殊评,若泉下有知,当瞑目矣。\n\n  呜呼,将军不朽!\n\n附【聂士成小传】:\n\n  聂士成(?~1900)字功亭,安徽合肥人。清末爱国将领。武童出身,1859年入伍,1862年改属淮系,随淮军宿将刘铭传镇压太平军、捻军,屡建战功自把总累升至提督。中法战争期间,法军侵占基隆,聂主动奉命率军赴台抗法,击退敌兵。后调赴北洋,率庆军驻守旅顺。1891年调往芦台统领淮、练诸军,任内因战功赏穿黄马褂。次年,授山西太原镇总兵,留芦台治军。1893年,常率轻骑巡阅东三省边境考察地形,将边境山川险要及邻国要塞驻军分布绘制成图编书。1894年甲午战争爆发后入朝作战,因聂士成治军严谨、管带有方,本人又身先士卒奋勇杀敌,聂部在甲午战争中作战顽强,杀敌勇猛,力阻日军于辽东,聂以此战功授直隶提督。清政府创立武卫军时,聂部马步军30营按德国军法操练,作为武卫前军驻芦台。1900年,义和团在山东、直隶迅速发展,聂士成大力镇压。5月30日,奉命保护芦保、京津铁路,6月13日,聂率所部守卫天津,抵抗八国联军侵略。7月5日,聂军围攻紫竹林租界,与敌激战八昼夜,力战不退。9日凌晨,援军大至的八国联军6000人开始向驻守八里台的聂军反扑,由于兵力悬殊,聂部陷入联军重重包围之中,聂士成身先士卒、沉着指挥,与侵略军浴血奋战2个多小时,后因弹药匮乏,率部突围至八里台附近,身受数创后,裹伤指挥杀敌,终中弹阵亡。生平著《东游记程》、《东征日记》等。\n\n(全文完)\n\n\n\nSource: [[Untitled Document|http://www.mgjs.com/01wenzhang/03renwu/nieshicheng_xiaozhongjian.htm]]
作者:元首卫队\n\n 以东线德军为例。食品先由后勤部门收集在各占领区内的仓库,由集团军群后方的火车终点站输送。然后抵达各个集团军,军和师的火车站。有时后方集团军群仓库内的物资将会送至集团军的后勤站,然后经由军仓库或者直接发送到各师的补给点。然后各师内的团和营分配好物资,最终送往前线。\n\n!!德军伙食:\n德军的伙食基本上是一日三餐。其中午餐占50%,晚餐占33%,早餐占13%\n这遵照了德国人的生活习惯--以午餐为日常用餐的中心。\n\n士兵伙食供应的数量分为三级:\n*I级。战斗地域。\n*II 级。占领区\n*III级。本土驻守部队\n*IV级。国内办公机构文职人员。\n其中已I级数量最多,以下逐渐递减。这里就介绍最主要的战斗地域伙食。\n\n!!I级伙食 --Verpflegungssatz I\n最高优先配给。\n主要包括:\n黑卖面包 750克\n黄油(植物奶油)或者食用脂肪 45克\n香肠(生罐装食物) 120克\n(有时是熏鱼)\n\n果酱或人造蜂蜜 200克\n\n煮过的土豆,蔬菜 750克\n肉类 120克\n蔬菜或动物脂肪 45克\n调料 15克\n\n咖啡豆(有时以红茶代替) 8克\n巧克力或糖果 1袋\n香烟纸 7卷\n\n\n烟草 2卷\n(这里和有趣的是SS第12“阿道夫。希特勒青年”装甲师,该师将常规配给的烟草全部以糖果代替。而酒精饮料则以牛奶代替)\n\n其它调味品\n\n\n而在其它的一些资料中所列出的清单如下(根据战况,时间以及地点,标准会有不同的差异):\n\n黑麦 700克\n黄油(植物奶油)或者食用脂肪 60克\n连骨肉 136克\n蔬菜和水果 250克\n土豆 320克\n豆类 80克\n鱼类(无头) 30克\n大豆粉 7克\n布丁粉 20克 \n咖啡豆 (有时已咖啡代替) 9克  \n\n炼乳 25克\n砂糖40克\n盐 25克\n调味品 3克\n香幸料 1克\n酒 0。26盎司\n香烟纸 7卷\n\n\n携带食物\n这是由士兵们随身携带的食物。\n\n\n!!行军食物--Marschverpflegung\n这是供应给行军途中部队的伙食,不可进行烹饪。这种伙食对于前线来说是很常见的一种。通常由各部队的炊事员做好一日一份套餐式。行军中的士兵们每人每次领取3-4份。\n黑麦 700克\n冻肉或芝士 200克\n黄油 60克\n咖啡9克 或红茶6克\n砂糖 10克\n烟草 6卷\n\n这些食物用罐头和纸包好,放入纸箱内\n\n携带食物(全份)-Eiserne Portion\n其饼干通常以纸和罐头包装\n饼干 250克\n冻肉 200克\n干燥蔬菜 150克\n咖啡 25克\n盐 25克\n\n这种饼干也叫作Zwieback,和一种经过烘烤后的硬饼干相似。\n\n携带食物(半份)-Halbeiserne Portion\n饼干 250克\n加工保鲜肉 200克(主要是罐头食品)\n\n!!战斗食物:\n1943年经战斗要求供应的无需烹饪的特殊食物。特点是方便携带和含有高热量\n分为:大型战斗食物(Grosskampfpaeckchen) 和近距离战斗食物(Nachkampfpackchen) 两种,只供应给前线作战部队。\n主要包括:饼干,糖果,罐装巧克力和烟草\n这些食物转载在补给车上,然后在出击前由指挥官下令食用。\n\n\n黑麦面包--Kommissbrot\n\n德军标准主食。每块标准为700-750克。每个师都有面包烘制连\n\n战斗食物(罐装巧克力) Die Stärkende Schokolade\n图中左边为罐盖,右边为罐底。这是几种式样其中的一种。有的式样以生产日期代替了国家鹰徽标志。每个罐中装有一块巧克力。此外,也有用纸箱包装的巧克力。\n\n下次我会介绍一下,德军部队中关于伙食分配管理的情况。\n\nSource: [[德国军事中心 — http://www.sspanzer.net|http://www.sspanzer.net/army_zl/food/food.htm]]
!!获得root权限的三种方式\n1 sudo su\n2 sudo -s\n3 su\n前两个输自己的密码,第三种输root的密码\n\n\n!!adobe reader7.0无法启动(Ubuntu .06 LTS)\n如果安装了SCIM输入平台,由于冲突,会导致这个程序无法启动。\n编辑 /usr/bin/acroread\n加入一行 export GTK_IM_MODULE=xim\nFirefox2.0也有这个问题\n需要编辑firefox的启动脚本 加入上面这行\n\n\n!!安装nvidia显卡驱动 但是重启后没生效\n编辑 /etc/X11/xorg.conf\n找到\nSection "Device"\n Identifier "NVIDIA Corporation NV18 [GeForce4 MX 440 AGP 8x]"\n Driver "nv"\nEndSection\n将 nv 替换成 nvidia\n保存后重启就OK了\n\n\n!!wine运行速度慢\n这个是缺乏GBK字体造成的\n/usr/share/X11/fonts/100dpi/fonts.dir\n/usr/share/X11/fonts/75dpi/fonts.dir\n/usr/share/X11/fonts/Type1/fonts.dir\n/usr/share/X11/fonts/misc/fonts.dir\n编辑这4个文件\n首行的数值+4\n末尾添上如下4行\n{{{simsun.ttc -misc-simSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0\nsimsun.ttc -misc-simSun-medium-r-normal--0-0-0-0-p-0-gb2312.1980-0\nsimsun.ttc -misc-simSun-medium-r-normal--0-0-0-0-c-0-gbk-0       \nsimsun.ttc -misc-simSun-medium-r-normal--0-0-0-0-p-0-gbk-0\n}}}\n\n\n!!qterm下无法使用scim输入法\n安装scim-qtimm就好了\nsudo apt-get install scim-qtimm\n\n!!修改刚开机的时候的系统的分辨率\n# Colours 640x480 800x600 1024x768 1280x1024 1600x1200\n# 256 769 771 773 775 796\n# 32,768 784 787 790 793 797\n# 65,536 785 788 791 794 798\n# 16.8M 786 789 792 795 799\n编辑 /boot/grub/menu.lst\n在kernel一行后添加 vga=792\n792表示 1024*768@32bit\n\n\n!!GNOME下 音量无法保存\n修改了系统的音量 重启后音量设置无法保存\n#alsactl store\n\n\n!!FTP中文乱码\n使用lftp\n登陆之后可以尝试\nset ftp:charset "gbk"\nset ftp:charset "utf8"\n这两种编码\n或者直接编辑下面三个文件之一\n/etc/lftp.conf\n~/.lftprc\n~/.lftp/rc\n加入上面的set语句\n如果要使lftp提示更多的消息\n可以加入\ndebug 3\n\n\n!!中文pdf文件乱码\n1 最好的办法, 去Adobe的官方主页下载简体中文版的的Adobe Reader 7。\n2 折衷的办法,用windows下 Adobe Reader 7的字体文件夹覆盖Linux下的那个文件夹,\n 能正确显示绝大部分中文pdf文档了,而且显示效果跟Windows下面的一样。但是还是有\n 个别不能显示的,具体原因未知。据说是有些pdf文档会自带字体,有些不自带,造成了差异\n\n\n!!代理验证软件\n搜索这个名字就可以找到了\nProxyTiger\n\n\n!!使用date同时修改时间和日期\n# date -s "CCYY/MM/DD HH:MM:SS"\n# date -s "MM/DD/CCYY HH:MM:SS"\n\n!!修改BIOS里的时间\n使用上面方法修改之后执行\n{{{\n#hwclock -w\n#hwclock --systohc\n}}}\n\n!!禁止机器对PING的响应\n/etc/rc.d/rc.local中增加一行\n#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  \n0表示允许\n1表示禁止\n或者来个临时的方案\n#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all\n还有一种长久的办法就是编辑/etc/sysctl.conf\n加入一行这个\nnet.ipv4.icmp_echo_ignore_all = 0\n\n\n!!SCIM输入特殊字符\n如何输入 ˇ ˊ ㎡ ∀ ∇ 等符号呢\nishe //温度单位\nishu //数\nishuxue //数学\nidanwei //单位\nifuhao //一般符号\nishi //当前时间\nirq //日期\n\n\n!!强制指定网卡的工作方式 可以解决部分上网故障\n#mii-tool -F 100baseTx-FD eth0\n\n 10BaseT 100BaseT4 100BaseTx ATM155 1000BaseT4\n带宽MHz 10 10X4 80 100 100X4\n传输率MBps 10 100 100 155 1000\n带宽×编码方式=传输率\n\n\n!!手工挂载光盘 \n#mkdir /media/iso\n#modprobe loop\n#mount file.iso /media/iso/ -t iso9660 -o loop\n\n!!卸载光盘\n#umount /media/iso/\n\n!!缓解ARP攻击\n#arp -s 网关IP 网关MAC地址\n#ifconfig eth0 -arp\n可写入rc.local文件\n\n!!本地中文文件名\nconvmv -f cp936 -t utf8 --nosmart --notest files\n\n\n!!查看已经打开的TCP连接\nnetstat -ant\n\n!!查看已经打开的文件(强大很,可以 man lsof 看)\nlsof\n\n!!IDE硬盘的DMA\n编辑/etc/init.d/boot.local,\n在最后一行增加hdparm -c1 -d1 -k1 /dev/hdn(n=a,b,...,n<=z)。\n重新启动既可,通过hdaparm -c -d /dev/hdn(n=a,b,...,n<=z) 查询dma,io是否等于1。\n\n\n!!解压缩\n .tar\n tar xvf xxx.tar\n .tar.gz\n tar zxvf xxx.tar.gz\n .tar.bz2 tar jxvf xxx.tar.bz2\n .zip unzip xxx.zip\n .rar unrar x xxx.rar\n .cab unrar x xxx.cab\n\n!!压缩\n tar -cvvf foo.tar foo/ 将foo文件夹添加到foo.tar(不压缩,光打包)\n tar -czvf foo.tar.gz foo/\n 将foo文件夹添加到foo.tar.gz (zip压缩过)\n tar -cjvf foo.tar.bz2 foo/ 将foo文件夹添加到foo.tar.bz2 (bz2压缩过)\n rar a foo.rar foo/\n 将foo文件夹压缩到foo.rar (不包括子文件夹)\n rar -r a foo.rar foo/ 将foo以及foo下的所有文件及文件夹压缩到foo.rar\n此外,打包成自解压exe文件的 也可以用unrar解压缩\nunrar和rar是 rarlab出的工具, unrar可以任意使用,但是rar只能试用40天\n过了40天后要注册,虽然不注册不影响使用,但是良心上过不去。\nRar/Unrar跟WinRAR的版本是一一对应的,所以解压缩完全没问题。\n注意:不能单凭文件扩展名来判断文件的类型,有时需要多尝试不同的方式才能正确解压。\n还有:图形界面下的归档管理器不能正确解压缩一些需要输入密码的压缩包。RAR的当前版\n本是3.60Realse。β版的有3.72的\n\n\n!!安装系统的时候 无法启动 如果是Ubuntu\n那么就按F6 加入参数 noapic\n如果是安装完之后的 那么编辑 /boot/grub/menu.lst 加入noapic\nkernel /vmlinuz-2.6.15-27-k7 root=/dev/sda7 ro quiet splash noapic\n\n\n!!如何不启动X-Window就使用中文输入法,\n或者看中文文档\n安装zhcon就可以了\n下载下来源代码 解压缩 进入源代码的目录 配置编译安装\n# tar zxvf zhcon-0.2.5.tar.gz\n# gunzip zhcon-0.2.5-to-0.2.6.diff.gz\n# cd zhcon-0.2.5/\n# patch -p1 < ../zhcon-0.2.5-to-0.2.6.diff\n# ./configure\n# make && make install\n\n\n!!如何查看硬盘的温度\n安装 hddtemp\n#apt-get install hddtemp\n#hddtemp /dev/sda\n/edv/sda是硬盘设备名字,IDE的硬盘是hda\n\n\n!!使用什么样的BT客户端\n对于教育网用户,5Q地带是最重要的BT站了。BT客户端的性能直接影响着BT的速度。\n5Q的BT协议是修改过的,针对BitSpirit和BitComet有优化。因此BC和BS是不二的选择。\nLinux的BT客户端有很多,Azureus是最著名的一个,不过由于是Java做的,效率不高,还\n很占内存,连种能力也远远不如BS和BC。在Linux下,BS可以成功的使用wine安装,而BC依赖\nMSXML的解析库,所以安装失败了,懒得理会他,用BS得了。\nwine bs.exe\nbs.exe是安装程序,在当前目录,一路next安装完毕。\n新建并且编辑 /usr/bin/bitspirit 文件 加入\n#!/bin/bash\nexport LANG=zh_CN.UTF-8\nwine "/home/saga/.wine/drive_c/Program Files/BitSpirit/BitSpirit.exe"\n然后 加入可执行权限 上面的路径会根据个人目录的不同而有所不同\n#chmod 755 /usr/bin/bitspirit\n然后只要在命令行列下输入 bitspirit就可以运行bs了\n也可以编辑添加到菜单项。参考下面的添加菜单\n\n添加一个菜单项到开始菜单\nalacarte\n图形界面的菜单编辑器就启动了,这个很简单吧\n\n\n!!如何添加自己的快捷键 比如按F3启动qterm\ngconf-editor\n打开/apps/metacity/keybinding_commands\n编辑command_1 输入qterm\n然后编辑/apps/metacity/global_keybindings/run_command_1\n输入F3 ,退出程序就生效了\n\n\n!!vimtutor乱码\n可以先\nexport LANG=en_US\n\n\n!!修改网卡的MAC地址\n\n临时修改\n#/sbin/ifconfig eth0 down\n#/sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE\n#/sbin/ifconfig eht0 up\n或者\n#ip link set eth0 down\n#ip link set eth0 address 00:48:54:11:22:33\n#in ling set eth0 up\n永久修改可以将上面几行放入 /etc/rcS.d/rc.local 文件\n\n或者直接编辑 /etc/network/interfaces 文件\n在对应的网卡名后面加上 hwaddress ether AABBCCDDEEFF\n\n\n\n!!查看某个IP的主机的MAC地址\n#arping xx.xx.xx.xx\nxx.xx.xx.xx是IP地址\n\n!!查看CPU信息\ncat /proc/cpuinfo\n\n!!查看内存使用状况\nfree -m\n\n!!进程管理\ntop\n\n!!查看硬盘的信息\nIDE的是hda\n#hdparm -I /dev/sda \n\nSource: [[我遇到的Linux软件问题总结 - 安装配置 - 八色音符|http://blog.chinaunix.net/u/20816/showart_250394.html]]\n
新编万峰语录\n\n\n听众:万老师,我不是上海人。\n万峰:甭管你是什么地方人,总是中国人民共和国。你就是台湾的,也是中国一部分。\n\n\n听众:万峰你除了会劝人离婚还……(电话被掐断)\n万峰:要提意见,这儿不合适。(狂怒)这位李先生到底有没有听前面的节目?如 果不是他们夫妻关系不好我能劝人离婚吗?你耳朵长毛啦?\n\n\n听众:万老师,我认识一个男人,他有前列腺炎。其实我也知道这不难治……(被打断)\n万峰:谁说的?我告诉你前列腺炎不好治。好,你说下去。\n\n\n听众:万老师,我跟前夫离婚原因是因为他花心。后来为了孩子,我找了一个老实的男人结婚,但是二十年我们从来没有夫妻生活。现在我前夫回来找我,想要重新跟我好,我该怎么办?\n万峰:这位妇女,你心思又活络了是吗?\n听众:是的。但是我觉得现在再跟我前夫好,很对不起我现在的丈夫。\n万峰:那我给你出个馊主意,你就去跟你前夫说,跟你复婚是不可能的,那个行。记住,一定要悄悄的,别让别人知道。去吧。\n\n\n听众:万老师我跟我丈夫在一起五年了,我们感情很好。\n万峰:感情好打电话给我干什么?\n听众:呃……我跟他没有夫妻生活。\n万峰:啊?这怎么可以呢?是你不想还是你不能?\n听众:医生说我不能。我丈夫比我大20多岁。\n万峰:好了,别说了,那你到底想问我什么。\n听众:我丈夫跟我承认在外面有别的女人。\n万峰:姑娘,你怎么又给我抖一包袱?你一下子说清楚好不好?我们俩说相声呢?\n\n\n万峰:欢迎收听《相伴到黎明》,我们在上海为您播出节目,如果您有任何情感、 婚姻、家庭和性方面的问题,请您随时播打我们的热线电话62780792,上海的区号是0571 …\n\n\n万峰:很多朋友发短信到我们的互动平台上询问,万峰的头发是假的吧,来,看我给你提溜看看(特写),你看,要是假的早就下来了不是。\n\n\n听众:我18岁,认识一个男人,三个月前跟他上了床,前几天他告诉我他已结婚。\n万峰:姑娘,我告诉你他就是一臭流氓。你们怎么认识的?\n听众:是我同学介绍的。\n万峰:我敢保证介绍的人根本就知道他已经结婚。他们就是一流氓团伙!\n\n\n听众:其实我知道自己要怎么做,我就是想听你说出来。\n万峰:干嘛老要从万峰嘴巴里听到?万峰嘴里有金牙么?告诉你们,万峰嘴里只有假牙,没有金牙。\n\n\n听众:我陪她到店里做头发。\n万峰:哪个她?说清楚。\n听众:就是我同事。\n万峰:哦,就是你陪情人做头发,好,你说下去。\n听众:后来没想到我老婆进来了,我老婆回家就把窗户砸了。\n万峰:你老婆砸了谁家的窗户?\n听众:我们自己家的。\n万峰:那你老婆真够愚蠢的。\n\n\n听众:万老师,我是结过婚的,但是我在外面又爱上一个女人。我现在不想要她了,但她缠着我,我甩不掉。\n万峰:这话怎么听着那么熟,跟三个礼拜之前的一个电话一样啊。上回也是你这混球打来的吧。\n听众:……\n\n\n听众:万老师,我今天要跟你讨论的是孩子的性教育问题。\n万峰:很好啊,你有这个意识我和高兴。你孩子几岁?\n听众:我女儿 8岁。\n万峰:……\n听众:今天她问我她是怎么来的。\n万峰:那你就告诉她,爸爸妈妈相亲相爱,然后就有了你。\n听众:……我不是这么说的,我现在有些后悔说得太清楚了。\n万峰:那你是怎么说的,没关系,你说,我倒好奇了,这位女士,你到底是怎么说的?\n听众:我就说你爸爸妈妈小便的地方碰在一起,然后有了你。\n万峰:(怒)你说这个干嘛呢?!孩子又不爱听!\n\n\n万峰:林女士吗?你好,是林女士吗?\n听众:(激动地)我是林女士,是我吗?接通我了吗?\n万峰:这位听众您别激动,慢慢说,现在是接通了您的电话,您怎么说?\n听众:(颤抖地)真的接通我的电话了,你好万老师,欢迎来到我们节目。\n万峰:……\n\n\n听众:万峰是吗?\n万峰:我是,您怎么说。\n听众:万峰,我今天打电话进来就是想说,你说话的方式太不尊重别人了。(被掐断)\n万峰:(干笑)你觉得我不尊重你,你还打电话进来干嘛呢?啊?欺骗我们导播!\n\n\n听众:万老师,我跟我丈夫结婚两个月。\n万峰:啊?那祝你新婚快乐。\n听众:呃,谢谢。可是我想说的是,他经常发脾气打我。\n万峰:我说你们这些小年轻啊,你叫我说你什么好,好了,不说啦,甭问了,我说了别人又该骂我了。(啪 挂断)\n\n\n听众:万老师,我老婆有外遇很多年了,现在越来越过分,已经发展到在我面前……\n万峰:等等……我又听不懂啦,你说的在你面前是什么意思?\n听众:就是把人带到我面前,当着我的面。\n万峰:我说,你是不是怕老婆啊?\n听众:没有,我不是怕她。\n万峰:啊?你不怕她?那你那什么她!\n\n\n一个妈妈打进电话\n母:万老师,我女儿要嫁人了,对方年纪比她大,我实在不能接受,现在女儿不听我的了,我该怎么办?\n万:您女儿怎么认识的人家?现在婚姻自主了,你管她做什么!\n母:不是的啊,我女儿太单纯了呀,前段时间她骨折了,上楼我也背不动她,我找她舅舅她说不要,说有个同事背她,可能背发背发背出感情来了。。。\n万:那现在你女儿喜欢人家你做父母的只好提醒她,啊,你说是不是,你急也没用啊.\n母:我就是不给他们结婚,我把户口本康特(藏起来)。。。\n万:不对不对,你这样不对的,小孩的婚姻她自己愿意父母没权去管的。。(被打断 )\n母:(哭腔)那我女儿跟他了肯定要吃苦的呀,我女儿肯定不是自愿的呀,她是黄花大闺女呀,是这只老头子花她的呀。。。\n万:花不花这个。。吃苦头了她就会知道了呀!人家爱结就结了,你管的着嘛你!(掐断)\n\n\n一个第三者打来的\n女:万老师,我今年27岁了,(简述:认识个男人比她大8岁,是个有老婆的人了,目前是在香港,到内地出差的时候才好上了,好了半年:注意是半年。然后东窗事发被知道了,原配要死要活,她又很怕闹出人命,现在就跟那男人说要么就离婚,要么就结束。男人答应他会跟老婆离婚)但是他跟那女人说希望她跟他去深圳先同居。\n万:又是个第三者。。。你这个人啊糊涂不糊涂啊,你有没有脑子啊,呃?! 半年你就这么相信人家了吗?他说你就信啊?这种男人明显他离婚是办不下来了,你还跟着人家,你不是公然支持人家包二奶么!!\n\n\n一个女大学生\n女:万老师,我是个在校大学生,快实习了,我邻居介绍了个男的给我,我妈妈也好象满同意的,所以我们准备结婚了。\n万:你才几岁啊,虽然现在在校学生可以结婚了,但是你也不用那么着急啊,你认识人家多久了??\n女:快半年了,我觉得我们两挺合适的,很合的来。。。\n万:才半年你就看清楚人家了?我又要说我的蛤蟆理论了,外面的世界你不看看,现在就那么着急,你是不是想提前过性生活呀你!唉,随你吧,我也不说什么了。。\n\n\n一个离婚又结婚又要离婚的女人\n女:万老师,我和二婚的男人结婚了,他有两个儿子,我也是二婚,我没有子女。我们最近合开了个公司,他们家很防着我,现在经济权都是他在管,我一点也没插手,但是他们还是怀疑我,我现在觉得没意思想离婚了。。。\n万:你们在一起多久了?\n女:有半年了吧。。\n万:哎呀!又是半年,半年真是个过不去的坎啊!》。。。。\n\n\n一个男人\n男:万老师,我女朋友原来和我关系很好,后来他跟别人跑了。。\n万:跑了?她怎么个跑法??!(不就跑了,那你要人家怎么跑)\n男:你听我说,她和别人好了,现在又回来找我,我不想接受她,不想跟她好了。\n万:那就好啊,跟她说清楚,\n男:问题是她闹自杀,要从22楼往下跳,我只好先答应她稳住她。\n万:她要跳22 楼也好66也好,让她去跳呀,跳了你没责任的呀,你别理她,呃,没事的。\n男:哦。。。。\n\n\n又一个被外遇的女人\n女: 我老公跟我结婚8年了,好不容易有了孩子,孩子两岁,但是他觉得我工作忙,脾气不好,也不怎么有时间照顾家里。现在外面有女人了,要跟我离。。\n万:那就离吧,怎么你离了他还不能活了怎么地。。\n女:可是我离了他我就不知道怎么办了,我叫他给我机会他也不愿意,外面的女人比我温柔。。。\n万:(十分激动)什么叫你不知道,你是1906年的妇女嘛,百年前就说妇女平等了,你还活在古代么!?\n\n\n一个男人的声音?!\n男:我最近谈了个朋友,但是我不敢带回家介绍给父母。。\n万:这有什么!大大方方的把女朋友带回家么,这都什么年代了。\n男:可是我的朋友是个男的 -_-b\n万:呃?!那你是男的女的?\n男:。。。。我是男的。\n万:你是同性恋咯。现在同性恋已经是普遍接受的事情,可能父母还会有偏见,勇敢点带给他们看吧\n男:可是我怕他们会。。\n万:我们先进段广告!\n男:你先不要进广告(真有意思的人)\n万:呃?!不进广告,不进广告我就挂了我~。。。。。\n\n\n听众:万老师,我和我的初恋男朋友是因为他不肯结婚分手的。第二个男朋友去年3月分手的,也是因为他不肯结婚。分手后我父母就给我介绍了一个男人, 12月我就跟他结婚了。\n万峰:听起来你特别想结婚,你多大?\n听众:我28 岁。\n万峰:那现在有什么问题?\n听众:结婚后三天,第二个男朋友来找我了,说当初没有真的跟我分手,只是想在事业上继续努力争取配得上我。他准备在12月 12日跟我求婚。\n万峰:那又怎么样?你已经结婚了呀。\n听众:我知道。可是他要求我离婚。\n万峰:姑娘你今天是故意来气我的是吗?\n听众:万老师,后面您会更生气的。因为我离婚了。\n万峰:(强忍怒气)好,那你预备跟他结婚罗?\n听众:但是刚刚过完元旦他又跟我说,他仔细想了想,觉得受不了我已经结过一次婚的事实,想再考虑一年。\n万峰:(崩溃 大吼)你这个男朋友是吃粮食长大的吗?!\n\nSource: [[新编万峰语录|http://www.bullog.cn/blogs/moogee/archives/88512.aspx]]
战国时代的人们,随着不同的生活经历,会逐渐拥有越来越多的名号。有时同一个人物,换一种称呼,我们可能就不认识了。先以上杉谦信(长尾景虎)的各种名号为例:虎千代①、平三②、景虎、政虎、辉虎③、宗心、谦信④,这些名号大致可以分成四类。\n\n  ①“虎千代”是上杉谦信的幼名,即未成年时的非正式名。大都叫做“××丸”,比如松寿丸(毛利元就)、芳菊丸(今川义元)、千熊丸(三好长庆)、盐法师丸(大友宗麟)、虎寿丸(岛津义久)、梵天丸(伊达政宗)等,这是武士阶层特有的幼名格式。其实“丸”原是蜣螂推的粪球的意思,起个贱名字,好让魔鬼邪物看不上,从而保佑小孩子不早夭,和我国农村过去起些带狗字之类的名字一样具有避邪的意味。也有少数例外,如太郎(一作“胜千代”,武田信玄)、吉法师(织田信长)、日吉(丰臣秀吉农民式的幼名,后来史书为了拍他的马屁,硬是写成了“日吉丸”)、竹千代(德川家康)等。\n\n  有一位人物是始终以幼名相称的--信长的宠童森兰丸,即使活到三四十岁,仍旧叫“兰丸”,也挺滑稽的。其实,在本能寺为信长殉死时虽然年少(十八岁),但已经“元服”(一般十二岁以上男少年的成年仪式)有了正式名“长定”,信长深爱兰丸,特意让其在成年后仍旧着童装而不束发。而人们习惯上总是称其幼名,也许是出于对美童的爱慕吧。森兰丸的两个弟弟,同在本能寺殉难的森坊丸(长隆)与森力丸(长氏)的名称,也是同样情况。\n\n  ②上面提到“元服”,即十二岁以上男少年的成年仪式。“元服”以后,就有了“通称”(通常时称呼的非正式名)和正式名。长尾家源出于平氏,于是谦信的通称就叫做“平三郎”(简称“平三”)。通称中的数字多数并没有长幼次序的含义,而仅仅是沿袭。在一段时期内,家族中的一些特定通称只有作为继承人的子嗣才可使用,沿用较长的如六角家的“四郎”,今川家的“五郎”和“彦五郎”,北条家的“新九郎”等。因为历史记载不详,有的人物只留下了通称;而少数有名的武将,虽然有正式名,但通称更为人所乐道,羽柴秀吉的两大军师--竹中半兵卫(重治)和黑田官兵卫(孝高)是个中典型。很多人可能没有注意到,服部半藏(正成)也是以通称著名,而“半藏”之称为其子孙世代相传。通称可以置于姓与正式名间一并称呼,如“长尾平三景虎”、“柴田权六胜家”、“山本勘助晴义”、“天草(益田)四郎时贞”等。\n\n  ③正式名一般由两个汉字(极少数为一个汉字)组成,其中往往有一个是“通字”,即代代相承使用的某个固定汉字。织田家的“信”,毛利家的“元”,尼子家的“久”,朝仓家的“景”,伊达家的“宗”等等皆属此例。由于使用了通字(当然偶尔也会出现不使用通字或改变通字的情况),家族中上下几代人之间同名的机率大为提高。伊豫守护河野家在战国时代内就出了两位“通直”和两位“通宣”,而两位“通直”在游戏中也经常露面,日本的史书中为了便于区分,只好各加以官名称为“弹正少弼通直”和“伊豫守通直”;伊达家第九代和第十七代都叫“政宗”,这可能也是人们常称后者为“独眼龙政宗”(前者称“大膳大夫政宗”)的原因之一;血缘和时间上最接近的是岛津义弘的四弟和三子,都叫作“家久”。\n\n  上杉谦信的正式名有景虎、政虎、辉虎三个,涉及到了“赐字”的问题。赐字即地位高者将自己名字中的上字(两个字中的前一个字)或下字(两个字中的后一个字)赐予地位低者作为其上字,一般都是赐下字,得到上字的相对更为荣耀。“景虎”是谦信最初的名字,因生肖属虎,幼名和正式名中都有“虎”字,而“景”则为长尾家的通字;永禄四年(1561)在镰仓鹤冈八幡宫举行关东管领的正式就任仪式时,接受了原关东管领上杉宪政的姓氏和“政”字而改名为上杉政虎;同年十二月又受将军足利义辉赐予一字而改作“辉虎”。得到有地位的人的赐字在当时被看作无上光荣的事。有心的读者在之前的连载中也许会发觉,今川义元之“义”和武田晴信之“晴”出自同一人,即室町幕府第十二代将军足利义晴。家臣往往从主君处接受赐字。某家大名家臣团的名字中,如果有一、两个字使用频率特别高,同时又为主君名中所有,基本上就可以肯定为赐字了。“主君赐字+通字”成为家臣们最不用动脑筋的起名公式。伴随着主君的更替,赐字也不断变化。南近江的守护六角定赖、六角义贤两代,家臣有三云定持--三云贤持(早逝,游戏中一般看到的是其弟三云成持)、蒲生定秀--蒲生贤秀、后藤定丰--后藤贤丰等。类似的有趣情况在很多大名家中都可以发现。\n\n  ④僧侣、茶人等多以“号”代名,武士中拥有“号”的也大有人在(但真正为人熟知的不多)。号,有的是法号(道号),有的是斋号。日本的茶圣千利休,法号宗易、利休,斋号抛筌。由于茶道的精神大量来源于禅宗思想,茶人有参禅的传统,“宗易”是其二十四时在南宗寺参禅所得的法号;天正十三年(1585)丰臣秀吉升任关白时,与千利休共同主持邀正亲町天皇参加的宫内茶会,“利休居士”是当天由天皇所赐,此时利休已经六十三岁了。所以《太阁立志传Ⅰ》中称“千宗易”,一般情况下倒要比其他游戏中称“千利休”更准确一些。\n\n  我国北宋的文学家苏轼,号东坡居士,人们更习惯于称其为“苏东坡”。日本历史上这类情况更多见,请看下面的战国人物,后面注的正式名是不是反而不那么响亮了?\n\n  山名宗全--持丰北条早云(早云庵宗瑞)--(伊势)长氏驹井高白斋--政明\n\n  斋藤道三--利政朝仓宗滴--教景稻叶一铁--良通氏家卜全--直元\n\n  太原崇孚(雪斋)--(俗姓庵原,名已佚)本愿寺显如--光佐本愿寺教如--光寿\n\n  细川幽斋--藤孝细川三斋--忠兴织田有乐斋--长益上杉谦信--政虎\n\n  武田信玄--晴信穴山梅雪(梅雪斋不白)--信君长坂长闲(长闲斋)--光坚\n\n  大友宗麟--义镇立花道雪--(户次)鉴连高桥绍运--镇种\n\n  柳生石舟斋--宗严伊东一刀斋--景久\n\n  有地位的人物死后可能还有谥号和“法名”(有点像我国古代的庙号),德川家康地位特殊,更拥有“神号”:东照大权现。这些死后追赠的名号一般极少接触,就不赘述了。\n\n  ※此外,与地名上的情况类似,同音的日语汉字时而通用的现象也广泛存在于姓氏和各种名号中,如“东”与“藤”(とう,伊东一刀斋--伊藤一刀斋、安藤守就--安东守就),“助”与“介”(すけ,山本勘助--山本勘介、山中鹿之介--山中鹿之助),“义”、“可”与“吉”(よし,大友义统--大友吉统、堀尾吉晴--堀尾可晴),等等。汉字中意义相同的字在日语中常常读音相同,如“满”和“盈”都读作“みつ”,是故宇佐美定满也作“宇佐美定盈”,菅沼定盈也作“菅沼定满”。此类例子比比皆是。\n\n  §教名与外号§\n\n  教名特指天主教的洗礼名。随着天主教影响的扩大,接受洗礼的人也开始增多。以下是主要信教大名的教名:\n\n  有马义贞--ドン=アンドレ(德·安德肋)\n\n  有马晴信--ドン=プロタジオ\n\n  大村纯忠--ドン=バルトロメウ(德·巴尔多禄茂)\n\n  一条兼定--パウロ(保禄)\n\n  大友宗麟--フランシスコ(方济各)\n\n  小西行长--アウグスティヌス\n\n  高山友照--ダリヨ(达尼尔)\n\n  高山右近--ジュスト(犹斯托)\n\n  黑田孝高--ドン=シメオン(德·西默盎)\n\n  蒲生氏乡--レオン\n\n  ※我尽可能使用了天主教的传统译名,但它们看上去比较别扭。换成大家比较熟悉的叫法,“保禄”即“保罗”,“西默盎”即“西蒙”,等。\n\n  当时不少人是合家受洗,这些大名的夫人们的教名叫做ジュスタ的很多,前面加以夫姓就成为全名,如高山ジュスタ就是高山右近的妻子。不过,这些女子中最负盛名的要属细川ガラシャ夫人(1563~1600)了。ガラシャ夫人本名玉子,是“谋反人”明智光秀之女,当时一流的文化人细川忠兴的正室,日本屈指的美女。如此身世注定了她波澜的一生。她曾怀揣匕首直面父亲的仇敌丰臣秀吉,使好色的秀吉不得不打消不良企图。与其他一些女子不同,夫君细川忠兴并非教徒。ガラシャ是在秀吉发布禁教令,而高山右近被流放马尼拉的天正十五年(1587)自发受洗的,后来又学会了拉丁语和葡萄牙语。庆长五年(1600)的关原会战前,石田三成意欲将东军(德川方)诸大名(包括细川忠兴)的妻儿挟作人质,派兵包围了在大坂的细川家宅。为了不成为忠兴的包袱,ガラシャ与所有的留守人员一起自尽于家宅大火之中。被此举震动的石田三成主动放弃了人质计划。然而,ガラシャ的壮烈之死感动了全国,反三成的情绪大为高涨,间接鼓舞了东军的士气。ガラシャ夫人的美貌、才识、勇敢、忠贞和坚定信仰,历来得到很高的评价,经常出现在各种文艺作品中。她的形象一般是身着和服,项戴十字架的优雅女子。将在PS2上推出的以关原会战为背景的SLG《决战》中,可以再度见到这样的身姿。\n\n  外号常赋予有名的武将。上杉谦信和武田信玄这对宿敌分别被誉为“越后之龙”与“甲斐之虎”。如此格式的外号还有“尾张之虎”(织田信秀)、“美浓之蝮”(斋藤道三)、“肥前之熊”(龙造寺隆信)、“出云之鹿”(山中鹿之介)、“甲山猛虎”(饭富虎昌)等。也有的不用动物来形容:“越后钟馗”(斋藤朝信)、“雷神”(立花道雪)、“东海第一强弓”(今川义元)、“尾张的大傻瓜”(织田信长,这是极少见的反面外号)等。外号有时可以与其它各种名号相连,如“独眼龙政宗”(伊达政宗)。作为武士,最看重的就是武勇,精通枪术(长枪)的武将会有一个带“枪”字的外号:血枪九郎(松平家的长坂信政)、枪半藏(德川家的渡边守纲,通称半藏)、枪大膳(里见家的正木大膳亮时茂)、枪弹正(武田家的保科弹正忠正俊)。“鬼+名号”是夸赞武勇最常用、最简洁明了的格式:鬼美浓(原美浓守虎胤)、鬼十河(十河一存)、鬼柴田(柴田胜家)、鬼半藏(服部半藏)、鬼作左(本多作左卫门重次)、鬼孙市(杂贺孙市)、鬼义重(佐竹义重)等。出羽的年轻猛将户泽盛安通称九郎,就得了个“夜叉九郎”的外号,与“鬼××”有异曲同工之妙。至于波多野家的二鬼--“赤鬼”(赤井直正)和“青鬼”(糁井教业),不接续任何名号,干脆利落,总是使我联想起《水浒传》中的“赤发鬼”(刘唐)。与大量的“鬼”相对的是“佛”非常少,可能只有丰臣政权“三中老”之一的堀尾吉晴(通称茂助)因外貌和善,性情温厚而号称“佛茂助”。\n\n  还有一种,我暂且也将其归入外号之列,是合称数人的,例如著名的“毛利两川”(吉川元春、小早川隆景)。日本人特别喜爱排“四大天王”(许多游戏中都有),战国人物也是如此。常见到的是德川四天王(酒井忠次、本多忠胜、神原康政、井伊直政)和龙造寺四天王(成松信胜、江里口信常、百武贤兼、木下昌直、圆城寺信胤,最后一人有争议),“武田四名臣”(山县昌景、内藤昌丰、马场信房、高坂昌信)也与此接近。这种五虎将式的排名也许在每个大名家内部都存在。\n\nSource: [[作品相关_人物名讳·阅读遨游战国之越后之龙正文·小说导航|http://www.waok.net/jkls/20872/305939.asp]]
!!!!!舰队司令私人执教地理课\n 近藤信竹是海兵35期的首席(毕业时的状元),虽说是海军军人但有点学究之气。\n 这是太平洋战争爆发之前的事。新任参谋前往第二舰队司令长官办公室报到。近藤信竹作为第二舰队最高指挥官总要寒暄几句,来一番训话勉励新人(这娃也9月才坐上第二舰队司令长官的位子,屁股还没坐热呢)。闲谈从新任参谋的出身籍贯开始,新任参谋回答说自己的籍贯是山梨县,近藤听了就打官腔扯了句“是山梨县啊”。这新任参谋就画蛇添足了一句“算是关东地区的吧”(近藤这娃是大阪人)。近藤听完眉头就皱起来了,瞪起金鱼眼有些愠怒道“你在海军兵学校到底学了些什么?”紧接着从书橱中拿出本日本地图就开始给新任参谋上地理课了,上得那参谋头皮发麻,从此地理知识比谁都丰富。\n\n 近藤到底给参谋上了什么地理课呢?简单的说就是区分关东、关西的基本定义(真要就这课题细写的话万多字没有问题,这里长话短说)。\n\n 根据律令期的五畿七道,“关东”原来是指东海道的铃鹿关(铃鹿峠)、东山道的不破关(关原)、北陆道的爱发关(爱发山)以东的全部地区。之后又从中细分,把东海道的足柄关(箱根峠)和东山道的碓冰关(碓冰峠)以东的地区定义为关东地区。区分关东地区和陆奥国(包括现福岛县、宫城县、青森县、岩手县及部分秋田县在内东北地区)之间的界线则是白河关和勿来关。关东地区曾被称为坂东。所谓“坂东”也就是“坂”以东地区,这个“坂”就是指箱根的坂(足柄峠)。当然以某关来区分关东和关西是不准确的,按照方言、民俗习惯来区分才比较正确,当然因经济、政治、交通等诸种原因地区的划分还有所不同,这相当微妙。\n\n “关东”这种称呼方式是和“关东管领”、“关东公方”等官方称呼一起,在室町时代以后才正式出现于书面和口头语言的。而江户时代则把现在的关东地区称为“关八州”(上野国、下野国、常陆国、安房国、上总国、下总国、相模国、武藏国,其范围就相当于现在的一都六县)\n\n 日本于明治后的1871年8月“废藩置县”。1876年8月正式定义关东地区为“一府六县”(东京府、神奈川县、千叶县、琦玉县、群马县、栃木县和茨城县)至今未变。而东京府则是在1943年7月正式升格为东京都。以首都东京为中心的都市圈被称作“首都圈”,“首都圈”则是“一府六县”加上山梨县。严格来说山梨县不属于关东,是属于“甲信越”的“甲”(“信”是长野县、“越”是新泻县),所以近藤才会对新任参谋把山梨县称作关东如此不满。\n总结一下其他另外几种称呼:\n关越(关东+新泻县)\n关东·山静(关东+山梨县+静冈县)\n关东·甲信(关东+山梨县+长野县)\n关东·信越(关东+长野县+新泻县)\n 也有把山梨县归入关东地区把“关东甲信越”简称为“关东信越”的例子。另外,关东甲信越加上静冈县可以称为是广义上的关东。\n\n 再回头看看以京阪为中心的关西。“关西”是俗称,其源头“近畿”才是高雅的正式称呼。长话短说,所谓“近畿”是指二府四县(京都府、大阪府、兵库县、奈良县、和歌山县、滋贺县)。而“关西”所指的范围就更大,以原先的“近畿”地区再加上其他县。\n\n总结一下“关西”的几种定义:\n二府五县(近畿+三重县or福井县)\n二府六县(近畿+三重县+福井县)\n二府七县(近畿+三重县+福井县+德岛县)(这个就有点大明白了。福井应该是北陆三县之一,德岛是四国的,估计极有可能是根据方言来划分的)\n\n 另外,京都、大阪、神户三个城市被称为“京阪神”。以“京阪神”为中心的地区被称作“畿内”,比起“近畿”,“畿内”则又狭义了一层。\n\n 综上所述,“首都圈”和“关西”都是广义上的地区名称,两者是同级别的;而“关东”和“近畿”则是都是相同级别的狭义上的地区名称。\n\n!!!!!鱼翅当粉丝和指鹿为马的典型\n  1943年8月,内野信二海军中佐指挥着伊8号潜艇远程航海访问德国,成功抵达法国布莱斯特港。邓尼茨为首的德国海军首脑们为日本海军举行了盛大的欢迎会,德日两国海军官兵在会上鲸吸牛饮,彻夜联欢。这忙坏了日本驻德大使馆的一帮子翻译官了。\n  席间,一日本海军少尉在酒过三巡后拿着自己的军刀向同桌的德国海军中尉炫耀。德国海军中尉已经有点舌头短,把刀抽出来看了看用德语嬉笑着说“比我们艇里厨房用的菜刀长不少”。翻译官在一旁听了一头冷汗,照直翻译的话难保少尉同志不抽刀和人家急。但炫耀菜刀的那位正兴致勃勃地等翻译呢,翻译官只好捣浆糊了:“中尉说您的军刀钢口真不错”(估计说完自己都吓一跳)。少尉同志听了得意洋洋摇头晃脑,跟嗑了摇头丸一般德行。\n  这趣闻告诉我们两件事:一、说人坏话一定要等喝醉之后;二、翻译这活其实也挺容易,两头糊弄呗。\n\n!!!!!南云忠一之武勇传一\n  南云忠一在当了航母机动舰队司令长官之后变得有点神经质,而且异常的小心谨慎。但想当年,南云也曾经是天不怕地不怕的主。南云还是军令部课长的时候曾经受邀参加在首相官邸举行的晚餐会,喝醉酒后趁着酒劲在首相府中的喷水池里撒尿,没人敢拦着他。一同参加晚餐会的有南云的同窗高桥伊望(同为海兵36期),也有点喝醉的高桥当时是站在一旁一边看南云撒尿一边傻笑。\n\n\n!!!!!南云忠一之武勇传二\n 南云曾经为了海军预算问题和井上成美(当时是海军省军务局的课长)炒得不可开交。气急之下南云甚至还公开扬言:“像你娃这样的SB,老子可以随时杀了你”,井上则没当回事。南云的山形县米泽市口音始终没改掉,对着井上狂吼的时候也是操着米泽方言。后来相当长的一段时间内,红砖房(军令部和海军省所在地是用红砖盖成的,后成为海军官僚办公地的简称)里只要有人斗嘴就会学南云的米泽方言说“像你娃这样的SB,老子可以随时杀了你”。\n\n!!!!!南云忠一之武勇传三\n日本空袭珍珠港后,南云进皇宫见天皇。事先草鹿参谋长把该回答天皇的话写在纸上,免得到时南云冒出会津老家的土话来。见天皇之后,一开始回答顺利,之后天皇随口提问时,南云又冒出了土话,口口生生称美军将领为“阿依子(那家伙)”,“考依子(这家伙)”。众人皆汗,天皇却很爱听,原定15分钟的谈话又延长了半小时。\n\n!!!!!乐不思蜀\n  直接指挥北太平洋上基斯卡岛撤退的是木村昌福海军少将,木村当时是第五舰队第一水雷战队的司令官。为了在大雾中寻找友舰和确定所在位置,木村经河濑四郎(第五舰队司令长官)向陆军借了两门88式7.5厘米高射炮放置在旗舰轻巡洋舰“阿武隈”号上,此外还借了十数名陆军炮兵来操纵这高射炮。值得一提的是,一向关系恶劣的陆海军在基斯卡撤退中极其合作。\n  基斯卡撤退成功之后迟迟也不见陆军的调令来,反正海军吃得比陆军好多了,这十几位一琢磨就在水雷战队安上家了。海军当然无所谓,又骗家伙又偏人的;陆军在东南亚和太平洋岛上被整得灰头土脸的,大家都忙得没工夫注意着细节了。直到1944年末陆军才想起这茬来,把这十几位和高射炮给调到北千岛去了。这十几位真不容易,冰天雪地的,后来没被毛子俘虏就算不错了。\n\n!!!!!宿醉的空中出租\n 偷袭珍珠港之后,南云率领第一航空舰队于12月23日回到广岛湾的柱岛泊地。以渊田美津雄为首的“赤城”号航母的舰载机飞行员全部驾机驶回鹿儿岛鸭池基地。所有飞行员狂欢至清晨,全都喝得酩酊大醉。第二天也就是12月24日,渊田必须飞去岩国基地见山本五十六。但渊田宿醉得非常厉害,根本无法掌握操纵杆。乘坐的九七式舰攻只能拜托“雷击王”村田重治来驾驶,渊田则坐在后座捧着碗抹茶醒酒。问题是村田自己也宿醉,只不过程度较轻。真不知道这驾九七舰攻如何在村田的歌声中摇摇晃晃飞抵岩国基地的。\n\n!!!!!制式配给\n 为了防止官兵在外出寻欢作乐时感染性病,海军和陆军都有各自制式的避孕套,而且是配给品。陆军专用的制式避孕套品牌名为“突击一番”和“铁兜”,不过“铁兜”的数量较少,大部分是“突击一番”。除了“突击一番”的少量改良型之外,大部分“突击一番”都没有贮精囊。\n 而海军专用的制式避孕套品牌名为“心美人”和“敷岛SACK”,都是有贮精囊的,其中“心美人”的数量占了绝大部分。“敷岛SACK”的制造商是相模橡胶工业,而“突击一番”和“心美人”都是由冈本橡胶工业(现在的冈本株式会社)生产的(做海陆军两头生意,真够黑的)。\n 据说“心美人”这个牌子的避孕套直到现在还有的卖\n\n!!!!!山本五十六轶事1\n新闻记者在山本五十六海军次官搭火车前往赴任联合舰队司令长官时访问山本有关新生活运动的问题(男人要剃光头、女人不准烫发)时,山本这样回答:\n「这些事情又有什麼关系?\n我本人多年來一向留短发,\n我认为这样省事。\n但是我看不出一个人剃光头或留长发,\n跟『新生活』又有什么关系。\n海军航空队的军官大多留長发。\n假如你重重的打自己的头,有头发的伤亦轻。\n另一方面来说,不管头发理的多短,笨蛋终归是笨蛋。\n因此,两样都行,是吗?\n对于烫发而言也是一样,\n我认为妇女烫发的原因之一是因为这样比较经济。\n因此,我觉得烫发並沒有什么不对-对于传统的日本式发型也是一样,\n所以不值得庸人自扰」\n\n!!!!!巡洋艦寧海的下水\n\n中國海軍委託日本建造的寧海號巡洋艦,原本預定1931年10月10日雙十節在日本播磨造船所進行下水典禮,但是下水前的9月18日卻發生了關東軍侵攻滿州的滿州事變(918事變),中國方原本擔心日本海軍會把寧海號巡洋艦沒收,但是海軍並沒有這樣作,他們認為滿洲事變是陸軍搞的,跟寧海的下水不能混為一談。雖然大陸上日本陸軍與中國間正處於準戰爭狀態,但是播摩造船所以集當地居民仍對駐日本監造的中國海軍李世甲少將一行人十分友好,並且當作貴賓接待。神戶的報紙當時刊登了"滿州事變下超然的日中合作"的報導。最後,寧海依照原定的10月10日上午10時10分,舉行了隆重的下水典禮,中國駐日公使、駐神戶領事都參加此一典禮,日本的來賓也跟中國海軍軍官們一起呼喊"中華民國萬歲"。寧海號於隔年7月31日完成並交付給中國海軍。\n\n!!!!!井上成美拒絕砲擊上海閘北\n\n井上成美在中日戰爭前被明昇暗調到遣支艦隊,松滬會戰的時候,他率領遣支艦隊在上海外海警戒,陸軍將領松井石根要求他以艦砲支援轟擊上海,卻遭井上斷然拒絕,井上說:軍艦是用來打軍艦的,且上海人口稠密,容易傷到平民百姓。此事讓日本陸軍大為惱怒,上告軍務省,讓井上差點被罷黜。\n\n!!!!!堀悌吉延遲開砲\n\n堀悌吉是山本的好友,也是海軍良識派,所以經常遭到極右派的無情攻擊,其中有一件事特別被人拿來作文章,就是在上海事變(128事變)的時候,他率領的第三戰隊突然受到吳淞砲台的攻擊,不過他卻沒有立即反擊,而是往後退避,這讓極右派軍人攻擊他是為膽小懦弱,實際上他後退的原因是為了遵守國際法,發布警告消息給砲台附近的外國船隻,並且花時間仔細的瞄準砲台的位置,以免傷及附近的平民百姓家。堀在日後講到,上海事變的時候日軍無視戰爭法規,恣意破壞,濫用兵力,是為修羅場;排擠同僚的行為則近乎畜生道,整體表現根本就是武士道最大的墮落。\n\n!!!!!日本海軍與咖哩飯\n之前有人曾經提過日本海軍的咖哩飯傳統,\n最近看到一份與此有關的資料,在此提供一下。\n\n1882年 當時的日本海軍還處於草創期,\n這一年,日本海軍派出船艦龍驤丸舉行練習航海,\n但是長時間的航海之後,出現了令人相當頭痛的情形--\n艦上的400名乘員中,有160人患上了腳氣病,其中25人不幸死亡。\n\n龍驤丸停靠在火奴魯魯港口之後,\n所有的病患立刻轉到美國海軍的醫院接受治療。\n他們接受的治療其實也很簡單,\n只要攝取足夠的肉類,麵包跟蔬菜,獲得足夠的營養就可以了,\n說直接點就是普通的飲食,如此而已。\n\n在這之前,日本海軍的艦上飲食並不十分注重這點,\n大致上就只有白飯,醃蘿蔔乾與味噌湯而已。\n經過這次事件的教訓,高層人員開始注意到食物營養的重要性,\n將飲食改成以西式為主的內容,\n咖哩的點子很可能是跟當時的英國海軍學來的。\n剛開始是仿效英國,將麵包跟咖哩混著吃,\n但是對以米食為主的一般官兵來說,還是不太適應,\n經過許多次的試驗,終於改良出新的咖哩飯調理方式。\n1889年海軍的'五等廚夫教育規則'中,\n已經出現了以咖哩飯為開頭的各種料理方法。\n日後這份菜單繼續經過修正,增加營養內容的考量,\n再加入一些後來才輸入日本的食物種類,漸漸形成現在的方式。\n(馬鈴薯,紅蘿蔔,洋蔥等蔬菜,都是從明治時期才開始在日本栽培的,\n因此早期的咖哩用的幾乎都是進口的食材,\n到後來就改成本土產的食材了。)\n\n!!!!!英國的雷達與八木天線\n\n1942年2月佔領新加坡的日軍捕獲了英國製造的對空雷達。在擄獲的雷達之上寫有「YAGI ARRAY」的字樣,這一點引起了日軍的注意。經過了陸軍研究所、日本電氣、東芝等技師的調查後,終於判定其所指的是「八木天線」。\n\n八木天線是1926年日本東北大學的教授八木秀次自力研發的超短波用天線,也就是現在常看到的位於屋頂上的魚骨型電視天線。八木天現在當時可說是尖端科技的發明,在歐美各國引起了很大的迴響。把八木天線專利權買入的英國在1920年代末期予以商業化,但是在日本卻只有1933年時將八木天線應用在山形線酒田市、飛鳥間與新瀉、佐渡間的無線電話而已。\n\n1941年八木向商工省(現在的通產省)申請延長專利,卻被以「難以認定為重要的發明」而駁回。為了把八木天線利用在雷達上,八木與其弟子岡部金次郎共同研究作為超短波發振器的磁控管,並於1928年在美國發表引起很大的迴響。磁控管(magnetron)後來在戰爭中以殺人光線的名義被海軍研究。\n\n1935年時海軍研究所的技師提議進行雷達的研究,然而高層卻以「在黑夜裡點著燈籠」這樣的理由,認為士兵的訓練比雷達的開發更重要而將提議駁回。不過話雖如此,以當時日本的電氣產業技術水準來看,要將雷達實用化仍有其困難。\n\n!!!!!方便面的由来\n 世界上首创方便面的是日本海军的主计部门,其初衷是为了方便潜艇部队官兵进食。但方便面只限在潜艇部队使用,并没有大规模普及乃至外传,另外技术上也不够成熟。二战结束后,负责研究开发方便面的那些海军主计部门的研究员有一半在刚刚成立不久的日清食品(1948年9月)找到了工作,10年后就推出了世界上最早的方便面(当时卖35日元)。\n\n!!!!!艦上的吃(以聯合艦隊旗艦長門為例)\n\n軍官以上:\n\n早餐-\n  魚乾、海苔、味增湯、醃醬菜、白飯(日本人只在生病時吃粥),如果有人想吃西式的,也可以於前一天晚上告訴勤務兵準備咖啡、麥片粥之類的英式早餐,有留洋經驗的軍官並不會排斥這一類西式早餐,但是大多數還是喜歡日式早餐。\n\n午餐-\n  按照湯、魚、肉次序上菜的西式全餐,不論寒暑用餐時需要穿上外套、並且按照英式餐桌禮儀用餐。\n  聯合艦隊司令長官是在自己的私室中用餐,有勤務兵隨伺在旁,有時也會在司令官廳用餐,同時招待艦隊要員等一同進餐(按照禮儀,司令長官坐於桌子一邊中央,參謀長跟他對面而坐,其他有資深幕僚人員、副官、艦隊譯電長、艦隊氣象長、艦隊輪機長、艦隊主計長、艦隊醫務長、艦隊軍法長、旗艦艦長等)。\n  軍官分高低階分別在軍官室跟基層軍官室中用餐,聯合艦隊司令官用餐前五分鐘,軍樂隊集合在後甲板,演奏半古典或歐美的流行音樂,而非軍歌軍樂等,即使在戰中也保持這項傳統,這也算是樂隊每日的練習時間。官兵們多半儘快吃完午飯,到後甲板享受音樂。不過這只有在艦隻錨泊的時候才會舉行。\n\n\n晚餐-\n  日式,包括生魚片、醃蔬菜、烤魚、蒸蛋、味增湯等日式料理,在軍艦位於不同地方時會有當地風味菜,如龍蝦、鯛魚等。\n  晚餐後吃不飽的軍官會向勤務兵要剩飯,事實上是伙房特地多煮一鍋來應付這些軍官,另外在加上幾個荷包蛋跟醬油、烏醋等當作第二頓晚餐。\n  艦上的菜色隨軍艦的大小各異,越大的菜色越好。海軍中以「大和旅館」的菜色最好,但是山口多聞卻抱怨量太少(他是出名的大胃王)。\n\np.s:軍官必須自付伙食費,年輕的軍官們往往花錢如流水,有家計的特務軍官(從士官升上來的軍官)相較之下比較懂得節約。\n\n\n一般士兵:\n\n  沒像軍官一樣必須吃全套西餐,但是菜色中也是和洋並有,奶油燉雞、咖哩牛肉等洋菜、味增湯、魚、醃醬菜等日式菜。主食是混了大麥的米飯。早餐也以飯、醬菜為主,七點半用早餐,但是在吹起床號前就必須起床值日的時候,為了先填飽肚子,會跑到廚房先要些吃的,通常廚房給他們大麥飯、油豆腐碎片、伴上醬油跟醬菜的雜菜飯。\n\n!!!!!戰艦大和的冷凍庫\n\n相對於被叫做體育學校的戰艦武藏,同級的姊妹艦大和則被稱為「大和旅館」,這是因為開戰以來大和艦幾乎都停泊在土魯克,足不出戶地不上戰場而被海軍將兵們揶揄的緣故。\n\n做為帝國海軍第一名艦,艦上士兵的伙食自然是不差的,甚至於在進入物資缺乏的1945年戰爭末期可以說是稱的上豪華,據原艦上乘員回憶,當時的餐點還有咖哩飯、香蕉、蘋果、通心粉、生菜沙拉等。\n\n大和旅館的料理要好吃,艦上的艦長專用烹飪室、准軍官以上烹飪室的電氣冷凍庫自然功不可沒,此外還有士官兵專用的食材保存用大型冷凍庫。這些冷凍庫都還有肉類、蔬菜類、生菜類的分別。\n\n大和的食材冷凍庫動力來源是8萬千卡(26冷凍噸)50匹馬力的日立製渦輪式冷凍機四部中的一部。對軍艦而言冷凍機是絕對有必要的配備,主要就是要維持彈藥的性能和防止誘爆發生,彈藥的性能以常溫攝氏20度為最好,彈藥庫的位置也最好不要靠近軍艦的動力機關,免得發生自然誘爆。除此冷凍機也可提供准士官以上的居室的冷氣。\n\n!!!!!海軍軍樂隊\n日本的軍樂隊最初是明治2年薩摩藩的軍樂傳習生在橫濱聘請英國的陸軍軍樂教官教授軍樂所開始發韌的,這是陸軍軍樂隊的濫觴。至於海軍軍樂隊則是明治4年開始招募樂隊員,也是由同一批教官教授。\n\n海軍軍樂隊最初是橫須賀鎮守府屬下的部隊被配置於東京,並由海軍大學校節制。後來各鎮守府陸陸續續也成立了軍樂隊,在同一時期軍隊也配屬給艦隊,作為常備艦隊旗艦的乘組員。至於戰時編成的艦隊,則大多不配屬軍樂隊。各鎮守府之中,橫須賀鎮守府擁有二個軍樂隊,其中一隊派遣到東京。\n\n軍樂隊員不用說一定都是志願兵,軍樂科的下士官兵的兵籍被置於各鎮守府,新兵教育一定是由各鎮守府海兵團實施。新兵教育完了後,普通科練習生繼續在海兵團內的軍樂練習部接受術科教育,修業完了後就擁有軍樂特修兵的資格。比較高級的特修科練習生則作為依託生被派遣到東京音樂學校(現在的東京藝術大學)接受更好的訓練。\n\n在戰時之中,大多數的軍樂科員都有接受從事暗號員的再教育,其中一部份的軍樂隊一直到終戰時都持續有活動,戰後他們就被移籍給東京消防廳音樂隊。\n\n被配屬給艦隊的軍樂隊,作為旗艦的乘組員,身分上則是司令部附。海軍中視為正餐的中餐裡,作為背景音樂演奏音樂。當值的士兵在私室迎接長官,並傳令給在後甲板準備的軍樂隊,在長官就定位拿起湯匙的同時,樂隊的指揮者也同時開始作業。\n\n!!!!!海軍的術科學校\n1海軍砲術學校\n\n海軍砲術學校是對海軍軍官與士官兵進行有關砲術教育的術科學校,從最初砲術練習艦,經過砲術練習所的演變,最後在明治40年於橫須賀設置了海軍砲術學校。在本校中軍官分為普通科學生、高等科學生、特修科學生,士官兵則分為普通科練習生、高等科練習生、特修科練習生分別進行教育。在畢業之後就成了所謂的「鐵砲屋」。\n\n昭和16年為了因應中國事變與太平洋戰爭於是將陸戰、陸上防空射擊相關的訓練移往館山,新設立「館山海軍砲術學校」,原先擔任對水上砲擊與艦上防空射擊訓練任務的改稱「橫須賀海軍砲術學校」。\n\n2海軍潛水學校\n\n負責教授官兵作為潛水艦乘員必要技能的術科學校,大正9年9月15日設置於吳港。設置當初原先隸屬於教育本部,教育本部廢止後改隸吳鎮守府。潛水學校與其他術科學校不同的地方在於,潛水學校的學生或練習生為其他術科學校畢業後再來本校追加潛水艦必要的勤務技能,大抵上都是水雷學校的畢業者,也有部分是通信學校與航海學校的畢業者。\n\n潛水學校的教育課程分為甲種學生和乙種學生二類,前者是作為潛水艦艦長的養成班,後者為潛水艦乘員的教育班。開戰後昭和17年又開設大竹分校,後來校本部移往大竹,舊本部改稱吳分校。\n\n3海軍水雷學校\n\n負責教授海軍官兵水雷術的術科學校,從最初的水雷練習艦迅鯨經過水雷練習所的演變,最後在明治40年設置了海軍水雷學校。本校所在於橫須賀軍港,隸屬於橫須賀鎮守府。學生分為高等科、普通科、特修科、專攻科四種,練習生分為高等科、普通科、特修科三種。這是為了成為「水雷屋」所必定要經過的學校\n\n!!!!!海軍燃料廠\n海軍燃料廠是海軍必要的燃料與潤滑油進行生產、加工、實驗、研究的機關。最初在日俄戰爭時設立的臨時煉碳製造所為其前身。大正10年改為海軍燃料廠,負責掌管有關燃料的全般事務。\n\n海軍燃料廠從煉碳製造所的時代開始就設置於山口縣德山,其隸下設有採碳所、礦業部與製油部,最早是作為煉碳的製造中心,後來海軍艦船的燃料改以重油為主流之後,就轉變成製油中心,煉碳事業改移往平壤。另外不只是艦艇用的重油,也開始飛機使用的揮發油的精製,這些設施都是設在德山。\n\n昭和16年海軍燃料廠被改編改設置第一至第六燃料廠,第一燃料廠在大湊,第二燃料廠在四日市,第三燃料廠在德山,第四燃料廠在新原,第五燃料廠在平壤,第六燃料廠在台灣,這些工廠各有各自的業務,主力為製造航空用揮發油的第二燃料廠和製造艦艇用重油的第三燃料廠。後來第二和第三在戰爭末期遭受美軍轟炸喪失了機能。\n\n戰時中,在南方也設立了特設燃料廠,這些燃料廠被冠上了一百以上的番號。在婆羅州的為第一○一燃料廠,在八里八板的為第一○二燃料廠。\n\n!!!!!海軍醫院\n不管哪裡的軍隊都擁有自己的醫院,日本海軍也不例外。日本海軍都是在各個軍港設置醫院,不用說必定在橫須賀、吳、佐世保、舞鶴這些地方。最早的海軍醫院是在東京被廢止的築地所設置的軍醫學校附屬醫院。大正中期以後也開始在軍港地區以外適宜的地方設置醫院,這些醫院幾乎都是設置在溫泉地區以療養為目的的醫院。\n\n這些軍港地區以外的醫院基本上都接受軍港地區醫院的指導,但在官制上則平等隸屬於各鎮守府。醫院有醫院長及副長,另外還配置有各部部長,通常第一部為外科關連,第二部為內科關連,第三部為防疫關連。最終所設置的醫院為橫須賀、野比、湊(伊豆)、霞?浦、戶塚、吳、岩國、賀茂(廣島)、山中(石川縣)、別府、佐世保、大村、嬉野、舞鶴、大湊、鎮海。其他的特設醫院為第一(上海)、第二(海南島)、第三(印支)、第四(土魯克)、第五(古阿姆)、第八(拉布爾)、第一○一(新加坡)、第一○二(泗水)、第一○三(馬尼拉)、第一○四(安汶)。\n\n!!!!!日本海軍和騎術\n因為騎士道的傳統,騎術是英國貴族必備的修養,日本海軍承襲英國海軍的傳統,所以海軍軍官三校(兵學校〔官校〕、機關〔輪機〕、經理〔主計〕)都有馬術的課程,通常是一號生(最高年級)於週六或週日下午到就近的陸軍學校或騎兵部隊練習;而放假返鄉時如想練習騎術,只要事前向學校報備,由學校寫信告知返鄉地之陸軍部隊,也可以就近前往練習。\n\n同書引用1935年時擔任海軍上海特別陸戰隊砲隊副官、中隊長關口礦造中尉的回憶:營區內庭有第一次上海事變(一二八事變)時陸軍留下來的馬約十匹,後來又買了幾匹中國馬,每逢星期假日,軍官就乘馬出遊營區外的鄉間小路溝渠,視察風土民情以為娛樂,如當地日僑想騎馬,也允許外借………。\n\n大津海軍大學\n海軍的俚語,本來真正的海軍大學是位於東京目黑,一般口語上所說的「大津的海軍大學」指的是橫須賀海軍監獄的意思。\n\n恩賜組\n\n海軍的俚語,海軍大學校與海軍兵學校以優秀的成績畢業的學生,天皇陛下都會下賜紀念品,紀念品的內容根據課程與時期有所不同,接受這些「恩賜品」的學生們就被稱為「恩賜組」,通常海大甲種學生為長劍,而兵學校的學生則為雙筒望遠鏡、手錶或短劍。\n\n!!!!!海軍官兵的俸給\n海官兵的俸給\n\n準軍官以上(年俸)\n大將 6600元;\n各科中將 5800 元;\n各科少將 5000 元\n各科大佐 4150 元;\n各科中佐 3220 元;\n各科少佐 2330 元;\n各科大尉 一級 1900 元;\n二級 1650 元;\n三級 1470 元;\n各科中尉 一級 1130 元;\n二級 1020 元;\n各科少尉 850 元;\n各科特大尉 一級 2070 元;\n二級 1910 元;\n各科特中尉 一級 1740 元;\n二級 1630 元;\n各科特少尉 一級 1470 元\n二級 1368 元;\n候生 670 元;\n準士官 一級 1220 元;\n二級 1150 元;\n三級 1043 元;\n四級 930 元;\n\n下士官兵(月俸)\n一等下士官 一級 55元40錢;\n二級 49 元;\n三級 41元70錢;\n四級 34元70錢;\n二等下士官 一級 28元90錢;\n二級 27元40錢;\n\n三等下士官 一級 23元20錢;\n二級 21元60錢;\n一等兵 17元80錢;\n二等兵 13元10錢;\n三等兵 11元60錢;\n四等兵 6元20錢;\n\n!!!!!加俸\n除了這些一般俸給以外,\n下士官兵拿到善行章有額外的加俸,\n各部門人員如果拿到特技章, 或是負責電信與通信者也會加俸,\n還有航空與航海加俸.\n\n善行章:\n一般善行章...每天3錢, 拿到多個可累計, 此部份加薪上限為每天15錢\n特別善行章...每天5錢, 此部份上限為每天15錢\n\n特技章:\n每天10錢\n電信與通信人員無特技章者, 每天8錢\n\n航海加俸:\n視人員階級, 搭乘艦種與航行區域決定\n例如:\n搭乘戰艦停泊在母港...大尉每天80錢, 一等水兵每天15錢\n搭乘潛艇在大西洋行動..大尉每天13圓, 一等水兵每天2圓90錢\n\n航空加俸: (不分階級)\n飛機乘組員...每月60圓\n航空隊地面人員...每月30圓\n除此以外還有營養補給與興奮劑供給\n\n食費: (軍官以上)\n視在船上的用餐場所'等級'而定\n\n所以, 如果某人是艦載機飛行員的話,\n那他可以同時拿航空與航海加俸, 薪水算是滿不錯的.\n相對的, 轉調到陸上單位的話, 就沒那麼多福利了.\n\n此外, 飛行員由於屬於高危險職業, 保險金也是相當昂貴,\n每個月必須多花30圓(死亡險3000圓),\n不過為防萬一, 當時飛行員的半數以上都乖乖參加了.\n体制问题 \n发表时间: 2006-12-8 15:44:13 编辑 引用回复 留言 举报 表扬 第 70 层 \n\n!!!!!舊日語中的漢字地名譯名\n1.蘭印─亦即荷屬東印度群島,也就是今天的印尼。\n2.古阿姆─意即關島〈由英文名稱Guam演變而來〉\n3.比島─意即菲律賓〈也是由英文Philippines的Phi演化而來〉\n4.昭南島─日軍佔領新加坡之後,對它所改名的稱呼。\n\n華府——華盛頓\n壽府——日內瓦\n君府——君士坦丁堡\n費府——費城\n羅府——洛杉磯\n紐育——紐約\n倫敦——倫敦\n巴黎——巴黎\n羅馬——羅馬\n伯林——柏林\n西貢——西貢\n盤谷——曼谷\n彼南——檳榔嶼\n桑港——舊金山\n沙市——西雅圖\n晚香坡——溫哥華\n花琉璃——檀香山\n馬尼剌——馬尼拉\n馬耳塞——馬賽\n佛印——法屬印度支na\n希望峰——好望角\n\n!!!!!日本陸海軍飛行員與毒品\n不獨陸海軍特攻隊員,夜間戰鬥機的飛行員也注射安非他命(日本稱為覺醒劑,不過當時對飛行員宣稱是‘夜視荷爾蒙’),以保持長時間夜間飛行清醒\n 因此戰後二、三十年間,有不少夜戰飛行員都身受毒癮後遺症之苦\n (詳細可以參考渡邊洋二<重?飛行機雲>〔文春文庫\1999年〕 9~35頁‘四十五年目?真實’中,黑鳥四朗〔1945年5月25日,和倉本十三上飛曹以月光夜戰,一夜擊墜五架、擊破一架B29的英雄〕的證言)\n\n 日本戰敗後,陸海軍庫存的大量安非他命與製造方法,被不肖復員軍人盜賣\n 造成日本社會基層廣泛流行服用\n 1960年代,日本加強查緝,毒販便將製造基地轉移到南韓、臺灣、香港等海外地區\n 流毒四方,蓋始於此。
主页: http://mldonkey.sourceforge.net/Main_Page\n图形界面sancho主页: http://sancho-gui.sourceforge.net/\n\n优点:实在太强大了,支持各种下载协议,包括ed2k、bittorrent、http、ftp……,而且在继续扩充。\n我主要说一下ed2k功能,它有一个最最奇特的地方就是,可以同时连接任意多个emule服务器,而不像其他我所用过的emule-mod只能连一个。因此,其速度可以快好几倍。另外,他还有众多图形界面(其本身只是一个命令行的东西),可以用浏览器控制,甚至telnet。而sancho是所有图形界面中最优秀的一个(功能最复杂,你一定有眩晕的感觉)。\n\n缺点:那就是设置有些复杂,而且都是英文的,但有一个比较好的设计就是,把鼠标移到每个选项上会有英文提示。\n\n安装:源里有,但是版本低。我推荐直接在主页下载可执行压缩包。地址: http://sourceforge.net/project/showfiles.php?group_id=156414&package_id=174487 页面下的\nhttp://downloads.sourceforge.net/mldonkey/mldonkey-2.8.3.static.i386-Linux_glibc-2.3.2.tar.bz2?modtime=1171211648&big_mirror=0\n或者64位的\nhttp://downloads.sourceforge.net/mldonkey/mldonkey-2.8.3.static.amd64-Linux_glibc-2.5.tar.bz2?modtime=1171211661&big_mirror=0\n\n图形界面sancho(含java,体积大一点)\nhttp://sancho-gui.sourceforge.net/files/1qlk26kghfhya/sancho-0.9.4-58-linux-gtk.sh\n或者(不含java,需要系统的,我用的是java6,没有问题,因此推荐这个)\nhttp://sancho-gui.sourceforge.net/files/1qlk26kghfhya/sancho-0.9.4-58-linux-gtk-java.sh\n64位(不含java,需java虚拟机)\nhttp://sancho-gui.sourceforge.net/files/2q0j4j9zvbxk2/sancho-0.9.4-58-linux-gtk-x86_64-java.sh\n\n下载完毕后,解压,先运行mldonkey文件夹下的mlnet(鼠标双击或者命令行下./mlnet),然后运行sancho文件夹下的sancho(鼠标双击或者命令行下./sancho),刚开始会有配置向导,照做即可。\n\n在适当设置过之后,所有的server都可以是high id,我这里是通过端口设置实现的(adsl路由上网)。如果你有windows下的emule,最好把他们的端口(tcp的)设成一样。有些路由器有记忆功能,导致windows下的端口在重启后仍然保留。 \n\nSource: [[Ubuntu中文 论坛 :: 阅读主题 - [推荐]比amule更棒的电驴——mldonkey|http://forum.ubuntu.org.cn/viewtopic.php?t=42337]]
作者:萨苏\n\n本来这两天对新版还不适应,不想再发贴了,发生了下面这件事,没忍住。。。\n\n有个在国外作中文教师的朋友,和我联系,说买了一套洪恩的软件,可以区分中文句子中主语,谓语,宾语,这样,对外国人理解中国语法,是很有帮助的。不过,他对其功能还有些不信任,让我给他一些中文的句子作测试。\n\n我哪有如此闲工夫呢?可是有不好意思拒绝。\n\n于是心生一计,干脆把一个新闻网站上面的标题送了过去。\n\n您看,就是这个:\n \n* 便利的新型电话卡不用PIN:马上送60分钟免费拨中国\n* 吴仪撒百亿采购礼单 布什仍在中美贸易上施压(图)\n* 连爷爷抵京陈云林拥抱迎接 媒体严阵以待(组图)\n* 李彩桦三点泳装被偷拍 娇好身材显露无遗(组图)\n* 克林顿首次拿性丑闻开玩笑:五辈子都可上头条(图)\n* 田亮死不认错:商业活动不是最多,我去奥运准夺冠(图)\n* 学者揭国家科研经费使用黑幕 曝光六大洗钱方式\n* 聊聊世纪之毒:不沾锅的是是非非(组图)\n* 周涛沉默中爆发怒火 发表声明斥害人博客(组图)\n* <夜宴>剧本网上泄密 章子怡葛优乱伦戏曝光(组图)\n* 年缴税1.01亿的香港打工皇帝 真实身份终曝光(图)\n* 各显神通:昔日"天桥八大怪" 重现北京街头(组图)\n* 台蓝军“新太子党”出征 政治老成到让人晕(图)\n* 周迅为章子怡吴彦祖辟谣 当众对李大齐表达爱意(图)\n* 不比不知道!看看国外著名景点的门票价格(组图)\n* 到底还能"博"多久?中国博客被指面临一场失控危机\n* MM大胆告白:若国青击败日本 愿和国脚"一夜情"(组图)\n* 赶走肥胖元凶:过百万人士见证的"仙姿梅"立竿见影(图)\n* 真彪悍! 监控全程拍下庭审现场女子暴袭法官(组图)\n* 中国楼市再临节点 北京房价飙升成全国最贵\n* 巩俐街头牵手外籍男友 天后呈现天真烂漫状(组图)\n* 阿杜的老板在京跳楼身亡 演艺圈中年男性危机(图)\n* 央视被忽悠:专访过的"留美博士"竟然从未出过境(图)\n* 伊拉克小姐遭恐怖分子恐吓 匆忙放弃冠军头衔(图)\n* 山西医院爆炸33人遇难追踪:嫌疑人今晨自首(组图)\n* 嫌人驾车太慢一枪击毙 华裔退休警察一怒行凶\n\n一会儿,那边告诉我,输入以后软件分析得不错,虽然有些给丢了,有些有错误,但80%是正确的。\n\n然而。。。\n\n一会儿就联系不上了。\n\n再问,说上厕所乐去了。\n\n上厕所还乐,这兄弟精神有问题了吗?\n\n后来才知道是乐得怕尿裤子,跑厕所去了。\n\n怎么回事呢?\n\n原来分析完了,他随手用了个“复原”功能,想把句子重新组起来,不知道怎么的那软件就把新闻把主语放回去的时候都错了一行,再加上20%的错误率,就成了下面这个结果 -- 嗯。。。。\n\n萨看完也快奔厕所了,匆忙中给每个新闻加了一句点评 –\n\n* 吴仪的新型电话卡不用PIN:马上送60分钟免费拨中国\nn 吴阿姨不愧对外经贸部出来的,忙得那样还不忘帮着做广告。\n\n* 连爷爷撒百亿采购礼单 布什仍在中美贸易上施压(图)\nn 以前光知道连战有钱,可真不知道他有钱到引发中美贸易战阿\n\n* 李彩桦抵京陈云林拥抱迎接 媒体严阵以待(组图)\nn 陈主任悬了。。。\n\n* 克林顿三点泳装被偷拍 娇好身材显露无遗(组图)\nn 老克不愧是老克,总能出新鲜的\n\n* 田亮首次拿性丑闻开玩笑:五辈子都可上头条(图)\nn 田亮也太潇洒了,不用五辈子,这篇就能上头条了\n\n* 学者死不认错:商业活动不是最多,我去奥运准夺冠(图)\nn 这学者真是精力充沛,经商做学问外加上奥运会,人才!\n\n* 揭不沾锅使用黑幕 曝光六大洗钱方式\nn 以后谁家买不沾锅千万先审查清楚了此锅有没有黑社会背景\n\n* 聊聊世纪之毒:周涛的是是非非(组图)\nn 世纪之毒?这么形容我们周涛也太过分了吧?\n\n* 章子怡沉默中爆发怒火 发表声明斥害人葛优(组图)\nn 完了,这官司打起来葛优还有好么?手机对飞刀阿\n\n* <夜宴>剧本网上泄密 香港打工皇帝乱伦戏曝光(组图)\nn 嗯,皇帝乱伦哪个剧本敢泄密?不活了?\n\n* 年缴税1.01亿的昔日"天桥八大怪" 真实身份终曝光(图)\nn 好家伙,我也想知道谁这么有钱,那年头就能缴税一个亿!\n\n* 各显神通: 台蓝军“新太子党” 重现北京街头(组图)\nn 听说了国共要第三次合作,可没想到发展会这样快。\n\n* 周迅出征 章子怡吴彦祖政治老成到让人晕(图)\nn 周迅出征?打谁?章子怡从政不从政我不知道?晕,我是肯定晕了\n\n* 看看国外著名景点辟谣 当众对门票表达爱意(图)\nn 可算看到一个比较合乎逻辑的了\n\n* 不比不知道!看看中国博客的价格(组图)\nn 罢了,一直说整顿博客,敢情是用收费的方式。。。\n\n* 到底还能"博"多久?MM被指面临一场失控危机\nn MM失控会怎样?最好不要是野蛮女友。\n\n* 肥胖元凶大胆告白:若国青击败日本 愿和国脚"一夜情"(组图)\nn 得,这回恐怕能赢的也没人敢赢了\n\n* 赶走法官:过百万人士见证的"仙姿梅"立竿见影(图)\nn 这仙姿梅是典型的不法厂商阿\n\n* 真彪悍! 监控全程拍下庭审现场女子暴袭中国楼市(组图)\nn 唉,谁叫你房价老涨呢,瞧,MM都看不下去了\n\n* 巩俐再临节点 北京房价飙升成全国最贵\nn 看不明白,巩俐成了股票指数了?\n\n* 阿杜街头牵手外籍男友,演艺圈中年男性呈现天真烂漫状(组图)\nn 这天真烂漫阿,剧寒\n\n* 央视的老板在京跳楼身亡,"留美博士”危机(图)\nn 不会吧?难道央视的老板是海龟?\n\n* 伊拉克小姐被忽悠:专访过的恐怖分子竟然从未出过境(图)\nn 被恐怖分子忽悠,难得阿难得。。。\n\n* 山西医院遭嫌疑人恐吓 匆忙放弃冠军头衔(图)\nn 山西医院是什么冠军?收费?\n\n* 车爆炸33人遇难追踪: 华裔退休警察今晨自首(组图)\nn 这老哥们儿也太猛了吧?\n\n* 嫌人驾射雕太慢一枪击毙 李自成一怒行凶\nn 没想到闯王也用这种兵器。。。\n\n\n不写了,不写了,赶紧奔厕所。。。\n\n[完]\n\nSource: [[【原创】给大家看看什么叫真正的标题党: 西西河|http://www.cchere.net/article/707122]]\n\n
作者:捷敏 \n\n  蒋介石深知兵权对他统治的重要性,为了后继有人,三十年代处便把蒋纬国送往德国军校去学习了。经受德国法西斯的严格训练毕业回国后,当然受到了乃父的特别宠爱。对他如何安排,蒋介石是煞费心思的。\n\n  蒋纬国的毕业归来,事闻于事蒋 若父的胡宗南,他抓住这个邀宠的好机会,赶往觐见,向蒋介石面请将小蒋交给他。蒋介石当然放心地答应了。还不免冠冕堂皇地叮嘱一番:“要叫纬国他从连队基层锻炼起,要他多经受实际锻炼。”胡宗南仰体旨意,也煞费心思作了妥善安排:第一派他到某营当连长,第二把他派到潼关前线的这个营。难道真要叫他在守卫潼关的前线去和日军作战吗?胡宗南当然不会让他去冒这种风险的。这个连在潼关南的一个山凹里,距潼关仍有二、三十里,这里是黄河对岸风陵渡日军大炮射程所不及的地方,是绝对安全的所在。这个连虽然驻扎在前线,但是天天练兵,绝不派往火线打仗。这样就两全其美,可以向蒋复命,完全没有辜负他的重托了。\n\n  关于蒋纬国的生活,胡宗南也颇费心思,照顾的十分周到。当时上尉连长的待遇,一般月薪60元,胡宗南当然不会如此“老鳖一”,只每月发他60元,而是特别为他派了一名副官,转司个人花销事宜。一般连队编制上并没有副官,而且如果派的是个小副官,也深恐难以对这项任务胜任愉快。于是专门派了一名不露军衔的副官,实际上原来是个上校官员。蒋纬国的一切开支是直接向胡宗南的军需处全部报销的。上尉连长的这位上校副官所抱的大皮包里,经常装满了钞票,准备对连长的一切花销随时付款。\n\n  这期间,蒋纬国正和西安某富商之女在热恋中。他每周去西安,星期一才回队。西安最华贵的饭店里,舞场里,咖啡馆里,是他和爱人经常出入的地方,他俩尽管吃,尽管玩,尽管花,一切有这位随从的上校副官随时付款。这位副官究不失为上校,很会办事,他还经常以连长的名义发给该连事务长一笔钱,着添菜为弟兄们改善伙食。全连的官兵吃的是一般连队难以想象的好伙食。他们都庆幸在这个连实在口福不浅。\n\n  连长习惯于从外国学来的一套方式,表现官兵的融洽亲爱。每逢连长动身要上西安了,全连官兵就蜂拥而出,几个人抬起连长,边走边喊边唱,全体欢送连长。电话传来说连长从西安回来了,全连照例蜂拥而出,奔上前去,高喊着:“我们的连长回来了!我们的连长回来了!……”一到眼前,士兵们争先抬起连长,又是“拖尸”(TOSS的译音,有如河南民间嬉戏中抬起一个人“筛糠”)又是狂喊狂笑,连长无比高兴,士兵也乐不可支。 这个连的官兵们在蒋连长的率领下,就这样守卫在前线,从事训练,他们充当着当时国军中难以想象,难以伦比的幸运儿。\n\n(完)\n\nSource: [[Untitled Document|http://www.mgjs.com/01wenzhang/03renwu/tongguan_jiemin.htm]]
论奴才(此文极其反动,出于对生命的爱护,请反自由人士备好救心丸)\n愚鼠临疯 @ 2007-8-5 5:26:21 阅读(3662) 引用通告 分类: 未归类\n\n奴才有这些特点:一,崇拜强权,面对强权莫名激动。二,会讨好主子欢心,以至荣华。三,狗仗人势,谄上欺下,奴颜婢膝。他们好像天生就抗拒自由民主,匍匐在权力在脚下,甘愿当奴才,好像只有被强煎才会有快感。离开了包办一切的主子就不能活了。满清人来了就当满清人的奴才(鹰犬),老蒋来了就当老蒋的奴才(另一个阵营的奴才叫他们反动派),日本人来了就当日本人的奴才(汉奸,公认的),共贪党来了就当共贪党的奴才(既然他们这么喜欢代表别人,就让他们当历届奴才的代表吧,他们继承发扬了奴才的优良传统应该当之无愧)。他们紧密的团结在以主子为核心的权力周围,高举奴性主义伟大旗帜,坚持四项鸡巴原则,牢牢把握舆论导向,充分体会主子讲话精神,并为之鸣锣开道,摇旗呐喊,歌功颂德,极尽拍马之能事。奴才们与他们的主子霸占了话语权,颠倒黑白,愚弄民众,竟还恬不知耻的说自己是如何的具有先进性,动不动就要代表别人,不管出台什么政策都受到广大人民群众的热烈欢迎。这些做法与奴才的杰出先进代表,精神模范典型老太监赵高同志的指鹿为马是一脉相承,只是比赵高更高,产生的后果也更糟。\n\n 现在有个叫方什么刚的对主子的意图领会得特别深刻。这位被奴才集中营总宣布一位副局评价为,理论之树长青,精神之光灿烂的奴才,主子一有英明讲话就连夜研读,体会精神,准备以最快的速度灌输给学生。都知道自己得了癌症了,能不能不要再整什么虚假理论愚弄百姓了,说点真话,积点德好不好呢。这些奴才就算主子放了一个很臭的屁,也认为其中富含氧离子,吸收个没完。这些为讨好主子整出来什么愚民理论的奴才,在大庭广众之下竟还有脸大谈什么国家民族如何如何,道貌岸然的作忧国忧民状,看着他们信誓旦旦,煞有介事的大讲诚信道德就觉得特别滑稽。八荣八耻出来后,各大主流媒体纷纷鼓吹,说引起了广大干部与群众的强烈反响,反响最强烈的自然是这些奴才,他们又有捧臭脚的机会了。一手是谎言欺骗一手是道德说教,两手都很可笑,自己谎话连篇却要百姓诚信,令人作呕。这些东西没有真正触动人的内心,只能使人更加虚与委蛇,表里不一。许多官员都是嘴巴上叫喊着廉洁,为人民服务,背地里从容的贪污腐败。什么带三个婊子,喝血社会,荣啊耻啊,等等口号,无非都是政治壮阳的虚假广告词。这些东西与旧时束缚女人的三从四德并没有本质上的区别,都是为了奴役人的精神,以便更容易进行统治罢了。奴才们对权势者的逆行与欺骗视而不见,甚至摇头摆尾曲线歌颂,对无权无势者的一点错误他们就纷纷抢占道德制高点,进行口诛笔伐,仿佛他们就是正义的化身,道德的 楷模了。真是不以为耻,反以为荣。这种道德的说教在古代还是比较有效的,因为那时人们思想闭塞,分辨力也低,好糊弄,因此人们相信这些,所以它对道德有约束作用。但在信息,思想传播如此发达的今天,还整这一套,换汤不换药,人们很容易就识穿这些说教者的虚假了,人们不相信,所以对道德没有大的约束力,反而让人更加虚伪。真实是道德的基础,没有自由表达何来真,而欺骗是道德的最大敌人。所以造成现在这种道德危机的根本原因就是威权者这种深入整个社会的虚假。康德也说过,“自由是道德活动的先决条件,唯有自由的人才能自主自觉的而不是被迫的行善,唯有自主自觉的行为才有道德价值。” 就如没有哪个国家像我们这样如此大力的宣传为公奉献精神,但讽刺的是我们的公德心比许多私有制国家都要差。因为人们看到所谓的公是少数强权者的公,而且还以公的名义侵占私有的。当人们对他们不信任甚至仇恨时,必然转向自己为自己和依靠裙带关系。 \n\n 奴才和主子们一遍遍重复着谎言,却没有变成真理,最后连他们自己也不相信了,但他们与时俱进的不断推出新的谎言,因为对有些人来说谎言是那样的令人沉醉,使人看不到真相或不愿承认真相。当尼奥(黑客帝国中的主角)看到自己只是生活在虚幻中的一个思想被控制,其实是为机器提供能源的电池时,简直不敢相信,差点疯掉。那个受不了现实世界辛苦的叛徒对特工说,九年来我悟出一个道理,无知是福。有人说被骗一辈子就是幸福,我们要的是否是这种幸福呢? 也有一些真实的东西,但经过文化审查的阉割后,也都尽显奴才相了,中国不能出大思想家大文学家也就不足为怪了,就连那个获得诺贝尔文学奖的华裔作家高行健的作品也被染上了政治色彩。而不能在中国发行他的作品。做鞋成了权者豢养的颂德工具。原先有个胡适还算有点模样,但他的思想也被当成资产阶级大毒草给清出大陆了。胡适说过,大胆假设,小心求证。可现在一些讲国学的奴才,仗着主子在背后撑腰,只要照主子的意思去做就行了,于是大胆忽悠,不为求证,只为求财。 \n\n 奴才们做奴才做得颇为有心得,并摇唇鼓舌说当奴才是如何的好,说什么只有这样社会才会稳定,经济才会发展。我们有自己的国情。什么国情,我们的国情就是谄媚权力的奴才太多了,使每一步的革新都是那样的艰难。他们这种论调其实并不新鲜,在清朝后期就有了,只是更加发扬光大了。难道官商勾结,中饱私囊,渎职弄权,挥霍公款,有冤难诉,官官相护就稳定发展了?不要又跳出来说这是极少数现象,已经太多的极少数现象了。难道拒绝谎言,追求真实,摒弃人治,树立法治,打破垄断,公平竞争就不稳定不发展了?奴才和他们的主子是害怕自由威胁到他们的既得利益,或者怕自由了会被清算,才别有用心的说什么自由就会动乱,现在世界上一百多个民选国家有几个乱了,难道中国都不如他们,就不配享受民主了。这时一些人的自信哪里去了。从历史上看我们比任何国家都要乱,恰恰是专制与贪腐造成的,现在这么严重的贪腐和民众不满还没乱的国家,凭什么说民主了就会乱。可笑的是一些不是既得利益者,被卖了还帮数钱的傻X也跟着喊,乱了乱了。哇!军阀混战,民不聊生,想起来就怕怕啊。看来是万万不能民主自由的,我们应向马咳死老人家祈祷,请他保佑伟大的专制长治久安,万寿无疆。只要不乱,贪污腐败没关系,反正公款也不是我一个人的。打压言论没关系,反正我就喜欢闷声发大财。政经垄断不公平没关系,反正拉关系是我的强项,要是真公平了,还怕竞争不过别人呢。贫富拉大没关系,就是要让一部分人先富起来嘛,谁让你没有当官的亲朋了,不要怨天尤人影响和谐嘛。当官职责是为人民服务,农民就要好好种田,别光想着往城里跑,户籍制度当然不能取消,不然他们会把城市搞得乱七八糟的。于是乎有着五千年光辉灿烂奴才史的怏怏大国就稳定了,就繁荣了,就和谐了 。 再乱能乱过他们一手制造的文革和内战吗,文革至今还是比较忌讳的话题,你败家讲坛怎么不讲讲文革的教训呢。他们在内战中奉行的是胜者为王的丛林法则,却还要大肆的庆祝胜利,杀的都是自己的同胞,有什么值得庆祝的呢。有些奴才还用自己的标准来度量一切,说美国内战后,胜利的北方对南方太宽容了。南方那些家伙明明都是地富坏,反动派嘛,应该统统专政了,这样才和谐嘛.\n\n 说民主会乱国, 奴才们最得意最爱说的一句话就是,天天游行,哪有时间搞建设。(出自他们的主子小瓶同学)我们看一看,能引起游行的原因是什么,我们现多发的集体性事件与民间的不满主要是针对官员的,这点是有目共暏的,有眼无珠者除外。引起如此严重不满的政府,在民选国家早就让他滚蛋了。谁能决定官员的升迁去留他就会为谁服务,通过民众的选举与无所不在的监督和司法独立,这些官员自然不敢也不能胡作非为,动不动还要被问责,只好乖乖为民服务。一个民众可以随时让其下台的和廉洁的政府,自然消解了目前中国的主要不满,因为官民矛盾是专制社会无法调和的产物。另外游行也是发泄不满与表达诉求的一种途径,如果是小规模的游行派几个警察维持就行了,就如香港的游行就成了一种街景,像我们街头办证广告一样见怪不怪了。如果是大规模的游行,你政府对这种许多人数的不满还不重视解决,那下台也是应该的。同时民主国家也不会对游行一味纵容,游行必须以和平的手段来进行,如果使用暴力也一样是要被镇压的。如果没有大的不满哪个傻X会总去游行,去旅游还得有钱有时间呢.\n\n 这些奴才更是把目前取得的成就归功于这种制度的胜利,真是脸皮比脚后跟还厚,这种成就是如何取得的呢?恰恰是得了万恶资本主义市场经济的一点皮毛后取得的,竞争市场经济会释放出巨大的社会生产力,政府是不应该参与其中和占有利益的,政府的职责在于维护这种竞争的规范和公平,并通过税收等手段来进行再分配。东德朝鲜古巴越南的落后,难道不是制度造成的吗,东德与西德,南韩与北韩这种鲜明的对比,难道不是比任何东西更有说服力吗。当年东欧巨变,专制解体,民族独立,奴才们是兔死狐悲,如丧考妣。在东欧私有化与俄罗斯的休克疗法后,奴才们都等着看热门呢,以他们经济的崩溃来佐证我伟大制度的优越,不过,东欧与俄罗斯经济的复苏使奴才们阴暗变态的心理没能得到满足。这种复苏是必然的,因为私有制符合人性与市场规律,垄断则阻碍市场经济与造成社会不公,只有私有才是个人所有,公有国有到底是谁有?自然是那些缺乏监督的管理者与政权的统治者触手可及.\n\n 当民众的不满与压力得不到合理的舒缓,积累到一定程度,一有机会就以暴力的形式发泄,近年频发的集体性事件就是这种表现。中国历史上王朝的频繁更替与暴力循环,对同胞的特别残忍也是这种压抑的结果。这种不满主要来自贪腐和强权造成的社会不公。而选举与言论自由是对权力的最好监督,也是民众舒发诉求的渠道。他们要的稳定说穿了就是继续稳定的据有利益,为了自己的私利抵制民主,却还要口口声声说为了国家,为了民族。人能无耻到这种地步还真是不容易,这些无耻之尤,欺世盗名的家伙,百姓如何的骂他们是不起作用的,人不知耻,奈何以耻骂之。他们让人恶心与丑陋之处就在于,既当婊子又想立牌坊。不要再口口声声说爱国了,你爱的是谁的国?如果你爱国就呼吁打破垄断,还国于民。如果你爱国,就不要再用谎言来欺骗国民了。如果你爱国,就不要再喊什么爱国了,因为一个真正属于人民的国家,人们是不屑喊这些口号的,就如一个母亲是不会高喊她是如何的爱她的孩子,因为孩子是她自己的。不许人们参与国家大事的决策与发言,这个国家就对人民没有归属感,所以人民就对国家漠不关心,反正这个国家是那些贪腐的官员的,导致政府的号召没有一点公信力。一个以谎言为基础的政府如何让民众信他们那些话呢,当然要加大愚民力度了。那些无知的所谓爱国者,恰恰是统治者为转移国内统治压力,保持团结而鼓动起来的,而这些被愚弄的愚民的民意反过来又会迫使专制者实行强硬的对外政策。这也是国际社会对专制政府忧虑的原因。德日教训亦是。另外父母都不想把自己的孩子送到战场,所以民选政府对战争是非常谨慎的,否则可能导致自己的下台。我们这些爱国者你说他真正的爱国吗?看他们是没有深入的思考这个问题的,也没有搞清楚什么是爱国。到有点类似义和团,但他们又聪明得多,骂完了洋鬼子,又去享受洋鬼子的产品了。同样的,在国际上这样的一个充满谎言与狡辩的政府也是一个笑柄,特别丢国人的脸。他们把其它国家分为两类,对那些指责他们独裁专制的国家定为坏的国家,唯利是图对他们侵犯人权不闻不问的国家则定为好的国家。还要把正义,和平常常挂在嘴边.\n\n 奴才与他们的主子对自己制度上的严重弊端能掩的掩能骗的骗:他们对国内外一切有损他们形象的信息进行全面的管制封锁,既然自己做得出,为什么要掩盖怕百姓知道呢,是怕百姓不能分辨是非,还是怕百姓分辨出是非呢;政府运作费用占财政的四分一,而且还有大量的浪费,政绩工程,强权造成的诚信缺失与社会关系复杂所导致的社会运作成本之大,更是不能用数字来计算的,都这样了,他们还厚颜无耻的说,我们制度的优点就是比民主国家效率高。高在哪里啊,贪污腐败效率高,强制拆迁效率高,环境污染效率高,项目上马效率高,先拍进去几个亿,一看不行又下马了,真是高,崽卖爷田不心疼;还有些东西就如阿Q头上的癞是不能提的,他们也把日子分为吉日与忌日,七一,八一啊是吉日,6月4日就是忌日了,据传说某年的这一天发生了一些令他们不爽的事,用他们的话说就是镇压了一批坏蛋,如此正义的行动按照以往的惯例应该大书特书的,为什么还要遮遮掩掩呢,恨不得把这一天从日历上抹掉。建议他们把这一天改成6月3+1日,这样就可以理直气壮的说,这一天不存在啊,根本什么也没有发生嘛。他们把批评反对他们的言论定为反动言论,有错为什么不能批评呢,这显然是强盗逻辑。相反他们对民主国家则高举放大镜,吹毛求屁,并把得来的这个屁吹大到仿佛就是民主的精髓了,然后幸灾乐祸的对百姓说,看到了吧,这就是民主了。还真把老百姓当成傻小子了。千万别以为只有自己聪明,其实老百姓把你们看成是猴子在表演一幕幕丑态百出的闹剧,并把这些传为笑料。有一首人们改写的诗就很有讽刺性:当官不怕喝酒难,万盏千杯只等闲。鸳鸯火锅腾细浪,生猛海鲜滚鱼丸。桑拿洗得全身暖,麻将搓到五更寒。更喜小姐肌如雪,三陪过后尽开颜。 这些笑料在王什么波的文字里俯拾即是,它在这个压抑的时代给了人们另一种娱乐,谁说中国人不幽默了,我们的官员就很幽默嘛。小丑从来知道自己的可笑,但把自己打扮成救世主,以为大众都是无知的人却意识不到自己的可笑。整什么官员孝考核机制,官员要自律啊,要加强自身思想建设啊……这些王八玩意就整这些虚头八脑的东西糊弄百姓,狗要吃屎你光让它自律有什么用啊,贪腐不是人的问题,是制度的问题。关键的问题是,权力在于监督,权力导致腐败,绝对权力导致绝对腐败。当年朱元璋杀贪官杀得是何等的惨烈啊,杀到手软,最后也不得不服气,老朱很疑惑,怎么一个本来正直的人一到官场就变得贪得无厌了呢.\n\n 强权垄断可以使利益达到最大化,所以强权才那样的诱人,使人不愿放弃,专制者必然把自己的利益放在第一位,他们害怕自由思想威胁到他们的统治,所以一面对自由思想进行打压封锁,一面在思想上进行奴化与感恩宣传,他们设了一门没有实用价值,只为愚民的政治课,其中说我们的制度是人类历史上第一次真正实现了人民当家作主。真是奴化人民从娃娃抓起了。自称为公仆的他们损害主人的利益,挥霍主人的财产,而且不让主人发表不同意见,动用整个国家的宣传资源为自己粉饰太平,用人民的钱愚弄人民,难道这就是人民当家作主吗。这些以束缚人民自由思维为己任的奴才们,不断的阻扰着中国的革新,而且每每得逞。奴隶与奴才的不同之处在于,奴隶有一颗追求自由的心,而奴才把心典当给了权势。这些靠愚弄人民而升官发财的奴才,和只为从抨击民主思想中得到变态快感的奴才还会长期存在。在这个奴性思想悠久,奴才辈出的国度里,奴才们粉墨登场,群魔乱舞,严重的阻碍了国家与民族的进步,谁来审判他们,也许只有历史了,但决不是现在书上写的所谓历史。这正是:伺主奴才舔腚忙,忽闻臭屁也称香。吹牛拍马无廉耻,只要有奶便是娘。 有人说民主思想已经说得太多了,这些道理人人都懂。事实上许多人还不明真相 ,让一个人的思想转变是相当困难的,所以他们才千方百计的愚民。学贯中西的大学者王国维就接受不了思想转变而投湖殉清了。在统治者的愚化洗脑宣传下,许多民众甚至对民主思想产生厌恶情绪。出现令人哭笑不得的场面:他们本来是被欺骗的受害者,但有人指出骗子的无耻行径时,他们却还极力替骗子辩护,还指责揭露真相者是别有用心。就像一个不谙世事的小姑娘对感情骗子的花言巧语深信不疑,还把这种卑鄙的欺骗叫做爱情。鲁迅的,哀其不幸,怒其不争,说的就是这样的人.\n\n 奴才们还说国民素低不宜民主(他们不是常吹嘘我们是伟大的民族吗,怎么一提要民主又说我们是素质低劣的民族了呢),引用抗战时他们自己报纸中的两段话,看他们是如何自己抽自己耳光的《新华日报》1944年5月17日:“有人说:中国虽然要民主,但中国的民主有点特别,是不给人民以自由的。这种说法的荒谬,也和说太阳历只适用外国、中国人只能用阴历一样。” 。《新华日报》1939年2月25日:“他们(国民党)以为中国实现民主政治,不是今天的事,而是若干年以后的事,他们希望中国人民知识与教育程度提高到欧美资产阶级民主国家那样,再来实现民主政治。……正是在民主制度之下才更容易教育和训练民众。” 我们现在的素质怎么也比六十年前多少强点吧。 就算素质低,那是什么原因造成的素质低呢?难道不是的威权制度造成的吗?权力主导一切的社会,必然使人们对权力进行讨好,谄媚,人的尊严在权利面前荡然无存,人一旦没了尊严什么都无所谓了。这些强权导致的不公与腐败,往往产生劣币淘汰良币的效果,阴险狡诈,阿谀奉承者往往如鱼得水,遵纪守法,正直诚信者往往屡受排挤。这样的环境下,经过选择与进化,而且没有一种坚定的宗教信仰对心灵进行指导与支撑,必然导致社会道德的全面沦丧。 何来奴性,专制使然,何以专制,奴性使然。强权的压制使人变得狡猾虚伪,人格扭曲,心理变态,阳奉阴违。而且这种专制思想己深入到社会各个领域,严重的阻碍了中国人的创新精神。同时长期压抑的变态人格往往产生残忍的发泄,虐猫事件,黑砖窑事件,人与人之间的仇视与暴力,喜欢奴役辱骂别人,都是这种压抑的结果。专制在中国如此顽强的生存,就是因为民众没有民主思想,西方有句谚语,无知之民,受治于残暴之政府。只有让人得到自由得到尊严,才会维护自己的道德与尊严。独立思考精神不养成,民主思想不树立,国民的劣根性就难以去除,强权体制就无法摆脱。 任何一种社会的革新都是以思想广布为先导和基础的。更多的人接受自由思想,体会到它的真实与快乐,民主自然就不远了。追求真实,个人权利和自由是人类的天性。如果不追求自由,就没有曼德拉的百折不挠,就没有甘地令人心灵震撼的圣雄精神,就没有马丁路德金的我有一个梦想。就连美帝黑人的权利也不是平白得来的。如果不去追求争取就永远也不会得到。幸好有许多人站出来解构官方虚假奴化思想对人们的毒害,虽然他们的力量和声音是那么的薄弱,但它是真实的。它的力量就在于真实.\n\n 唯有真实最让人感动,谁也不喜欢被愚弄。\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n以下寓言纯属虚构,如有雷同,并非巧合:\n说一家羊正在看电视新闻,主持骡精报道说:狼大常委会日前招开了一个会议,会议通过并决定,为了使羊民安居乐业,维护社会和谐稳定,应加强羊口的管理,实行羊藉登记制度,且流动超过三天的羊必须办理暂住证。此政策在种羊电视台新闻乱播中一经播出,立即引起广大羊民群众的热烈欢迎,纷纷奔走相告,无不拍蹄称快。一位老羊在接受狼仔队踩访时激动的说,听到这个振奋羊心的消息后,我内心久久无法平静,感谢狼,感谢政府,你们想羊民之所想,急羊民之所急,甘做羊民公仆,为羊民服务,始终把羊民的需要放在第一位。没有这样的好政策哪有我们今天幸福美好的生活啊,忆苦思甜,饮水思源,我们要永远听狼的话,跟狼走。现场的羊民无不动容,响起了经久不息的蹄声。这时一首亲切的旋律奏起——《狼啊,亲爱的妈妈》狼啊,亲爱的妈妈,你流着长长的口水把我抚养大,让我快增肥,叫我要听话,教育我爱狼爱国家,饥饿时候常把我牵挂……\n\n\nSource: [[论奴才(此文极其反动,出于对生命的爱护,请反自由人士备好救心丸)|http://www.bullog.cn/blogs/snairunning/archives/87198.aspx]]
作者:STUKA\n\n  一九四九年元月九日下午,杜聿明将军的前进指挥所退入陈官庄第五军军部。晚十九时,陈官庄核心阵地被突破,邱将军仍率特务营固守照壁据点,与解放军反复拼杀。十日零时,邱将军率兵团部人员在警卫营保护下向南突围,意图到张庙堂第二○○师指挥所与该师并力冲出。突围过程并不顺利,杜副总司令在冲出兵团部时即与随从被冲散。邱将军途遇通信营营长程渭滨,程营长报告两小时前已与第二○○师失去联络。凌晨二时,兵团部逼近张庙堂,遭解放军阻击,突围部队伤亡惨重,兵团部到达花小庙附近。\n\n  邱氏在突围前,已向上尉副官陈亮索要手枪。邱将军在获报突围无望后,眼见身边残余百余官兵仓惶凄惨状态,四处解放军大呼缴枪不杀。邱将军不忍随从官兵继续牺牲,乃大声喝令追随自己的官兵各自逃生去。追随在邱氏身边的人员多系亲信之军官或卫士,不忍离去。其中一位大喊:“司令官你呢?”邱氏喝道:“他妈的,不成功就成仁,你们到南京集合,不要管我”。部份官兵哭喊着要与司令官同生死,邱将军乃举枪作威吓状,喝道:“不走就先枪毙你们”。同行官兵见邱将军执意要他们离去,可能认为邱氏怕目标显着不易逃生,所以纷纷掉头乱跑,自寻生路去了。邱将军身边只剩警卫营营长远硕卿、副官陈亮、卫士徐仁成、警卫营通讯兵何永福。\n\n  邱将军下完最后命令后,面南而立,举手敬礼向校长(蒋介石)诀别(这幕有许多官兵目击),礼毕见随行官兵纷纷散去,邱将军乃伪装乏力,躺倒在地,口称不能再走了。部份官兵不知往何处逃,仍在附近徘徊(包括搜索营营长高毓民、技术连连长黄志超及副官处处长黄福阶)。邱将军的随从知道邱将军有殉国之心,但见邱将军倒卧休息,也放松戒心,邱将军一向体力充沛,此时籍故倒卧,显系借口。\n\n  邱将军一卧地,马上自大衣中抽出腰间所佩电光手枪,打开保险向腹部开一枪,随从被枪声惊动,回看将军倒卧处,邱将军一枪中左腹,自知未死,又恐卫士夺枪,于是马上再开两枪,两枪均因右手颤抖与痛苦中的暂时失去意识而偏向。将军自射3枪后,力气用尽,痛苦倒地。\n\n  邱将军倒地后,痛苦不堪,细声命令远营长补枪。远营长一时震惊,不知如何反应,邱将军乃喝斥远营长,说道:“你要留我给共匪当俘虏吗?你想抗命吗?”。远营长回过神后,忙问平时保管邱氏佩枪的副官陈亮枪由何处来,陈亮答道:“这是美国顾问送他的电光手枪,平是是由我携带,今晚他向我要手枪,可能事先就有这个准备”。这时邱氏力气已尽,在地上喘着气,但仍瞪视远营长,并以手指着远营长。陈亮系邱氏同族妹夫,见邱将军痛苦,又伤在胃、肾致命处,乃向远营长说道如此看来生命是不保了,免他受罪吧。远营长浑身震颤,热泪盈眶,不忍动手,乃示意站在一旁的通讯兵何永福开枪。何永福拾起手枪,在邱清泉面前举起手枪,邱将军开口喝其开枪,何永福一枪击中左胸,一枪击中右胸。邱阖眼倒地,口仍作喝斥状并未完全闭合。\n\n  何永福开枪后,马上丢下手枪逃去,副官陈亮、卫士徐仁成也跑开,远营长仍呆立于邱将军身侧。在四处徘徊的官兵遥见邱将军自杀即四处逃散。技术连连长黄志超远远见到邱将军自杀,泪流满面,暗地说道:“司令官,您可算是为党国尽忠了”。时为一九四九年元月十日三时十四分。\n\n  四周兵团部残部仍在开枪,试图突围,解放军也向邱氏殉国方向开火,一枚炮弹伤及远营长背脊。远营长负伤后心乱如麻,也倒卧在邱将军遗体身侧。不久天亮,远营长已经没有抵抗意志,见到解放军搜索兵过来,乃举起军帽表示投降。解放军招手要远营长走过去,远营长即称系邱将军卫士,正护卫邱氏遗体。解放军不敢怠慢,马上将远营长带去见其长官。解放军军官询明详情,找到邱清泉遗体。因为远营长自称卫士,又身负轻伤,所以远氏在短暂盘问后获释,发给路条听任离开战场。\n\n  解放军三野一纵发动当地居民张遂等四人用软床将邱将军遗体运往萧县锦桥村。当夜解放军又用汽车将遗体运往单庄,用担架置于民屋中,由当地甲长王中义为邱氏洗身。解放军辨明为邱将军之后,即以拙劣手法在遗体上补打几枪并拍照,随后入殓,并埋葬于单庄以北荒林中的乱坟岗中。\n\n  此后,中共官方鼓励原邱兵团被俘将校李汉萍等人撰写关于邱清泉之死的相关回忆,但无法清查到目击邱氏最后一刻的目击证人,只好依道听涂说与解放军陈官庄战后本身的战报将邱氏之壮烈殉国说成“发疯乱跑被流弹击中丧命”。此说列为官方说词数十年,但瑕疪百出,在拍摄电影时甚至为邱氏自杀一幕商讨多时。四十年后,解放军在邱将军遗体补枪假造战报之说逐渐浮现。\n\n  国军早期也没有确实证据证明邱将军系自戕殉国。直到来台后整理当事人口述,才得到大致经过。唯国军宣传机关过于无能,官方竟有多种自戕版本流传,以致真实历史隐微不彰。\n\n  远营长辗转抵达南京第二兵团留守处报到,报告了邱将军殉国状况。国防部此时已得知解放军在报上刊出邱将军遗照,远营长乃假称邱氏遗体由兵团副官处处长黄福阶交出,但承认下令为邱将军补上致命一枪。办事处几位中下级军官听完远氏陈述后,群情激愤,将远氏痛打一顿。远营长只好逃出南京,回许昌老家。\n\n  远营长享年73岁,历经动乱,对亲睹的邱清泉将军殉国经过一直深埋心中,不敢透露。直到九十年代才撰成回忆。一九九二年远氏病逝,其遗作“邱清泉之死纪实”两年后发表于一九九四年元月出版的《魏都文史资料第四辑》(人民政协许昌市魏都区委员会文史委出版)。远氏在遗作中称:“众所周知,淮海战役中国民党的高级将领邱清泉被击毙丧命。当时我在邱部任警卫营营长,对邱的死我是亲眼所见。而今已到暮年,愿将此事奉献于世”。\n\n  我的一位朋友说的好,一个民族要宏扬正气,才能有凝聚力。兹以此文,向一代名将邱清泉将军致敬。 \n\nSource: [[Untitled Document|http://www.mgjs.com/01wenzhang/03renwu/qiuqingquanzisha.htm]]
作者:胡博(lemanhb)\n\n 从我开始整理国民革命军的历史沿革开始,发现许多人对1924年成立的几个黄埔军校教导团的后续历史很感兴趣。同时也发现有的同好为了宣传自己所喜欢的部队而硬把这些部队的历史往教导团上扯的现象发生,这还真是大千世界无奇不有。时至今日,我始终没有看见有专文介绍这些教导团后续历史。既然如此,就由在下冒昧的做个开路人,介绍一下早期编组的五个军校教导团吧。\n\n 要说教导团的后续历史,自然得先把教导团的历史交代清楚,那么我就先说说教导团是怎么来的吧。\n\n\n!!一、军校教导团的来历\n\n 自从孙中山重新当上大元帅后,就开始决定要组建自己的武装,这样才不会再被那些军阀利用,于是他就开始筹划自己未来部队的编制了。可是这位非军人出身的大元帅在经过一个月多的“深思熟虑”之后,竟然制定出一个全世界最为庞大的师级编制(师辖三团、团辖六营、营辖六连、连辖三列、列辖六伍)。当孙中山在1924年初将这个编制提出后,立即遭到了各方面的反对。理由很简单,如此庞大的编制,以当时广东一省的人力物力来看,根本不现实。在看到各界的反对之后,孙中山似乎也意识到了他在制订编制时过于理想化的缺陷。于是他吸取教训,耐心的听取各方面的意见之后,重新制订了编制表,并且决定先编一个团试验一下。\n\n 其实在7月中旬,黄埔军校的高层就已经着手“试验团”的筹建工作了。他们首先从浙江、江苏、湖南三个省秘密招募了3000多青年工人和农民,作为“试验团”的兵源,并加紧军事训练。在等到11月军校第一期学员毕业之后,将具备军事才华的教官们编入团内,当连以上的高级军官;将部分成绩优秀的毕业生派任连以下的低级军官。人事编组完毕之后,孙中山委派校长蒋中正将“中国国民党陆军军官学校教导团”(后文简称军校教导团)的军旗授予团长何应钦(原军校总教官)。于是在1924年11月20日这一天,这支影响到今后国民革命军历史的军校教导团成立了。\n\n 军校教导团所采用的编制,主要是根据苏联军事顾问建议的“三三制”来实行的。具体编制是:团辖三营、营辖三连、连辖三排、排辖三班,此外团部直辖有两个机关枪连、一个特务连、一个侦察连、一个通讯连、一个辎重队、一个卫生队,全团编成后有1000余人。团部设团长、党代表和参谋长,团以下不设参谋长,连以上设党代表。团的指挥官和党代表分别管理所属部队的军事和政治工作。这个编制以后被作为样板使用(其中党代表制度后来被撤消),一直影响到六十年代。\n\n 由于军校教导团的官兵都是清一色向往革命的忠实党徒,所以团内的军纪、教育等等都起到了模范作用,就连参观的军阀也纷纷称赞。于是孙中山决定将编余的军校教官、学员和士兵再编一个团。原先的军校教导团称为第1团,新编的教导团称为第2团。军校教导第2团成立于12月26日,团长由王柏龄(原军校教授部主任)担任。\n\n\n!!二、第一次东征中的军校教导团\n\n 1925年1月7日,盘踞在东江地区的陈炯明乘孙中山北上与北洋政府谈判的时候亲率三路大军直攻广州。面对强敌,大元帅留守府立即组织部队予以反击。由于情况紧急,刚成立才两个月的军校教导团也奉命参战。对于这两个基层军官只经过五个月训练、士兵也只经过五个月短暂训练的教导团来说,此时上阵显的十分勉强。即便如此,这些满脑子具备革命思想的“亡命徒”还是给了陈炯明一个下马威。\n\n 陈炯明的叛军在遭到各路“建国联军”的进攻下节节败退,其中一部退守淡水。淡水在陈炯明的亲信将领熊略经营下,被誉为“固若金汤”,而负责进攻淡水的便是初出茅庐的军校教导团。当熊略得知攻城的部队属于新成立的军校教导团时,轻蔑之意逐渐显露出来了,他根本看不起这个部队。\n\n 事实正好相反,军校教导团冒着枪林弹雨前仆后继,迅速的抵达城下,并且立即组织起一个百来人的敢死队爬城进攻。熊略会永远记住这一天的,因为攻城部队仅仅用了两个小时便打开缺口,并且俘虏了守将林烈。接着突入城头的部队迅速扩大缺口,并接应后续部队彻底收复了淡水。军校教导团首战告捷,这给了之后的追击作战开了一个好头。果然,有了实战经验的军校教导团又在棉湖打了一个大胜仗。此后军校教导团一路追击陈炯明残部,势如破竹,彻底让那些军阀部队刮目相看。\n\n 然而孙中山却没有看到军校教导团为他得来的光荣。因为在4月4日东征告捷的时候,孙中山已经在一个月前的3月12日去世了。他没有看到他亲手编组的军校教导团的辉煌历史,也没有看到国民党北伐胜利的那一天,他带着无限的遗憾去世了。但是,军校教导团的历史仍在延续。\n\n\n!!三、从党军到国民革命军\n\n 1925年4月13日,在廖仲恺的提议下,驻军潮州的两个军校教导团奉命合编为党军第1旅,任命何应钦为旅长。29日,党军抽调第1、第2团的部分骨干扩编了三个团,是为教导第3、第4、第5团。其中前三个团编为党军第1师,原旅长何应钦升任师长,孙常钧、沈应时、钱大钧、刘尧宸、蒋鼎文分别担任五个团团长。从1924年11月20日到1925年4月29日,在这短短的五个月里,军校教导团已经发展到五个团6000余人的规模了。\n\n 孙中山去世后,留在广州的军阀杨希闵、刘震寰联合云南军阀唐继尧阴谋发动叛乱。5月13日,尚未回防的东征军总部洞悉了杨、刘的阴谋,立即决定放弃潮、汕地区,立即回师广州。6月4日,杨、刘公开叛乱后,党军的五个团先后投入战斗。9日,第1师在蒋中正的亲自指挥下向石滩叛军发起进攻,面对声名远扬的军校教导团,叛军们明显斗志不足,稍一接触便纷纷退往白云山。11日,何应钦指挥部队秘密转移至广州附近,在拂晓对白云山、龙眼洞、瘦狗岭的叛军发起猛烈进攻。一天后彻底肃清该地区的判军残部,为保障革命政权立下了汗马功劳。\n\n 1925年7月3日,国民政府成立了最高军事机关——军事委员会。8月26日,军委会决定将党军和各路建国军统一改编为国民革命军。其中党军第1师改称国民革命军第1师,军校教导第4、第5团扩编为国民革命军第2师。原先的五个军校教导团则分别成为了第1师和第2师建制下的五个团,只不过在番号之前再也没有“教导”两个字了。\n\n 国民革命军成立后,首先要做的便是进行统一广东的战争。在进攻惠州的战斗中,出身军校教导团的第2师被指定为攻城主力。在这次战斗中,第2师官兵奋勇拼杀,最终以惨重的代价突入城头,取得胜利。这一战,第4团团长刘尧宸阵亡,他是五个老团长中唯一死亡的人。第2师收复惠州后,第1师又在海陆丰、潮汕地区取得胜利。至月底,东江的陈炯明残部被彻底肃清。一个月后,邓本殷的八属联军也灰飞烟灭,广东政权终于得到了统一。\n\n\n!!四、军校教导团之后的变革\n\n 广东政权统一之后,国民革命军于1926年7月誓师北伐,而由军校教导团演变而来的第1师和第2师当仁不让的成为了北伐军的主力。北伐胜利结束后,军校教导团的种子仍旧活跃的展现在国民政府实施的历次战役之中。下面将这五个团的后续沿革分别简述如下:\n\n 教导第1团:1925年8月编为第1师第1团后参加北伐。1928年7月改编为第9师第25旅第49团,期间参加过军阀混战、围剿红军,以及抗日战争。1939年11月改编为第9师第25团。在1946年的整军计划中,第25团仍旧保留建制,并参加内战。至1950年1月跟随第9师师部起义。同年5月编为中国人民解放军第167师499团第1营。9月撤消建制,补充第50军。历任团长为何应钦、刘峙、郭俊、王俊、孙元良、章烈、徐图远、方日英、黄国樑、陈沛、刘国钧、郑武、夏德贵、张金廷、陈克非、李剑霜、魏国栋、谷美儒。\n\n 教导第2团:1925年8月编为第1师第2团后参加北伐。1926年6月改称第14师第40团。1928年7月改编为第2师第4旅第7团,期间参加过军阀混战、围剿红军,以及抗日战争。1939年10月改编为第2师第4团。抗战胜利后开赴东北投入内战。1949年8月撤往台湾。1952年10月改编为第33师第97团。1976年第33师改称第333师。如今教导第2团的种子仍旧存在于第298旅(由第333师998旅改称)之中。历任团长为王柏龄、沈应时、金佛庄、邓振铨、黄杰、侯克圣、杨少初、赵公武、廖慷、司徒洛、刘玉章、雷克文、罗怒涛、李运成、郭永、张燦光、贾乃隆(截止到1960年)。\n\n 教导第3团:1925年8月编为第1师第3团后参加北伐。1926年6月改称第14师第41团。1928年7月改编为第2师第4旅第8团,期间参加过军阀混战、围剿红军,以及抗日战争。1939年10月改编为第2师第5团。抗战胜利后开赴东北投入内战。1948年11月为掩护第52军主力南撤,在营口被解放军歼灭。历任团长为钱大钧、王禄丰、楼景越、赵强华、陈应龙、胡世贤、何大熙、李忠、刘平、朱炳南、胡晋生、张闻声、张晴光。\n\n 教导第4团:1925年8月编为第2师第4团后参加北伐。1928年7月改编为第1师第1旅第1团,期间参加过军阀混战、围剿红军,以及抗日战争。1939年3月第1师裁撤旅部时仍保持第1团番号。在1946年的整军计划中,第1团在1946年4月整编为第1师独立团。整编第1旅覆没后,独立团仍旧恢复第1团番号,长年在陕西作战,后退入四川。1949年12月27日向解放军投诚,部队遣散。历任团长为刘尧宸、陈继承、梁自厚、张本清、许非由、袁朴、李正先、熊志一、王应尊、吴俊、周环、罗志德、敬继舜。\n\n 教导第5团:1925年8月编为第2师第5团后参加北伐。1928年7月改编为第1师第1旅第2团,期间参加过军阀混战、围剿红军,以及抗日战争。1939年3月第1师裁撤旅部时仍保持第2团番号。在1946年的整军计划中,第2团在1946年4月整编为第1旅第2团。同年9月在浮山被解放军歼灭。历任团长为蒋鼎文、严尔艾、文志文、李延年、唐云山、廖昂、杨定南、杨杰、邓宏仪、吴俊、王亚武。\n\n 胡博(lemanhb) 2006年12月10日\n\nSource: [[[原创]随谈黄埔军校教导团的历史 - 军事普及[1] - SonicBBS - [安全查看模式]|http://sonicbbs.eastday.com/topicdisplay_safe.asp?TopicID=1778399&Page=1&BoardID=190]]