create file\n{{{\necho "\n!! bind Win keys to mod4\n!! (thx to cga @ unixadmintalk.com)\n\nclear mod4\nkeycode 115 = Super_L\nkeycode 116 = Super_R\nadd mod4 = Super_L Super_R\n" > ~/.Xmodmap\n}}}\ninitialize\n{{{\nxmodmap ~/.Xmodmap\n}}}
Tired of typing {{{ls -lA}}} only to get full view of your files? Create aliases!\nBe sure to make [[Bash|bash]] load this file at by tweaking [[.bashrc]]!\n{{{\nalias ll='ls -l'\nalias lla='ls -lA'\nalias la='ls -A'\nalias l='ls -CF'\n\nalias pak-search='apt-cache search'\nalias pak-info='apt-cache show'\nalias pak-get='sudo apt-get install'\n}}}
Commands in this file are executed when Bash starts.\n[[.bashrc]] is located in your home directory ({{{~}}} and respectivly {{{$HOME}}}).\n!!Important Tweaks\n*enable alias definition\n*enable color support\n*some more ls aliases\nAn excerpt from my [[.bashrc]]:\n{{{\n# Alias definitions.\n# You may want to put all your additions into a separate file like\n# ~/.bash_aliases, instead of adding them here directly.\n# See /usr/share/doc/bash-doc/examples in the bash-doc package.\n\nif [ -f ~/.bash_aliases ]; then\n . ~/.bash_aliases\nfi\n\n# enable color support of ls and also add handy aliases\nif [ "$TERM" != "dumb" ]; then\n eval "`dircolors -b`"\n alias ls='ls --color=auto'\n alias dir='ls --color=auto --format=vertical'\n alias vdir='ls --color=auto --format=long'\nfi\n\n# some more ls aliases\nalias ll='ls -l'\nalias la='ls -A'\nalias l='ls -CF'\n\n# enable programmable completion features (you don't need to enable\n# this, if it's already enabled in /etc/bash.bashrc and /etc/profile\n# sources /etc/bash.bashrc).\nif [ -f /etc/bash_completion ]; then\n . /etc/bash_completion\nfi\n}}}
{{{\necho "\n###########################\n# xbindkeys configuration #\n###########################\n#\n# Version: 0.1.3 dfmmod 0.6\n#\n# List of modifiers:\n# control, shift, alt, mod4 (win-key)\n\n#keystate_numlock = enable\n#keystate_scrolllock = enable\n#keystate_capslock = enable\n\n\n#####################\n# dfm's keybindings #\n#####################\n\n#gnome terminal (package gnome)\n"gnome-terminal"\n mod4+c\n\n#kill x-application (package xkill)\n"xkill"\n control+alt+Escape\n\n#xmms (former winamp:)\n"xmms"\n mod4+w\n\n#firefox\n"firefox"\n mod4+alt+f\n\n#thunderbird\n"thunderbird"\n mod4+alt+t\n\n#open notes\n"gedit ~/notes.txt"\n mod4+n\n\n#open new empty text file\n"gedit"\n mod4+m\n\n#gnome calculator ("rechner")\n"gnome-calculator"\n alt+mod4+r\n\n#gnome commander (former total commander:)\n"gnome-commander"\n mod4+t\n\n#make screenshot\n"gnome-panel-screenshot"\n Print\n\n#make screenshot of current window\n"gnome-panel-screenshot --window"\n shift+Print\n\n#lock screen\n"gnome-screensaver-command -l"\n mod4+alt+s\n\n#system log\n"gnome-system-log"\n mod4+alt+l\n\n#system monitor (former taskmanager:)\n"gnome-system-monitor"\n control+shift+Escape\n\n#\n#\n# End of xbindkeys configuration\n" > ~/.xbindkeysrc\n}}}
{{{\necho "#!/bin/bash\nxmodmap ~/.Xmodmap\nxbindkeys" > ~/.xinitrc\n}}}
*boot from cd immediatly successful (even got resolution@1024x768)\n*ath0 detected, but configuration unsuccessful\n\n*[[Partitions]] created\n*approved formatting of Partitions 3,6 (ext3) and 7 (swap) on /dev/hdb\n\n*bootfailure, bootflag at hdb1\n*reboot using cd, modified via parted, reboot\n*bootfailure\n{{{\nMBR Error 3\n\nMBR Error 1\nPress any key to boot from floppy...\nMBR Error 2\nPress any key to boot from floppy...\nMBR Error 2\nPress any key to boot from floppy...\n...\n}}}\n\n*made network work using Vaio with ipmasq\n*release Packet sources\n\n*test, whether boot from standard-drive works -> grub installed on hda *rofl*\n*test, whether boot works even if new harddrive removed -> impossible\n*BootFix\n\n*ran through properities\n*{{{sudo apt-get install smartmontools}}} see [[http://wiki.ubuntuusers.de/Festplattenstatus]]\n*graphics device driver ([[fglrx]]) for radeon X1600 ([[http://wiki.ubuntuusers.de/ATI-Grafikkarten/fglrx]])\n*FirefoxAndXchat (from [[here|http://www.linuxpaten.org/linuxpaten/phpBB2/viewtopic.php?t=342&sid=09ff86445a480ddfd2e3bf7390512892]]) does not really work. WORKAROUND: {{{xchat --url=PASTEURLHERE &}}}\n*checked out [[Wine|http://wiki.ubuntuusers.de/Wine]]\n
*unable 2 leech cuz' /home cram-full -> ''gparted''\n*experiments with [[Wine]]\n*added AutoMount /media/dfm2home\n*added MP3Codecs\n*partly fixed ShortcutUser\n*FlashGot und GWget
*installed [[Sunbird]]\n*added AutoCopy to [[Firefox]]\n*remove gaim contact list at startup -> GaimFix\n*added Proof that LPT sucks -> ParallelVsUSB
*added [[Java]] SDK\n*added [[HL-2030]]\n*added [[ding]]
*added GnomeBaker
After having walked through the first steps of the [[PyGTK Tutorial|http://www.pygtk.org/pygtk2tutorial/]] I discovered [[Glade|http://glade.gnome.org/]] and [[GladeGen]]. Building a GUI with these tools should become rather easy, but I keep getting error messages from GladeGen... I'll post this in developer's section on UbuntuForums.
I just went through the whole list of tiddlers looking for errors. Now that it's done I will upload this file. Hopefully people will get some useful information out of it.
All tiddlers are imported.\nI still need to create a SiteOverview, so you get a picture of what you can find here.\nA friend of mine made an interesting point of how tiddlywiki appears to new uses.\n{{{\nzelter: na das baut sich immer untereinander auf\nzelter: voll komisch\nzelter: das vorher geht voll nich weg... das verwirrt übel!\n}}}\nHe was confused by the way Tiddlers are opened. I agree, that it's quite confusing, so I added the SinglePageModePlugin from [[tiddlytools|http://www.tiddlytools.com/#SinglePageModePlugin]] which also enables FireFox's back/forward buttons (see [[this google groups entry|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/2aa63bfcfe5e0ceb/99aa9c917a51881c#f1b1219a69e318f9]]).
*switched to MPTW because I like it's layout and styles.\n*I just cleaned up my FireFox bookmarks and added some I could not categorize to BookmarksOutsourcing\n*changed the [[DateFormatString|http://www.tiddlywiki.com#DateFormatString]] of journals to {{{0DD-0MM-YYYY}}} see SideBarOptions
*added new tag <<tag bug>>, where I store abstracts about bug reports and later on links to them\n*tried to give a little strucure to this site\n**added [[Ubuntu]] and [[Firefox]] to main menu\n**rewrote [[Ubuntu]] (divided into UbuntuDefinition, a direct download link and MyUbuntu)
*just discovered a nice way to format text in TiddlyWiki\n**[[wikibar|http://aiddlywiki.sourceforge.net/]] adds a bar above the text field similar to those found in various forums. There you can set fonts, insert links, ...\n*added <<option chkSaveEmptyTemplate>> SaveEmptyTemplate checkbox to OptionsPanel\n*found nice [[TiddlyWiki Reference|http://knighjm.googlepages.com/knightnet-default-tw.html#Reference]]
*added ExportTiddlersPanel and ExportTiddlersPlugin\n*finally made PalmSynchronization work\n*some users posted a [[list of favorite linux apps|http://ubuntuforums.org/showthread.php?t=290155&page=2]] and "~DeVeDe" (movie file -> vcd/vcd2/..) looks interesting
*set up edgy server
*went through my bookmarks dump (a folder I save pages I want to look at later) and added some comments to [[Xchat]]\n*added FirefoxMultiRowBookmarksToolbar to my installation (works now)
Last night and today I tweaked the layout, colors and style:\n*FhtwViewTemplate\n*FhtwPageTemplate\n*FhtwEditTemplate\n*ColorPalette\n*FhtwStyleSheet\n*FhtwStyleSheetColors
*I just downloaded an e-book in chm file format. [[xchm]] must be installed to view it.
*Have installed Kubuntu on my notebook now and am configuring it. See LaptopKubuntu.\n*For smb support in Krusader with Gnome, {{{sudo apt-get install kdebase-kio-plugins}}}
Today I'll try to set up an IMAP server that fetches several mail boxes. Following [[this tutorial|http://gentoo-wiki.com/HOWTO_Fetch_mails_from_multiple_POP/IMAP-mailboxes_and_export_them_via_IMAP_to_Thunderbird/SquirrelMail_etc]] led to success, but Edgy has an older version of dovecot in the repositories, so {{{mail_location}}} is {{{default_mail_env}}} ([[link|http://wiki.dovecot.org/MailLocation]]).\n*I want shortcut menus (geoshell style)\n**{{{python-xlib}}} und http://x-python.sourceforge.net/Doc/x/node2.html
ToDo Forum posten\nhttp://ubuntuforums.org/showthread.php?t=403884
*"installed" ASCIIMathML on [[edgy]]
*installed German dictionary for [[Thunderbird]]
Today I install Feisty on my Notebook - see [[FeistyLaptop]] for a log.
*FeistyLaptop -> .Xsession
some notes from my A3 paper note pad:\n* window manager control: wmctrl (see xmms)\n* [[Smart Digg Button]] Firefox extension
<<getPak 915resolution>>\nGet a list of video modes:\n{{{\nsudo 915resolution -l\n}}}\nremember the mode (e.g. 1280x768, 32 Bit = 7e), \nthen {{{sudo vim /etc/default/915resolution}}}\nand change MODE from auto to "7e" and fill XRESO=1280, YRESO=800.\nTo make the changes take effect, [[restart your X server|RestartX]].\n!Sources\n[[official homepage|http://www.geocities.com/stomljen/]]\n[[How to configure (worked for me)|http://ubuntuforums.org/showthread.php?t=290503&highlight=915resolution]]
[[ASCIIMathML|http://www1.chapman.edu/~jipsen/mathml/asciimath.html]] is a Javascript "to easily produce good-looking math formulas on webpages using a simple calculator-style syntax".\n!Installation on Edgy\nFirefox gave this error message:\n>[img[img/firefox-mathml-fonts-missing.png]]\nUnpack [[this archive|files/asciimathml-fonts.tar.gz]] and run {{{runme.sh}}}, then add the following line to your {{{user.js}}} file (located in {{{~/.mozilla/firefox/SOMESCRAMBLE.default/user.js}}}):\n{{{\nuser_pref("font.mathfont-family", "CMR10, CMSY10, CMEX10, CMMI10, OpenSymbol");\n}}}\n!Sources\nhttp://www1.chapman.edu/~jipsen/mathml/asciimath.html\nhttp://www.mozilla.org/projects/mathml/fonts/
"Powerful and user-friendly "selector" utility for selecting elements and doing various actions on them."\nI use it to cut out unnecessary parts of webpages, e.g. before printing.\nhttps://addons.mozilla.org/firefox/4111/
|''URL:''|http://tiddlywiki.abego-software.de/|\n|''Description:''|UdoBorkowski's Extensions for TiddlyWiki|\n|''Author:''|UdoBorkowski|
*software has to adapt, to offer different abilities at different times\nThis is best clarified by example:\nWhen I first used TiddlyWiki, the basic tagging ability met my needs. Now after having progressed, I need another tool to create and //mainly maintain// my tags. This is due to a simple fact:\n*in the beginning I did not have any tags, so the given option (just type them, seperated by spaces) was suitable\n*now I have a larger amount of tiddlers that need to be tagged with mainly ALREADY EXISTING tags, so I need a drop-down-list, that enables me to select tags, but also offers the NOW RARELY USED function to create a new tag\nAnother example:\nThe GIMP is a beautiful graphics tool, but when I put my little seven year old sister in front of it, she has no idea. M$ paint is easy for her though... The possibilities GIMP offers should be growing with her skills.
Updates [[Adblock|AdblockPlus]]'s filterset automatically. Just get it!\nhttps://addons.mozilla.org/firefox/1136/
Get rid of banners and popups (filters almost everything and can be easily customized).\nhttps://addons.mozilla.org/firefox/1865/
<<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
"This extension allows you to execute common commands using mouse gestures, rocker navigation, scroll wheel navigation and page scrolling."\nYou will love it. I got used to it when I still used [[Opera|http://www.opera.com/]].\nhttps://addons.mozilla.org/firefox/12/
|Sound Card|VIA VT82xx|\n!Important Files\n|{{{/etc/modprobe.d/alsa-base}}}|driver and chipset settings|\n{{{\ncat /proc/asound/cards:\n 0 [VT82xx ]: HDA-Intel - HDA VIA VT82xx\n HDA VIA VT82xx at 0xfbffc000 irq 225\n\ncat /proc/asound/devices:\n 2: : timer\n 3: [ 0- 1]: digital audio playback\n 4: [ 0- 0]: digital audio playback\n 5: [ 0- 0]: digital audio capture\n 6: [ 0] : control\n\ncat /proc/asound/pcm:\n00-01: AD198x Digital : AD198x Digital : playback 1\n00-00: AD198x Analog : AD198x Analog : playback 1 : capture 1\n\ncat /proc/asound/oss/devices:\n 0: [0- 0]: mixer\n 3: [0- 0]: digital audio\n 4: [0- 0]: digital audio\n 12: [0- 1]: digital audio\n\nls /dev/adsp /dev/dsp -l:\ncrw-rw---- 1 root audio 14, 12 2007-02-02 08:25 /dev/adsp\ncrw-rw---- 1 root audio 14, 3 2007-02-02 08:25 /dev/dsp\n\nls /proc/asound/card0/:\ncodec#0\nid\noss_mixer\npcm0c\npcm0p\npcm1p\n}}}\n!/dev/dsp works, but /dev/adsp not\n{{{sudo cat /dev/urandom > /dev/dsp}}} works, but\n{{{sudo cat /dev/urandom > /dev/adsp}}} does not work.\nWhy?
Though both words can be used similarly, in the scope of this document I will define [[app]] as a program that has a GUI like [[GTK+|http://www.gtk.org/]] and [[tool]] as a console program (with or without an [[ncurses]] interface)
Selected Text is automatically copied to clipboard.\nhttps://addons.mozilla.org/firefox/383/\n[[http://www.erweiterungen.de/detail/AutoCopy/]] (Deutsch)
This is probably the most powerful feature of bash.\n!What's That?\nYou type the beginning of a command or file and hit //tab//. Bash completes the word for you. If there are several commands with the same beginning, hit tab again to get a list of available options.\n!Example\n!!Complete a command\nWe are here:\n{{{\ndfm@dfm1:~/example$ \n}}}\nTo create a new file I type {{{tou}}} then hit //tab// and bash completes to {{{touch }}}:\n{{{\ndfm@dfm1:~/example$ tou\n}}}\nhit tab:\n{{{\ndfm@dfm1:~/example$ touch \n}}}\nBash even put a space behind //touch//, so I can type the filename now - easy, isn't it?\n{{{\ndfm@dfm1:~/example$ touch cake-recipe\n}}}\n!!Get a list of options\nI created some more files:\n{{{\ndfm@dfm1:~/example$ touch butter-cookies sausage-salad\n}}}\nTo view them, I type {{{cat }}} and... oops I forgot their names! No problem: I hit tab twice and get a list of possible options:\n{{{\ndfm@dfm1:~/example$ cat \n}}}\n//tab//,//tab//\n{{{\ndfm@dfm1:~/example$ cat \nbutter-cookies cake-recipe sausage-salad \ndfm@dfm1:~/example$ cat \n}}}\n!!Show Me All You Have\nWhen at Bash prompt, hit //tab// twice and answer with yes. You get a list of all commands available on your system.
ShortcutLegend\n|C-a|go to start of line|\n|C-e|go to end of line|\n|C-u|kill to start of line|\n|C-k|kill to end of line|\n|C-S-c|copy|\n|C-S-v|paste|\n\n|C-c|EOF/cancel|\n|C-d|exit|
*BashKeyboardShortcuts\n\nredirect output to variable (in this case the value returned from {{{slocate}}} is used as first parameter for {{{cp}}}\n{{{\ncp $(slocate gtk-logo-rgb) /home/dfm/workspace/experimentieren/\n}}}\n!How To "backup /etc/X11/xorg.conf to /etc/X11/xorg.conf.CurrentDate where CurrentDate is YYYYMMDDHHMMSS"\n{{{echo `date +%Y%m%d%H%M`}}}\n{{{\ndfm@dfm1:~$ echo `date +%Y%m%d%H%M`\n200701152120\n}}}\n!!just another oneliner\n{{{\nsudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.`date +%Y%m%d%H%M`\n}}}\n!Sources\n*http://tldp.org/LDP/abs/html/timedate.html with {{{`date +%j`}}} -- be aware of the {{{`}}} not {{{'}}}!\n*{{{man date}}}\n*knowledge of {{{cp}}} command
!Customize Initial Bash settings to own needs\n*edit .bashrc, so [[.bash_aliases]] is executed at bash startup\n*add entries to [[.bash_aliases]] to set up aliases\n*execute {{{exec bash}}} at prompt to reload bash
!Situation\nBrowser's bookmark functions save absolute paths which differ from OS to OS.\nA uniform solution has to be created that allows simple synchronization of offline html resources between any platform.\n!Concept\nA Webserver (apache) is installed on every station. Thereby bookmarks can be reached with {{{http://localhost/bookmark.html}}}. Synchronizing the www folders of the respective webservers is child's play.
When I clean up my bookmarks list, I put quaint pages here.\n[[do it youself - dry erase board|http://www.elephantstaircase.com/wiki/index.php?title=DIYDryEraseBoard]]\n[[next generation tables|http://www.techeblog.com/index.php/tech-gadget/top-10-strangest-desks-and-tables]]\n[[print custom calendars|http://www.sciral.com/free/]]\n[[55 Ways to have fun with google|http://www.55fun.com/]]\n[[scribes|http://scribes.sourceforge.net/index.html]] - online text editor\n[[freeMind|http://freemind.sourceforge.net/wiki/index.php/Main_Page]] - mind manager
There are two harddrives: WD300 and SV1604N\nOn WD300 Linux is installed, on SV1604N Windows.\n#BIOS boots from WD300 and GRUB offers Windows and Linux, but Windows does not boot. See GrubFix.\n#If the WD300 gets broken, Windows must boot natively from SV1604N. See WinMBRFix.
Script that removes all files except *.pdf and *.tex from latex working directory.
/***\n| Name:|CloseOnCancelPlugin|\n| Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|\n| Version:|6.9.3|\n| Date:|30-Sep-2006|\n| Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n***/\n//{{{\nmerge(config.commands.cancelTiddler,{\n\n handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,\n\n handler: function(event,src,title) {\n this.handler_orig_closeUnsaved(event,src,title);\n if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))\n story.closeTiddler(title,true);\n return false;\n }\n\n});\n\n//}}}\n\n
Abbreviation for Copy'n'Paster.\nNowadays everybody is in a hurry...
Background: #000\nForeground: #ccc\n!whites\nPrimaryPale: #eee\nPrimaryLight: #888\nPrimaryMid: #444\nPrimaryDark: #1C1C1C\n!greens\nSecondaryPale: #0f0\nSecondaryLight: #0d0\nSecondaryMid: #0a0\nSecondaryDark: #010\n!reds\nTertiaryPale: #f44\nTertiaryMid: #b00\nRed: #f00\n!misc\nError: #f88\n\nBlue: #00f
Background: #010\nForeground: #fff\n\noptions-background headline-background\nPrimaryPale: #131\npopup (references e.g.) background\nPrimaryLight: #252\nlinks\nPrimaryMid: #1e0\ndone cancel delete und buttons\nPrimaryDark: #970\n\npopup-background\nSecondaryPale: #f00\n\nSecondaryLight: #550\nbuttonrand popup-hintergrund\nSecondaryMid: #747\n\nSecondaryDark: #593\n\ntags background, popup font\nTertiaryPale: #888\n/%%/\nTertiaryLight: #ccc\n\nTertiaryMid: #000\nTertiaryDark: #666\nError: #f88
//{{{\nconfig.options.chkHttpReadOnly = true; // means web visitors can *EDIT: NOT* experiment with your site by clicking edit\nconfig.options.chkInsertTabs = true; // tab inserts a tab when editing a tiddler\nconfig.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist\nconfig.views.editor.defaultText = ""; // don't need message when creating a new tiddler \nconfig.options.chkAnimate=false; // disable animations by default\n//}}}\n
To diable beeps when you typed something wrong or BashAutoCompletion presents a list of available options to you, simply type:\n{{{\nsetterm -blength 0\n}}}\nTo make those changes permanent, put this line in your [[.bashrc]].
Well, what would we do without it? Copying text here, pasting it there -- it's daily routine. Could you imagine using a PC that has no clipboard?\n!Console\n!!xterm\nAs far as I know, there is ''no keyboard shortcut'' for CopyAndPaste in xterm. Though, you can copy and paste this way:\n* mark something with mouse\n* paste by pressing middle mouse button (note: if you have only two buttons and "Emulate-3-Button-Mouse enabled, then click both buttons at the same time)\nTry this: Left-click somewhere in the xterm, then right-click somewhere else. Everything between these points is marked and ready to be pasted with mouse3.\n!!~Gnome-Terminal\n~Gnome-Terminal has these ''keyboard shortcuts'':\n|Ctrl+Shift+C|Copy|\n|Ctrl+Shift+V|Paste|\nThough I was unable to find out if it's possible to mark something with keyboard only.\n!Links\n*Gnome Clipboard Manager [[Glipper|http://glipper.sourceforge.net/]]\n*[[Geoshell|http://geoshell.com/]] (for Windows) with Geoclip plugin
Q: How can I copy all (''also hidden'') files in a directory to another directory?\nA: Following the rule {{{cp filename1 filename2 ... target-directory}}}, use\n{{{\ncp * .* targetdir\n}}}\nThis is cp, space, asterisk (for all not-hidden files), space, dot asterisk (for hidden files), space, target directory.\n!Sources\n{{{man cp}}}
/***\n|''Name:''|CopyTiddlerPlugin|\n|''Source:''|http://www.TiddlyTools.com/#CopyTiddlerPlugin|\n|''Author:''|TimMorgan|\n|''License:''|unknown|\n|''~CoreVersion:''|2.0.10|\n\nadds a "copy" option to duplicate a tiddler\n***/\n//{{{\nconfig.shadowTiddlers.EditTemplate = "<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler copyTiddler deleteTiddler'></div>\sn<div class='title' macro='view title'></div>\sn<div class='editor' macro='edit title'></div>\sn<div class='editor' macro='edit text'></div>\sn<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>";\n\nconfig.commands.copyTiddler = {\n text: 'copy',\n hideReadOnly: true,\n tooltip: 'Make a copy of this tiddler',\n handler: function(event,src,title) {\n story.displayTiddler(null,title,DEFAULT_VIEW_TEMPLATE);\n var tiddler = store.fetchTiddler(title);\n var newTitle = 'Copy of ' + title;\n var newTiddler = store.createTiddler(newTitle);\n newTiddler.text = tiddler.text;\n newTiddler.tags = tiddler.tags;\n story.displayTiddler(null,newTitle,DEFAULT_EDIT_TEMPLATE);\n story.focusTiddler(newTitle,"title");\n return false;\n }\n};\n//}}}
!Prerequisites\n<<getPak "lsdvd transcode">>\n!Getting Information\n{{{\nlsdvd $DVDSOURCE\n}}}\nWhere {{{$DVDSOURCE}}} can be either {{{/dev/dvd}}}, a directory or an iso-file.\n!Rip audio\n!!to ogg\n{{{\ntranscode -i $DVDSOURCE -x dvd -T $TITLE,$CHAPTER -a 0 -y null,ogg -m $TRACKNAME.ogg\n}}}\nFrom {{{man transcode}}}: "Use -T 1,-1 to trancode all chapters in a row. You can even specify chapter ranges."\n!!to mp3\n{{{\ntranscode -i $DVDSOURCE -x dvd -T $TITLE,$CHAPTER -a 0 -y raw -m $TRACKNAME.ogg\n}}}\n!Sources\nhttp://ubuntuforums.org/showthread.php?t=330856 -- original howto\nhttp://www.ubuntugeek.com/how-to-rip-dvd-audio-to-mp3-or-ogg.html -- troubleshooting
HelloThere
right click > save as\n[[this whole page|tiddlywiki.html]]\n[[empty template of TiddlyWiki 2.1.2|empty.html]]\n[[empty template of this site|template.html]]\n
"View and manage downloads from a tidy statusbar - without the download window getting in the way of your web browsing."\nI just love it.\nhttps://addons.mozilla.org/firefox/26/
*easy data backup for "everybody"\n*data is stored on personal space\n**CDs\n**ftp-servers\n**USB storage devices\n*easy handling\n**backup should take only one click\n**recovery as well\n**possibility to create a live cd, where all personal preferences are stored and can be recovered from
!this is a nice python/lisp/c/java/xxx experiment\n\nI want to log things I do currently, so I can review my effectiveness at the end of the day.\n\n==preferably __command line tool__ with toolbar client, gtk+ client and __ncurses__ ==\n*preferably a java tool that's as comfortable as firefox\n*accessable via shortcut(s)\n*functionality:\n**takes phrase from user\n**timestamps and logs it\n***can create PAUSEs\n\n!example\nFollowing happens: I start working on my new bike at 10:00. After 1 hour I feel hungy and eat something for half an hour. Then I continue my work for 3 hours and finally end it. Now I start working on my memoirs.\nBetween these steps I use the program as follows:\n*hit <ctrl+alt+l, n> at 10:00, type "work on bike", hit <enter>\n*hit <ctrl+alt+l, p> at 11:00, type "eat", hit <enter>\n*hit <ctrl+alt+l, r> at 11:30, hit <enter>\n*hit <ctrl+alt+l, e> at 14:30, type "bike is now grey", hit <enter>\n*hit <ctrl+alt+l, n> at 11:00, type "memoirs", hit <enter>
#In view mode, I want a toolbar button, that tags/untags a tiddler with "export".\n#A macro, that exports all tiddlers tagged with "export" to a file.\nsee also [[includeNew]]
!console setup\n!!green font\n!!mouse support\n<<getPak gpm>>\ndid not work for me, so I downloaded [[the .deb file|http://www.ftp.uni-erlangen.de/pub/mirrors/ubuntu/pool/universe/g/gpm/gpm_1.19.6-22ubuntu1_i386.deb]] and did an {{{apt-get -f install}}} to meet unmet dependencies.\n!!disable beep\n!windows shares\nsee [[Setting Up Samba In A Small LAN]]
<!--{{{-->\n<div class="toolbar" macro="toolbar +saveTiddler -cancelTiddler deleteTiddler"></div>\n<div class="title" macro="view title"></div>\n<div class="editLabel">Title</div>\n<div class="editor" macro="edit title"></div>\n<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>\n<div macro="showWhenExists EditPanelTemplate">[[EditPanelTemplate]]</div>\n<div class="editor" macro="edit text"></div>\n<!--}}}-->
!PGP - GPG?\nGPG (~GnuPGP) is a GNU implementation of the ~OpenPGP Standard\n[[Artikel in der TAZ|http://taz.de/blogs/paranoia/2006/08/15/verschlusselte-email-teil-i-warum-soll-ich-das/]]\n[[Deutsche OpenPGP Anleitungen|http://kai.iks-jena.de/pgp/]]\n[[wikipedia GPG|http://de.wikipedia.org/wiki/GNU_Privacy_Guard]]
Somewhere in the dialog of {{{dpkg-reconfigure xserver-xorg}}} you can choose to "Emulate Three-Button Mouse".\nIn ''effect'', when you click the left mouse button (mouse1) and the right one (mouse2) it results in a middle click (mouse3).\nThis is ''desirable if'' you have a mouse (or touchpad) with two buttons only, but ''annoying when'' playing shooters like [[Quake III Arena]] where you need to press mouse1 (attack) and mouse2 (jump) for a rocket jump.
!Enable Repositories\nTo enable repositories containing proprietary software and backports (newer versions for newer distros, "backported" to your distro), edit this file (in this case I use vim):\n{{{\nsudo vim /etc/apt/sources.list\n}}}\nand uncomment all lines beginning with {{{# deb}}}.\n!Update Package List\nNow you need to update your package list:\n{{{\nsudo apt-get update\n}}}\nor if you use [[wajig]]:\n{{{\nwajig update\n}}}
|!english|!german|\n|insatiable|unersättlich, unstillbar|
enqueue directories in xmms (with [[Thunar]]):\n"Edit"->"Configure custom actions..."\nadd a new one\n|name:|enqueue in xmms|\n|command|{{{xmms -e %F}}}|\nAppearance Conditions\n*check Directories and Audio Files\n----\nsee also:\n[[thunar documentation|http://thunar.xfce.org/pwiki/documentation/custom_actions]] at [[xfce.org|http://www.xfce.org/]]
http://www.gnome.org/projects/evolution/
<<exportTiddlers inline>>
/***\n|''Name:''|ExportTiddlersPlugin|\n|''Source:''|http://www.TiddlyTools.com/#ExportTiddlersPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nWhen many people edit copies of the same TiddlyWiki document, the ability to easily copy and share these changes so they can then be redistributed to the entire group is very important. This ability is also very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\nExportTiddlersPlugin let you ''select and extract tiddlers from your ~TiddlyWiki documents and save them to a local file'' or a remote server (requires installation of compatible server-side scripting, still under development...). An interactive control panel lets you specify a destination, and then select which tiddlers to export. A convenient 'selection filter' helps you pick desired tiddlers by specifying a combination of modification dates, tags, or tiddler text to be matched or excluded. ''Tiddler data can be output as ~TiddlyWiki "storeArea ~DIVs" that can be imported into another ~TiddlyWiki or as ~RSS-compatible XML that can be published for RSS syndication.''\n\n!!!!!Inline interface (live)\n<<<\n<<exportTiddlers inline>>\n<<<\n!!!!!Usage\n<<<\nOptional "special tiddlers" used by this plugin:\n* SiteUrl^^\nURL for official server-published version of document being viewed (used in XML export)\ndefault: //none//^^\n* SiteHost^^\nhost name/address for remote server (e.g., "www.server.com" or "192.168.1.27")\ndefault: //none//^^\n* SitePost^^\nremote path/filename for submitting changes (e.g., "/cgi-bin/submit.cgi")\ndefault: //none//^^\n* SiteParams^^\narguments (if any) for server-side receiving script\ndefault: //none//^^\n* SiteNotify^^\naddresses (if any) for sending automatic server-side email notices\ndefault: //none//^^\n* SiteID^^\nusername or other authorization identifier for login-controlled access to remote server\ndefault: current TiddlyWiki username (e.g., "YourName")^^\n* SiteDate^^\nstored date/time stamp for most recent published version of document\ndefault: current document.modified value (i.e., the 'file date')^^\n<<<\n!!!!!Example\n<<<\n<<exportTiddlers>>\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''ExportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add {{{<<exportTiddlers>>}}} macro^^\n<<<\n!!!!!Revision History\n<<<\n''2006.11.08 [2.2.4]'' added promptForExportFilename() and replaced type="file" control with edit field + browse button ("...").\n''2006.10.12 [2.2.3]'' in exportDIVFooter(), write POST-BODY-START/END markers for compatibility with TW2.1 core file format. Based on report from Jose Gonzalez.\n''2006.05.11 [2.2.2]'' in createExportPanel, removed call to addNotification() to no longer auto-refresh the list every time a tiddler is changed. Instead, call refreshExportList(0) only when the panel is first rendered and each time it is made visible. Prevents unneeded feedback messages from being displayed and increases overall document performance, since the listbox is no longer being updated each time a tiddler is saved.\n''2006.05.02 [2.2.1]'' Use displayMessage() to show number of selected tiddlers instead of updating listbox 'header' item after each selection. Prevents awkward 'scroll-to-top' behavior that made multi-select via ctrl-click nearly impossible. Reported by Paul Reiber.\n''2006.04.29 [2.2.0]'' New features: "Notes" are free-form text that is inserted in the header of a TWDIV export file. When exporting to a server, the "notify" checkbox indicates that server-side script processing should send an email message when the export file is stored on the server. Comma-separated addresses may be typed in, or pre-defined in the SiteNotify tiddler.\n''2006.03.29 [2.1.3]'' added calls to convertUnicodeToUTF8() for generated output, so it better handles international characters.\n''2006.02.12 [2.1.2]'' added var to unintended global 'tags' in matchTags(). Avoids FF1501 bug when filtering by tags. (based on report by TedPavlic)\n''2006.02.04 [2.1.1]'' added var to variables that were unintentionally global. Avoids FireFox 1.5.0.1 crash bug when referencing global variables\n''2006.02.02 [2.1.0]'' Added support for output of complete TiddlyWiki documents. Let's you use ExportTiddlers to generate 'starter' documents from selected tiddlers.\n''2006.01.21 [2.0.1]'' Defer initial panel creation and only register a notification function when panel first is created\nin saveChanges 'hijack', create panel as needed. Note: if window.event is not available to identify the click location, the export panel is positioned relative to the 'tiddlerDisplay' element of the TW document.\n''2005.12.27 [2.0.0]'' Update for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.24 [0.9.5]'' Minor adjustments to CSS to force correct link colors regardless of TW stylesheet selection\n''2005.12.16 [0.9.4]'' Dynamically create/remove exportPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding.\n''2005.11.15 [0.9.2]'' added non-Ajax post function to bypass javascript security restrictions on cross-domain I/O. Moved AJAX functions to separate tiddler (no longer needed here). Generalized HTTP server to support UnaWiki servers\n''2005.11.08 [0.9.1]'' moved HTML, CSS and control initialization into exportInit() function and call from macro handler instead of at load time. This allows exportPanel to be placed within the same containing element as the "export tiddlers" button, so that relative positioning can be achieved.\n''2005.10.28 [0.9.0]'' added 'select opened tiddlers' feature\nBased on a suggestion by Geoff Slocock\n''2005.10.24 [0.8.3]'' Corrected hijack of 'save changes' when using http:\n''2005.10.18 [0.8.2]'' added AJAX functions\n''2005.10.18 [0.8.1]'' Corrected timezone handling when filtering for date ranges.\nImproved error checking/reporting for invalid filter values and filters that don't match any tiddlers.\nExporting localfile-to-localfile is working for IE and FF\nExporting server-to-localfile works in IE (after ActiveX warnings), but has security issues in FF\nCross-domain exporting (localfile/server-to-server) is under development\nCookies to remember filter settings - coming soon\nMore style tweaks, minor text changes and some assorted layout cleanup.\n''2005.10.17 [0.8.0]'' First pre-release.\n''2005.10.16 [0.7.0]'' filter by tags\n''2005.10.15 [0.6.0]'' filter by title/text\n''2005.10.14 [0.5.0]'' export to local file (DIV or XML)\n''2005.10.14 [0.4.0]'' filter by start/end date\n''2005.10.13 [0.3.0]'' panel interaction\n''2005.10.11 [0.2.0]'' panel layout\n''2005.10.10 [0.1.0]'' code framework\n''2005.10.09 [0.0.0]''development started\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // version\n//{{{\nversion.extensions.exportTiddlers = {major: 2, minor: 2, revision: 4, date: new Date(2006,11,8)};\n//}}}\n\n// // macro handler\n//{{{\nconfig.macros.exportTiddlers = {\n label: "export tiddlers",\n prompt: "Copy selected tiddlers to an export document",\n newdefault: "export.html",\n datetimefmt: "0MM/0DD/YYYY 0hh:0mm:0ss" // for "filter date/time" edit fields\n};\n\nconfig.macros.exportTiddlers.handler = function(place,macroName,params) {\n if (params[0]!="inline")\n { createTiddlyButton(place,this.label,this.prompt,onClickExportMenu); return; }\n var panel=createExportPanel(place);\n panel.style.position="static";\n panel.style.display="block";\n}\n\nfunction createExportPanel(place) {\n var panel=document.getElementById("exportPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.exportTiddlers.css,"exportTiddlers");\n panel=createTiddlyElement(place,"span","exportPanel",null,null)\n panel.innerHTML=config.macros.exportTiddlers.html;\n exportShowPanel(document.location.protocol);\n exportInitFilter();\n refreshExportList(0);\n return panel;\n}\n\nfunction onClickExportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("exportPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createExportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n if (panel.style.display!="none") refreshExportList(0); // update list when panel is made visible\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Hijack saveChanges - diverts 'notFileUrlError' to display export control panel instead\n//{{{\nwindow.coreSaveChanges=window.saveChanges;\nwindow.saveChanges = function()\n{\n if (document.location.protocol=="file:") { coreSaveChanges(); return; }\n var e = window.event;\n var parent=e?resolveTarget(e).parentNode:document.body;\n var panel = document.getElementById("exportPanel");\n if (panel==undefined || panel.parentNode!=parent) panel=createExportPanel(parent);\n exportShowPanel(document.location.protocol);\n if (parent==document.body) { panel.style.left="30%"; panel.style.top="30%"; }\n panel.style.display = "block" ;\n}\n//}}}\n\n// // IE needs explicit scoping for functions called by browser events\n//{{{\nwindow.onClickExportMenu=onClickExportMenu;\nwindow.onClickExportButton=onClickExportButton;\nwindow.exportShowPanel=exportShowPanel;\nwindow.exportShowFilterFields=exportShowFilterFields;\nwindow.refreshExportList=refreshExportList;\n//}}}\n\n// // CSS for floating export control panel\n//{{{\nconfig.macros.exportTiddlers.css = '\s\n#exportPanel {\s\n display: none; position:absolute; z-index:12; width:35em; right:105%; top:6em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#exportPanel a, #exportPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#exportPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#exportPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#exportPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#exportPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%; }\s\n#exportPanel textarea { width:98%;padding:0px;margin:0px;overflow:auto;font-size:8pt; }\s\n#exportPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px; }\s\n#exportPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#exportPanel .rad { width:auto;border:0 }\s\n#exportPanel .chk { width:auto;border:0 }\s\n#exportPanel .btn { width:auto; }\s\n#exportPanel .btn1 { width:98%; }\s\n#exportPanel .btn2 { width:48%; }\s\n#exportPanel .btn3 { width:32%; }\s\n#exportPanel .btn4 { width:24%; }\s\n#exportPanel .btn5 { width:19%; }\s\n';\n//}}}\n\n// // HTML for export control panel interface\n//{{{\nconfig.macros.exportTiddlers.html = '\s\n<!-- output target and format -->\s\n<table cellpadding="0" cellspacing="0"><tr><td width=50%>\s\n export to\s\n <select size=1 id="exportTo" onchange="exportShowPanel(this.value);">\s\n <option value="file:" SELECTED>this computer</option>\s\n <option value="http:">web server (http)</option>\s\n <option value="https:">secure web server (https)</option>\s\n <option value="ftp:">file server (ftp)</option>\s\n </select>\s\n</td><td width=50%>\s\n output format\s\n <select id="exportFormat" size=1>\s\n <option value="DIV">TiddlyWiki export file</option>\s\n <option value="TW">TiddlyWiki document</option>\s\n <option value="XML">RSS feed (XML)</option>\s\n </select>\s\n</td></tr></table>\s\n\s\n<!-- export to local file -->\s\n<div id="exportLocalPanel" style="margin-top:5px;">\s\nlocal path/filename<br>\s\n<input type="text" id="exportFilename" size=40 style="width:93%"><input \s\n type="button" id="exportBrowse" value="..." title="select or enter a local folder/file..." style="width:5%" \s\n onclick="this.previousSibling.value=window.promptForExportFilename(this);">\s\n<!--<input type="file" id="exportFilename" size=57 style="width:100%"><br>-->\s\n</div><!--panel-->\s\n\s\n<!-- export to http server -->\s\n<div id="exportHTTPPanel" style="display:none;margin-top:5px;">\s\n<table><tr><td align=left>\s\n server location, script, and parameters<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="exportNotify"\s\n onClick="document.getElementById(\s'exportSetNotifyPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> notify\s\n</td></tr></table>\s\n<input type="text" id="exportHTTPServerURL" onfocus="this.select()"><br>\s\n<div id="exportSetNotifyPanel" style="display:none">\s\n send email notices to<br>\s\n <input type="text" id="exportNotifyTo" onfocus="this.select()"><br>\s\n</div>\s\n</div><!--panel-->\s\n\s\n<!-- export to ftp server -->\s\n<div id="exportFTPPanel" style="display:none;margin-top:5px;">\s\n<table cellpadding="0" cellspacing="0" width="32%"><tr valign="top"><td>\s\n host server<br>\s\n <input type="text" id="exportFTPHost" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n username<br>\s\n <input type="text" id="exportFTPID" onfocus="this.select()"><br>\s\n</td><td width="32%">\s\n password<br>\s\n <input type="password" id="exportFTPPW" onfocus="this.select()"><br>\s\n</td></tr></table>\s\nFTP path/filename<br>\s\n<input type="text" id="exportFTPFilename" onfocus="this.select()"><br>\s\n</div><!--panel-->\s\n\s\n<!-- notes -->\s\nnotes<br>\s\n<textarea id="exportNotes" rows=3 cols=40 style="height:4em;margin-bottom:5px;" onfocus="this.select()"></textarea> \s\n\s\n<!-- list of tiddlers -->\s\n<table><tr align="left"><td>\s\n select:\s\n <a href="JavaScript:;" id="exportSelectAll"\s\n onclick="onClickExportButton(this)" title="select all tiddlers">\s\n &nbsp;all&nbsp;</a>\s\n <a href="JavaScript:;" id="exportSelectChanges"\s\n onclick="onClickExportButton(this)" title="select tiddlers changed since last save">\s\n &nbsp;changes&nbsp;</a> \s\n <a href="JavaScript:;" id="exportSelectOpened"\s\n onclick="onClickExportButton(this)" title="select tiddlers currently being displayed">\s\n &nbsp;opened&nbsp;</a> \s\n <a href="JavaScript:;" id="exportToggleFilter"\s\n onclick="onClickExportButton(this)" title="show/hide selection filter">\s\n &nbsp;filter&nbsp;</a> \s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportListSmaller"\s\n onclick="onClickExportButton(this)" title="reduce list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n <a href="JavaScript:;" id="exportListLarger"\s\n onclick="onClickExportButton(this)" title="increase list size">\s\n &nbsp;+&nbsp;</a>\s\n</td></tr></table>\s\n<select id="exportList" multiple size="10" style="margin-bottom:5px;"\s\n onchange="refreshExportList(this.selectedIndex)">\s\n</select><br>\s\n</div><!--box-->\s\n\s\n<!-- selection filter -->\s\n<div id="exportFilterPanel" style="display:none">\s\n<table><tr align="left"><td>\s\n selection filter\s\n</td><td align="right">\s\n <a href="JavaScript:;" id="exportHideFilter"\s\n onclick="onClickExportButton(this)" title="hide selection filter">hide</a>\s\n</td></tr></table>\s\n<div class="box">\s\n<input type="checkbox" class="chk" id="exportFilterStart" value="1"\s\n onclick="exportShowFilterFields(this)"> starting date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterStartBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportStartDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterStartBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id="exportFilterEnd" value="1"\s\n onclick="exportShowFilterFields(this)"> ending date/time<br>\s\n<table cellpadding="0" cellspacing="0"><tr valign="center"><td width="50%">\s\n <select size=1 id="exportFilterEndBy" onchange="exportShowFilterFields(this);">\s\n <option value="0">today</option>\s\n <option value="1">yesterday</option>\s\n <option value="7">a week ago</option>\s\n <option value="30">a month ago</option>\s\n <option value="site">SiteDate</option>\s\n <option value="file">file date</option>\s\n <option value="other">other (mm/dd/yyyy hh:mm)</option>\s\n </select>\s\n</td><td width="50%">\s\n <input type="text" id="exportEndDate" onfocus="this.select()"\s\n onchange="document.getElementById(\s'exportFilterEndBy\s').value=\s'other\s';">\s\n</td></tr></table>\s\n<input type="checkbox" class="chk" id=exportFilterTags value="1"\s\n onclick="exportShowFilterFields(this)"> match tags<br>\s\n<input type="text" id="exportTags" onfocus="this.select()">\s\n<input type="checkbox" class="chk" id=exportFilterText value="1"\s\n onclick="exportShowFilterFields(this)"> match titles/tiddler text<br>\s\n<input type="text" id="exportText" onfocus="this.select()">\s\n</div> <!--box-->\s\n</div> <!--panel-->\s\n\s\n<!-- action buttons -->\s\n<div style="text-align:center">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportFilter" value="apply filter">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportStart" value="export tiddlers">\s\n<input type=button class="btn3" onclick="onClickExportButton(this)"\s\n id="exportClose" value="close">\s\n</div><!--center-->\s\n';\n//}}}\n\n// // initialize interface\n// // exportShowPanel(which)\n//{{{\nfunction exportShowPanel(which) {\n var index=0; var panel='exportLocalPanel';\n switch (which) {\n case 'file:':\n case undefined:\n index=0; panel='exportLocalPanel'; break;\n case 'http:':\n index=1; panel='exportHTTPPanel'; break;\n case 'https:':\n index=2; panel='exportHTTPPanel'; break;\n case 'ftp:':\n index=3; panel='exportFTPPanel'; break;\n default:\n alert("Sorry, export to "+which+" is not yet available");\n break;\n }\n exportInitPanel(which);\n document.getElementById('exportTo').selectedIndex=index;\n document.getElementById('exportLocalPanel').style.display='none';\n document.getElementById('exportHTTPPanel').style.display='none';\n document.getElementById('exportFTPPanel').style.display='none';\n document.getElementById(panel).style.display='block';\n}\n//}}}\n\n// // exportInitPanel(which)\n//{{{\nfunction exportInitPanel(which) {\n switch (which) {\n case "file:": // LOCAL EXPORT PANEL: file/path:\n // ** no init - security issues in IE **\n break;\n case "http:": // WEB EXPORT PANEL\n case "https:": // SECURE WEB EXPORT PANEL\n // url\n if (store.tiddlerExists("unawiki_download")) {\n var theURL=store.getTiddlerText("unawiki_download");\n theURL=theURL.replace(/\s[\s[download\s|/,'').replace(/\s]\s]/,'');\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n }\n // server script/params\n var title=(store.tiddlerExists("unawiki_host"))?"unawiki_host":"SiteHost";\n var theHost=store.getTiddlerText(title);\n if (!theHost || !theHost.length) theHost=document.location.host;\n if (!theHost || !theHost.length) theHost=title;\n // get POST\n var title=(store.tiddlerExists("unawiki_post"))?"unawiki_post":"SitePost";\n var thePost=store.getTiddlerText(title);\n if (!thePost || !thePost.length) thePost="/"+title;\n // get PARAMS\n var title=(store.tiddlerExists("unawiki_params"))?"unawiki_params":"SiteParams";\n var theParams=store.getTiddlerText(title);\n if (!theParams|| !theParams.length) theParams=title;\n var serverURL = which+"//"+theHost+thePost+"?"+theParams;\n document.getElementById("exportHTTPServerURL").value=serverURL;\n // get NOTIFY\n var theAddresses=store.getTiddlerText("SiteNotify");\n if (!theAddresses|| !theAddresses.length) theAddresses="SiteNotify";\n document.getElementById("exportNotifyTo").value=theAddresses;\n break;\n case "ftp:": // FTP EXPORT PANEL\n // host\n var siteHost=store.getTiddlerText("SiteHost");\n if (!siteHost || !siteHost.length) siteHost=document.location.host;\n if (!siteHost || !siteHost.length) siteHost="SiteHost";\n document.getElementById("exportFTPHost").value=siteHost;\n // username\n var siteID=store.getTiddlerText("SiteID");\n if (!siteID || !siteID.length) siteID=config.options.txtUserName;\n document.getElementById("exportFTPID").value=siteID;\n // password\n document.getElementById("exportFTPPW").value="";\n // file/path\n document.getElementById("exportFTPFilename").value="";\n break;\n }\n}\n//}}}\n\n// // exportInitFilter()\n//{{{\nfunction exportInitFilter() {\n // start date\n document.getElementById("exportFilterStart").checked=false;\n document.getElementById("exportStartDate").value="";\n // end date\n document.getElementById("exportFilterEnd").checked=false;\n document.getElementById("exportEndDate").value="";\n // tags\n document.getElementById("exportFilterTags").checked=false;\n document.getElementById("exportTags").value="";\n // text\n document.getElementById("exportFilterText").checked=false;\n document.getElementById("exportText").value="";\n // show/hide filter input fields\n exportShowFilterFields();\n}\n//}}}\n\n// // exportShowFilterFields(which)\n//{{{\nfunction exportShowFilterFields(which) {\n var show;\n\n show=document.getElementById('exportFilterStart').checked;\n document.getElementById('exportFilterStartBy').style.display=show?"block":"none";\n document.getElementById('exportStartDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterStartBy').value;\n document.getElementById('exportStartDate').value\n =getFilterDate(val,'exportStartDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterStartBy') && (val=='other'))\n document.getElementById('exportStartDate').focus();\n\n show=document.getElementById('exportFilterEnd').checked;\n document.getElementById('exportFilterEndBy').style.display=show?"block":"none";\n document.getElementById('exportEndDate').style.display=show?"block":"none";\n var val=document.getElementById('exportFilterEndBy').value;\n document.getElementById('exportEndDate').value\n =getFilterDate(val,'exportEndDate').formatString(config.macros.exportTiddlers.datetimefmt);\n if (which && (which.id=='exportFilterEndBy') && (val=='other'))\n document.getElementById('exportEndDate').focus();\n\n show=document.getElementById('exportFilterTags').checked;\n document.getElementById('exportTags').style.display=show?"block":"none";\n\n show=document.getElementById('exportFilterText').checked;\n document.getElementById('exportText').style.display=show?"block":"none";\n}\n//}}}\n\n// // onClickExportButton(which): control interactions\n//{{{\nfunction onClickExportButton(which)\n{\n // DEBUG alert(which.id);\n var theList=document.getElementById('exportList'); if (!theList) return;\n var count = 0;\n var total = store.getTiddlers('title').length;\n switch (which.id)\n {\n case 'exportFilter':\n count=filterExportList();\n var panel=document.getElementById('exportFilterPanel');\n if (count==-1) { panel.style.display='block'; break; }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage("filtered "+formatExportMessage(count,total));\n if (count==0) { alert("No tiddlers were selected"); panel.style.display='block'; }\n break;\n case 'exportStart':\n exportTiddlers();\n break;\n case 'exportHideFilter':\n case 'exportToggleFilter':\n var panel=document.getElementById('exportFilterPanel')\n panel.style.display=(panel.style.display=='block')?'none':'block';\n break;\n case 'exportSelectChanges':\n var lastmod=new Date(document.lastModified);\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n var tiddler=store.getTiddler(theList.options[t].value); if (!tiddler) continue;\n theList.options[t].selected=(tiddler.modified>lastmod);\n count += (tiddler.modified>lastmod)?1:0;\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,total));\n if (count==0) alert("There are no unsaved changes");\n break;\n case 'exportSelectAll':\n for (var t = 0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count += 1;\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,count));\n break;\n case 'exportSelectOpened':\n for (var t = 0; t < theList.options.length; t++) theList.options[t].selected=false;\n var tiddlerDisplay = document.getElementById("tiddlerDisplay");\n for (var t=0;t<tiddlerDisplay.childNodes.length;t++) {\n var tiddler=tiddlerDisplay.childNodes[t].id.substr(7);\n for (var i = 0; i < theList.options.length; i++) {\n if (theList.options[i].value!=tiddler) continue;\n theList.options[i].selected=true; count++; break;\n }\n }\n document.getElementById("exportStart").disabled=(count==0);\n clearMessage(); displayMessage(formatExportMessage(count,total));\n if (count==0) alert("There are no tiddlers currently opened");\n break;\n case 'exportListSmaller': // decrease current listbox size\n var min=5;\n theList.size-=(theList.size>min)?1:0;\n break;\n case 'exportListLarger': // increase current listbox size\n var max=(theList.options.length>25)?theList.options.length:25;\n theList.size+=(theList.size<max)?1:0;\n break;\n case 'exportClose':\n document.getElementById('exportPanel').style.display='none';\n break;\n }\n}\n//}}}\n\n// // list display\n//{{{\nfunction formatExportMessage(count,total)\n{\n var txt=total+' tiddler'+((total!=1)?'s':'')+" - ";\n txt += (count==0)?"none":(count==total)?"all":count;\n txt += " selected for export";\n return txt;\n}\n\nfunction refreshExportList(selectedIndex)\n{\n var theList = document.getElementById("exportList");\n var sort;\n if (!theList) return;\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) sort='modified';\n if (selectedIndex==1) sort='title';\n if (selectedIndex==2) sort='modified';\n if (selectedIndex==3) sort='modifier';\n\n // get the alphasorted list of tiddlers\n var tiddlers = store.getTiddlers('title');\n // unselect headings and count number of tiddlers actually selected\n var count=0;\n for (var i=0; i<theList.options.length; i++) {\n if (theList.options[i].value=="") theList.options[i].selected=false;\n count+=theList.options[i].selected?1:0;\n }\n // disable "export" button if no tiddlers selected\n document.getElementById("exportStart").disabled=(count==0);\n // update listbox heading to show selection count\n if (theList.options.length) { clearMessage(); displayMessage(formatExportMessage(count,tiddlers.length)); }\n\n // if a [command] item, reload list... otherwise, no further refresh needed\n if (selectedIndex>3) return;\n\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=\n new Option(tiddlers.length+" tiddlers in document", "",false,false);\n theList.options[i++]=\n new Option(((sort=="title" )?">":indent)+' [by title]', "",false,false);\n theList.options[i++]=\n new Option(((sort=="modified")?">":indent)+' [by date]', "",false,false);\n theList.options[i++]=\n new Option(((sort=="modifier")?">":indent)+' [by author]', "",false,false);\n // output the tiddler list\n switch(sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modifier":\n case "modified":\n var tiddlers = store.getTiddlers(sort);\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a[sort] == b[sort]) return(0); else return (a[sort] > b[sort]) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++)\n {\n var tiddler = tiddlers[t];\n var theSection = "";\n if (sort=="modified") theSection=tiddler.modified.toLocaleDateString();\n if (sort=="modifier") theSection=tiddler.modifier;\n if (theSection != lastSection)\n {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n}\n//}}}\n\n// // list filtering\n//{{{\nfunction getFilterDate(val,id)\n{\n var result=0;\n switch (val) {\n case 'site':\n var timestamp=store.getTiddlerText("SiteDate");\n if (!timestamp) timestamp=document.lastModified;\n result=new Date(timestamp);\n break;\n case 'file':\n result=new Date(document.lastModified);\n break;\n case 'other':\n result=new Date(document.getElementById(id).value);\n break;\n default: // today=0, yesterday=1, one week=7, two weeks=14, a month=31\n var now=new Date(); var tz=now.getTimezoneOffset()*60000; now-=tz;\n var oneday=86400000;\n if (id=='exportStartDate')\n result=new Date((Math.floor(now/oneday)-val)*oneday+tz);\n else\n result=new Date((Math.floor(now/oneday)-val+1)*oneday+tz-1);\n break;\n }\n // DEBUG alert('getFilterDate('+val+','+id+')=='+result+"\snnow="+now);\n return result;\n}\n\nfunction filterExportList()\n{\n var theList = document.getElementById("exportList"); if (!theList) return -1;\n\n var filterStart=document.getElementById("exportFilterStart").checked;\n var val=document.getElementById("exportFilterStartBy").value;\n var startDate=getFilterDate(val,'exportStartDate');\n\n var filterEnd=document.getElementById("exportFilterEnd").checked;\n var val=document.getElementById("exportFilterEndBy").value;\n var endDate=getFilterDate(val,'exportEndDate');\n\n var filterTags=document.getElementById("exportFilterTags").checked;\n var tags=document.getElementById("exportTags").value;\n\n var filterText=document.getElementById("exportFilterText").checked;\n var text=document.getElementById("exportText").value;\n\n if (!(filterStart||filterEnd||filterTags||filterText)) {\n alert("Please set the selection filter");\n document.getElementById('exportFilterPanel').style.display="block";\n return -1;\n }\n if (filterStart&&filterEnd&&(startDate>endDate)) {\n var msg="starting date/time:\sn"\n msg+=startDate.toLocaleString()+"\sn";\n msg+="is later than ending date/time:\sn"\n msg+=endDate.toLocaleString()\n alert(msg);\n return -1;\n }\n\n // scan list and select tiddlers that match all applicable criteria\n var total=0;\n var count=0;\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-tiddler list items (section headings)\n var opt=theList.options[i]; if (opt.value=="") continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var tiddler=store.getTiddler(opt.value); if (!tiddler) continue; \n var sel=true;\n if ( (filterStart && tiddler.modified<startDate)\n || (filterEnd && tiddler.modified>endDate)\n || (filterTags && !matchTags(tiddler,tags))\n || (filterText && (tiddler.text.indexOf(text)==-1) && (tiddler.title.indexOf(text)==-1)))\n sel=false;\n opt.selected=sel;\n count+=sel?1:0;\n total++;\n }\n return count;\n}\n//}}}\n\n//{{{\nfunction matchTags(tiddler,cond)\n{\n if (!cond||!cond.trim().length) return false;\n\n // build a regex of all tags as a big-old regex that \n // OR's the tags together (tag1|tag2|tag3...) in length order\n var tgs = store.getTags();\n if ( tgs.length == 0 ) return results ;\n var tags = tgs.sort( function(a,b){return (a[0].length<b[0].length)-(a[0].length>b[0].length);});\n var exp = "(" + tags.join("|") + ")" ;\n exp = exp.replace( /(,[\sd]+)/g, "" ) ;\n var regex = new RegExp( exp, "ig" );\n\n // build a string such that an expression that looks like this: tag1 AND tag2 OR NOT tag3\n // turns into : /tag1/.test(...) && /tag2/.test(...) || ! /tag2/.test(...)\n cond = cond.replace( regex, "/$1\s\s|/.test(tiddlerTags)" );\n cond = cond.replace( /\ssand\ss/ig, " && " ) ;\n cond = cond.replace( /\ssor\ss/ig, " || " ) ;\n cond = cond.replace( /\ss?not\ss/ig, " ! " ) ;\n\n // if a boolean uses a tag that doesn't exist - it will get left alone \n // (we only turn existing tags into actual tests).\n // replace anything that wasn't found as a tag, AND, OR, or NOT with the string "false"\n // if the tag doesn't exist then /tag/.test(...) will always return false.\n cond = cond.replace( /(\ss|^)+[^\s/\s|&!][^\ss]*/g, "false" ) ;\n\n // make a string of the tags in the tiddler and eval the 'cond' string against that string \n // if it's TRUE then the tiddler qualifies!\n var tiddlerTags = (tiddler.tags?tiddler.tags.join("|"):"")+"|" ;\n try { if ( eval( cond ) ) return true; }\n catch( e ) { displayMessage("Error in tag filter '" + e + "'" ); }\n return false;\n}\n//}}}\n\n// // output data formatting\n// // exportHeader(format)\n//{{{\nfunction exportHeader(format)\n{\n switch (format) {\n case "TW": return exportTWHeader();\n case "DIV": return exportDIVHeader();\n case "XML": return exportXMLHeader();\n }\n}\n//}}}\n\n// // exportFooter(format)\n//{{{\nfunction exportFooter(format)\n{\n switch (format) {\n case "TW": return exportDIVFooter();\n case "DIV": return exportDIVFooter();\n case "XML": return exportXMLFooter();\n }\n}\n//}}}\n\n// // exportTWHeader()\n//{{{\nfunction exportTWHeader()\n{\n // Get the URL of the document\n var originalPath = document.location.href;\n // Check we were loaded from a file URL\n if(originalPath.substr(0,5) != "file:")\n { alert(config.messages.notFileUrlError); return; }\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#"); if(hashPos != -1) originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") == 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") == 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s");\n // Load the original file\n var original = loadFile(localPath);\n if(original == null)\n { alert(config.messages.cantSaveError); return; }\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n { alert(config.messages.invalidFileError.format([localPath])); return; }\n return original.substr(0,posOpeningDiv+startSaveArea.length)\n}\n//}}}\n\n// // exportDIVHeader()\n//{{{\nfunction exportDIVHeader()\n{\n var out=[];\n var now = new Date();\n var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());\n var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());\n var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());\n var twver = version.major+"."+version.minor+"."+version.revision;\n var pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<html><body>");\n out.push("<style type=\s"text/css\s">");\n out.push("#storeArea {display:block;margin:1em;}");\n out.push("#storeArea div");\n out.push("{padding:0.5em;margin:1em;border:2px solid black;height:10em;overflow:auto;}");\n out.push("#javascriptWarning");\n out.push("{width:100%;text-align:left;background-color:#eeeeee;padding:1em;}");\n out.push("</style>");\n out.push("<div id=\s"javascriptWarning\s">");\n out.push("TiddlyWiki export file<br>");\n out.push("Source: <b>"+convertUnicodeToUTF8(document.location.href)+"</b><br>");\n out.push("Title: <b>"+title+"</b><br>");\n out.push("Subtitle: <b>"+subtitle+"</b><br>");\n out.push("Created: <b>"+now.toLocaleString()+"</b> by <b>"+user+"</b><br>");\n out.push("TiddlyWiki "+twver+" / "+"ExportTiddlersPlugin "+pver+"<br>");\n out.push("Notes:<hr><pre>"+document.getElementById("exportNotes").value.replace(regexpNewLine,"<br>")+"</pre>");\n out.push("</div>");\n out.push("<div id=\s"storeArea\s">");\n return out;\n}\n//}}}\n\n// // exportDIVFooter()\n//{{{\nfunction exportDIVFooter()\n{\n var out=[];\n out.push("</div><!--POST-BODY-START-->\sn<!--POST-BODY-END--></body></html>");\n return out;\n}\n//}}}\n\n// // exportXMLHeader()\n//{{{\nfunction exportXMLHeader()\n{\n var out=[];\n var now = new Date();\n var u = store.getTiddlerText("SiteUrl",null);\n var title = convertUnicodeToUTF8(wikifyPlain("SiteTitle").htmlEncode());\n var subtitle = convertUnicodeToUTF8(wikifyPlain("SiteSubtitle").htmlEncode());\n var user = convertUnicodeToUTF8(config.options.txtUserName.htmlEncode());\n var twver = version.major+"."+version.minor+"."+version.revision;\n var pver = version.extensions.exportTiddlers.major+"."\n +version.extensions.exportTiddlers.minor+"."+version.extensions.exportTiddlers.revision;\n out.push("<" + "?xml version=\s"1.0\s"?" + ">");\n out.push("<rss version=\s"2.0\s">");\n out.push("<channel>");\n out.push("<title>" + title + "</title>");\n if(u) out.push("<link>" + convertUnicodeToUTF8(u.htmlEncode()) + "</link>");\n out.push("<description>" + subtitle + "</description>");\n out.push("<language>en-us</language>");\n out.push("<copyright>Copyright " + now.getFullYear() + " " + user + "</copyright>");\n out.push("<pubDate>" + now.toGMTString() + "</pubDate>");\n out.push("<lastBuildDate>" + now.toGMTString() + "</lastBuildDate>");\n out.push("<docs>http://blogs.law.harvard.edu/tech/rss</docs>");\n out.push("<generator>TiddlyWiki "+twver+" plus ExportTiddlersPlugin "+pver+"</generator>");\n return out;\n}\n//}}}\n\n// // exportXMLFooter()\n//{{{\nfunction exportXMLFooter()\n{\n var out=[];\n out.push("</channel></rss>");\n return out;\n}\n//}}}\n\n// // exportData()\n//{{{\nfunction exportData(theList,theFormat)\n{\n // scan export listbox and collect DIVs or XML for selected tiddler content\n var out=[];\n for (var i=0; i<theList.options.length; i++) {\n // get item, skip non-selected items and section headings\n var opt=theList.options[i]; if (!opt.selected||(opt.value=="")) continue;\n // get tiddler, skip missing tiddlers (this should NOT happen)\n var thisTiddler=store.getTiddler(opt.value); if (!thisTiddler) continue; \n if (theFormat=="TW") out.push(convertUnicodeToUTF8(thisTiddler.saveToDiv()));\n if (theFormat=="DIV") out.push(convertUnicodeToUTF8(thisTiddler.title+"\sn"+thisTiddler.saveToDiv()));\n if (theFormat=="XML") out.push(convertUnicodeToUTF8(thisTiddler.saveToRss()));\n }\n return out;\n}\n//}}}\n\n// // exportTiddlers(): output selected data to local or server\n//{{{\nfunction exportTiddlers()\n{\n var theList = document.getElementById("exportList"); if (!theList) return;\n\n // get the export settings\n var theProtocol = document.getElementById("exportTo").value;\n var theFormat = document.getElementById("exportFormat").value;\n\n // assemble output: header + tiddlers + footer\n var theData=exportData(theList,theFormat);\n var count=theData.length;\n var out=[]; var txt=out.concat(exportHeader(theFormat),theData,exportFooter(theFormat)).join("\sn");\n var msg="";\n switch (theProtocol) {\n case "file:":\n var theTarget = document.getElementById("exportFilename").value.trim();\n if (!theTarget.length) msg = "A local path/filename is required\sn";\n if (!msg && saveFile(theTarget,txt))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to local file";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "http:":\n case "https:":\n var theTarget = document.getElementById("exportHTTPServerURL").value.trim();\n if (!theTarget.length) msg = "A server URL is required\sn";\n if (document.getElementById('exportNotify').checked)\n theTarget+="&notify="+encodeURIComponent(document.getElementById('exportNotifyTo').value);\n if (document.getElementById('exportNotes').value.trim().length)\n theTarget+="&notes="+encodeURIComponent(document.getElementById('exportNotes').value);\n if (!msg && exportPost(theTarget+encodeURIComponent(txt)))\n msg=count+" tiddler"+((count!=1)?"s":"")+" exported to "+theProtocol+" server";\n else if (!msg)\n msg+="An error occurred while saving to "+theTarget;\n break;\n case "ftp:":\n default:\n msg="Sorry, export to "+theLocation+" is not yet available";\n break;\n }\n clearMessage(); displayMessage(msg,theTarget);\n}\n//}}}\n\n// // exportPost(url): cross-domain post uses hidden iframe to submit url and capture responses\n//{{{\nfunction exportPost(url)\n{\n var f=document.getElementById("exportFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="exportFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.location.replace(url);\n return true;\n}\n//}}}\n\n// // promptForFilename(msg,path,file) uses platform/browser specific functions to get local filespec\n//{{{\nfunction promptForExportFilename(here)\n{\n var msg=here.title; // use tooltip as dialog box message\n var path=getLocalPath(document.location.href);\n var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\s\s"); \n if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash\n var file=config.macros.exportTiddlers.newdefault;\n var result="";\n if(window.Components) { // moz\n try {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeSave);\n var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension='html';\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XP only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';\n s.FilterIndex=3; // default to HTML files;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE\n }\n return result;\n}\n//}}}
If you still dual boot Windows and want to get files from an ext2/3 partition, this is essential. It creates a drive letter for every ext2/3 partition you want.\nhttp://www.fs-driver.org/download.html
"A Statusbar with Speed, Percentage, Time and loaded size (like Opera's one)". See for yourself:\n[img[Extended Status Bar|./img/ExtendedStatusBar.png]]\nhttps://addons.mozilla.org/firefox/1433/
Tune up firefox.\nhttps://addons.mozilla.org/firefox/1269/
!Terminal\nYes. We definitely need a good terminal:\n{{{xterm -fa monospace}}}\n!Boot Messages\nI want to see what happens during boot -> [[GrubStyling]].\n!Resolution\nUnfortunately the {{{xserver-xorg-video-i810}}} driver package does not detect my display with 1280x768 px.\nOn the other hand there is a new driver {{{wajig install xserver-xorg-video-intel}}}, which enables my preferred resolution, but is buggy (freeze after login -> hard reset the only option).\nThere are some bug reports [[here|https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-i810/+bug/63560]] and [[here|https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-i810/+bug/24927]].\n!Package Management\nWherever possible I use console applications. One of my favorites is [[wajig]], an easily handable front end to {{{apt-get}}}.\n{{{sudo apt-get install wajig}}}\n!Connectivity\nAfter fiddling with //network-manager// for a while I found myself executing {{{wajig remove network-manager}}} and switched back to config files (see above). ;) \n!!Hosts\n{{{/etc/hosts}}}\n{{{\n127.0.0.1 localhost\n\n10.1.2.33 router\n10.1.2.11 srv\n\n10.1.2.1 whisper\n10.1.2.2 notebook \n10.1.2.3 lownoise\n\n10.1.2.4 dfm1\n10.1.2.7 dfm2\n\n# The following lines are desirable for IPv6 capable hosts\n::1 ip6-localhost ip6-loopback\nfe00::0 ip6-localnet\nff00::0 ip6-mcastprefix\nff02::1 ip6-allnodes\nff02::2 ip6-allrouters\nff02::3 ip6-allhosts\n}}}\n\n!!Interfaces\n{{{/etc/network/interfaces}}}\n{{{\nauto lo\niface lo inet loopback\n\n\nauto eth0\niface eth0 inet static\naddress 10.1.2.5\nnetmask 255.255.255.0\ngateway 10.1.2.33\n\n\niface eth1 inet static\naddress 10.1.2.7\nnetmask 255.255.255.0\ngateway 10.1.2.33\nwireless-essid XXXXXXXX\nwireless-key XXXXXXXXXXXXXXXXXXXXXXXXXX\nwireless-mode managed\nwireless-ap any\n}}}\n!!Route\nBash\n{{{\nroute add 10.1.2.0 gw * eth0\nroute add 10.1.2.0 gw * eth0\nroute add default gw 10.1.2.33 eth0\nroute add default gw 10.1.2.33 eth1\n}}}\n!!Nameserver\n{{{/etc/resolv.conf}}}\n{{{\nnameserver 10.1.2.33\n}}}\n!Some Apps\nInstalled some apps with {{{wajig install PACKAGENAME}}} where PACKAGENAME is one of the following:\n*xbindkeys\n*vim\n*vpnc (see also [[vpnc-wlan]])\n!Mount NFS\nI explained that already in LaptopKubuntu.
A full ascii-resume will be available here shortly. For now, some addresses:\n|Homepage:|[[www.felixhummel.de|http://felixhummel.de]]|\n|Email:|[[felix (at) felixhummel (dot) de|mailto:felix@felixhummel.de]]|\n|ICQ:|44905323|
http://www.felixhummel.de/tiddlywiki.html
a little macro, that when invoked by {{{<<file filename code [full path]>>}}}\n*creates a new tiddler named //filename//\n**which contains the code and optionally the full path
[[Firefox|http://www.mozilla.com/en-US/firefox/]] is the best browser out there.\nI wrote a short [[installation guide|Firefox Installation]] for my father where I explain the [[useful add-ons|FirefoxAddonsList]] I have found so far.\nFirefox also has an irc-channel ([[#firefox at irc.freenode.net|irc://irc.freenode.net/firefox]]).
!Get Firefox\nhttp://www.mozilla.com/en-US/firefox/\nhttp://www.mozilla-europe.org/de/products/firefox/ (Deutsch)\n!Install ~Add-Ons\nJust open a link from my [[Addons List|FirefoxAddonsList]] and click the install button of the Mozilla Firefox addons page.\n!Backup current profile\n{{{\nmkdir ~/.mozilla/backup\ncp -r ~/.mozilla/firefox/*.default/ ~/.mozilla/backup/\n}}}\n!Customizing / Preferences\nNow the "funny" part. \n#Open Firefox's preferences and walk through every menu entry.\n#Open the [[Add-Ons|add-on]] window and walk through every addon's preferences.\n!Sources\nhttps://addons.mozilla.org/\nhttp://erweiterungen.de/ (Deutsch)\nhttp://www.quickonlinetips.com/archives/2005/12/50-best-firefox-extensions-for-power-surfing/\nhttp://forum.ubuntuusers.de/topic/47482/?highlight=firefox+toolbar
<<tiddlerList tags:add-on itemTemplate:"!%link\sn%text\sn\sn">>
*"insert (paste) URL from Bookmarks here" by rightklicking\n**user does rightclick in - let's say a form - chooses above-named command\n**Bookmark Manager opens\n**user can choose which URL\n**Bookmark Manager closes\n**URL is pasted where the cursor was\n*put "ding STRING" into address bar to make ding, which is an external tool, look up STRING
How to utilize an internet search engine by typing {{{keywordtoengine SEARCHSTRING}}} in firefox's address bar.\n\n!Short and Simple\nImport my [[template-bookmarks|firefoxAddressbarSearches.html]] (//save as//) to your bookmark list and try {{{leo hello}}} in address bar.\n#use "save as" on [[template-bookmarks|firefoxAddressbarSearches.html]]\n#open Firefox's //Manage Bookmarks//, then //File -> Import//, choose the file you just saved\n#open a new tab then type "def hummel" in your address bar\nEnjoy!\n\n!Customized\nFollow this step-by-step guide to create your own bookmarks:\n*browse the engine, search for - lets say {{{SEARCHSTRING}}}\n*bookmark the resulting page\n*open preferences of created bookmark\n*replace {{{SEARCHSTRING}}} with {{{%s}}}\n*set a ''keyword''\n\n!example for dict.leo.org (german<>english dictionary - and more)\n|Name|search leo from firefox address bar (l SEARCHSTRING)|\n|Address|http://dict.leo.org/ende?lp=ende&lang=de&searchLoc=0&cmpType=relaxed&sectHdr=on&spellToler=on&search=''%s''&relink=on|\n|Keyword|l|\n|Description|LEO English/German Dictionary|
!How to open links like {{{irc://irc.freenode.de/ubuntu}}} with [[Xchat]] by one Click in [[Firefox]]\n\n*type ''about:config'' into the browser's address bar\n*rightclick and choose ''New > Boolean''\n*name: ''network.protocol-handler.external.irc''\n*value: ''true''.\n*create another entry ''String''\n*name: ''network.protocol-handler.app.irc''\n*value: ''xchat''
When downloading, I have to chose "browse for other folders". That sucks. Also in this dialog, Enter should be bound to "OK" and ESC to "Cancel".\n*https://bugzilla.mozilla.org/show_bug.cgi?id=366536
What a name. ;)\n!What?\nWhen your bookmarks toolbar is full, arrows will appear indicating, that there are more bookmarks than space to display them. You can click these arrows to list the remaining shortcuts OR you enable the Multi Row Bookmarks Toolbar! \n!Install\nGet [[Stylish]] and install it.\nThen go to //Tools// > //Add-Ons// and open Stylish's preferences.\nClick write, put {{{Multi-row bookmarks toolbar}}} in Description and paste following code:\n{{{\n#bookmarks-ptf {display:block !important; }\n#bookmarks-ptf toolbarseparator {display:inline !important; }\n#bookmarks-ptf .bookmark-item { visibility: visible !important;}\n#overflow-padder { width: auto !important; }\n#bookmarks-chevron { display: none !important; }\n}}}\n!Sources\nhttp://userstyles.org/style/show/70
|Reload|Ctr+R|\n|Force Reload (clear site's cache)|Ctrl+Shift+R|\n!Tabbing\n|Create New Tab|Ctrl+T|\n|Close Tab|Ctrl+W|\n|Cycle Tabs|Ctrl+Tab|\n|Go to Tab to the right|Ctrl+Page Down|\n|Go to Tab to the right|Ctrl+Page Up|
|level|1|2|\n|key|replay|new New York|
Access external download managers. Needs a standalone download manager like GWGet or FDM.\n[[https://addons.mozilla.org/firefox/220/]]
The newest flash player (or firefox plugin if you like) is proprierary software, so you need to EnableRepositories.\nAfter updating the package list, just type\n<<getPak flashplugin-nonfree>>\nand you are ready to go.
/***\n|''Name:''|ForEachTiddlerPlugin|\n|''Version:''|1.0.6 (2006-09-16)|\n|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|\n|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|\n|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|\n|''Copyright:''|&copy; 2005-2006 [[abego Software|http://www.abego-software.de]]|\n|''TiddlyWiki:''|1.2.38+, 2.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n!Description\n\nCreate customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.\n\n''Syntax:'' \n|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|\n|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|\n|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and {{{context}}}.|\n|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|\n|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]] is used.|\n|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|\n|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|\n\nSee details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].\n\n!Revision history\n* v1.0.6 (2006-09-16)\n** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.\n** Support "begin", "end" and "none" expressions in "write" action\n* v1.0.5 (2006-02-05)\n** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.\n** Support Firefox 1.5.0.1\n** Internal\n*** Make "JSLint" conform\n*** "Only install once"\n* v1.0.4 (2006-01-06)\n** Support TiddlyWiki 2.0\n* v1.0.3 (2005-12-22)\n** Features: \n*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) \n*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)\n** Enhancements:\n*** Improved error messages on InternetExplorer.\n* v1.0.2 (2005-12-10)\n** Features: \n*** context object also holds reference to store (TiddlyWiki)\n** Fixed Bugs: \n*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)\n* v1.0.1 (2005-12-08)\n** Features: \n*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".\n*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.\n*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).\n*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .\n*** Improved script evaluation (for where/sort clause and write scripts).\n* v1.0.0 (2005-11-20)\n** initial version\n\n!Code\n***/\n//{{{\n\n \n//============================================================================\n//============================================================================\n// ForEachTiddlerPlugin\n//============================================================================\n//============================================================================\n\n// Only install once\nif (!version.extensions.ForEachTiddlerPlugin) {\n\nif (!window.abego) window.abego = {};\n\nversion.extensions.ForEachTiddlerPlugin = {\n major: 1, minor: 0, revision: 6, \n date: new Date(2006,8,16), \n source: "http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin",\n licence: "[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",\n copyright: "Copyright (c) abego Software GmbH, 2005-2006 (www.abego-software.de)"\n};\n\n// For backward compatibility with TW 1.2.x\n//\nif (!TiddlyWiki.prototype.forEachTiddler) {\n TiddlyWiki.prototype.forEachTiddler = function(callback) {\n for(var t in this.tiddlers) {\n callback.call(this,t,this.tiddlers[t]);\n }\n };\n}\n\n//============================================================================\n// forEachTiddler Macro\n//============================================================================\n\nversion.extensions.forEachTiddler = {\n major: 1, minor: 0, revision: 5, date: new Date(2006,2,5), provider: "http://tiddlywiki.abego-software.de"};\n\n// ---------------------------------------------------------------------------\n// Configurations and constants \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler = {\n // Standard Properties\n label: "forEachTiddler",\n prompt: "Perform actions on a (sorted) selection of tiddlers",\n\n // actions\n actions: {\n addToList: {},\n write: {}\n }\n};\n\n// ---------------------------------------------------------------------------\n// The forEachTiddler Macro Handler \n// ---------------------------------------------------------------------------\n\nconfig.macros.forEachTiddler.getContainingTiddler = function(e) {\n while(e && !hasClass(e,"tiddler"))\n e = e.parentNode;\n var title = e ? e.getAttribute("tiddler") : null; \n return title ? store.getTiddler(title) : null;\n};\n\nconfig.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n // config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);\n\n if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);\n // --- Parsing ------------------------------------------\n\n var i = 0; // index running over the params\n // Parse the "in" clause\n var tiddlyWikiPath = undefined;\n if ((i < params.length) && params[i] == "in") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "TiddlyWiki path expected behind 'in'.");\n return;\n }\n tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the where clause\n var whereClause ="true";\n if ((i < params.length) && params[i] == "where") {\n i++;\n whereClause = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the sort stuff\n var sortClause = null;\n var sortAscending = true; \n if ((i < params.length) && params[i] == "sortBy") {\n i++;\n if (i >= params.length) {\n this.handleError(place, "sortClause missing behind 'sortBy'.");\n return;\n }\n sortClause = this.paramEncode(params[i]);\n i++;\n\n if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {\n sortAscending = params[i] == "ascending";\n i++;\n }\n }\n\n // Parse the script\n var scriptText = null;\n if ((i < params.length) && params[i] == "script") {\n i++;\n scriptText = this.paramEncode((i < params.length) ? params[i] : "");\n i++;\n }\n\n // Parse the action. \n // When we are already at the end use the default action\n var actionName = "addToList";\n if (i < params.length) {\n if (!config.macros.forEachTiddler.actions[params[i]]) {\n this.handleError(place, "Unknown action '"+params[i]+"'.");\n return;\n } else {\n actionName = params[i]; \n i++;\n }\n } \n \n // Get the action parameter\n // (the parsing is done inside the individual action implementation.)\n var actionParameter = params.slice(i);\n\n\n // --- Processing ------------------------------------------\n try {\n this.performMacro({\n place: place, \n inTiddler: tiddler,\n whereClause: whereClause, \n sortClause: sortClause, \n sortAscending: sortAscending, \n actionName: actionName, \n actionParameter: actionParameter, \n scriptText: scriptText, \n tiddlyWikiPath: tiddlyWikiPath});\n\n } catch (e) {\n this.handleError(place, e);\n }\n};\n\n// Returns an object with properties "tiddlers" and "context".\n// tiddlers holds the (sorted) tiddlers selected by the parameter,\n// context the context of the execution of the macro.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {\n\n var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);\n\n var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;\n context["tiddlyWiki"] = tiddlyWiki;\n \n // Get the tiddlers, as defined by the whereClause\n var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);\n context["tiddlers"] = tiddlers;\n\n // Sort the tiddlers, when sorting is required.\n if (parameter.sortClause) {\n this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);\n }\n\n return {tiddlers: tiddlers, context: context};\n};\n\n// Returns the (sorted) tiddlers selected by the parameter.\n//\n// The action is not yet performed.\n//\n// @parameter see performMacro\n//\nconfig.macros.forEachTiddler.getTiddlers = function(parameter) {\n return this.getTiddlersAndContext(parameter).tiddlers;\n};\n\n// Performs the macros with the given parameter.\n//\n// @param parameter holds the parameter of the macro as separate properties.\n// The following properties are supported:\n//\n// place\n// whereClause\n// sortClause\n// sortAscending\n// actionName\n// actionParameter\n// scriptText\n// tiddlyWikiPath\n//\n// All properties are optional. \n// For most actions the place property must be defined.\n//\nconfig.macros.forEachTiddler.performMacro = function(parameter) {\n var tiddlersAndContext = this.getTiddlersAndContext(parameter);\n\n // Perform the action\n var actionName = parameter.actionName ? parameter.actionName : "addToList";\n var action = config.macros.forEachTiddler.actions[actionName];\n if (!action) {\n this.handleError(parameter.place, "Unknown action '"+actionName+"'.");\n return;\n }\n\n var actionHandler = action.handler;\n actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);\n};\n\n// ---------------------------------------------------------------------------\n// The actions \n// ---------------------------------------------------------------------------\n\n// Internal.\n//\n// --- The addToList Action -----------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n\n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);\n return;\n }\n\n // Perform the action.\n var list = document.createElement("ul");\n place.appendChild(list);\n for (var i = 0; i < tiddlers.length; i++) {\n var tiddler = tiddlers[i];\n var listItem = document.createElement("li");\n list.appendChild(listItem);\n createTiddlyLink(listItem, tiddler.title, true);\n }\n};\n\nabego.parseNamedParameter = function(name, parameter, i) {\n var beginExpression = null;\n if ((i < parameter.length) && parameter[i] == name) {\n i++;\n if (i >= parameter.length) {\n throw "Missing text behind '%0'".format([name]);\n }\n \n return config.macros.forEachTiddler.paramEncode(parameter[i]);\n }\n return null;\n}\n\n// Internal.\n//\n// --- The write Action ---------------------------------------------------\n//\nconfig.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {\n // Parse the parameter\n var p = 0;\n if (p >= parameter.length) {\n this.handleError(place, "Missing expression behind 'write'.");\n return;\n }\n\n var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n\n // Parse the "begin" option\n var beginExpression = abego.parseNamedParameter("begin", parameter, p);\n if (beginExpression !== null) \n p += 2;\n var endExpression = abego.parseNamedParameter("end", parameter, p);\n if (endExpression !== null) \n p += 2;\n var noneExpression = abego.parseNamedParameter("none", parameter, p);\n if (noneExpression !== null) \n p += 2;\n\n // Parse the "toFile" option\n var filename = null;\n var lineSeparator = undefined;\n if ((p < parameter.length) && parameter[p] == "toFile") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");\n return;\n }\n \n filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));\n p++;\n if ((p < parameter.length) && parameter[p] == "withLineSeparator") {\n p++;\n if (p >= parameter.length) {\n this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");\n return;\n }\n lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);\n p++;\n }\n }\n \n // Check for extra parameters\n if (parameter.length > p) {\n config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);\n return;\n }\n\n // Perform the action.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);\n var count = tiddlers.length;\n var text = "";\n if (count > 0 && beginExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);\n \n for (var i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n text += func(tiddler, context, count, i);\n }\n \n if (count > 0 && endExpression)\n text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);\n\n if (count == 0 && noneExpression) \n text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);\n \n\n if (filename) {\n if (lineSeparator !== undefined) {\n lineSeparator = lineSeparator.replace(/\s\sn/mg, "\sn").replace(/\s\sr/mg, "\sr");\n text = text.replace(/\sn/mg,lineSeparator);\n }\n saveFile(filename, convertUnicodeToUTF8(text));\n } else {\n var wrapper = createTiddlyElement(place, "span");\n wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);\n }\n};\n\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {\n return {\n place : placeParam, \n whereClause : whereClauseParam, \n sortClause : sortClauseParam, \n sortAscending : sortAscendingParam, \n script : scriptText,\n actionName : actionNameParam, \n actionParameter : actionParameterParam,\n tiddlyWikiPath : tiddlyWikiPathParam,\n inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.\n viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result\n };\n};\n\n// Internal.\n//\n// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of \n// the given path.\n//\nconfig.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {\n if (!idPrefix) {\n idPrefix = "store";\n }\n var lenPrefix = idPrefix.length;\n \n // Read the content of the given file\n var content = loadFile(this.getLocalPath(path));\n if(content === null) {\n throw "TiddlyWiki '"+path+"' not found.";\n }\n \n // Locate the storeArea div's\n var posOpeningDiv = content.indexOf(startSaveArea);\n var posClosingDiv = content.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1)) {\n throw "File '"+path+"' is not a TiddlyWiki.";\n }\n var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);\n \n // Create a "div" element that contains the storage text\n var myStorageDiv = document.createElement("div");\n myStorageDiv.innerHTML = storageText;\n myStorageDiv.normalize();\n \n // Create all tiddlers in a new TiddlyWiki\n // (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)\n var tiddlyWiki = new TiddlyWiki();\n var store = myStorageDiv.childNodes;\n for(var t = 0; t < store.length; t++) {\n var e = store[t];\n var title = null;\n if(e.getAttribute)\n title = e.getAttribute("tiddler");\n if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)\n title = e.id.substr(lenPrefix);\n if(title && title !== "") {\n var tiddler = tiddlyWiki.createTiddler(title);\n tiddler.loadFromDiv(e,title);\n }\n }\n tiddlyWiki.dirty = false;\n\n return tiddlyWiki;\n};\n\n\n \n// Internal.\n//\n// Returns a function that has a function body returning the given javaScriptExpression.\n// The function has the parameters:\n// \n// (tiddler, context, count, index)\n//\nconfig.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {\n var script = context["script"];\n var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";\n var fullText = (script ? script+";" : "")+functionText+";theFunction;";\n return eval(fullText);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {\n var result = [];\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);\n tiddlyWiki.forEachTiddler(function(title,tiddler) {\n if (func(tiddler, context, undefined, undefined)) {\n result.push(tiddler);\n }\n });\n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {\n var message = "Extra parameter behind '"+actionName+"':";\n for (var i = firstUnusedIndex; i < parameter.length; i++) {\n message += " "+parameter[i];\n }\n this.handleError(place, message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? -1 \n : +1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {\n var result = \n (tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) \n ? 0\n : (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)\n ? +1 \n : -1; \n return result;\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {\n // To avoid evaluating the sortClause whenever two items are compared \n // we pre-calculate the sortValue for every item in the array and store it in a \n // temporary property ("forEachTiddlerSortValue") of the tiddlers.\n var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);\n var count = tiddlers.length;\n var i;\n for (i = 0; i < count; i++) {\n var tiddler = tiddlers[i];\n tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);\n }\n\n // Do the sorting\n tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);\n\n // Delete the temporary property that holds the sortValue. \n for (i = 0; i < tiddlers.length; i++) {\n delete tiddlers[i].forEachTiddlerSortValue;\n }\n};\n\n\n// Internal.\n//\nconfig.macros.forEachTiddler.trace = function(message) {\n displayMessage(message);\n};\n\n// Internal.\n//\nconfig.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {\n var message ="<<"+macroName;\n for (var i = 0; i < params.length; i++) {\n message += " "+params[i];\n }\n message += ">>";\n displayMessage(message);\n};\n\n\n// Internal.\n//\n// Creates an element that holds an error message\n// \nconfig.macros.forEachTiddler.createErrorElement = function(place, exception) {\n var message = (exception.description) ? exception.description : exception.toString();\n return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);\n};\n\n// Internal.\n//\n// @param place [may be null]\n//\nconfig.macros.forEachTiddler.handleError = function(place, exception) {\n if (place) {\n this.createErrorElement(place, exception);\n } else {\n throw exception;\n }\n};\n\n// Internal.\n//\n// Encodes the given string.\n//\n// Replaces \n// "$))" to ">>"\n// "$)" to ">"\n//\nconfig.macros.forEachTiddler.paramEncode = function(s) {\n var reGTGT = new RegExp("\s\s$\s\s)\s\s)","mg");\n var reGT = new RegExp("\s\s$\s\s)","mg");\n return s.replace(reGTGT, ">>").replace(reGT, ">");\n};\n\n// Internal.\n//\n// Returns the given original path (that is a file path, starting with "file:")\n// as a path to a local file, in the systems native file format.\n//\n// Location information in the originalPath (i.e. the "#" and stuff following)\n// is stripped.\n// \nconfig.macros.forEachTiddler.getLocalPath = function(originalPath) {\n // Remove any location part of the URL\n var hashPos = originalPath.indexOf("#");\n if(hashPos != -1)\n originalPath = originalPath.substr(0,hashPos);\n // Convert to a native file format assuming\n // "file:///x:/path/path/path..." - pc local file --> "x:\spath\spath\spath..."\n // "file://///server/share/path/path/path..." - FireFox pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n // "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."\n // "file://server/share/path/path/path..." - pc network file --> "\s\sserver\sshare\spath\spath\spath..."\n var localPath;\n if(originalPath.charAt(9) == ":") // pc local file\n localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\s\s");\n else if(originalPath.indexOf("file:///") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(7));\n else if(originalPath.indexOf("file:/") === 0) // mac/unix local file\n localPath = unescape(originalPath.substr(5));\n else // pc network file\n localPath = "\s\s\s\s" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\s\s"); \n return localPath;\n};\n\n// ---------------------------------------------------------------------------\n// Stylesheet Extensions (may be overridden by local StyleSheet)\n// ---------------------------------------------------------------------------\n//\nsetStylesheet(\n ".forEachTiddlerError{color: #ffffff;background-color: #880000;}",\n "forEachTiddler");\n\n//============================================================================\n// End of forEachTiddler Macro\n//============================================================================\n\n\n//============================================================================\n// String.startsWith Function\n//============================================================================\n//\n// Returns true if the string starts with the given prefix, false otherwise.\n//\nversion.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.startsWith = function(prefix) {\n var n = prefix.length;\n return (this.length >= n) && (this.slice(0, n) == prefix);\n};\n\n\n\n//============================================================================\n// String.endsWith Function\n//============================================================================\n//\n// Returns true if the string ends with the given suffix, false otherwise.\n//\nversion.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.endsWith = function(suffix) {\n var n = suffix.length;\n return (this.length >= n) && (this.right(n) == suffix);\n};\n\n\n//============================================================================\n// String.contains Function\n//============================================================================\n//\n// Returns true when the string contains the given substring, false otherwise.\n//\nversion.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nString.prototype.contains = function(substring) {\n return this.indexOf(substring) >= 0;\n};\n\n//============================================================================\n// Array.indexOf Function\n//============================================================================\n//\n// Returns the index of the first occurance of the given item in the array or \n// -1 when no such item exists.\n//\n// @param item [may be null]\n//\nversion.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.indexOf = function(item) {\n for (var i = 0; i < this.length; i++) {\n if (this[i] == item) {\n return i;\n }\n }\n return -1;\n};\n\n//============================================================================\n// Array.contains Function\n//============================================================================\n//\n// Returns true when the array contains the given item, otherwise false. \n//\n// @param item [may be null]\n//\nversion.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n};\n\n//============================================================================\n// Array.containsAny Function\n//============================================================================\n//\n// Returns true when the array contains at least one of the elements \n// of the item. Otherwise (or when items contains no elements) false is returned.\n//\nversion.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAny = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (this.contains(items[i])) {\n return true;\n }\n }\n return false;\n};\n\n\n//============================================================================\n// Array.containsAll Function\n//============================================================================\n//\n// Returns true when the array contains all the items, otherwise false.\n// \n// When items is null false is returned (even if the array contains a null).\n//\n// @param items [may be null] \n//\nversion.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};\n//\nArray.prototype.containsAll = function(items) {\n for(var i = 0; i < items.length; i++) {\n if (!this.contains(items[i])) {\n return false;\n }\n }\n return true;\n};\n\n\n} // of "install only once"\n\n// Used Globals (for JSLint) ==============\n// ... DOM\n/*global document */\n// ... TiddlyWiki Core\n/*global convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, \n displayMessage, endSaveArea, hasClass, loadFile, saveFile, \n startSaveArea, store, wikify */\n//}}}\n\n\n/***\n!Licence and Copyright\nCopyright (c) abego Software ~GmbH, 2005 ([[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\n
Hi, Mawa!\n\nSince you encountered some problems viewing this page, I will give instructions @@only for you@@:\nThis is a TiddlyWiki and as you recognized it is a little different from what you have seen so far.\n!Tiddlers\nWhat you see here is a "Tiddler" -- a bit of information. These Tiddlers are linked with each other, so when you click on HelloThere, the HelloThere Tiddler will open if it isn't already.\nWhen you point on this Tiddler with your mouse cursor, some buttons will appear. Just click close and the Tiddler will vanish.\n!Tags\nTiddlers also have "tags". This is the English word for "Etikett". Maybe you want to know which firefox addons I wrote about. You can find Tiddlers tagged with <<tag addon>>.\n!Editing\nAnother interesting feature is the possibility to view the source code of every tiddler. If I had enabled it, you could also edit it, but I surely won't let you do so. :P\nSee for example how easy it is to ''mark something bold'' or [[insert a link|http://www.shibumi.org/eoti.htm]] by clicking "view" in the upper right of this tiddler.\nI hope you enjoyed this little text as much as I enjoyed writing it.\n\nso long (and greetings to eric)!
[[Torrent Search plugin|https://addons.mozilla.org/firefox/2607/]] for firefox
"If you use Firefox on more than one computer, you'll want Foxmarks. Install Foxmarks on each computer, and it will work silently in the background to keep your bookmarks synchronized. As a bonus, log in to my.foxmarks.com from any computer anywhere to access your bookmarks."\nYou will love it.\nhttps://addons.mozilla.org/firefox/2410/
!What's the mystery?\nWhen it came to [[setting video resolution|GrubStyling]] for my virtual terminals, I had no idea where the magic number "791" in the kernel option {{{vga=791}}} came from.\nLooking through the [[Framebuffer HOWTO|http://tldp.org/HOWTO/Framebuffer-HOWTO-5.html]], I figured I could convert the Hex Numbers from section "5.3 What VESA modes are available to me?" to decimal numbers. And guess what?\n!!791 = 0x317 = 1024x768 @ 16Bit\nAccording to [[the vesa mode table|http://tldp.org/HOWTO/Framebuffer-HOWTO-5.html#ss5.3]], {{{vga=791}}} means nothing more than 1024x768 at 16 Bits. I decided to convert this table to decimal values:\n|!Colors / Resolution| 640x400 | 640x480 | 800x600 | 1024x768 | 1152x864 | 1280x1024 | 1600x1200 |\n| 4 bits| / | / | 770 | / | / | / | / |\n| 8 bits| 768 | 769 | 771 | 773 | 353 | 775 | 796 |\n| 15 bits| / | 784 | 787 | 790 | 354 | 793 | 797 |\n| 16 bits| / | 785 | 788 | 791 | 355 | 794 | 798 |\n| 24 bits| / | 786 | 789 | 792 | / | 795 | 799 |\n| 32 bits| / | / | / | / | 356 | / | / |\nSo if you need a console with 1600x1200 pixels and 24 bit color depth, then add {{{vga=799}}} to your kernel options.\n!What Is A Framebuffer\nIt's like a map where every pixel gets it's own color (and sometimes transparency).\nImagine your monitor had only four pixels and they could display 2 colors (black or white). Let's say we encode black with 0 and white with 1. Then the framebuffer for a black screen would be:\n{{{\n0 0\n0 0\n}}}\n!Sources\nhttp://en.wikipedia.org/wiki/Framebuffer\nhttp://tldp.org/HOWTO/Framebuffer-HOWTO-5.html
http://creativecommons.org/\n[[Wikipedia - Free Software|http://de.wikipedia.org/wiki/Freie_Software]]\ndirect links to the various software license entries in wikipedia:\n*GPL\n*[[Copyright|http://de.wikipedia.org/wiki/Copyright]]\n*[[Copyleft|http://de.wikipedia.org/wiki/Copyleft]]\n*[[Public Domain|http://de.wikipedia.org/wiki/Public_Domain]]\n*[[BSDL|http://de.wikipedia.org/wiki/BSD-Lizenz]]\n**[[Apache-Lizenz|http://de.wikipedia.org/wiki/Apache-Lizenz]]\n**[[MIT-Lizenz|http://de.wikipedia.org/wiki/MIT-Lizenz]]\n*[[Freeware|http://de.wikipedia.org/wiki/Freeware]]\n*[[Eclipse Public License|http://en.wikipedia.org/wiki/Eclipse_Public_License]]\n"[...] the receiver of EPL-licensed programs can use, modify, copy and distribute the work and the modified versions."
"This extension will provide core functions for keyboard operation."\nFor example you can bind "Copy current URL" to a hotkey.\nhttps://addons.mozilla.org/firefox/1537/\nRequires [[Keyconfig]]
[[GNU is Not Unix|http://www.gnu.org]] and what most people call "Linux" shortly is more precisely [[GNU/Linux|http://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html]] -- a combination of the [[Linux Kernel|http://kernel.org/]] and [[free software|http://www.gnu.org/software/]]. Richard Stallman wrote [[an article|http://www.gnu.org/gnu/why-gnu-linux.html]] about the importance to distinguish between Linux and GNU/Linux.\nGNU actually is a free complete Unix software system (see the [[about section at gnu.org|http://www.gnu.org/gnu/]]).\nThe GNU-Linux distribution I currently use as a productive environment is [[Ubuntu]].
A graphical user interface for the {{{wget}}} downloader\n<<getPak gwget>>
[[Gaim|http://gaim.sourceforge.net/about.php]] is a cross-platform instant messenger for AIM/ICQ, MSN Messenger, Yahoo!, IRC, Jabber, ...\n<<getPak gaim>>\n*make gaim not to show contact list at startup\n**<<getPak gaim-extendedprefs>>\n*notification popup\n**<<getPak gaim-guifications>>\nfor win users: http://gaim.sourceforge.net/plugins.php
*make gaim not to show contact list at startup\n**<<getPak gaim-extendedprefs>>
!free linux games and abandongames - really free games\n|!game|!description|\n|barrage|moorhuhn with artillery, too brutal for younger kids|\n|abuse|alien-style Jump'n'Run|\n|FlashBack|best platformer ever (besides super mario)|\n|holotz castle|nice jumpnrun|\n|billard_gl|killed my notebook-gnome|\n|briquolo|sucks|\n|kq|final fantasy style, longsome animations|
!Roadmap\n# Create Mime Type\n# Copy Highlighting File\n!Create Mime Type\nAdd the following lines to {{{~/.local/share/mime/packages/Overrides.xml}}}:\n{{{\n<?xml version='1.0'?>\n<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>\n <mime-type type="text/txt2tags">\n <comment>txt2tags markup file</comment>\n <alias type="text/t2t"/>\n <glob pattern="*.t2t"/>\n </mime-type>\n</mime-info>\n}}}\nUpdate mime types with {{{update-mime-database ~/.local/share/mime/}}}.\nFor global changes, edit {{{/usr/share/mime/packages/Overrides.xml}}} and do {{{update-mime-database /usr/share/mime}}}.\n!Copy Highlighting File\nThanks, Stefano!\nJust copy [[this file|./files/txt2tags.lang]] to {{{:~/.gnome2/gtksourceview-1.0/language-specs}}}.\n!Sources\nhttp://www.gnome.org/learn/admin-guide/latest/mimetypes-modifying.html\nhttp://textmethod.com/wiki/ReStructuredTextToolsForGedit\nhttp://www.regular-expressions.info/reference.html\nhttp://sourceforge.net/mailarchive/message.php?msg_name=1181733636.6458.3.camel%40amilo
/***\n|''Name:''|ExamplePlugin|\n|''Description:''|To demonstrate how to write TiddlyWiki plugins|\n|''Version:''|2.0.3|\n|''Date:''|Sep 22, 2006|\n|''Source:''|http://www.tiddlywiki.com/#ExamplePlugin|\n|''Author:''|JeremyRuston (jeremy (at) osmosoft (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n!History\n* 26-Oct-06, initial version\n\n!Examples\n|!Source|!Output|h\n|{{{<<getPak>>}}}|<<getPak>>|\n|{{{<<getPak package-gnome>>}}}|<<getPak package-gnome>>|\n|{{{<<getPak package-gnome 'gnome is a desktop manager'>>}}}|<<getPak package-gnome 'gnome is a desktop manager'>>|\n\n(You can use (single or double) quotes or double square brackets for params with spaces)\n\n!Code\n***/\n//{{{\nconfig.macros.getPak = {};\nconfig.macros.getPak.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var packet = params.length > 0 ? params[0] : "sorry, incomplete";\n var comment = params.length > 1 ? params[1] : "" ;\n wikify(comment,place);\n wikify("{{{\snsudo apt-get install " + packet + "\sn}}}",place);\n}\n//}}}
!Tiddler Theory\nTiddlers are chunks of information. You are currently reading a Tiddler's content.\nEvery Tiddler can have //tags// describing it. If you open a tag, you get a list of other Tiddlers with related content. This Tiddler is tagged with <<tag guidance>> - click it!\n!Experiment!\nClick here, click there -- you can't break anything... Read something... Follow the links, that seem interesting... Drop [[me|FelixHummel]] a message... Experiment!\n!References\nIf you stumble upon a Tiddler that seems "out of context" then click the "references" button in the upper right. Up pops a list of Tiddlers linking to the one you are currently reading.\n!Let Me Guide You!\nThough dynamic site navigation is a wonderful thing, most people (like me) need a little structure, someone who holds their hands. So here is a list of topics:\n*If you want to get started with GNU/Linux, you may find my experiences useful. See the <<tag edgy>> tag and check out UbuntuFromScratch!\n*Browse my favorite [[open source applications|app]]!\n*Working with Ubuntu, I created some [[howtos about various topics|howto]].\n*Tiddlers tagged with <<tag contentPublisher>> contain links to sites that offer plugins for TiddlyWiki.
GladeGen for Python can generate a python program skeleton from a "Glade User Interface Builder" file.\nget it here:\n[[Rapid Application Development with Python and Glade Resources|http://www.linuxjournal.com/article/7558]]
One of Ubuntu's desktops.\nhttp://www.gnome.org/
Why do I have to press ALT+B in Gnome's "Save As..." dialog just to view other files.\nWhy can't I hide/unhide files with CTRL-H?
!Customize Shortcuts\nI like GC a lot - I come from Total Commander and I only miss one thing:\nThe ability to customize shortcuts made Total Commander superior to every other two-pane file manager I encountered.\nI could easily choose that <ctrl>+<left> sent the directory on the right to the left pane.\n\nA configuration menu like this would be great:\n| Function | Shortcut |\n| new ftp connection | ctrl+alt+f |\n| another_function | ctrl+a |\n\nsome further thoughts about this dialog:\n* keyboard-support (like various games provide)\n** <up>/<down> navigate through the list\n** <enter> lets user input a key combination (assign-mode)\n** <esc> escapes leaving shortcut as is\n** <del> when not in assign-mode clears a shortcut\n* mouse-hovering shows a tooltip with longer description what a function does\n!Enhanced File Transfer Status Window\n!!Current status\n[img[./img/GC-status-window.png]]\n!!Wish\n*transfer rate (human readable, like 200 kB/s or 3 GB/s)\n*estimated time remaining in HH:MM:SS\n!Console Style Directory Choser\nNautilus has a nice and fast way for accessing directories: Hit Ctrl+L, type {{{/ho<tab>}}} and it completes to /home/.\nIn TC, there is an "address bar" above the file panes. In GC, this is not writeable. Why?
My favorite CD recording tool.\n{{{\nsudo apt-get install gnomebaker cdrecord cdda2wav gstreamer0.8-m ad gstreamer0.8-misc gstreamer0.8-lame mpg123\n}}}\nsources:\nhttp://wiki.ubuntuusers.de/CDs_brennen
*how to restart X11 if ctrl+alt+backspace does not work\n**{{{sudo /etc/init.d/gdm restart}}}\n*how to bind custom shortcuts\n**see ShortcutUser
/***\n|''Name:''|GotoPlugin|\n|''Source:''|http://www.TiddlyTools.com/#GotoPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\n''View a tiddler by typing its title and pressing //enter//.'' Input just enough to uniquely match a single tiddler title and ''press //enter// to auto-complete the title for you!!'' If multiple titles match your input, a list is displayed. You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press //escape// to close the listbox to resume typing. When the listbox is ''//not//'' being displayed, press //escape// to clear the current text input and start over.\n\nNote: ''At any time, you can move the focus directly to the text input field by using the ~ALT-G keyboard shortcut.''\n!!!!!Example\n<<<\nsyntax: {{{<<goto quiet inputstyle liststyle>>}}}\nAll parameters are optional.\n* ''quiet'' prevents //automatic// display of the list as each character is typed. To view the list when ''quiet'', use //down// or //enter//.\n* ''inputstyle'' and ''liststyle'' are CSS declarations that modify the default input and listbox styles. Note: styles containing spaces must be surrounded by ({{{"..."}}} or {{{'...'}}}) or ({{{[[...]]}}}).\n{{{<<goto>>}}}\n<<goto>>\n{{{<<goto quiet>>}}}\n<<goto quiet>>\n{{{<<goto width:20em width:20em>>}}}\n<<goto width:20em width:20em>>\n<<<\n!!!!!Configuration\n<<<\nThe following ~TiddlyWiki search options (see AdvancedOptions) are applied when matching tiddler titles:\n><<option chkRegExpSearch>> use regular expressions (text patterns)\n><<option chkCaseSensitiveSearch>> use case sensitive matching\nYou can also create a tiddler tagged with <<tag systemConfig>> to control listing of tiddlers/shadows/tags, as well as the maximum height of the listbox. //The default values are shown below://\n//{{{\nconfig.macros.goto.includeTiddlers=true;\nconfig.macros.goto.includeShadows=true;\nconfig.macros.goto.includeTags=true;\nconfig.macros.goto.listMaxSize=10;\n//}}}\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''GotoPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revisions\n<<<\n''2006.05.10 [1.1.2]'' when filling listbox, set selection to 'heading' item... auto-select first tiddler title when down/enter moves focus into listbox\n''2006.05.08 [1.1.1]'' added accesskey ("G") to input field html (also set when field gets focus). Also, inputKeyHandler() skips non-printing/non-editing keys. \n''2006.05.08 [1.1.0]'' added heading to listbox for better feedback (also avoids problems with 1-line droplist)\n''2006.05.07 [1.0.0]'' list matches against tiddlers/shadows/tags. input field auto-completion... 1st enter=complete matching input (or show list)... 2nd enter=view tiddler. optional "quiet" param controls when listbox appears.\n''2006.05.06 [0.5.0]'' added handling for enter (13), escape(27), and down(40) keys. Change 'ondblclick' to 'onclick' for list handler to view tiddlers (suggested by Florian Cauvin - prevents unintended trigger of tiddler editor). shadow titles inserted into list instead of appended to the end.\n''2006.05.05 [0.0.0]'' started\n<<<\n!!!!!Credits\n>This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n!!!!!Code\n***/\n//{{{\nversion.extensions.goto= {major: 1, minor: 1, revision: 2, date: new Date(2006,5,10)};\nconfig.macros.goto= { \n handler:\n function(place,macroName,params) {\n var quiet=(params[0] && params[0]=="quiet"); if (quiet) params.shift();\n var instyle=params.shift(); if (!instyle) instyle="";\n var liststyle=params.shift(); if (!liststyle) liststyle="";\n createTiddlyElement(place,"span").innerHTML\n =this.html.replace(/%quiet%/,quiet).replace(/%instyle%/,instyle).replace(/%liststyle%/,liststyle);\n },\n\n html:\n '<form onsubmit="return false" style="display:inline;margin:0;padding:0">\s\n <input name=goto type=text autocomplete="off" accesskey="G" style="%instyle%"\s\n title="enter a tiddler title"\s\n onfocus="this.setAttribute(\s'accessKey\s',\s'G\s'); this.select();"\s\n onkeyup="return config.macros.goto.inputKeyHandler(event,this,this.form.list,%quiet%);">\s\n <select name=list style="%liststyle%;display:none;position:absolute"\s\n onchange="if (!this.selectedIndex) this.selectedIndex=1;"\s\n onblur="this.style.display=\s'none\s';"\s\n onkeyup="return config.macros.goto.selectKeyHandler(event,this,this.form.goto);"\s\n onclick="return config.macros.goto.openItem(this.value,this.form.goto,this);">\s\n </select>\s\n </form>',\n \n getItems:\n function() {\n var items=[];\n var tiddlers=store.reverseLookup("tags","excludeSearch",false,"title");\n if (this.includeTiddlers) for(var t=0; t<tiddlers.length; t++) items.push(tiddlers[t].title);\n if (this.includeShadows) for (var t in config.shadowTiddlers) items.pushUnique(t);\n if (this.includeTags) { var tags=store.getTags(); for(var t=0; t<tags.length; t++) items.pushUnique(tags[t][0]); }\n return items;\n },\n includeTiddlers: true, includeShadows: true, includeTags: true,\n\n getItemSuffix:\n function(t) {\n if (store.tiddlerExists(t)) return ""; // tiddler\n if (store.isShadowTiddler(t)) return " (shadow)"; // shadow\n return " (tag)"; // tag \n },\n\n openItem:\n function(title,here,list) {\n if (!title.length) return; here.value=title; list.style.display='none'; story.displayTiddler(null,title); return false;\n },\n\n inputKeyHandler:\n function(event,here,list,quiet) {\n var key=event.keyCode;\n // non-printing chars... bubble up, except: backspace=8, enter=13, escape=27, space=32, down=40, delete=46\n if (key<48) switch(key) { case 8: case 13: case 27: case 32: case 40: case 46: break; default: return true; }\n // escape... hide list (2nd esc=reset input)\n if (key==27) { if (list.style.display=="none") here.value=here.defaultValue; else list.style.display="none"; return false; }\n // blank input... if down/enter... fall through (list all)... else, hide list\n if (!here.value.length && !(key==40 || key==13)) { list.style.display="none"; return false; }\n // find matching items...\n var pattern=config.options.chkRegExpSearch?here.value:here.value.escapeRegExp();\n var re=new RegExp(pattern,config.options.chkCaseSensitiveSearch?"mg":"img");\n var found = []; var items=this.getItems(); for(var t=0; t<items.length; t++) if(items[t].search(re)!=-1) found.push(items[t]);\n // matched one item... enter... not *exact* match... autocomplete input field\n if (found.length==1 && quiet && key==13 && here.value!=found[0]) { list.style.display="none"; here.value=found[0]; return false; }\n // no match/exact match... enter... create/show it\n if (found.length<2 && key==13) return this.openItem(found.length?found[0]:here.value,here,list);\n // quiet/no match... hide list...\n list.style.display=(!quiet && found.length)?"block":"none";\n // no matches... key bubbles up\n if (!found.length) return true;\n // down/enter... show/move to list...\n if (key==40 || key==13) { list.style.display="block"; list.focus(); }\n // list is showing... fill list...\n if (list.style.display!="none") {\n while (list.length > 0) list.options[0]=null; // clear list...\n found.sort();\n list.options[0]=new Option(found.length==1?this.listMatchMsg:this.listHeading.format([found.length]),"",false,false);\n for (var t=0; t<found.length; t++) // fill list...\n list.options[t+1]=new Option(found[t]+this.getItemSuffix(found[t]),found[t],false,false);\n list.size=(found.length<this.listMaxSize?found.length:this.listMaxSize)+1; // resize list...\n list.selectedIndex=(key==40 || key==13)?1:0;\n }\n return true; // key bubbles up\n },\n listMaxSize: 10,\n listHeading: 'Found %0 matching titles:',\n listMatchMsg: 'Press enter to open tiddler...',\n\n selectKeyHandler:\n function(event,list,editfield) {\n if (event.keyCode==27) // escape... hide list, move to edit field\n { editfield.focus(); list.style.display="none"; return false; }\n if (event.keyCode==13 && list.value.length) // enter... view selected item\n { this.openItem(list.value,editfield,list); return false; }\n return true;\n }\n}\n//}}}
!Situation\nGrub registered in MBR of hda (SV1604N), but it's data is on hdb (WD300).\nThe MBR-Entry is supposed to be on the WD300 and Windows must be made bootable.\n!Solution\n{{{\ngrub-install /dev/hdb\n}}}\n{{{vi /boot/grub/menu.lst}}} -> replace windows-boot-entry with following (make Windows believe it was on the master harddisk):\n{{{\nmap (hd0) (hd1)\nmap (hd1) (hd0)\nroot (hd1,0)\nsavedefault\nmakeactive\nchainloader +1\n}}}\n!Sources\n*http://www.fifi.org/doc/grub-doc/html/grub_4.html#SEC21
Styling Grub requires you to edit one file:\n{{{\nsudo vim /boot/grub/menu.lst\n}}}\n!Disable the ugly boot bitmap\nSearch {{{defoptions=quiet splash}}} and replace {{{quiet splash}}} with {{{nosplash vga=791}}} (be sure ''not to'' remove the {{{#}}} at the beginning).\nWith {{{vga=791}}} the kernel uses a so called FrameBuffer for the console making higher resolutions available.\n!!Reinitialize Grub\nExecute {{{sudo update-grub}}} to make your changes effective.\n!Matrix colors\nSearch this line:\n{{{#color cyan/blue white/blue }}} \nand replace it with \n{{{color green/black black/green}}}.\nBe sure to remove the hash before color (it's a comment - who would have guessed).
*connect and switch on\n*go to System > Administration > Printing\n*click //New Printer//\n*accept everything (HL-2060 with driver hl1250 are ok)\n*right click and //Make Default//\nsources:\nhttp://wiki.ubuntuusers.de/Brother_HL-2030
!Configuration\n\n!Notes\nhellanzb.py\npaster serve hella.ini\n!Sources\nhttp://www.hellanzb.com/trac/\nhttp://hellanzb.com/trac/hellanzb/wiki/HellaHella\nhttp://ubuntuforums.org/showthread.php?t=169749
Welcome to FelixHummelTiddlyWiki!\n!You have come to the right place\n*if you are a windows power user (like I was) and want to give GNU-Linux a try.\n*if you are a [[Ubuntu]] user.\n*if you like [[Firefox]] and want to get inspiration what add-ons to use.\n*if you are curious about what other people do in their spare time.\n!You want to know\n*[[how to navigate this site|GettingStarted]]?\n*[[what the author's intention is|MyIntention]]?\nTo get a closer look at the contents of this site, see the GettingStarted Tiddler.\n\nPlease note that this Wiki is in a very early stage of development, so you will stumble across some construction sites.\n\nI would like to thank Jeremy Ruston for creating TiddlyWiki. It is such a beautiful tool for digitizing and sorting bits of information.\nAlso thanks to Simon Baird for his MonkeyPirateTiddlyWiki distribution!
/***\n| Name:|HideWhenPlugin|\n| Description:|Allows conditional inclusion/exclusion in templates|\n| Version:|6.1.2|\n| Date:|20-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\nFor use in ViewTemplate and EditTemplate. Eg\n{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}\n{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}\n***/\n//{{{\n\nwindow.removeElementWhen = function(test,place) {\n if (test) {\n removeChildren(place);\n place.parentNode.removeChild(place);\n }\n};\n\nmerge(config.macros,{\n\n hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( eval(paramString), place);\n }},\n\n showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !eval(paramString), place);\n }},\n\n hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAll(params), place);\n }},\n\n showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAll(params), place);\n }},\n\n hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( tiddler.tags.containsAny(params), place);\n }},\n\n showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !tiddler.tags.containsAny(params), place);\n }},\n\n hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);\n }},\n\n showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {\n removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);\n }}\n\n});\n\n//}}}\n\n
!Hardware\n100 Mbit/s Ethernet bus.\n!Entities\n|!Name|!Description|!IP (static)|\n|router|Netgear|10.1.2.33|\n|server|Fileserver|10.1.2.11|\n|whisper|client|10.1.2.1|\n|notebook|client|10.1.2.2|\n|lownoise|client|10.1.2.3|\n|erebus|client|10.1.2.4|\n|nyx|client|10.1.2.5|\n!!router\nA Netgear ~WGT624 provides Internet access (DSL) and wireless LAN.\n!!server\nAn old 500 ~MHz Pentium 3 provides a Fileserver (and eventually a profile (for winNT and linux) server).\n!Map\n{{{\n .~~~~~~~~~~. \n .-----------. +---| 0.0.0.0 | \n | router |<---+ | Internet |\n | 10.1.2.33 | '~~~~~~~~~~'\n '-----------' \n | \n +---------------+--------------+--------+-----+--------------+----------------+\n | | | | | |\n | | | | | .-----------.\n.----------. .----------. .----------. .----------. .----------. | server | \n| whisper | | notebook | | lownoise | | erebus | | nyx | | 10.1.2.11 | \n| 10.1.2.1 | | 10.1.2.2 | | 10.1.2.3 | | 10.1.2.4 | | 10.1.2.5 | '-----------' \n'----------' '----------' '----------' '----------' '----------'\n}}}
!Ubuntu Edgy Server Installation for Basic Home Use\nFirst [[install ssh daemon|OpenSSH]] for remote control.\n!!Fileserver\nInstall samba, swat and inetd\n<<getPak samba>>\n<<getPak swat>>\n<<getPak inetd>>\nMake inetd recognize swat\n{{{\nsudo update-inetd --enable 'swat'\n}}}\n!!!Sources\nhttp://www.ubuntuforums.org/showthread.php?t=58434&highlight=samba+swat\nhttps://help.ubuntu.com/community/Swat?highlight=%28swat%29\nhttp://ubuntuforums.org/showthread.php?t=335394&highlight=swat\n!!Profile Server
Simple script, that automatically backs up my remote index.html and uploads my newer version.\nEasy thing with {{{ftplib}}}, but to make things more complicated, I'll use [[gnomeVFS|http://www.pygtk.org/pygnomevfs/index.html]].\n!BASH-style\n{{{~/scripts/publish_to_my_ftp.sh}}}\n{{{\n#!/bin/sh\nSERVER="ftp.mydomain.xx"\n#uncomment, if you want to put your files in /html on the server:\n#DIR="/html" \nDIR="/"\nUSER="user"\nPASS="password"\nE_ARGERROR=65\n\nif [ -z "$1" ]\nthen\n echo "Usage: `basename $0` Filename-to-upload"\n exit $E_ARGERROR\nfi\n\necho '$1:'$1\n\nftp -i -v -n $SERVER <<End-Of-Session\nbinary\nuser $USER $PASS\nsend $1 $DIR/`basename $1`\n\nbye\nEnd-Of-Session\n\necho "$USER uploaded $1 to $SERVER$DIR"\nexit 0\n}}}\n!First Try (Discarded)\n*[[NVU]] provides a good way to publish pages\n*[[Nautilus]] can create Links to ftp sites\n**but these connections are... weak, buggy. Nautilus did not finish copying a file, but gftp worked.
!List of available hosts\nsee my HomeLAN setup\n{{{\nnmap -sP 10.1.2.0/24\n}}}
When right-clicking on a file, you get a list of possible operations. They can be found in\n{{{\nHKEY_CLASSES_ROOT\sAllFilesystemObjects\sshellex\sContextMenuHandlers\n}}}\nand\n{{{\nHKEY_CLASSES_ROOT\s*\sshellex\sContextMenuHandlers\n}}}\nThere can also be more type specific Entries in\n{{{\nHKEY_CLASSES_ROOT\s.<file name extension>\sshellex\sContextMenuHandlers\n}}}\nDon't forget the backup!\n!Sources c't 20/2004, page 213
In Ubuntu packets can be installed by several means:\n#use {{{gksu synaptic}}} (gtk, graphical)\n#use {{{sudo aptitude}}} (ncurses, graphical console)\n#use {{{sudo apt-get install PACKETNAME}}} (simple console)\n\nHere are some notes about the PackagingSystem:\n<<tiddler PackagingSystem>>
[[Integrated Development Environment|http://en.wikipedia.org/wiki/Integrated_development_environment]]
An [[IDE]] for python.\nThis is stupid.\nIDLE has a nice interpreter window -- I could use console as well. When I have done some things on the interactive window, I want to save. The tutorial says: "Let's do that by typing (or copy/pasting) those commands into our Program window."\nWhy would I need an IDE if I had to copy and paste my code anyways? I could also use the console -- absolutely stupid!\nIt would be rather useful if there was a function like "Copy everything I wrote to console to a new window" and a mode that let me easily delete redundancy.
Abbreviation for [[Instant Messaging|http://en.wikipedia.org/wiki/Instant_Messaging]].
<<importTiddlers inline>>
/***\n''Import Tiddlers Plugin for TiddlyWiki version 1.2.x, 2.0 and 2.1beta''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#ImportTiddlersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important. This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents. It can also be very useful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)\n\n!!!!!Interactive interface\n<<<\n{{{<<importTiddlers>>}}}\ncreates "import tiddlers" link. click to show/hide import control panel\n\n{{{<<importTiddlers inline>>}}}\ncreates import control panel directly in tiddler content\n\n<<importTiddlers inline>>\n\nPress ''[browse]'' to select a TiddlyWiki document file to import. You can also type in the path/filename or a remote document URL (starting with http://)and press ''[open]''. //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//\n\nSelect one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items). You can press ''[select all]'' to quickly highlight all tiddler titles in the list. Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time. When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.\n\n''select: all, new, changes, or differences''\n\nYou can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:\n>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document\n>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)\n\n''Import Tagging:''\n\nTiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document. New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.\n\n''Skip, Rename, Merge, or Replace:''\n\nWhen importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.\n\nTo bypass importing this tiddler, press ''[skip]''. To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''. Press ''[merge]'' to combine the content from both tiddlers into a single tiddler. Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.\n\n//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//\n\n''Import Report History''\n\nWhen tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.\n\nWhen the import process is completed, the ImportedTiddlers report is automatically displayed for your review. If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.\n\nIf a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.\n\nNote: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.\n\n<<<\n!!!!!non-interactive 'load tiddlers' macro\n<<<\nUseful for automated installation/update of plugins and other tiddler content.\n\n{{{<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>}}}\n<<loadTiddlers "label:load tiddlers from %0" http://www.tiddlytools.com/example.html confirm>>\n\nSyntax:\n{{{<<loadTiddlers label:text prompt:text filter source quiet confirm>>}}}\n\n''label:text'' and ''prompt:text''\n>defines link text and tooltip (prompt) that can be clicked to trigger the load tiddler processing. If a label is NOT provided, then no link is created and loadTiddlers() is executed whenever the containing tiddler is rendered.\n''filter'' (optional) determines which tiddlers will be automatically selected for importing. Use one of the following keywords:\n>''"all"'' retrieves ALL tiddlers from the import source document, even if they have not been changed.\n>''"new"'' retrieves only tiddlers that are found in the import source document, but do not yet exist in the destination document\n>''"changes"'' retrieves only tiddlers that exist in both documents for which the import source tiddler is newer than the existing tiddler\n>''"updates"'' retrieves both ''new'' and ''changed'' tiddlers (this is the default action when none is specified)\n>''"tiddler:~TiddlerName"'' retrieves only the specific tiddler named in the parameter.\n>''"tag:text"'' retrieves only the tiddlers tagged with the indicated text.\n''source'' (required) is the location of the imported document. It can be either a local document path/filename in whatever format your system requires, or a remote web location (starting with "http://" or "https://")\n>use the keyword ''ask'' to prompt for a source location whenever the macro is invoked\n''"quiet"'' (optional)\n>supresses all status message during the import processing (e.g., "opening local file...", "found NN tiddlers..." etc). Note that if ANY tiddlers are actualy imported, a final information message will still be displayed (along with the ImportedTiddlers report), even when 'quiet' is specified. This ensures that changes to your document cannot occur without any visible indication at all.\n''"confirm"'' (optional)\n>adds interactive confirmation. A browser message box (OK/Cancel) is displayed for each tiddler that will be imported, so that you can manually bypass any tiddlers that you do not want to import.\n<<<\n!!!!!Installation\n<<<\ncopy/paste the following tiddlers into your document:\n''ImportTiddlersPlugin'' (tagged with <<tag systemConfig>>)\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add "< < ImportTiddlers > >" macro^^\n\n''Quick Installation Tip #1:''\nIf you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.\n<<<\n!!!!!Revision History\n<<<\n//wffl store.addNotification(null,refreshImportList); // \n\n''2006.08.16 [3.0.6]'' Use higher-level store.saveTiddler() instead of store.addTiddler() to avoid conflicts with ZW and other adaptations that hijack low-level tiddler handling. Also, in CreateImportPanel(), no longer register notify to "refresh listbox after every tiddler change" (left over from old 'auto-filtered' list handling). Thanks to Bob McElrath for report/solution.\n''2006.07.29 [3.0.5]'' added noChangeMsg to loadTiddlers processing. if not 'quiet' mode, reports skipped tiddlers.\n''2006.04.18 [3.0.4]'' in loadTiddlers.handler, fixed parsing of "prompt:" param. Also, corrected parameters mismatch in loadTiddlers() callback function definition (order of params was wrong, resulting in filters NOT being applied)\n''2006.04.12 [3.0.3]'' moved many display messages to macro properties for easier L10N translations via 'lingo' definitions.\n''2006.04.12 [3.0.2]'' additional refactoring of 'core candidate' code. Proposed API now defines "loadRemoteFile()" for XMLHttpRequest processing with built in fallback for handling local filesystem access, and readTiddlersFromHTML() to process the resulting source HTML content.\n''2006.04.04 [3.0.1]'' in refreshImportList(), when using [by tags], tiddlers without tags are now included in a new "untagged" psuedo-tag list section\n''2006.04.04 [3.0.0]'' Separate non-interactive {{{<<importTiddlers...>>}}} macro functionality for incorporation into TW2.1 core and renamed as {{{<<loadTiddlers>>}}} macro. New parameters for loadTiddlers: ''label:text'' and ''prompt:text'' for link creation, ''ask'' for filename/URL, ''tag:text'' for filtering, "confirm" for accept/reject of individual inbound tiddlers. Also, ImportedTiddlers report generator output has been simplified and "importReplace/importPublic" tags and associated "force" param (which were rarely, if ever, used) has been dropped.\n''2006.03.30 [2.9.1]'' when extracting store area from remote URL, look for "</body>" instead of "</body>\sn</html>" so it will match even if the "\sn" is absent from the source.\n''2006.03.30 [2.9.0]'' added optional 'force' macro param. When present, autoImportTiddlers() bypasses the checks for importPublic and importReplace. Based on a request from Tom Otvos.\n''2006.03.28 [2.8.1]'' in loadImportFile(), added checks to see if 'netscape' and 'x.overrideMimeType()' are defined (IE does *not* define these values, so we bypass this code)\nAlso, when extracting store area from remote URL, explicitly look for "</body>\sn</html>" to exclude any extra content that may have been added to the end of the file by hosting environments such as GeoCities. Thanks to Tom Otvos for finding these bugs and suggesting some fixes.\n''2006.02.21 [2.8.0]'' added support for "tiddler:TiddlerName" filtering parameter in auto-import processing\n''2006.02.21 [2.7.1]'' Clean up layout problems with IE. (Use tables for alignment instead of SPANs styled with float:left and float:right)\n''2006.02.21 [2.7.0]'' Added "local file" and "web server" radio buttons for selecting dynamic import source controls in ImportPanel. Default file control is replaced with URL text input field when "web server" is selected. Default remote document URL is defined in SiteURL tiddler. Also, added option for prepending SiteProxy URL as prefix to remote URL to mask cross-domain document access (requires compatible server-side script)\n''2006.02.17 [2.6.0]'' Removed "differences only" listbox display mode, replaced with selection filter 'presets': all/new/changes/differences. Also fixed initialization handling for "add new tags" so that checkbox state is correctly tracked when panel is first displayed.\n''2006.02.16 [2.5.4]'' added checkbox options to control "import remote tags" and "keep existing tags" behavior, in addition to existing "add new tags" functionality.\n''2006.02.14 [2.5.3]'' FF1501 corrected unintended global 't' (loop index) in importReport() and autoImportTiddlers()\n''2006.02.10 [2.5.2]'' corrected unintended global variable in importReport().\n''2006.02.05 [2.5.1]'' moved globals from window.* to config.macros.importTiddlers.* to avoid FireFox 1.5.0.1 crash bug when referencing globals\n''2006.01.18 [2.5.0]'' added checkbox for "create a report". Default is to create/update the ImportedTiddlers report. Clear the checkbox to skip this step.\n''2006.01.15 [2.4.1]'' added "importPublic" tag and inverted default so that auto sharing is NOT done unless tagged with importPublic\n''2006.01.15 [2.4.0]'' Added support for tagging individual tiddlers with importSkip, importReplace, and/or importPrivate to control which tiddlers can be overwritten or shared with others when using auto-import macro syntax. Defaults are to SKIP overwriting existing tiddlers with imported tiddlers, and ALLOW your tiddlers to be auto-imported by others.\n''2006.01.15 [2.3.2]'' Added "ask" parameter to confirm each tiddler before importing (for use with auto-importing)\n''2006.01.15 [2.3.1]'' Strip TW core scripts from import source content and load just the storeArea into the hidden IFRAME. Makes loading more efficient by reducing the document size and by preventing the import document from executing its TW initialization (including plugins). Seems to resolve the "Found 0 tiddlers" problem. Also, when importing local documents, use convertUTF8ToUnicode() to convert the file contents so support international characters sets.\n''2006.01.12 [2.3.0]'' Reorganized code to use callback function for loading import files to support event-driven I/O via an ASYNCHRONOUS XMLHttpRequest. Let's processing continue while waiting for remote hosts to respond to URL requests. Added non-interactive 'batch' macro mode, using parameters to specify which tiddlers to import, and from what document source. Improved error messages and diagnostics, plus an optional 'quiet' switch for batch mode to eliminate //most// feedback.\n''2006.01.11 [2.2.0]'' Added "[by tags]" to list of tiddlers, based on code submitted by BradleyMeck\n''2006.01.09 [2.1.1]'' When a URL is typed in, and then the "open" button is pressed, it generates both an onChange event for the file input and a click event for open button. This results in multiple XMLHttpRequest()'s which seem to jam things up quite a bit. I removed the onChange handling for file input field. To open a file (local or URL), you must now explicitly press the "open" button in the control panel.\n''2006.01.08 [2.1.0]'' IMPORT FROM ANYWHERE!!! re-write getImportedTiddlers() logic to either read a local file (using local I/O), OR... read a remote file, using a combination of XML and an iframe to permit cross-domain reading of DOM elements. Adapted from example code and techniques courtesy of Jonny LeRoy.\n''2006.01.06 [2.0.2]'' When refreshing list contents, fixed check for tiddlerExists() when "show differences only" is selected, so that imported tiddlers that don't exist in the current file will be recognized as differences and included in the list.\n''2006.01.04 [2.0.1]'' When "show differences only" is NOT checked, import all tiddlers that have been selected even when they have a matching title and date.\n''2005.12.27 [2.0.0]'' Update for TW2.0\nDefer initial panel creation and only register a notification function when panel first is created\n''2005.12.22 [1.3.1]'' tweak formatting in importReport() and add 'discard report' link to output\n''2005.12.03 [1.3.0]'' Dynamically create/remove importPanel as needed to ensure only one instance of interface elements exists, even if there are multiple instances of macro embedding. Also, dynamically create/recreate importFrame each time an external TW document is loaded for importation (reduces DOM overhead and ensures a 'fresh' frame for each document)\n''2005.11.29 [1.2.1]'' fixed formatting of 'detail info' in importReport()\n''2005.11.11 [1.2.0]'' added 'inline' param to embed controls in a tiddler\n''2005.11.09 [1.1.0]'' only load HTML and CSS the first time the macro handler is called. Allows for redundant placement of the macro without creating multiple instances of controls with the same ID's.\n''2005.10.25 [1.0.5]'' fixed typo in importReport() that prevented reports from being generated\n''2005.10.09 [1.0.4]'' combined documentation with plugin code instead of using separate tiddlers\n''2005.08.05 [1.0.3]'' moved CSS and HTML definitions into plugin code instead of using separate tiddlers\n''2005.07.27 [1.0.2]'' core update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet()\n''2005.07.23 [1.0.1]'' added parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]'' Initial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n// // ''MACRO DEFINITION''\n//{{{\n// Version\nversion.extensions.importTiddlers = {major: 3, minor: 0, revision: 6, date: new Date(2006,8,16)};\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onClickImportButton=onClickImportButton;\nwindow.refreshImportList=refreshImportList;\n\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\nconfig.macros.importTiddlers = { };\nconfig.macros.importTiddlers = {\n label: "import tiddlers",\n prompt: "Copy tiddlers from another document",\n foundMsg: "Found %0 tiddlers in %1",\n countMsg: "%0 tiddlers selected for import",\n importedMsg: "Imported %0 of %1 tiddlers from %2",\n src: "", // path/filename or URL of document to import (retrieved from SiteUrl tiddler)\n proxy: "", // URL for remote proxy script (retrieved from SiteProxy tiddler)\n useProxy: false, // use specific proxy script in front of remote URL\n inbound: null, // hash-indexed array of tiddlers from other document\n newTags: "", // text of tags added to imported tiddlers\n addTags: true, // add new tags to imported tiddlers\n listsize: 8, // # of lines to show in imported tiddler list\n importTags: true, // include tags from remote source document when importing a tiddler\n keepTags: true, // retain existing tags when replacing a tiddler\n index: 0, // current processing index in import list\n sort: "" // sort order for imported tiddler listbox\n};\n\nconfig.macros.importTiddlers.handler = function(place,macroName,params) {\n if (!config.macros.loadTiddlers.handler)\n { alert("importTiddlers error: this plugin requires LoadTiddlersPlugin or TiddlyWiki 2.1+"); return; }\n if (!params[0]) // LINK TO FLOATING PANEL\n createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);\n else if (params[0]=="inline") {// // INLINE TIDDLER CONTENT\n createImportPanel(place);\n document.getElementById("importPanel").style.position="static";\n document.getElementById("importPanel").style.display="block";\n }\n else config.macros.loadTiddlers.handler(place,macroName,params); // FALLBACK: PASS TO LOADTIDDLERS\n}\n//}}}\n\n// // ''INTERFACE DEFINITION''\n\n// // Handle link click to create/show/hide control panel\n//{{{\nfunction onClickImportMenu(e)\n{\n if (!e) var e = window.event;\n var parent=resolveTarget(e).parentNode;\n var panel = document.getElementById("importPanel");\n if (panel==undefined || panel.parentNode!=parent)\n panel=createImportPanel(parent);\n var isOpen = panel.style.display=="block";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n panel.style.display = isOpen ? "none" : "block" ;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n//}}}\n\n// // Create control panel: HTML, CSS\n//{{{\nfunction createImportPanel(place) {\n var panel=document.getElementById("importPanel");\n if (panel) { panel.parentNode.removeChild(panel); }\n setStylesheet(config.macros.importTiddlers.css,"importTiddlers");\n panel=createTiddlyElement(place,"span","importPanel",null,null)\n panel.innerHTML=config.macros.importTiddlers.html;\n refreshImportList();\n var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";\n document.getElementById("importSourceURL").value=siteURL;\n config.macros.importTiddlers.src=siteURL;\n var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";\n document.getElementById("importSiteProxy").value=siteProxy;\n config.macros.importTiddlers.proxy=siteProxy;\n return panel;\n}\n//}}}\n\n// // CSS\n//{{{\nconfig.macros.importTiddlers.css = '\s\n#importPanel {\s\n display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\s\n background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\s\n border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\s\n padding: 0.5em; margin:0em; -moz-border-radius:1em;\s\n}\s\n#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\s\n#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\s\n#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\s\n#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\s\n#importPanel input { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\s\n#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\s\n#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\s\n#importPanel .rad { width:auto; }\s\n#importPanel .chk { width:auto; margin:1px;border:0; }\s\n#importPanel .btn { width:auto; }\s\n#importPanel .btn1 { width:98%; }\s\n#importPanel .btn2 { width:48%; }\s\n#importPanel .btn3 { width:32%; }\s\n#importPanel .btn4 { width:24%; }\s\n#importPanel .btn5 { width:19%; }\s\n#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\s\n#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\s\n#importCollisionPanel { display:none; margin:0.5em 0em 0em 0em; }\s\n';\n//}}}\n\n// // HTML \n//{{{\nconfig.macros.importTiddlers.html = '\s\n<!-- source and report -->\s\n<table><tr><td align=left>\s\n import from\s\n <input type="radio" class="rad" name="importFrom" value="file" CHECKED\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=!this.checked?\s'block\s':\s'none\s'"> local file\s\n <input type="radio" class="rad" name="importFrom" value="http"\s\n onClick="document.getElementById(\s'importLocalPanel\s').style.display=!this.checked?\s'block\s':\s'none\s';\s\n document.getElementById(\s'importHTTPPanel\s').style.display=this.checked?\s'block\s':\s'none\s'"> web server\s\n</td><td align=right>\s\n <input type=checkbox class="chk" id="chkImportReport" checked\s\n onClick="config.options[\s'chkImportReport\s']=this.checked;"> create a report\s\n</td></tr></table>\s\n<!-- import from local file -->\s\n<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\nlocal document path/filename:<br>\s\n<input type="file" id="fileImportSource" size=57 style="width:100%"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<!-- import from http server -->\s\n<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\s\n<table><tr><td align=left>\s\n remote document URL:<br>\s\n</td><td align=right>\s\n <input type="checkbox" class="chk" id="importUseProxy"\s\n onClick="config.macros.importTiddlers.useProxy=this.checked;\s\n document.getElementById(\s'importSiteProxy\s').style.display=this.checked?\s'block\s':\s'none\s'"> use a proxy script\s\n</td></tr></table>\s\n<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\s\n onKeyUp="config.macros.importTiddlers.proxy=this.value"\s\n onChange="config.macros.importTiddlers.proxy=this.value;">\s\n<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\s\n onKeyUp="config.macros.importTiddlers.src=this.value"\s\n onChange="config.macros.importTiddlers.src=this.value;">\s\n</div><!--panel-->\s\n\s\n<table><tr><td align=left>\s\n select:\s\n <a href="JavaScript:;" id="importSelectAll"\s\n onclick="onClickImportButton(this)" title="select all tiddlers">\s\n &nbsp;all&nbsp;</a>\s\n <a href="JavaScript:;" id="importSelectNew"\s\n onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\s\n &nbsp;added&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectChanges"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\s\n &nbsp;changes&nbsp;</a> \s\n <a href="JavaScript:;" id="importSelectDifferences"\s\n onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\s\n &nbsp;differences&nbsp;</a> \s\n <a href="JavaScript:;" id="importToggleFilter"\s\n onclick="onClickImportButton(this)" title="show/hide selection filter">\s\n &nbsp;filter&nbsp;</a> \s\n</td><td align=right>\s\n <a href="JavaScript:;" id="importListSmaller"\s\n onclick="onClickImportButton(this)" title="reduce list size">\s\n &nbsp;&#150;&nbsp;</a>\s\n <a href="JavaScript:;" id="importListLarger"\s\n onclick="onClickImportButton(this)" title="increase list size">\s\n &nbsp;+&nbsp;</a>\s\n <a href="JavaScript:;" id="importListMaximize"\s\n onclick="onClickImportButton(this)" title="maximize/restore list size">\s\n &nbsp;=&nbsp;</a>\s\n</td></tr></table>\s\n<select id="importList" size=8 multiple\s\n onchange="setTimeout(\s'refreshImportList(\s'+this.selectedIndex+\s')\s',1)">\s\n <!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\s\n</select>\s\n<input type=checkbox class="chk" id="chkAddTags" checked\s\n onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags &nbsp;\s\n<input type=checkbox class="chk" id="chkImportTags" checked\s\n onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags &nbsp;\s\n<input type=checkbox class="chk" id="chkKeepTags" checked\s\n onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\s\n<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\s\n<div align=center>\s\n <input type=button id="importOpen" class="importButton" style="width:32%" value="open"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importStart" class="importButton" style="width:32%" value="import"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importClose" class="importButton" style="width:32%" value="close"\s\n onclick="onClickImportButton(this)">\s\n</div>\s\n<div id="importCollisionPanel">\s\n tiddler already exists:\s\n <input type=text id="importNewTitle" size=15 autocomplete=off">\s\n <div align=center>\s\n <input type=button id="importSkip" class="importButton" style="width:23%" value="skip"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importRename" class="importButton" style="width:23%" value="rename"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importMerge" class="importButton" style="width:23%" value="merge"\s\n onclick="onClickImportButton(this)">\s\n <input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\s\n onclick="onClickImportButton(this)">\s\n </div>\s\n</div>\s\n';\n//}}}\n\n// // Control interactions\n//{{{\nfunction onClickImportButton(which)\n{\n // DEBUG alert(which.id);\n var theList = document.getElementById('importList');\n if (!theList) return;\n var thePanel = document.getElementById('importPanel');\n var theCollisionPanel = document.getElementById('importCollisionPanel');\n var theNewTitle = document.getElementById('importNewTitle');\n var count=0;\n switch (which.id)\n {\n case 'fileImportSource':\n case 'importOpen': // load import source into hidden frame\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n if (config.macros.importTiddlers.src=="") break;\n // Load document into hidden iframe so we can read it's DOM and fill the list\n loadRemoteFile(config.macros.importTiddlers.src, function(src,txt) {\n var tiddlers = readTiddlersFromHTML(txt);\n var count=tiddlers?tiddlers.length:0;\n displayMessage(config.macros.importTiddlers.foundMsg.format([count,src]));\n config.macros.importTiddlers.inbound=tiddlers;\n window.refreshImportList(0);\n });\n break;\n case 'importSelectAll': // select all tiddler list items (i.e., not headings)\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=true;\n count++;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectNew': // select tiddlers not in current document\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectChanges': // select tiddlers that are updated from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importSelectDifferences': // select tiddlers that are new or different from existing tiddlers\n importReport(); // if an import was in progress, generate a report\n for (var t=0,count=0; t < theList.options.length; t++) {\n theList.options[t].selected=false;\n if (theList.options[t].value=="") continue;\n if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }\n for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler\n { var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }\n theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler\n count+=theList.options[t].selected?1:0;\n }\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n break;\n case 'importToggleFilter': // show/hide filter\n case 'importFilter': // apply filter\n alert("coming soon!");\n break;\n case 'importStart': // initiate the import processing\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.index=0;\n config.macros.importTiddlers.index=importTiddlers(0);\n importStopped();\n break;\n case 'importClose': // unload imported tiddlers or hide the import control panel\n // if imported tiddlers not loaded, close the import control panel\n if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }\n importReport(); // if an import was in progress, generate a report\n config.macros.importTiddlers.inbound=null; // clear the imported tiddler buffer\n refreshImportList(); // reset/resize the listbox\n break;\n case 'importSkip': // don't import the tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status='skipped after asking'; // mark item as skipped\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1); // resume with NEXT item\n importStopped();\n break;\n case 'importRename': // change name of imported tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n theImported.status = 'renamed from '+theImported.title; // mark item as renamed\n theImported.set(theNewTitle.value,null,null,null,null); // change the tiddler title\n theItem.value = theNewTitle.value; // change the listbox item text\n theItem.text = theNewTitle.value; // change the listbox item text\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importMerge': // join existing and imported tiddler content\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n var theText = theExisting.text+'\sn----\sn^^merged from: ';\n theText +='[['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\sn';\n theText +='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\sn'+theImported.text;\n var theDate = new Date();\n var theTags = theExisting.getTags()+' '+theImported.getTags();\n theImported.set(null,theText,null,theDate,theTags);\n theImported.status = 'merged with '+theExisting.title; // mark item as merged\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with this item\n importStopped();\n break;\n case 'importReplace': // substitute imported tiddler for existing tiddler\n var theItem = theList.options[config.macros.importTiddlers.index];\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;\n var theImported = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(theItem.value);\n theImported.status = 'replaces '+theExisting.title; // mark item for replace\n theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");\n theImported.status += ' by '+theExisting.modifier;\n theCollisionPanel.style.display='none';\n config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index); // resume with THIS item\n importStopped();\n break;\n case 'importListSmaller': // decrease current listbox size, minimum=5\n if (theList.options.length==1) break;\n theList.size-=(theList.size>5)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListLarger': // increase current listbox size, maximum=number of items in list\n if (theList.options.length==1) break;\n theList.size+=(theList.size<theList.options.length)?1:0;\n config.macros.importTiddlers.listsize=theList.size;\n break;\n case 'importListMaximize': // toggle listbox size between current and maximum\n if (theList.options.length==1) break;\n theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;\n break;\n }\n}\n//}}}\n\n// // refresh listbox\n//{{{\nfunction refreshImportList(selectedIndex)\n{\n var theList = document.getElementById("importList");\n if (!theList) return;\n // if nothing to show, reset list content and size\n if (!config.macros.importTiddlers.inbound) \n {\n while (theList.length > 0) { theList.options[0] = null; }\n theList.options[0]=new Option('please open a document...',"",false,false);\n theList.size=config.macros.importTiddlers.listsize;\n return;\n }\n // get the sort order\n if (!selectedIndex) selectedIndex=0;\n if (selectedIndex==0) config.macros.importTiddlers.sort='title'; // heading\n if (selectedIndex==1) config.macros.importTiddlers.sort='title';\n if (selectedIndex==2) config.macros.importTiddlers.sort='modified';\n if (selectedIndex==3) config.macros.importTiddlers.sort='tags';\n if (selectedIndex>3) {\n // display selected tiddler count\n for (var t=0,count=0; t < theList.options.length; t++) count+=(theList.options[t].selected&&theList.options[t].value!="")?1:0;\n clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));\n return; // no refresh needed\n }\n\n // get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)\n var tiddlers=config.macros.importTiddlers.inbound;\n tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n // add heading and control items to list\n var i=0;\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title" )?">":indent)+' [by title]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);\n theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);\n // output the tiddler list\n switch(config.macros.importTiddlers.sort)\n {\n case "title":\n for(var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n var lastSection = "";\n for(var t = 0; t < tiddlers.length; t++) {\n var tiddler = tiddlers[t];\n var theSection = tiddler.modified.toLocaleDateString();\n if (theSection != lastSection) {\n theList.options[i++] = new Option(theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n break;\n case "tags":\n var theTitles = {}; // all tiddler titles, hash indexed by tag value\n var theTags = new Array();\n for(var t=0; t<tiddlers.length; t++) {\n var title=tiddlers[t].title;\n var tags=tiddlers[t].tags;\n if (!tags || !tags.length) {\n if (theTitles["untagged"]==undefined) { theTags.push("untagged"); theTitles["untagged"]=new Array(); }\n theTitles["untagged"].push(title);\n }\n else for(var s=0; s<tags.length; s++) {\n if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }\n theTitles[tags[s]].push(title);\n }\n }\n theTags.sort();\n for(var tagindex=0; tagindex<theTags.length; tagindex++) {\n var theTag=theTags[tagindex];\n theList.options[i++]=new Option(theTag,"",false,false);\n for(var t=0; t<theTitles[theTag].length; t++)\n theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);\n }\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;\n if (theList.size>theList.options.length) theList.size=theList.options.length;\n}\n//}}}\n\n// // re-entrant processing for handling import with interactive collision prompting\n//{{{\nfunction importTiddlers(startIndex)\n{\n if (!config.macros.importTiddlers.inbound) return -1;\n\n var theList = document.getElementById('importList');\n if (!theList) return;\n var t;\n // if starting new import, reset import status flags\n if (startIndex==0)\n for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)\n config.macros.importTiddlers.inbound[t].status="";\n for (var i=startIndex; i<theList.options.length; i++)\n {\n // if list item is not selected or is a heading (i.e., has no value), skip it\n if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))\n continue;\n for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)\n if (config.macros.importTiddlers.inbound[j].title==t) break;\n var inbound = config.macros.importTiddlers.inbound[j];\n var theExisting = store.getTiddler(inbound.title);\n // avoid redundant import for tiddlers that are listed multiple times (when 'by tags')\n if (inbound.status=="added")\n continue;\n // don't import the "ImportedTiddlers" history from the other document...\n if (inbound.title=='ImportedTiddlers')\n continue;\n // if tiddler exists and import not marked for replace or merge, stop importing\n if (theExisting && (inbound.status.substr(0,7)!="replace") && (inbound.status.substr(0,5)!="merge"))\n return i;\n // assemble tags (remote + existing + added)\n var newTags = "";\n if (config.macros.importTiddlers.importTags)\n newTags+=inbound.getTags() // import remote tags\n if (config.macros.importTiddlers.keepTags && theExisting)\n newTags+=" "+theExisting.getTags(); // keep existing tags\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newTags+=" "+config.macros.importTiddlers.newTags; // add new tags\n inbound.set(null,null,null,null,newTags.trim());\n // set the status to 'added' (if not already set by the 'ask the user' UI)\n inbound.status=(inbound.status=="")?'added':inbound.status;\n // do the import!\n // OLD: store.addTiddler(in); store.setDirty(true);\n store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);\n store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value\n }\n return(-1); // signals that we really finished the entire list\n}\n//}}}\n\n//{{{\nfunction importStopped()\n{\n var theList = document.getElementById('importList');\n var theNewTitle = document.getElementById('importNewTitle');\n if (!theList) return;\n if (config.macros.importTiddlers.index==-1)\n importReport(); // import finished... generate the report\n else\n {\n // DEBUG alert('import stopped at: '+config.macros.importTiddlers.index);\n // import collision... show the collision panel and set the title edit field\n document.getElementById('importCollisionPanel').style.display='block';\n theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;\n }\n}\n//}}}\n\n// // ''REPORT GENERATOR''\n//{{{\nfunction importReport(quiet)\n{\n if (!config.macros.importTiddlers.inbound) return;\n // DEBUG alert('importReport: start');\n\n // if import was not completed, the collision panel will still be open... close it now.\n var panel=document.getElementById('importCollisionPanel'); if (panel) panel.style.display='none';\n\n // get the alphasorted list of tiddlers\n var tiddlers = config.macros.importTiddlers.inbound;\n // gather the statistics\n var count=0;\n for (var t=0; t<tiddlers.length; t++)\n if (tiddlers[t].status && tiddlers[t].status.trim().length && tiddlers[t].status.substr(0,7)!="skipped") count++;\n\n // generate a report\n if (count && config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName\n newText +=" imported "+count+" tiddler"+(count==1?"":"s")+" from\sn[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\sn";\n if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)\n newText += "imported tiddlers were tagged with: \s""+config.macros.importTiddlers.newTags+"\s"\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n // OLD: store.addTiddler(theReport);\n store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n\n // reset status flags\n for (var t=0; t<config.macros.importTiddlers.inbound.length; t++) config.macros.importTiddlers.inbound[t].status="";\n\n // refresh display if tiddlers have been loaded\n if (count) { store.setDirty(true); store.notifyAll(); }\n\n // always show final message when tiddlers were actually loaded\n if (count) displayMessage(config.macros.importTiddlers.importedMsg.format([count,tiddlers.length,config.macros.importTiddlers.src]));\n}\n//}}}\n\n/***\n!!!!!TW 2.1beta Core Code Candidate\n//The following section is a preliminary 'code candidate' for incorporation of non-interactive 'load tiddlers' functionality into TW2.1beta. //\n***/\n//{{{\n// default cookie/option values\nif (!config.options.chkImportReport) config.options.chkImportReport=true;\n\nconfig.macros.loadTiddlers = {\n label: "",\n prompt: "add/update tiddlers from '%0'",\n askMsg: "Please enter a local path/filename or a remote URL",\n openMsg: "Opening %0",\n openErrMsg: "Could not open %0 - error=%1",\n readMsg: "Read %0 bytes from %1",\n foundMsg: "Found %0 tiddlers in %1",\n nochangeMsg: "'%0' is up-to-date... skipped.",\n loadedMsg: "Loaded %0 of %1 tiddlers from %2"\n};\n\nconfig.macros.loadTiddlers.handler = function(place,macroName,params) {\n var label=(params[0] && params[0].substr(0,6)=='label:')?params.shift().substr(6):this.label;\n var prompt=(params[0] && params[0].substr(0,7)=='prompt:')?params.shift().substr(7):this.prompt;\n var filter="updates";\n if (params[0] && (params[0]=='all' || params[0]=='new' || params[0]=='changes' || params[0]=='updates'\n || params[0].substr(0,8)=='tiddler:' || params[0].substr(0,4)=='tag:'))\n filter=params.shift();\n var src=params.shift(); if (!src || !src.length) return; // filename is required\n var quiet=(params[0]=="quiet"); if (quiet) params.shift();\n var ask=(params[0]=="confirm"); if (ask) params.shift();\n var force=(params[0]=="force"); if (force) params.shift();\n if (label.trim().length) {\n // link triggers load tiddlers from another file/URL and then applies filtering rules to add/replace tiddlers in the store\n createTiddlyButton(place,label.format([src]),prompt.format([src]), function() {\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);\n })\n }\n else {\n // load tiddlers from another file/URL and then apply filtering rules to add/replace tiddlers in the store\n if (src=="ask") src=prompt(config.macros.loadTiddlers.askMsg);\n loadRemoteFile(src,loadTiddlers,quiet,ask,filter,force);\n }\n}\n\nfunction loadTiddlers(src,html,quiet,ask,filter,force)\n{\n var tiddlers = readTiddlersFromHTML(html);\n var count=tiddlers?tiddlers.length:0;\n if (!quiet) displayMessage(config.macros.loadTiddlers.foundMsg.format([count,src]));\n var count=0;\n if (tiddlers) for (var t=0;t<tiddlers.length;t++) {\n var inbound = tiddlers[t];\n var theExisting = store.getTiddler(inbound.title);\n if (inbound.title=='ImportedTiddlers')\n continue; // skip "ImportedTiddlers" history from the other document...\n\n // apply the all/new/changes/updates filter (if any)\n if (filter && filter!="all") {\n if ((filter=="new") && theExisting) // skip existing tiddlers\n continue;\n if ((filter=="changes") && !theExisting) // skip new tiddlers\n continue;\n if ((filter.substr(0,4)=="tag:") && inbound.tags.find(filter.substr(4))==null) // must match specific tag value\n continue;\n if ((filter.substr(0,8)=="tiddler:") && inbound.title!=filter.substr(8)) // must match specific tiddler name\n continue;\n if (!force && store.tiddlerExists(inbound.title) && ((theExisting.modified.getTime()-inbound.modified.getTime())>=0))\n { if (!quiet) displayMessage(config.macros.loadTiddlers.nochangeMsg.format([inbound.title])); continue; }\n }\n // get confirmation if required\n if (ask && !confirm((theExisting?"Update":"Add")+" tiddler '"+inbound.title+"'\snfrom "+src))\n { tiddlers[t].status="skipped - cancelled by user"; continue; }\n // DO IT!\n // OLD: store.addTiddler(in);\n store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags);\n store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value\n tiddlers[t].status=theExisting?"updated":"added"\n count++;\n }\n if (count) {\n // refresh display\n store.setDirty(true);\n store.notifyAll();\n // generate a report\n if (config.options.chkImportReport) {\n // get/create the report tiddler\n var theReport = store.getTiddler('ImportedTiddlers');\n if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text = ""; }\n // format the report content\n var now = new Date();\n var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName+" loaded "+count+" tiddlers from\sn[["+src+"|"+src+"]]:\sn";\n newText += "<<<\sn";\n for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\sn";\n newText += "<<<\sn";\n newText += "<html><input type=\s"button\s" href=\s"javascript:;\s" ";\n newText += "onclick=\s"story.closeTiddler('"+theReport.title+"'); store.deleteTiddler('"+theReport.title+"');\s" ";\n newText += "value=\s"discard report\s"></html>";\n // update the ImportedTiddlers content and show the tiddler\n theReport.text = newText+((theReport.text!="")?'\sn----\sn':"")+theReport.text;\n theReport.modifier = config.options.txtUserName;\n theReport.modified = new Date();\n // OLD: store.addTiddler(theReport);\n store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags);\n if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }\n }\n }\n // always show final message when tiddlers were actually loaded\n if (!quiet||count) displayMessage(config.macros.loadTiddlers.loadedMsg.format([count,tiddlers.length,src]));\n}\n\nfunction loadRemoteFile(src,callback,quiet,ask,filter,force) {\n if (src==undefined || !src.length) return null; // filename is required\n if (!quiet) clearMessage();\n if (!quiet) displayMessage(config.macros.loadTiddlers.openMsg.format([src]));\n if (src.substr(0,4)!="http" && src.substr(0,4)!="file") { // if not a URL, fallback to read from local filesystem\n var txt=loadFile(src);\n if ((txt==null)||(txt==false)) // file didn't load\n { if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"])); }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([txt.length,src]));\n if (callback) callback(src,convertUTF8ToUnicode(txt),quiet,ask,filter,force);\n }\n }\n else {\n var x; // get an request object\n try {x = new XMLHttpRequest()} // moz\n catch(e) {\n try {x = new ActiveXObject("Msxml2.XMLHTTP")} // IE 6\n catch (e) {\n try {x = new ActiveXObject("Microsoft.XMLHTTP")} // IE 5\n catch (e) { return }\n }\n }\n // setup callback function to handle server response(s)\n x.onreadystatechange = function() {\n if (x.readyState == 4) {\n if (x.status==0 || x.status == 200) {\n if (!quiet) displayMessage(config.macros.loadTiddlers.readMsg.format([x.responseText.length,src]));\n if (callback) callback(src,x.responseText,quiet,ask,filter,force);\n }\n else {\n if (!quiet) displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,x.status]));\n }\n }\n }\n // get privileges to read another document's DOM via http:// or file:// (moz-only)\n if (typeof(netscape)!="undefined") {\n try { netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); }\n catch (e) { if (!quiet) displayMessage(e.description?e.description:e.toString()); }\n }\n // send the HTTP request\n try {\n var url=src+(src.indexOf('?')<0?'?':'&')+'nocache='+Math.random();\n x.open("GET",src,true);\n if (x.overrideMimeType) x.overrideMimeType('text/html');\n x.send(null);\n }\n catch (e) {\n if (!quiet) {\n displayMessage(config.macros.loadTiddlers.openErrMsg.format([src,"(unknown)"]));\n displayMessage(e.description?e.description:e.toString());\n }\n }\n }\n}\n\nfunction readTiddlersFromHTML(html)\n{\n // extract store area from html \n var start=html.indexOf('<div id="storeArea">');\n var end=html.indexOf('</body>',start);\n var sa="<html><body>"+html.substring(start,end)+"</body></html>";\n\n // load html into iframe document\n var f=document.getElementById("loaderFrame"); if (f) document.body.removeChild(f);\n f=document.createElement("iframe"); f.id="loaderFrame";\n f.style.width="0px"; f.style.height="0px"; f.style.border="0px";\n document.body.appendChild(f);\n var d=f.document;\n if (f.contentDocument) d=f.contentDocument; // For NS6\n else if (f.contentWindow) d=f.contentWindow.document; // For IE5.5 and IE6\n d.open(); d.writeln(sa); d.close();\n\n // read tiddler DIVs from storeArea DOM element \n var sa = d.getElementById("storeArea");\n if (!sa) return null;\n sa.normalize();\n var nodes = sa.childNodes;\n if (!nodes || !nodes.length) return null;\n var tiddlers = [];\n for(var t = 0; t < nodes.length; t++) {\n var title = null;\n if(nodes[t].getAttribute)\n title = nodes[t].getAttribute("tiddler");\n if(!title && nodes[t].id && (nodes[t].id.substr(0,5) == "store"))\n title = nodes[t].id.substr(5);\n if(title && title != "")\n tiddlers.push((new Tiddler()).loadFromDiv(nodes[t],title));\n }\n return tiddlers;\n}\n//}}}
On Sat 03 Feb 2007 03:37:58 AM CET, FelixHummel imported 1 tiddler from\n[[/home/dfm/tiddlywiki/abego.html|/home/dfm/tiddlywiki/abego.html]]:\n<<<\n#[[ForEachTiddlerPlugin]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sat 03 Feb 2007 03:37:06 AM CET, FelixHummel imported 1 tiddler from\n[[/home/dfm/tiddlywiki/abego.html|/home/dfm/tiddlywiki/abego.html]]:\n<<<\n#[[ForEachTiddlerExamples]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Sat 20 Jan 2007 12:00:13 AM CET, FelixHummel imported 2 tiddlers from\n[[http://www.tiddlytools.com/|http://www.tiddlytools.com/]]:\n<<<\n#[[NewDocumentList]] - added\n#[[NewDocumentPlugin]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>\n----\nOn Mon 08 Jan 2007 06:19:34 PM CET, FelixHummel imported 1 tiddler from\n[[http://www.tiddlytools.com/#DisableWikiLinksPlugin|http://www.tiddlytools.com/#DisableWikiLinksPlugin]]:\n<<<\n#[[GotoPlugin]] - added\n<<<\n<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
!What's Jabber?\n[[Jabber|http://www.jabber.org/]] is a "A streaming XML technology mainly used for instant messaging" [1].\nYou can compare it to the language spoken in an ICQ or MS Messenger network. Link [1] also lists some advantages of Jabber's nature.\n!What's Gaim?\n[[Gaim|http://gaim.sourceforge.net/]] is an instant messenger. It is [[open source]] software and [[platform independent]].\nGaim understands all common [[IM]] protocols (AIM/ICQ, ~Gadu-Gadu, ~GroupWise, IRC, Jabber, MSN, SIP, Sametime, Yahoo).\n!Give Me An Account\nThat's an easy one.\nInstall Gaim. When prompted for an account, chose Jabber as a protocol and fill in the form. Klick OK, and a message should pop up confirming your account registration.\nNote for Linux users: You need to click "Register" to register at the Jabber server.\n!Sources\n[1] http://www.jabber.org/about/overview.shtml\n[2] http://gaim.sourceforge.net/
<<getPak sun-java5-bin 'JRE (architecture dependent)'>>\n<<getPak sun-java5-jre 'JRE (architecture independent)'>>\n<<getPak sun-java5-plugin 'firefox plugin'>>
Customize your shortcut keys!\nhttp://www.erweiterungen.de/detail/keyconfig/\nSee FunctionsForKeyconfig for further customization!
Krusader is a twin panel file manager (like Total Commander, mc, gnome-commander, Norton Commander, ...).\nIt's a great piece of software.\nhttp://krusader.sourceforge.net/
This log contains all tweaks I did to the Kubuntu 6.10 defaults.\n!Configuration\n!!Networking\n*K Menu\n**System Settings\n***Network Settings\nClick "Administrator Mode" (at the bottom), select an interface and click "Configure Interface".\n*Manual:\n**IP address: 10.1.2.5\n**Netmask: 255.255.255.0\n*Click Advanced Settings\n**Gateway: 10.1.2.33\nBack in the Network Settings Window, click the "Routes" tab and specify your internet gateway, then click the "Domain Name System" tab and add your domain name server(s).\nGo to "Network Profiles", click "Create New" and type a name you like.\nLast, hit "Apply" in the lower right, so changes take effect.\n!!Resolution\nMy Vaio VGN-T2XP has an XVGA display (16:9 -- 1280x800) and an 800 series Intel Graphics Chipset, i.e. "Intel 82852/855GM". For widescreen resolution I need the [[915resolution]] package.\n!!Disable Boot Logo\nI like the [[Linux-Matrix-Boot|GrubStyling]] style -- "it's raining commands".\n!!Mount NFS shares\n<<getPak nfs-client>>\nAfterwards, {{{sudo mkdir /media/srv}}}, then {{{sudo vim /etc/fstab}}} and add the following line:\n{{{\nsrv:/ /media/srv/ nfs defaults 0 0\n}}}\n!!I need a file manager!\n[[Krusader]] is the open source answer to Total Commander (and all other twin pane file managers. It is also the main reason why I chose KDE.\n!!WLAN\nI want to work online in the garden, so I need WLAN. We have WEP encryption - don't laugh, it's because of our PVR (Topfield PVR 6000).\n{{{\nsudo iwconfig eth1 essid "OurNetworkName" channel 6 key restricted HEX-KEY-HERE mode managed ap any power on\n\n#configure ip address and route, add name server to /etc/resolv.conf\nsudo ifconfig eth1 10.1.2.7\nsudo route add default gw router\necho "# file made by me - don't mess around with that!\nnameserver 10.1.2.33" >> /tmp/temporaryResolv.confForMyWlanScript\nsudo cp /tmp/temporaryResolv.confForMyWlanScript /etc/resolv.conf\nping -c 5 www.heise.de\n}}}\n!!Firefox\nUnfortunately Kubuntu is shipped with Konqueror as the default web browser. A simple {{{sudo apt-get install firefox}}} solves the problem.
For pictures:\nxfig\nsee also:\n{{{lyx}}}
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
GNU/Linux (OS) environment that's fully capable of running MS Office, so nubs can slowly upgrade themselves to using free software
[[TiddlyWiki developer page|http://trac.tiddlywiki.org/tiddlywiki]]\n[[DirectX 9 vs. DirectX 10|http://www.pcgames.de/?menu=browser&mode=article&article_id=500080&entity_id=-1&image_id=536720&page=1]]\nEmailEncryption\n!Security\nhttp://www.insecuremag.com/\nhttp://www.phrack.org/\n\nLinks about topics which are uninteresting to me but still may be worth a look\nForTheOthers
{{{\ncat /etc/group | grep groupname\n}}}
List all Users of a GNU System\n*{{{cat /etc/passwd}}}\n*type {{{id}}} then press tab until bash auto completion suggests all user names
This is just a copy of the online resource to create a little redundance on the web. ;)\n!Install evdev\nsudo apt-get install xserver-xorg-input-evdev\n!Get Device Information\n{{{cat /proc/bus/input/devices}}}\n{{{\nI: Bus=0003 Vendor=046a Product=0001 Version=0026\nN: Name="Cherry GmbH"\nP: Phys=usb-0000:00:10.0-1/input0\nS: Sysfs=/class/input/input1\nH: Handlers=kbd event1 \nB: EV=120003\nB: KEY=7 ff800000 7ff e0b2ffdf 1cfffff ffffffff fffffffe\nB: LED=1f\n}}}\n!Create udev rule\n{{{sudo gedit /etc/udev/rules.d/19-local.rules}}}\n{{{\nKERNEL=="event[0-9]*", SYSFS{../name}=="Logitech USB-PS/2 Optical Mouse", NAME="input/event9"\n}}}\n!!Find out which event numbers aren't taken yet\n{{{ls /dev/input/}}}\n!Editing /etc/X11/xorg.conf\n!!Backup\n{{{sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak}}}\n!!Replacing Mouse configuration section\n{{{\nSection "InputDevice"\n Identifier "Configured Mouse"\n Driver "evdev"\n Option "CorePointer"\n Option "Device" "/dev/input/event9" #this should be that underlined name from 19-local.rules\nEndSection\n}}}\n\n\n!Sources\nhttp://ubuntuforums.org/showthread.php?t=219894
/***\n|''Name:''|longquote|\n|''Description:''|smaller and lightlighted text|\n|''Version:''|1.0|\n|''Date:''|Jan 03, 2007|\n|''Source:''|http://www.felixhummel.de/#longQuote|\n|''Author:''|Felix Hummel (felix (at) felixhummel (dot) de)|\n|''License:''|[[BSD open source license]]|\n|''~CoreVersion:''|2.1.0|\n|''Browser:''|FireFox 2.0; JS-enabled browsers|\n|"Dependencies:"|.longQuotes from my StyleSheet|\n\n!History\n* 03-Jan-07, initial version\n\n!Examples\n|!Source|!Output|h\n|{{{<<longQuote>>}}}|<<longQuote>>|\n|{{{<<longQuote 'This could be a longer text pasted from a foreign website. It should be readable although it is so long. I mainly created this plugin, so i find paragraphs of longer files that do not have anchors.>>}}}|<<longQuote package-gnome>>|\n(You can use (single or double) quotes or double square brackets for params with spaces)\n\n!Code\n***/\n//{{{\nconfig.macros.longQuote = {};\nconfig.macros.longQuote.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var quote = params.length > 0 ? params[0] : "missing arguments";\n wikify("{{longQuote{\sn" + quote + "}}}",place);\n}\n//}}}
longQuote doesnt work cuz' stylesheet entry is missing.\n*in longQuote, the stylesheet has to be merged with a new css entry
#study FreeSoftwareLicenses
For Players that use the XINE engine (e.g. ''xfmedia'') install ''libxine-extracodecs''.\nFor ''gstreamer''-engine-players: \n{{{\nsudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-ffmpeg gstreamer0.10-gl gstreamer0.10-pitfdll libquicktime0\n}}}\nSource: http://wiki.ubuntuusers.de/Codecs
[[Macros]] let you write tiddlers containing more exotic objects than just text. Built-in macros include:\n* NewJournalMacro and NewTiddlerMacro\n* GradientMacro\n* [[Sparklines]]\n* TabMacro\n* TaggingMacro\n* TodayMacro\n* ToolbarMacro\n\nTag popup:\n{{{\n<<tag features>>\n}}}\nwill result in <<tag features>>\n\nSlider:\n{{{\n<<slider chkTestSlider OptionsPanel options "Change TiddlyWiki advanced options">>\n}}}\nResults in this button <<slider chkTestSlider OptionsPanel options "Change TiddlyWiki advanced options">>\nThe parameters are:\n* cookie name to be used to save the state of the slider\n* name of the tiddler to include in the slider\n* title text of the slider\n* tooltip text of the slider\n
An applet, that sits in the Panel and notifies the user of new mail.\n<<getPak mail-notification>>\nstart it with\n{{{\nmail-notification\n}}}\n!!Situation\nI let mail-notification ('MN' for now) get mail from pop3 directly as I do not want Evolution to be running in the background all the time. I configured MN to "open Mail Reader" when clicked. Notification works, and Evolution is run, when I click the MN icon.\n!!Problem\nAfter the click, Evolution is unable to fetch mail from my pop3. It seems like a dead lock, because after closing MN, Evolution does it's job as normal.\nThe same thing occurs, when Evolution is running and I start MN. But then MN cannot fetch mail.
HelloThere\nGettingStarted\nDownloadMe\n[[News|journal]]\n\n[[Ubuntu]]\n[[Firefox]]\n\nPlayGround\n\n[[new journal]]\n\n@@text-align:left;jump@@\n<<goto width:8em>>\n@@font-size:0.8em;<<newDocument "label:create template" "template.html" includeNew systemConfig>>@@\n@@font-size:0.8em;<<slider customizeSliderState customize customize>>@@\n@@font-size:0.7em;<<tag todo>>@@\n\n@@font-size:0.7em;TiddlyWiki <<version>>@@\n
"Rearrange or remove menuitems from the main context menu (right-click menu) and main menubar (File Edit View etc.)"\nI use it to clean up my messed up menus.\nhttps://addons.mozilla.org/firefox/710/
|''URL:''|http://tiddlyspot.com/mptw/|\n|''Description:''|some plugins and hacks for tiddlywiki|\n|''Author:''|SimonBaird|
[[MonkeyPirateTiddlyWiki|http://mptw.tiddlyspot.com]] is a distribution of [[TiddlyWiki|http://www.tiddlywiki.com/]] created by Simon Baird. See [[the web site|http://mptw.tiddlyspot.com/]] for more information.\n!!Upgrading ~MonkeyPirateTiddlyWiki\nThis "empty" ~MonkeyPirateTiddlyWiki file comes pre-installed with the core ~MonkeyPirateTiddlyWiki plugins. You can upgrade these core plugins to the latest version by doing the following:\n* Click ImportTiddlers\n* Click "Choose..." and select "~MptwUpgradeURL"\n* Click "fetch"\n* Click the checkbox in the first column heading to select all tiddlers\n* Click "More actions..." and select "Import these tiddlers"\n* Click "OK" to confirm you want to overwrite the tiddlers\n* Save and reload\n
I saw an easy but amazing text editor feature in eclipse I don't want to miss anywhere:\nPressing <alt>+<up> or <alt>+<down> moved the current line.\nI would love to see that integrated into mousepad or gedit or just another small/fast editor
/***\n| Name:|MptwLayoutPlugin|\n| Description:|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|\n| Version:|6.1.2|\n| Date:|02-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#MptwLayoutPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n!Notes\nPresumes you have TagglyTaggingPlugin installed.\n***/\n//{{{\nconfig.shadowTiddlers.GettingStarted += "\sn\snSee also MonkeyPirateTiddlyWiki.";\n\n//}}}\n\n//{{{\nmerge(config.shadowTiddlers,{\n\nMptwStyleSheet:[\n "/*{{{*/",\n "/* a contrasting background so I can see where one tiddler ends and the other begins */",\n "body {",\n " background: [[ColorPalette::TertiaryLight]];",\n "}",\n "",\n "/* sexy colours and font for the header */",\n ".headerForeground {",\n " color: [[ColorPalette::PrimaryPale]];",\n "}",\n ".headerShadow, .headerShadow a {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n ".headerForeground, .headerShadow {",\n " padding: 1em 1em 0;",\n " font-family: 'Trebuchet MS' sans-serif;",\n " font-weight:bold;",\n "}",\n ".headerForeground .siteSubtitle {",\n " color: [[ColorPalette::PrimaryLight]];",\n "}",\n ".headerShadow .siteSubtitle {",\n " color: [[ColorPalette::PrimaryMid]];",\n "}",\n "",\n "/* make shadow go and down right instead of up and left */",\n ".headerShadow {",\n " left: 1px;",\n " top: 1px;",\n "}",\n "",\n "/* prefer monospace for editing */",\n ".editor textarea {",\n " font-family: 'Consolas' monospace;",\n "}",\n "",\n "/* sexy tiddler titles */",\n ".title {",\n " font-size: 250%;",\n " color: [[ColorPalette::PrimaryLight]];",\n " font-family: 'Trebuchet MS' sans-serif;",\n "}",\n "",\n "/* more subtle tiddler subtitle */",\n ".subtitle {",\n " padding:0px;",\n " margin:0px;",\n " padding-left:0.5em;",\n " font-size: 90%;",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n ".subtitle .tiddlyLink {",\n " color: [[ColorPalette::TertiaryMid]];",\n "}",\n "",\n "/* a little bit of extra whitespace */",\n ".viewer {",\n " padding-bottom:3px;",\n "}",\n "",\n "/* don't want any background color for headings */",\n "h1,h2,h3,h4,h5,h6 {",\n " background: [[ColorPalette::Background]];",\n " color: [[ColorPalette::Foreground]];",\n "}",\n "",\n "/* give tiddlers 3d style border and explicit background */",\n ".tiddler {",\n " background: [[ColorPalette::Background]];",\n " border-right: 2px [[ColorPalette::TertiaryMid]] solid;",\n " border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;",\n " margin-bottom: 1em;",\n " padding-bottom: 2em;",\n "}",\n "",\n "/* make options slider look nicer */",\n "#sidebarOptions .sliderPanel {",\n " border:solid 1px [[ColorPalette::PrimaryLight]];",\n "}",\n "",\n "",\n "/* the borders look wrong with the body background */",\n "#sidebar .button {",\n " border-style: none;",\n "}",\n "",\n "/* displays the list of a tiddler's tags horizontally. used in ViewTemplate */",\n ".tagglyTagged li.listTitle {",\n " display:none",\n "}",\n ".tagglyTagged li {",\n " display: inline; font-size:90%;",\n "}",\n ".tagglyTagged ul {",\n " margin:0px; padding:0px;",\n "}",\n "",\n "/* this means you can put line breaks in SidebarOptions for readability */",\n "#sidebarOptions br {",\n " display:none;",\n "}",\n "/* undo the above in OptionsPanel */",\n "#sidebarOptions .sliderPanel br {",\n " display:inline;",\n "}",\n "",\n "/* horizontal main menu stuff */",\n "#displayArea {",\n " margin: 1em 15.7em 0em 1em; /* use the freed up space */",\n "}",\n "#topMenu br {",\n " display: none;",\n "}",\n "#topMenu {",\n " background: [[ColorPalette::PrimaryMid]];",\n " color:[[ColorPalette::PrimaryPale]];",\n "}",\n "#topMenu {",\n " padding:2px;",\n "}",\n "#topMenu .button, #topMenu .tiddlyLink, #topMenu a {",\n " margin-left: 0.5em;",\n " margin-right: 0.5em;",\n " padding-left: 3px;",\n " padding-right: 3px;",\n " color: [[ColorPalette::PrimaryPale]];",\n " font-size: 115%;",\n "}",\n "#topMenu .button:hover, #topMenu .tiddlyLink:hover {",\n " background: [[ColorPalette::PrimaryDark]];",\n "}",\n "",\n "/* make it print a little cleaner */",\n "@media print {",\n " #topMenu {",\n " display: none ! important;",\n " }",\n " /* not sure if we need all the importants */",\n " .tiddler {",\n " border-style: none ! important;",\n " margin:0px ! important;",\n " padding:0px ! important;",\n " padding-bottom:2em ! important;",\n " }",\n " .tagglyTagging .button, .tagglyTagging .hidebutton {",\n " display: none ! important;",\n " }",\n " .headerShadow {",\n " visibility: hidden ! important;",\n " }",\n " .tagglyTagged .quickopentag, .tagged .quickopentag {",\n " border-style: none ! important;",\n " }",\n " .quickopentag a.button, .miniTag {",\n " display: none ! important;",\n " }",\n "}",\n "/*}}}*/",\n ""\n].join("\sn"),\n\nMptwPageTemplate:[\n "<!--{{{-->",\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 "<!-- horizontal MainMenu -->",\n "<div id='topMenu' refresh='content' tiddler='MainMenu'></div>",\n "<!-- original MainMenu menu -->",\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 ""\n].join("\sn"),\n\nMptwViewTemplate:[\n "<!--{{{-->",\n "",\n "<div class='toolbar'>",\n " <span macro=\s"showWhenTagged systemConfig\s">",\n " <span macro=\s"toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'\s"></span>",\n " </span>",\n " <span style=\s"padding:1em;\s"></span>",\n " <span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler undoChanges permalink references jump newHere newJournalHere'></span>",\n "</div>",\n "",\n "<div class=\s"tagglyTagged\s" macro=\s"tags\s"></div>",\n "",\n "<div class='titleContainer'>",\n " <span class='title' macro='view title'></span>",\n " <span macro=\s"miniTag\s"></span>",\n "</div>",\n "",\n "<div class='subtitle'>",\n " <span macro='view modifier link'></span>,",\n " <span macro='view modified date [[DD-MMM-YY]]'></span>",\n " (<span macro='message views.wikified.createdPrompt'></span>",\n " <span macro='view created date [[DD-MMM-YY]]'></span>)",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewPanelTemplate\s">[[ViewPanelTemplate]]</div>",\n "",\n "<div macro=\s"hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer' macro='view text wikified'></div>",\n "</div>",\n "<div macro=\s"showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\s">",\n " <div class='viewer'><pre macro='view text'></pre></div>",\n "</div>",\n "",\n "<div macro=\s"showWhenExists ViewDashboardTemplate\s">[[ViewDashboardTemplate]]</div>",\n "",\n "<div class=\s"tagglyTagging\s" macro=\s"tagglyTagging\s"></div>",\n "",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\nMptwEditTemplate:[\n "<!--{{{-->",\n "<div class=\s"toolbar\s" macro=\s"toolbar +saveTiddler closeOthers -cancelTiddler deleteTiddler\s"></div>",\n "<div class=\s"title\s" macro=\s"view title\s"></div>",\n "<div class=\s"editLabel\s">Title</div><div class=\s"editor\s" macro=\s"edit title\s"></div>",\n "<div class=\s"editLabel\s">Tags</div><div class=\s"editor\s" macro=\s"edit tags\s"></div>",\n "<div class=\s"editorFooter\s"><span macro=\s"message views.editor.tagPrompt\s"></span><span macro=\s"tagChooser\s"></span></div>",\n "<div macro=\s"showWhenExists EditPanelTemplate\s">[[EditPanelTemplate]]</div>",\n "<div class=\s"editor\s" macro=\s"edit text\s"></div>",\n "<!--}}}-->",\n ""\n].join("\sn"),\n\nMonkeyPirateTiddlyWiki:[\n "[[MonkeyPirateTiddlyWiki|http://mptw.tiddlyspot.com]] is a distribution of [[TiddlyWiki|http://www.tiddlywiki.com/]] created by Simon Baird. See [[the web site|http://mptw.tiddlyspot.com/]] for more information.",\n "!!Upgrading ~MonkeyPirateTiddlyWiki",\n "This \s"empty\s" ~MonkeyPirateTiddlyWiki file comes pre-installed with the core ~MonkeyPirateTiddlyWiki plugins. You can upgrade these core plugins to the latest version by doing the following:",\n "* Click ImportTiddlers",\n "* Click \s"Choose...\s" and select \s"~MptwUpgradeURL\s"",\n "* Click \s"fetch\s"",\n "* Click the checkbox in the first column heading to select all tiddlers",\n "* Click \s"More actions...\s" and select \s"Import these tiddlers\s"",\n "* Click \s"OK\s" to confirm you want to overwrite the tiddlers",\n "* Save and reload",\n ""\n].join("\sn")\n\n});\n//}}}\n
For upgrading directly from tiddlyspot. See [[ImportTiddlers]].\nURL: /proxy/mptw.tiddlyspot.com/upgrade.html\n
For upgrading. See [[ImportTiddlers]].\nURL: http://mptw.tiddlyspot.com/upgrade.html\n
See MusicSyncNews for news.\n!My Setup\n|!name|!short|!description|\n|music player|MP|xmms / xmms2 on my workstation|\n|music player database|MPDB|filesystem or xmms1/2 database or whatever|\n|portable music player|PMP|in my case a Samsung YP-U2X (mp3,ogg,wma,asf)|\n!The Situation\nIf you are a music fanatic, you frequently get loads of new music files. Before copying them to your existing music hierarchy you probably want to listen to them.\nNormally you do that with a music player (MP) application on your PC. But what if you want to go for a ride?\nYou copy some of your newest music to your portable, listen to it, forget what tracks were good and feel sorry for having forgotten.\nAt home again you find yourself copying and sorting these new albums manually. And this is where MusicSync comes in...\n!The Way\n!!!user scope\n#plug in PMP\n#click PMP-sync\n#unplug PMP\n!!!dev scope\n*without user interaction -- done by OS\n**recognition (udev)\n**initialization (mount)\n*by button pressed\n**copy PMP-files to MPDB (portable to workstation -- P2W -- transfer)\n**upload new files to PMP (workstation to portable -- W2P -- transfer)\n**(ask if user wants to unmount)\n\n!Further Ideas\nportable Music Player (PMP) - Portable Innovative Music Player (PIMP)\n
!getFavsFromPortable()\nlet's find out where my YP-U2X stores the "Favorite" flag.\nThere is a file named "FAV.DAT" that looks like this:\n{{{\nP\n^CÀ^@^@4HERO-~1.MP3P\n^C`^A^@4HERO-~2.MP3\n}}}\nSo there's nothing I can use. :(\nThat's why I hate proprietary software.
!A Little History\nIt all started in early 2006 when I began migrating from Windows XP to [[Ubuntu]]. The first time I installed Ubuntu, I did not take any notes. Now I know that I should have.\nThen I started using a conventional Notebook (Yes, ''paper''!). Paper is cheap, easy to edit and portable, but looking for something specific is time-consuming, let alone our good friend CopyAndPaste.\nNow you are looking at my electronic Ubuntu notepad. Solutions to the problems I encountered are noted here.\n!Target Audiences\n#people who have the same problem I had and may get some help here.\n#myself: When away, I need online access to my very own reference.\n
window.Animator = null;
Let me tell you something about [[the way I use computers|MyWay]]. For now a short abstract:\n*Installing UbuntuFromScratch (under construction -- see the [[edgy]] tag!)\n*making [[Firefox]] fly \n*the rest (see the Tags tab on the right hand side
!I like\n*TiddlyWiki\n*[[keyboard shortcuts|ShortcutUser]]\n*[[small and fast programs|app]] that do exactly what I want -- nothing more nothing less\n*[[listening to music|music]]
Open Source WYSIWYG Web Page Editor\nhttp://www.nvu.com/
[[Nautilus|http://www.gnome.org/projects/nautilus/]] is the default Gnome file manager.\nNautilus can use [[scripts|http://g-scripts.sourceforge.net/]].
{{borderleft{\n{{fine{__select a document type__}}}\n<<newDocument "label:TiddlyWiki blank" ask NOTIDDLER>>\n&nbsp; <<newDocument "label:with Import/Export" ask importexport>>\n<<newDocument "label:TiddlyTools starter" ask includeNew>>\n&nbsp; <<newDocument "label:with Themes" ask includeNew ThemePackage>>\n&nbsp; <<newDocument "label:with MediaCenter" ask includeNew MediaPackage>>\n&nbsp; <<newDocument "label:with TidIDE" ask includeNew TidIDEPackage>>\n{{bordertop{\n@@display:block;<<newDocument "label:custom..." ask ask>> //(match tags)//@@}}}}}}\n<<newDocument "label:dfm-style" "new3.html" includeNew systemConfig>>
/***\n|''Name:''|NewDocumentPlugin|\n|''Source:''|http://www.TiddlyTools.com/#NewDocumentPlugin|\n|''Author:''|Eric Shulman - ELS Design Studios|\n|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|\n|''~CoreVersion:''|2.0.10|\n\nQuickly create new TiddlyWiki documents from your existing document, with just one click! Use the {{{<<newDocument>>}}} macro to place a "new document" link into your sidebar/mainmenu/any tiddler (wherever you like). Select this command to automatically create a "new.html" document containing a specific set of tagged tiddlers. Optional parameters let you specify an alternate path/filename for the new file, or different tags to match. You can also indicate "ask" for either parameter, which will trigger a prompt for input when the command is selected.\n\n!!!!!Usage\n<<<\n{{{<<newDocument label:text filename tag tag tag...>>}}}\n{{{<<newDocument label:text filename all>>}}}\n{{{<<newDocument label:text filename snap ID>>}}}\n where:\n* ''label:text'' defines //optional// alternative link text (replaces default "new document" display)\n* ''filename'' is any local path-and-filename. If no parameters are provided, the default is to create the file "new.html" in the current directory. If a filename is provided without a path (i.e., there is no "/" in the input), then the current directory is also assumed. Otherwise, this parameter is expected to contain the complete path and filename needed to write the file to your local hard disk. If ''ask'' is used in place of the filename parameter then, when the command link is selected, a message box will be automatically displayed so you can select/enter the path and filename.\n* ''tag tag tag...'' is a list of one or more space-separated tags (use quotes or {{{[[]]}}} around tags that contain spaces). The new document will include all tiddlers that match at least one of the tags in the list. The default is to include tiddlers tagged with <<tag includeNew>>. The special value ''all'' may be used to match every tiddler (even those without tags). If ''ask'' is used in place of the tags then, when the command link is selected, a message box will be automatically displayed so you can enter the desired tags at that time.\n* When you use the keyword ''snap'' in place of the tags, you can generate a file containing the //rendered// CSS-and-HTML that is currently being displayed in browser. By default, the snapshop uses the 'contentWrapper' DOM element ID to automatically include all the TiddlyWiki elements, such as the sidebars and header, in addition to the center 'story' column containing the tiddler content.\n* You can limit the snapshot to capture only a portion of the rendered TiddlyWiki elements by specifiying an optional alternate DOM element ID, such as "displayArea" (the entire center 'story' column) or even just a single tiddler (e.g., "tidderMyTiddlerTitle", assuming that "MyTiddlerTitle" is currently displayed). Only the portions of the document that are contained //within// the specified DOM element will be transcribed to the resulting snapshot file. If ''ask'' is used in place of a DOM element ID, you will be prompted to enter the ID (default is "contentWrapper") when the snapshot is being taken. This allows you to easily enter the ID of any currently displayed tiddler to make quick snapshots of specific tiddlers.\n\nNote: as of version 1.4.0 of this plugin, support for selecting tiddlers by using tag *expressions* has been replaced with simpler, more efficient "containsAny()" logic. To create new ~TiddlyWiki documents that contain only those tiddlers selected with advanced AND/OR/NOT Boolean expressions, you can use the filtering features provided by the ExportTiddlersPlugin (see www.TiddlyTools.com/#ExportTiddlersPlugin).\n<<<\n!!!!!Examples:\n<<<\n{{{<<newDocument>>}}}\nequivalent to {{{<<newDocument new.htm includeNew systemTiddlers>>}}}\ncreates default "new.html" containing tiddlers tagged with either<<tag includeNew>>or<<tag systemTiddlers>>\ntry it: <<newDocument>>\n\n{{{<<newDocument empty.html systemTiddlers>>}}}\ncreates "empty.html" containing only tiddlers tagged with<<tag systemTiddlers>>\n//(reproduces old-style (pre 2.0.2) empty file)//\ntry it: <<newDocument empty.html systemTiddlers>>\n\n{{{<<newDocument "label:create Import/Export starter" ask importexport>>}}}\nsave importexport tiddlers to a new file, prompts for path/file\ntry it: <<newDocument "label:create Import/Export starter" ask importexport>>\n\n{{{<<newDocument ask ask>>}}}\nprompts for path/file, prompts for tags to match\ntry it: <<newDocument ask ask>>\n\n{{{<<newDocument ask all>>}}}\nsave all current TiddlyWiki contents to a new file, prompts for path/file\ntry it: <<newDocument ask all>>\n\n{{{<<newDocument ask snap>>}}}\ngenerates snapshot of currently displayed document, prompts for path/file\ntry it: <<newDocument ask snap>>\n\n{{{<<newDocument ask snap tiddlerNewDocumentPlugin>>}}}\ngenerates snapshot of this tiddler ONLY, prompts for path/file\ntry it: <<newDocument ask snap tiddlerNewDocumentPlugin>>\n\n<<<\n!!!!!Installation\n<<<\nImport (or copy/paste) the following tiddlers into your document:\n''NewDocumentPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2006.10.23 [1.5.1]'' in onClickNewDocument(), get saved parameter value for snapID instead of using default "contentWrapper" (oops!)\n''2006.10.18 [1.5.0]'' new optional param for 'snap'... specify alternative DOM element ID (default is still "contentWrapper"). Based on a suggestion from Xavier Verges.\n''2006.08.03 [1.4.3]'' in promptForFilename(), for IE (WinXP only), added handling for UserAccounts.CommonDialog\n''2006.07.29 [1.4.2]'' in onClickNewDocument(), okmsg display is now linked to newly created file\n''2006.07.24 [1.4.1]'' in promptForFilename(), check for nsIFilePicker.returnCancel to allow nsIFilePicker.returnOK **OR** nsIFilePicker.returnReplace to be processed.\n''2006.05.23 [1.4.0]'' due to very poor performance, support for tag *expressions* has been removed, in favor of a simpler "containsAny()" scan for tags.\n''2006.04.09 [1.3.6]'' in onClickNewDocument, added call to convertUnicodeToUTF8() to better handle international characters.\n''2006.03.15 [1.3.5]'' added nsIFilePicker() handler for selecting filename in moz-based browsers. IE and other non-moz browsers still use simple prompt() dialog\n''2006.03.15 [1.3.0]'' added "label:text" param for custom link text. added special "all" filter parameter for "save as..." handling (writes all tiddlers to output file)\n''2006.03.09 [1.2.0]'' added special "snap" filter parameter to generate and write "snapshot" files containing static HTML+CSS for currently rendered document.\n''2006.02.24 [1.1.2]'' Fix incompatiblity with TW 2.0.5 by removing custom definition of getLocalPath() (which is now part of TW core)\n''2006.02.03 [1.1.1]'' concatentate 'extra' params so that tag expressions don't have to be quoted. moved all text to 'formatted' string definitions for easier translation.\n''2006.02.03 [1.1.0]'' added support for tag EXPRESSIONS. plus improved documentation and code cleanup\n''2006.02.03 [1.0.0]'' Created.\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.newDocument = {major: 1, minor: 5, revision: 1, date: new Date(2006,10,23)};\n\nconfig.macros.newDocument = {\n newlabel: "new document",\n newprompt: "Create a new TiddlyWiki 'starter' document",\n newdefault: "new.html",\n allparam: "all",\n saveaslabel: "save as...",\n saveasprompt: "Save current TiddlyWiki to a different file",\n snapparam: "snap",\n snaplabel: "create a snapshot",\n snapprompt: "Create a 'snapshot' of the current TiddlyWiki display",\n snapdefault: "snapshot.html",\n snapID: "contentWrapper",\n snapIDprompt: "Please enter a DOM element ID for the desired content",\n snapIDerrmsg: "Unrecognized document element ID: '%0'",\n askparam: "ask",\n labelparam: "label:",\n fileprompt: "Please enter a filename",\n filter: "includeNew",\n filterprompt: "Match one or more tags:\sn(space-separated, use [[...]] around tags containing spaces)",\n filtererrmsg: "Error in tag filter '%0'",\n snapmsg: "Document snapshot written to %1",\n okmsg: "%0 tiddlers written to %1",\n failmsg: "An error occurred while creating %0"\n};\n\nconfig.macros.newDocument.handler = function(place,macroName,params) {\n\n var path=getLocalPath(document.location.href);\n var slashpos=path.lastIndexOf("/"); if (slashpos==-1) slashpos=path.lastIndexOf("\s\s"); \n if (slashpos!=-1) path = path.substr(0,slashpos+1); // remove filename from path, leave the trailing slash\n\n if (params[0] && params[0].substr(0,config.macros.newDocument.labelparam.length)==config.macros.newDocument.labelparam)\n var label=params.shift().substr(config.macros.newDocument.labelparam.length)\n var filename=params.shift(); if (!filename) filename=config.macros.newDocument.newdefault;\n if (params[0]==config.macros.newDocument.snapparam) {\n params.shift();\n if (!label) var label=config.macros.newDocument.snaplabel;\n var prompt=config.macros.newDocument.snapprompt;\n var defaultfile=config.macros.newDocument.snapdefault;\n var snapID=config.macros.newDocument.snapID;// default to "contentWrapper"\n if (params[0]) var snapID=params.shift(); // alternate DOM element for snapshot\n }\n if (params[0]==config.macros.newDocument.allparam) {\n if (!label) var label=config.macros.newDocument.saveaslabel;\n var prompt=config.macros.newDocument.saveasprompt;\n var defaultfile=getLocalPath(document.location.href);\n var slashpos=defaultfile.lastIndexOf("/"); if (slashpos==-1) slashpos=defaultfile.lastIndexOf("\s\s");\n if (slashpos!=-1) defaultfile=defaultfile.substr(slashpos+1); // get filename only\n }\n if (!prompt) var prompt=config.macros.newDocument.newprompt;\n if (!label) var label=config.macros.newDocument.newlabel;\n if (!defaultfile) var defaultfile=config.macros.newDocument.newdefault;\n\n var btn=createTiddlyButton(place,label,prompt,onClickNewDocument);\n btn.path=path;\n btn.file=filename;\n btn.defaultfile=defaultfile;\n btn.snapID=snapID; // NULL unless snapshot is being taken\n btn.filter=params.length?params:[config.macros.newDocument.filter]; \n}\n\n// IE needs explicit global scoping for functions called by browser events\nwindow.onClickNewDocument=function(e)\n{\n if (!e) var e = window.event; var btn=resolveTarget(e);\n\n // assemble document content, write file, report result\n var okmsg=config.macros.newDocument.okmsg;\n var failmsg=config.macros.newDocument.failmsg;\n var count=0;\n var out="";\n if (btn.snapID) { // HTML+CSS snapshot\n var snapID=btn.snapID;\n if (btn.snapID==config.macros.newDocument.askparam)\n snapID=prompt(config.macros.newDocument.snapIDprompt,config.macros.newDocument.snapID);\n if (!document.getElementById(snapID)) { // if specified element does not exist\n if (snapID) // ID=null if prompt was cancelled by user\n displayMessage(config.macros.newDocument.snapIDerrmsg.format([snapID]));\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n }\n var styles=document.getElementsByTagName("style");\n out+="<html>\sn<head>\sn<style>\sn";\n for(var i=0; i < styles.length; i++)\n out +="/* stylesheet from tiddler:"+styles[i].getAttribute("id")+" */\sn"+styles[i].innerHTML+"\sn\sn";\n out+="</style>\sn</head>\sn<body>\sn\sn"+document.getElementById(snapID).innerHTML+"\sn\sn</body>\sn</html>";\n okmsg=config.macros.newDocument.snapmsg;\n } else { // TW starter document\n // get the TiddlyWiki core code source\n var sourcefile=getLocalPath(document.location.href);\n var source=loadFile(sourcefile);\n if(source==null) { alert(config.messages.cantSaveError); return null; }\n var posOpeningDiv=source.indexOf(startSaveArea);\n var posClosingDiv=source.lastIndexOf(endSaveArea);\n if((posOpeningDiv==-1)||(posClosingDiv==-1)) { alert(config.messages.invalidFileError.format([sourcefile])); return; }\n // get the matching tiddler divs\n var match=btn.filter;\n if (match[0]==config.macros.newDocument.askparam) {\n var newfilt=prompt(config.macros.newDocument.filterprompt,config.macros.newDocument.filter);\n if (!newfilt) return; // cancelled by user\n match=newfilt.readMacroParams();\n }\n var storeAreaDivs=[];\n var tiddlers=store.getTiddlers('title');\n for (var i=0; i<tiddlers.length; i++)\n if (match[0]==config.macros.newDocument.allparam || (tiddlers[i].tags && tiddlers[i].tags.containsAny(match)) )\n storeAreaDivs.push(tiddlers[i].saveToDiv());\n out+=source.substr(0,posOpeningDiv+startSaveArea.length);\n out+=convertUnicodeToUTF8(storeAreaDivs.join("\sn"))+"\sn\st\st";\n out+=source.substr(posClosingDiv);\n count=storeAreaDivs.length;\n }\n // get output path/filename\n var filename=btn.file;\n if (filename==config.macros.newDocument.askparam)\n filename=promptForFilename(config.macros.newDocument.fileprompt,btn.path,btn.defaultfile);\n if (!filename) return; // cancelled by user\n // if specified file does not include a path, assemble fully qualified path and filename\n var slashpos=filename.lastIndexOf("/"); if (slashpos==-1) slashpos=filename.lastIndexOf("\s\s");\n if (slashpos==-1) filename=btn.path+filename;\n var ok=saveFile(filename,out);\n var msg=ok?okmsg.format([count,filename]):failmsg.format([filename]);\n var link=ok?"file:///"+filename.replace(regexpBackSlash,'/'):""; // change local path to link text\n clearMessage(); displayMessage(msg,link);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); return(false);\n}\n//}}}\n\n//{{{\nfunction promptForFilename(msg,path,file)\n{\n if(window.Components) { // moz\n try {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\n var nsIFilePicker = window.Components.interfaces.nsIFilePicker;\n var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);\n picker.init(window, msg, nsIFilePicker.modeSave);\n var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);\n thispath.initWithPath(path);\n picker.displayDirectory=thispath;\n picker.defaultExtension='html';\n picker.defaultString=file;\n picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);\n if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;\n }\n catch(e) { alert('error during local file access: '+e.toString()) }\n }\n else { // IE\n try { // XP only\n var s = new ActiveXObject('UserAccounts.CommonDialog');\n s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';\n s.FilterIndex=3; // default to HTML files;\n s.InitialDir=path;\n s.FileName=file;\n if (s.showOpen()) var result=s.FileName;\n }\n catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE\n }\n return result;\n}\n//}}}
/***\n| Name:|NewHerePlugin|\n| Description:|Creates the new here and new journal toolbar commands|\n| Version:|6.1.6|\n| Date:|06-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\nTo use edit your ViewTemplate and add newHere to the toolbar div, eg\n{{{<div class='toolbar' macro='toolbar ... newHere'></div>}}}\nNote: would be good if we could do this instead some day\n{{{<<newTiddler tag:{{tiddler.title}} label:'new here'>>}}}\n***/\n//{{{\nmerge(config.commands,{\n\n newHere: {\n text: 'new here',\n tooltip: 'Create a new tiddler tagged as this tiddler',\n hideReadOnly: true,\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var t=document.getElementById('tiddler'+title);\n story.displayTiddler(t,config.macros.newTiddler.title,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(config.macros.newTiddler.title, title, 0);\n story.focusTiddler(config.macros.newTiddler.title,"title"); // doesn't work??\n return false;\n }\n }\n },\n\n newJournalHere: {\n //text: 'new journal here', // too long\n text: 'new journal',\n hideReadOnly: true,\n dataFormat: 'DD MMM YYYY', // adjust to your preference\n //dataFormat: 'YYYY-0MM-0DD', \n tooltip: 'Create a new journal tiddler tagged as this tiddler',\n handler: function(e,src,title) {\n if (!readOnly) {\n clearMessage();\n var now = new Date();\n var t=document.getElementById('tiddler'+title);\n var newtitle = now.formatString(this.dataFormat)\n story.displayTiddler(t,newtitle,DEFAULT_EDIT_TEMPLATE);\n story.setTiddlerTag(newtitle, title, 0);\n story.focusTiddler(newtitle,"title");\n return false;\n }\n }\n }\n\n});\n//}}}\n
The {{{<<newJournal>>}}} macro creates a new tiddler with it's title set to the current date, and the cursor in the body text area ready to type.\n\nThis macro is identical to the NewTiddlerMacro except that the "title" parameter is treated as a DateFormatString so that you can specify your own date format.
The {{{<<newTiddler>>}}} macro displays a button that can be clicked to create a new tiddler. By default, the new tiddler is opened in edit mode or you can specify a custom template.\n\nThe available parameters are:\n\n|!Parameter |!Description |\n|label |The text of the button |\n|prompt |The tooltip for the button |\n|accessKey |The access key to trigger the button (specify a single letter; different browsers require a different modifier key like Alt- or Control-) |\n|focus |Which of the edittable fields to default the focus to (eg, "title", "text", "tags") |\n|template |The template to use to display the new tiddler (defaults to EditTemplate) |\n|text |The default text for the new tiddler |\n|title |The default title for the new tiddler |\n|tag |A single tag to be applied to the new tiddler (repeat this parameter to specify multiple tags) |\n\nFor example: <<newTiddler label:"try this" accessKey:1 focus:tags text:"hello there!" tag:greeting tag:"an example">> (can also be triggered with Alt-1)\n{{{\n<<newTiddler label:"try this" accessKey:1 focus:tags text:"hello there!" tag:greeting tag:"an example">>\n}}}\n\nYou can only prime the initial values of fields that map to a text input box in the specified template (for instance, if you specify the standard ViewTemplate as the template you won't be able to prime any fields). For example, this doesn't work as you might expect:\n{{{\n<<newTiddler template:ViewTemplate text:"To be or not to be">>\n}}}\n<<newTiddler template:ViewTemplate text:"To be or not to be">>\n
*http://wiki.ubuntuusers.de/Tuning\n*http://wiki.ubuntuusers.de/Spiele/Freespace2\n\nhttp://de.wikipedia.org/wiki/XChat\n\n[[Scrapbook|https://addons.mozilla.org/firefox/427/]]\nGNU-Linux Firewall: firestarter\n
abbreviation for [[Open Source|http://de.wikipedia.org/wiki/Open_Source]] Software.\n\n[[OSS|http://de.wikipedia.org/wiki/OSS]] is my new passion. I switched to Linux (Ubuntu) lately and abandoned Windows after one week already.
|''URL:''|file://./tiddlywiki/tiddlywiki.html|\n|''Description:''|my offline copy of TiddlyWiki|\n|''Author:''|JeremyRuston|
"This extension allows for customization of the Add Bookmark dialog."\nCan automatically unfold the bookmarks tree and some other things...\nhttps://addons.mozilla.org/firefox/42/
<<getPak openssh-server 'server is not installed by default'>>\nConfig file is {{{/etc/ssh/sshd_config}}}\nsource:\nhttp://wiki.ubuntuusers.de/SSH (german)\nhttps://help.ubuntu.com/community/AdvancedOpenSSH
These InterfaceOptions for customising TiddlyWiki are saved in your browser\n\nYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkSaveEmptyTemplate>> SaveEmptyTemplate\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\n----\nAdvancedOptions\nPluginManager\nImportTiddlers
!What is it?\n*simplifies lookup and installation of packages using console tools only\n*just a little script for me
*Where can I find information @@about installed packages@@?\n**see {{{/var/lib/dpkg/info/}}}\n*Where can I find information about @@not installed packages@@?\n**use {{{apt-cache search pakName}}} to search a package\n**use {{{apt-cache info pakName}}} to get information about a package\n**respectively use {{{aptitude}}}, which is a package manager
<!--{{{-->\n<div class='header'>\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<!--}}}-->
!Howto synchronize a Palm Handheld with Evolution\n!!my setup\n*Palm m515 (~PalmOS version 4.1)\n*USB cradle\n*[[Ubuntu]] edgy eft with [[Gnome]] and [[Evolution]]\n!!Outline\n#connect\n#create UDEV rule\n#configure\n#press Hotsynch button\n!!Detailed Instructions\n*Connect the USB cradle to your PC and put your Palm into the cradle.\n*Create following UDEV rule ({{{gksudo gedit /etc/udev/rules.d/10-custom.rules}}})\n{{{\nBUS="usb", SYSFS{product}="Palm Handheld*", KERNEL="ttyUSB*", NAME{ignore_remove}="pilot", MODE="666"\n}}}\n*go to System > Preferences > PalmOS Devices\n**in tab [PDAs] click [Add]. Defaults are [OK].\n**in tab [Devices] click [Add], check [USB] and [OK].\n**in tab [Conduits] enable the conduits you need (I use "Backup", "EAddress", "ECalendar", "EMemos", "EToDo" and "Time")\n**Please note, that I went through the wizard before, but do not know how to get there again. Nevertheless it should give similar options.\n!sources\nhttps://help.ubuntu.com/community/PalmDeviceSetup\n[[Writing UDEV rules|http://www.reactivated.net/writing_udev_rules.html]]
Wikipedia says that the [[parallel port|http://de.wikipedia.org/wiki/Parallele_Schnittstelle]] (a.k.a. line printing terminal - LPT) has a maximum transfer rate of 2 MB/s.\nThis is only the twentieth of real [[USB 2.0|http://de.wikipedia.org/wiki/USB]] rates.
|!table|!table|summin|\n|yeh|yeah|left|\n|whatever|@@highlight@@| right|\n|> |spacing| center |\nhttp://mptw.tiddlyspot.com/upgrade.html\n----\n{{{inline code}}}\n{{{\ncode paragraph\n}}}\n!my GetPackMacro in action\n<<getPak a-package>>\n<<getPak a-package 'this is a comment for a-package'>>\n!!code\n{{{\n<<getPak a-package>>\n<<getPak a-package 'this is a comment for a-package'>>\n}}}\n!my LongQuoteMacro in action\n<<longQuote 'test'>>\n!!code\n{{{\n{{longQuote{test}}}\n}}}\n!else\n<<toolbar closeTiddler>>\n{{{\n<<toolbar closeTiddler>>\n}}}\n<<slider sliderStatusCookie Firefox 'firefox slider label' 'tooltip'>>\n{{{\n<<slider firefoxSliderStatusCookie Firefox 'firefox slider label' 'tooltip'>>\n}}}\n<<newTiddler label:'some label' tag: tag1 title:'some title' text:"some text and maybe %title">>
[[tiddler]]\nhttp://link.to\n!h1\n!!h2\n!!!h3
<<plugins>>
<div class="viewer"><small><a href="index.html">Home</a> &gt; %1</small><h1>%0</h1>\n<h2>%1</h2>\n%2\n<hr>Tags: %3\n<hr>%4, %5&nbsp;(created %6)\n</div>\n<div class='tagging' macro='tagging'></div>
PyDev is an Eclipse extension that integrates python support.\n[[homepage|http://pydev.sourceforge.net/]] and [[tutorial|http://www.fabioz.com/pydev/manual_101_root.html]]\n!Tutorial Fragments\nwindow > preferences > pydev\n<<longQuote "Additionally, you may add other libraries that you want to treat as builtins, such as os, wxPython, OpenGL, cStringIO, etc. This is very important, because Pydev works on the java side only with static information, but some modules don't have much information when analyzed statically, so, Pydev creates a shell to get information on those. Another important thing is that they must be on your system pythonpath (otherwise, the shell will be unable to get that information).">>\n\n<<longQuote "You may finish in this screen or go to the next, where you will be asked which projects are referenced from this one. This is very important so that code completion works correctly. Also, the 'reference' is only one level deep. i.e. If you have a project A which depends on B, which in turn depends on C, you will have to make a reference from A to B and from A to C. It works basically getting the paths from the referenced projects and adding it to the PYTHONPATH for the project you're creating.">>\nhttp://www.fabioz.com/pydev/manual_101_first_module.html is about\n*pydev perspective (window > open perspective > other > pydev)\n*customize perspective (window > customize perspective)\n\n!Shortcuts\n|F9|python run|\n|C-F11|rerun last ran file|\n|F11|start debug session|\n|C-F10|add point|\n|C-F6|iterate through editors|\n|C-F7|iterate through views|\n|C-F8|iterate through perspectives|\nhttp://www.fabioz.com/pydev/manual_101_eclipse.html is about configuring eclips\n
http://pygtk.org/articles.html\nhttp://www.learningpython.com/2006/05/07/creating-a-gui-using-pygtk-and-glade/\n[[Rapid Application Development with Python and Glade|http://www.linuxjournal.com/article/7421]]\n[[Rapid Application Development with Python and Glade Resources|http://www.linuxjournal.com/article/7558]]
http://www-pcmdi.llnl.gov/software-portal/cdat/tips_and_tricks/python_tips/passing_arguments.html
!syntax bits from the [[python tutorial|http://www.python.org/doc/tut/node5.html]]\nEvery line is valid python syntax. Lines beginning with {{{>>>}}} or {{{...}}} are user input on the interactive console.\n{{{\n# difference between integer and float division\n(50-5*6)/3 # returns 6\n(50-5*6)/3.0 # returns 6.666666666666667\n\n# Strings\n>>> "doesn't"\n"doesn't"\n>>> '"Yes," he said.'\n'"Yes," he said.'\n>>> "\s"Yes,\s" he said."\n'"Yes," he said.'\n>>> '"Isn\s't," she said.'\n'"Isn\s't," she said.'\n\n>>> rawstring = r"a RAW string with a \sn and\s\n... a line break"\n>>> print rawstring\n\n>>> unicode_string = u'Hello\su0020World !'\n>>> print unicode_string\nHello World !\n}}}\n\n!Using Eclipse with Python\nsee PyDev
*What is this place?\n**This is a collection of notes I scribbled down while getting in touch with [[Ubuntu]]\n*Grub -> What are defoptions?\n**see {{{zless /usr/share/doc/grub/README.Debian.gz}}}
!Prerequisites\n*A fresh Ubuntu installation.\n*A [[Quake III Arena|http://www.idsoftware.com/games/quake/quake3-arena/]] CD (i.e. {{{pak0.pk3}}})\n!Roadmap\n#Set up graphics card\n#(Set up mouse)\n#Install ioquake3\n#copy pak0.pk3 (and config files)\n#Install xqf and look for servers (it's an online game browser like "The ~All-Seeying Eye")\n!!Set up graphics card\nIf you own an ''ATI Radeon'' card, you can use [[my tutorial|Setting up a Radeon graphics card]].\nNvidia card users need to install {{{nvidia-glx}}} and in replace {{{vesa}}} with {{{nvidia}}} in {{{/etc/X11/xorg.conf}}}.\n!!Set up mouse\nI own a Logitech MX 310, so if you own an MX series mouse too, you can follow [[my tutorial|Logitec MX310 tweaking]].\n!!Install ioquake3\nSimply get ioquake3 from [[ioquake3.org|http://ioquake3.org/?page=get]] and follow the installation instructions.\nI installed to {{{~/games/ioquake3}}}, let's save this main baseq3 folder in {{{$Q3DATA}}}.\nThere is another important directory, where config files are stored. We will save it as {{{$Q3CONF}}} (I love the bash):\n{{{\nQ3DATA=~/games/ioquake3/baseq3\nQ3CONF=~/.q3a/baseq3\n}}}\nIf you have installed q3 on windows, all you need is the path to it's baseq3. Else, you need the original CD. Let's save the path to baseq3:\n{{{\nOLD-Q3-DIR=/media/windows-mount/games/Quake\s III\s Arena/baseq3\n}}}\nModify this according to your needs.\n!!Copy pak0.pk3 and config files\n{{{\ncp $OLD-Q3-DIR/pak0.pk3 $Q3DATA\ncp $OLD-Q3-DIR/*.cfg $Q3CONF\n}}}\n!!Install xqf\n<<getPak xqf>>\nStart xqf, then go to //Preferences// -> //Games// and insert {{{/home/yourname/games/ioquake3/ioquake3}}} behind //Command Line//, {{{/home/yourname/games}}} behind //Working Directory// and maybe you want to add a custom config.\n!Troubleshooting\n!!Problems when rocket-jumping\nSee Emulate-3-Button-Mouse and disable the feature.\n!!Sound Problems\nQuake III Arena uses the old [[Open Sound System|http://en.wikipedia.org/wiki/Open_Sound_System]] and therefore has problems at mixing (for instance with teamspeak or xmms).\nIf you have an old sound card, put it in your pc and let it be recognized. Type {{{lspci}}} to check if it was recognized ({{{dmesg}}} should have a record too).\nGet a list of available interfaces with {{{ls /dev/*dsp*}}}. If you have two sound-cards there should be something similar to this:\n{{{\n$ ls /dev/*dsp*\n/dev/adsp /dev/dsp /dev/dsp1\n}}}\nStart [[Quake III Arena]] with {{{quake3 +set snddevice /dev/dsp1}}} and you should get sound from your other sound card.\n!Sources\nmy mind and the net
/***\n| Name:|QuickOpenTagPlugin|\n| Description:|Changes tag links to make it easier to open tags as tiddlers|\n| Version:|6.1.1|\n| Date:|01-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\n***/\n//{{{\nconfig.quickOpenTag = {\n\n dropdownChar: (document.all ? "\su25bc" : "\su25be"), // the little one doesn't work in IE\n\n createTagButton: function(place,tag,excludeTiddler) {\n // little hack so we can to <<tag PrettyTagName|RealTagName>>\n var splitTag = tag.split("|");\n var pretty = tag;\n if (splitTag.length == 2) {\n tag = splitTag[1];\n pretty = splitTag[0];\n }\n \n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyText(createTiddlyLink(sp,tag,false),pretty);\n \n var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if (excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n },\n\n miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,\n config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n },\n\n allTagsHandler: function(place,macroName,params) {\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul");\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (var t=0; t<tags.length; t++) {\n var theListItem = createTiddlyElement(theDateList,"li");\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n var theDropDownBtn = createTiddlyButton(theListItem," " +\n config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n },\n\n // todo fix these up a bit\n styles: \n"/*{{{*/\sn"+\n"/* created by QuickOpenTagPlugin */\sn"+\n".tagglyTagged .quickopentag, .tagged .quickopentag \sn"+\n" { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n"/* extra specificity to make it work right */\sn"+\n"#displayArea .viewer .quickopentag a.button, \sn"+\n"#displayArea .viewer .quickopentag a.tiddyLink, \sn"+\n"#mainMenu .quickopentag a.tiddyLink, \sn"+\n"#mainMenu .quickopentag a.tiddyLink \sn"+\n" { border:0px solid black; }\sn"+\n"#displayArea .viewer .quickopentag a.button, \sn"+\n"#mainMenu .quickopentag a.button \sn"+\n" { margin-left:0px; padding-left:2px; }\sn"+\n"#displayArea .viewer .quickopentag a.tiddlyLink, \sn"+\n"#mainMenu .quickopentag a.tiddlyLink \sn"+\n" { margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }\sn"+\n"a.miniTag {font-size:150%;} \sn"+\n"#mainMenu .quickopentag a.button \sn"+\n" /* looks better in right justified main menus */\sn"+\n" { margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }\sn" + \n"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\sn" +\n"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\sn" +\n"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\sn" +\n"/*}}}*/\sn"+\n "",\n\n init: function() {\n // we fully replace these builtins. can't hijack them easily\n window.createTagButton = this.createTagButton;\n config.macros.allTags.handler = this.allTagsHandler;\n config.macros.miniTag = { handler: this.miniTagHandler };\n config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;\n if (store)\n store.addNotification("QuickOpenTagStyles",refreshStyles);\n else\n config.notifyTiddlers.push({name:"QuickOpenTagStyles", notify: refreshStyles});\n }\n\n}\n\nconfig.quickOpenTag.init();\n\n//}}}\n
|''URL:''|http://solo.dc3.com/tw/|\n|''Description:''|Bob Denny's extensions to TiddlyWiki|\n|''Author:''|BobDenny|
/***\n| Name:|RenameTagsPlugin|\n| Description:|Allows you to easily rename or delete tags across multiple tiddlers|\n| Version:|6.1.18|\n| Date:|18-Oct-2006|\n| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|\n| Author:|Simon Baird <simon.baird@gmail.com>|\n| CoreVersion:|2.1.x|\nRename a tag and you will be prompted to rename it in all its tagged tiddlers.\n***/\n//{{{\nconfig.renameTags = {\n\n prompts: {\n rename: "Rename the tag '%0' to '%1' in %2 tidder%3?"