<?xml version="1.0" encoding="utf-8"?>
   <feed version="0.3" xmlns="http://purl.org/atom/ns#">

     <title>Flying Meat's Wiki.</title>
     <link href="http://www.flyingmeat.com/fs/" rel="alternate" title="Flying Meat's Wiki." type="text/html" />
     <modified>2005-06-24T14:55:33Z</modified>
     <author>
       <name>Flying Meat Inc. and Friends of Flying Meat</name>
     </author>
     <id>urn:uuid:547f7640-0089-44d0-a983-c2933b9c30df</id>
  <entry>
       <title>VoodooPad: Start Page</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/353ec59a-c72a-01d9-1c37-c0cbe4c4b920" rel="alternate" title="VoodooPad: Start Page" type="text/html" />
       <id>urn:uuid:353ec59a-c72a-01d9-1c37-c0cbe4c4b920:83</id>
       <modified>2007-12-16T17:22:51Z</modified>
       <issued>2005-05-17T16:20:08Z</issued>
       <summary type="text/html"><html>h2. VoodooPad 3.0<br/>
<br/>
* &amp;lt;b&amp;gt;VoodooPad Tutorial&amp;lt;/b&amp;gt;: A gentle ~introduction to what VoodooPad is all about.<br/>
<br/>
* &amp;lt;b&amp;gt;Glossary&amp;lt;/b&amp;gt;: Terms you might want to learn to get around in VoodooPad.<br/>
<br/>
* &amp;lt;b&amp;gt;FAQ&amp;lt;/b&amp;gt; (Frequently Asked Questions)<br/>
<br/>
* &amp;lt;b&amp;gt;Script Plugins&amp;lt;/b&amp;gt;: Learn how to extend VoodooPad with simple scripts.<br/>
<br/>
* &amp;lt;b&amp;gt;Lua Plugin Snippets&amp;lt;/b&amp;gt;: Lots of examples of useful scripts.<br/>
<br/>
* &amp;lt;b&amp;gt;AppleScript&amp;lt;/b&amp;gt;: Learn how to automate VoodooPad with Apple's scripting language.<br/>
<br/>
* &amp;lt;b&amp;gt;Aliases&amp;lt;/b&amp;gt;: Make words or phrases link to another page.<br/>
<br/>
* &amp;lt;b&amp;gt;Encryption in VoodooPad&amp;lt;/b&amp;gt;: Hide your data from prying eyes.<br/>
<br/>
* &amp;lt;b&amp;gt;How to register VoodooPad&amp;lt;/b&amp;gt;: You bought it- now how do you stop the nagging?<br/>
<br/>
* &amp;lt;b&amp;gt;Page Templates&amp;lt;/b&amp;gt;: Customize the look of new pages.<br/>
<br/>
* &amp;lt;b&amp;gt;Web Export&amp;lt;/b&amp;gt;: Flexible exporting of your documents as HTML<br/>
<br/>
* &amp;lt;b&amp;gt;Categories&amp;lt;/b&amp;gt;: Organize pages in VoodooPad document according to topics<br/>
<br/>
* &amp;lt;b&amp;gt;Tips&amp;lt;/b&amp;gt;: Random bits of info.<br/>
<br/>
* &amp;lt;b&amp;gt;Plugins&amp;lt;/b&amp;gt;: Add functionality to VoodooPad via a downloadable plugin.<br/>
<br/>
* &amp;lt;b&amp;gt;Linking, Pasting, and Embedding Files&amp;lt;/b&amp;gt;: How does some stuff (like images) get in there anyway?<br/>
<br/>
* &amp;lt;b&amp;gt;Hidden Preferences&amp;lt;/b&amp;gt;: Change certain behaviors of VoodooPad<br/>
<br/>
* &amp;lt;b&amp;gt;Data Sent to Flying Meat&amp;lt;/b&amp;gt;: Find out what bits of information is sent to the mothership.<br/>
<br/>
* &amp;lt;b&amp;gt;Old Versions&amp;lt;/b&amp;gt;: Need to grab a previous version of VoodooPad?<br/>
<br/>
h2. VoodooPad Pro<br/>
<br/>
* &amp;lt;b&amp;gt;Triggers&amp;lt;/b&amp;gt;:  Script VoodooPad during specific events.<br/>
<br/>
* &amp;lt;b&amp;gt;Web Server&amp;lt;/b&amp;gt;:  Share pages of your document to friends and co-workers.<br/>
<br/>
* &amp;lt;b&amp;gt;Page Meta&amp;lt;/b&amp;gt;: Customizable attributes for pages.<br/>
<br/>
h3. Online<br/>
<br/>
* "VoodooPad's mailing list / Yahoo! group":http://groups.yahoo.com/group/voodoopad/<br/>
Talk with and receive information from VoodooPad users around the world.<br/>
<br/>
* "The official website":http://flyingmeat.com/voodoopad/<br/>
<br/>
<br/>
<br/>
h3. Version information:<br/>
<br/>
* New in 3.5<br/>
* New in 3.2<br/>
* New in 3.1<br/>
* New in 3.0<br/>
* New in 2.5<br/>
* New in 2.1<br/>
* New in 2.0<br/>
<br/>
<br/>
* "List of all pages":/fs/flystashweb.cgi?allPages=1&amp;amp;space=353ec59a-c72a-01d9-0eb2-c0cbe4c48523</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: New in 3.5</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/2dc35f78-ac3e-01dc-01d4-c0cbe4c4bd91" rel="alternate" title="VoodooPad: New in 3.5" type="text/html" />
       <id>urn:uuid:2dc35f78-ac3e-01dc-01d4-c0cbe4c4bd91:3</id>
       <modified>2007-12-16T17:22:39Z</modified>
       <issued>2007-12-16T17:19:57Z</issued>
       <summary type="text/html"><html>h2. VoodooPad 3.5:<br/>
<br/>
h3. New Features:<br/>
<br/>
* Double clicking an image open it up in a suitable external editor (such as Acorn or Preview or Photoshop or whatever).  Saving the image will then update the original image located in your VoodooPad Page.  You've seen Acorn, right? http://flyingmeat.com/acorn/<br/>
* You can now edit pages and sort the results in the search window (woo!).<br/>
* Option-clicking on a tab close button will close all the open tabs except the one clicked on.<br/>
* The "default page text" in the preferences now accepts rich text, so you can embolden certain phrases or whatever.  Go crazy.<br/>
* Pages served up via VoodooPad Pro's built in webserver look a whole lot better, especially on the iPhone.<br/>
* Speaking of the webserver- you now have the ability to search through all the pages when looking at a document in your browser (VoodooPad Pro only).<br/>
* The zoom factor of the page is remembered in the document workspace, so it'll be remembered between launches.<br/>
* When splitting a document, links to pages in the original document are retained for the pages being copied out.<br/>
* Added a page index to the default Web Export templates.  Now you have a handy list of all the pages in your Web Export.<br/>
* New AppleScript: tell window 1 of application "VoodooPad" to insert text "hello world!"<br/>
* New AppleScript command to add/embed a file to the current document.<br/>
* Added an option to VoodooPad AppleScript export command- "with synchronous", which makes the export happen in the foreground.<br/>
<br/>
h3. Changes:<br/>
<br/>
* Reworked AppleScript implementation, which may require changes to your previous AppleScripts.<br/>
* No longer showing the license when starting up a new version.  Please don't sue me.<br/>
* Cleaned up a preferences dialog box which could be confusing.<br/>
* Exporting to the iPod Notes folder is now done on a background thread, which makes things more responsive if you have a ton of pages.<br/>
* Changed the shortcut for deleting a page from Command-D to Command-Shift-D, making in less likely to hit by accident.<br/>
* Double clicking an image with the option key down will now prompt you to save the image.<br/>
<br/>
h3. Bug Fixes:<br/>
<br/>
* Fixed a problem where cmd-w wouldn't always close a window.<br/>
* VoodooPad Lite no longer tries to install plugins, which it can't use.<br/>
* Fixed a bug where the wiki engine would not markup a link directly following an email in the format 'first.last@foo.com'.<br/>
* You can now copy and paste linkback data across pages.<br/>
* Fixed some issues where list bullets would seemingly pop out of nowhere.<br/>
* Fixed a bug where VP would crash with certain embedded webarchives.<br/>
<br/>
h3. Other:<br/>
<br/>
* New hidden pref for writing out images to the iPod Notes folder (Only works on 5th gen iPods):<br/>
	defaults write com.flyingmeat.VoodooPad_Pro writeIpodImages 1<br/>
* When exporting to the iPod notes folder, pages that have been deleted from the document but were still around from the last export are now cleaned up<br/>
* New hidden pref: defaults write com.flyingmeat.VoodooPad_Pro alwaysShowRuler 1<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Simple AppleScript Examples</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/8596b25e-3567-01da-0fb1-c0cbe4c4b51f" rel="alternate" title="VoodooPad: Simple AppleScript Examples" type="text/html" />
       <id>urn:uuid:8596b25e-3567-01da-0fb1-c0cbe4c4b51f:35</id>
       <modified>2007-12-16T16:02:51Z</modified>
       <issued>2005-10-04T23:16:10Z</issued>
       <summary type="text/html"><html>h2. Here are some snippets of AppleScript that you might find handy.<br/>
<br/>
Note: These are examples that work in VoodooPad 3.5.  If you have a previous version of VoodooPad, check the help files that came with that version.  For folks with VoodooPad Pro, just substitute "VoodooPad Pro" where you see "VoodooPad below.<br/>
<br/>
*Prepend to the top of a page:*<br/>
<br/>
&amp;lt;carea class="textareaCodeMini"&amp;gt;tell application "VoodooPad"<br/>
	tell page "index" of document 1 to prepend text "this goes at the top" &amp;amp; return<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Append to the bottom of a page:*<br/>
<br/>
&amp;lt;carea class="textareaCodeMini"&amp;gt;tell application "VoodooPad Pro"<br/>
	tell page "junk" of document 1 to append text "this goes at the bottom" &amp;amp; return<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Create a new page:*<br/>
<br/>
&amp;lt;carea class="textareaCodeMini"&amp;gt;tell application "VoodooPad"<br/>
	tell document 1 to create new page with name "new page" with content "This is a new page."<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Export to iPod:*<br/>
<br/>
&amp;lt;carea class="textareaCodeMedium"&amp;gt;tell application "VoodooPad"  <br/>
  -- this is the path to your document.<br/>
  open "srv:Users:gus:Desktop:astest.vdoc" as alias<br/>
  tell front document<br/>
    export to ipod<br/>
  end tell<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Getting text from a specific page*:<br/>
<br/>
&amp;lt;carea class="textareaCodeMini"&amp;gt;tell application "VoodooPad"<br/>
	set theString to (text of page "index" of document 1) as string<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*An example that loops through all the pages and displays it's name and contents*<br/>
<br/>
&amp;lt;carea class="textareaCode"&amp;gt;tell application "VoodooPad"<br/>
    tell document 1<br/>
        repeat with i from 1 to number of items in pages<br/>
            set s to text of page i<br/>
            set n to name of page i<br/>
            display dialog n &amp;amp; return &amp;amp; s<br/>
        end repeat<br/>
    end tell<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*An example that loops through all the pages, and prepends some text to every page*<br/>
<br/>
&amp;lt;carea class="textareaCodeSmall"&amp;gt;tell application "VoodooPad"<br/>
	repeat with i from 1 to number of items in pages of document 1<br/>
		set n to name of page i of document 1<br/>
		tell page n of document 1 to prepend text "this goes at the top" &amp;amp; return<br/>
	end repeat<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Sort and pull out pages by create page:*<br/>
<br/>
&amp;lt;carea class="textareaCode"&amp;gt;tell application "VoodooPad Pro"<br/>
	set theDoc to first document<br/>
	tell theDoc<br/>
		<br/>
		set myList to ordered names sorted by create date<br/>
		<br/>
		repeat with idx from 1 to number of items in myList<br/>
			set pageName to item idx of myList<br/>
			set s to text of (page pageName of theDoc)<br/>
			-- now do something exciting with s<br/>
		end repeat<br/>
		<br/>
		-- we could have also done:<br/>
		-- set myList to ordered names sorted by modified date<br/>
		-- set myList to ordered names -- default, sorted by key<br/>
		<br/>
	end tell<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
*Call into VoodooPad's scripting language "Lua" from AppleScript* (it's kind of crazy)<br/>
<br/>
&amp;lt;carea class="textareaCode"&amp;gt;tell application "VoodooPad Pro"<br/>
	set s to "print 'Hello World!'; table.foreach(applescriptProperties, print); applescriptProperties.output = 'Hello from the return value!'"<br/>
	tell window 1<br/>
		set x to use plugin named "Lua Script" with properties {source:s, aprop:"This is a property passed in"}<br/>
		display dialog x<br/>
	end tell<br/>
	<br/>
	set s to "applescriptProperties.output = windowController:textView():string()"<br/>
	tell window 1<br/>
		set x to use plugin named "Lua Script" with properties {source:s}<br/>
		display dialog (x as string)<br/>
	end tell<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*Fun with Meta Values*<br/>
<br/>
&amp;lt;carea class="textareaCode300"&amp;gt;tell application "VoodooPad Pro"<br/>
	set currentPage to current page name<br/>
	<br/>
	tell page currentPage of document 1 to add meta record with value {|the key|:"the value"}<br/>
	<br/>
	activate<br/>
	display dialog "did it add?"<br/>
	<br/>
	set thePageMeta to meta record of page currentPage of document 1<br/>
	<br/>
	set s to |the key| of thePageMeta<br/>
	<br/>
	display dialog s<br/>
	<br/>
	tell page currentPage of document 1 to remove meta record with key "the key"<br/>
	<br/>
	delay 1<br/>
	<br/>
	display dialog "did it go away?"<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*Fun with Categories*<br/>
<br/>
&amp;lt;carea class="textareaCode300"&amp;gt;tell application "VoodooPad Pro"<br/>
	set currentPage to current page name<br/>
	activate<br/>
	tell page currentPage of document 1 to add category named "foo"<br/>
	delay 1<br/>
	display dialog "did it add?"<br/>
	tell page currentPage of document 1 to remove category named "foo"<br/>
	delay 1<br/>
	display dialog "did it remove?"<br/>
end tell<br/>
tell application "VoodooPad Pro"<br/>
	activate<br/>
	tell document 1 to add category named "Foo"<br/>
	delay 1<br/>
	display dialog "did it add?"	<br/>
	tell document 1 to remove category named "Foo"<br/>
	delay 1<br/>
	display dialog "did it remove?"	<br/>
end tell&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>Flying Meat: Start Page</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/c2cde496-c729-01d9-0405-c0cbe4c4a89b" rel="alternate" title="Flying Meat: Start Page" type="text/html" />
       <id>urn:uuid:c2cde496-c729-01d9-0405-c0cbe4c4a89b:41</id>
       <modified>2007-09-13T14:39:38Z</modified>
       <issued>2005-05-17T16:16:56Z</issued>
       <summary type="text/html"><html>h2. Welcome to Flying Meat's online documentation.<br/>
<br/>
There are a couple of spaces on this here that you might be interested in:<br/>
<br/>
* "Acorn":http://www.flyingmeat.com/acorn/docs/<br/>
A simple and easy to bitmap image editor<br/>
<br/>
* "VoodooPad":$scriptName$/space-353ec59a-c72a-01d9-0eb2-c0cbe4c48523<br/>
The award winning desktop wiki for Mac OS X.  You put your brain in it.<br/>
<br/>
<br/>
* "FlySketch":$scriptName$/space-442576da-c72a-01d9-1c64-c0cbe4c4e230<br/>
Draw, highlight, everywhere.<br/>
<br/>
* "FlyGesture":$scriptName$/space-4982c31c-c72a-01d9-1928-c0cbe4c4ee67<br/>
Move a little, do a lot.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Encryption</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/f5eafb3e-1fda-01da-16f7-c0cbe4c4fd6d" rel="alternate" title="VoodooPad: Encryption" type="text/html" />
       <id>urn:uuid:f5eafb3e-1fda-01da-16f7-c0cbe4c4fd6d:8</id>
       <modified>2007-08-24T11:57:23Z</modified>
       <issued>2005-09-07T13:07:05Z</issued>
       <summary type="text/html"><html>h1.  Encryption in VoodooPad<br/>
<br/>
There are two ways to encrypt your data in VoodooPad.  The first one (available in VoodooPad and VoodooPad Pro) is the ability to encrypt a single page.  This is known as "Page Level Encryption".  The second way (available in Voodoopad Pro only) is known as "Document Level Encryption".  We'll go over Page Level Encryption first.<br/>
<br/>
h2. Page Level Encryption<br/>
<br/>
VoodooPad supports encrypting pages one at time, so you can have a mix of encrypted and unencrypted pages in a single document.<br/>
<br/>
When encrypting a page, you are prompted to enter your password twice (to make sure your typing matches your intentions), and an option to keep the password in the Keychain.<br/>
<br/>
p=. !$imagesDir$/voodoopad/encryptsheet.png! &amp;lt;br/&amp;gt;(encrypting a page)<br/>
<br/>
When you place your password on the Keychain, you won't have to remember it when decrypting or encrypting your page.  If you change your mind later and you would like to have your password removed from the Keychain, hold down the option key when decrypting the page and the password will be removed from the Keychain.  Holding down the option key when encrypting will bring up the sheet regardless if you have the password on the Keychain or not.<br/>
<br/>
p=. !$imagesDir$/voodoopad/decryptsheet.png! &amp;lt;br/&amp;gt;(decrypting a page) <br/>
<br/>
<br/>
h2. Document Level Encryption<br/>
<br/>
VoodooPad Pro has the ability to make your whole document encrypted.  With this in effect, you enter your password once when opening up your document, and you gain access to all your pages inside.<br/>
<br/>
To remove a password from an encrypted document choose "Set Document Password..." from the Edit menu, and leave the password fields empty.  To add a password to a plain document, choose "Change Document Password..." from the Edit menu and enter your password in the fields.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Editing Text</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/c14ec986-ccba-01da-15c6-c0cbe4c4b595" rel="alternate" title="VoodooPad: Editing Text" type="text/html" />
       <id>urn:uuid:c14ec986-ccba-01da-15c6-c0cbe4c4b595:6</id>
       <modified>2007-07-17T14:12:32Z</modified>
       <issued>2006-04-15T13:02:24Z</issued>
       <summary type="text/html"><html>h2. Editing Text<br/>
<br/>
As we mentioned earlier, text editing in VoodooPad is very similar to editing the text in a Rich Text document using TextEdit (and most other rich text editors on the Mac). However, because the rich text features of the Mac's text system are more similar to a word processor than to a simple text editor, we'll review a few of these features to be sure you're aware of their availability in VoodooPad.<br/>
<br/>
On the other hand, because most of this functionality is so basic to Mac OS X, we'll make use of the hyperlinking capability of VoodooPad to reference much of this topic so you can move through it quickly if it's already familiar. If you see an editing capability referenced followed by the parenthesized note: "see edit details", simply click on the edit details link. The resulting page will have a link back to this one.<br/>
<br/>
Open a new VoodooPad document by choosing File-&amp;gt;New Document, or by pressing Shft-Cmd-N on the keyboard. When the the new window opens you should see the same document, with the heading: "VoodooPad,  You put your brain in it." that you saw the last time we created a new VoodooPad document.<br/>
<br/>
h3. Letter, Word and Paragraph Selection<br/>
<br/>
We can select a letter, word or paragraph by clicking and dragging across them. Dragging across letters contains no surprises (see edit details). Doing so allows us to demonstrate text resizing on individual letters in a word (see edit details).<br/>
<br/>
Notice the ease with which you can precisely select words by double clicking on the first and dragging across more (see edit details). We can also add to existing text properties in a selection (see edit details).<br/>
<br/>
Finally, a paragraph is most easily selected by triple clicking and multiple paragraphs are easily selected by triple clicking and dragging (see edit details).<br/>
<br/>
h3. Multiple Undo<br/>
<br/>
As with most things Macintosh, we can undo what we've done by choosing Edit-&amp;gt;Undo or pressing the Cmd-z keys. In fact, if we press Cmd-z often enough, or simply hold it down for a few seconds, we can undo all the changes we've just made on this page.<br/>
<br/>
h3. Font Properties<br/>
<br/>
Triple click to select the first paragraph of the page. Now choose Format-&amp;gt;Font-&amp;gt;Strike Out. We can undo the strike outs by pressing Cmd-z or by choosing Format-&amp;gt;Font-&amp;gt;Strike Out again while the strike out text is still selected.<br/>
<br/>
Click on the Format menu item and drag to the Font item to see its submenu. Notice the things you can do directly from this menu:<br/>
<br/>
• Bold, Italic, Strike Out, Underline to change font properties<br/>
• Bigger, Smaller to incrementally increase or decrease the selected text size<br/>
• Kern to spread letters apart or compress them horizontally<br/>
• Ligature to add ligatures used in your font<br/>
• Baseline to raise or lower the baseline of selected text<br/>
<br/>
...and so forth.<br/>
<br/>
Feel free to play with these properties if you're not familiar with them. In particular, with some text selected, choose Underline. Notice that rather than underlining the text, VoodooPad instead displays this panel:<br/>
<br/>
p=. !/fs/images/voodoopad/75dd7441-ab3b-47b0-b296-ae12f073fc00.png!<br/>
<br/>
The reason for this preference is that VoodooPad uses both underlining and text color to indicate links. It can be difficult to determine which underlined words really represent links if non-link words and phrases are also underlined and/or colored. Use the application's Preferences panel to change from the default with care.<br/>
<br/>
With the first paragraph still selected, choose Format-&amp;gt;Font-&amp;gt;Show Fonts to bring up the Font pallette. This allows us to choose a new font for the selected text, change it's size and many other of it's properties.<br/>
<br/>
To create the perception of lifting some text off the page, for instance, try clicking on the rectangle centered directly under the "Font" title of the Font pallette. To confirm that you've selected the correct rectangle, just hold the mouse pointer on the rectangle for a few moments until a tool tip pops up indicating that this is the Text Shadow rectangle. If it says something else, try again.<br/>
<br/>
With the first paragraph selected when this rectangle is activated, the text in the paragraph will display shadows for each character. Directly to the right of the rectangle are three sliders, slide the first about 2/3 of the way towards the right, slide the second about 1/8 from the left and slide the third about 3/4 of the way toward the right.<br/>
<br/>
As you do this, notice how the text seems to lift off the page. You can also click and drag the  small indentation in the circle to the right of the third slider. As you do this, you'll see an apparent shift of the virtual light illuminating the text to cast the shadows at a changing angle.<br/>
<br/>
h3. Font Colors<br/>
<br/>
You can also choose Format-&amp;gt;Font-&amp;gt;Show Colors to display the color pallette. However, like underlining, by default you will not be able to change text colors. Choose VoodooPad-&amp;gt;Preferences... and select the Appearance tab to change this default behavior.<br/>
<br/>
Text Alignment and the Ruler<br/>
<br/>
In our overview, we touched on the text ruler. Triple click on the third paragraph to select the entire paragraph and bring the ruler up again by choosing Format-&amp;gt;Text-&amp;gt;Show Ruler.<br/>
<br/>
The text ruler is  primarily used for setting page margins, paragraph indentation, tabs and alignment or justification. It also has pop-down menus for selecting line spacing, bullet point styles and an alternate means of selecting font properties.<br/>
<br/>
With the third paragraph still selected, click on the third tab in the ruler tab bar that looks like this:<br/>
<br/>
p=. !/fs/images/voodoopad/c409211f-aa65-456e-a6de-1d676134f1aa.png!<br/>
<br/>
This should justify (or straighten the edges of) the paragraph on both sides. Now select the document title, "You put your brain in it." and click the far left of the four tabs to left justify the title.<br/>
<br/>
h3. Setting Tabs<br/>
<br/>
As a final demonstration of VoodooPad's standard text editing features, let's set some tab stops. First be sure that the VoodooPad window is wide enough by looking for the red Delete icon in the far right side of window's tool bar. If the far right icon is not the red Delete icon, then drag the lower right corner of the window to the right until red Delete icon appears.<br/>
<br/>
Next scroll to the bottom of the page and click to place the text insertion bar at the very end of the text. Press the Return key a couple times to make some room. Then type in the following text. Note that as you do so, space each word or number from the others by a single tab:<br/>
<br/>
!/fs/images/voodoopad/2d4b8519-da93-4076-ba14-52d4e62c6f29.png!<br/>
<br/>
Be sure that you've entered no spaces but only a single tab between each word or number. Then select all of the text in those five lines. With all five lines selected, go to the text ruler at the top of the window and drag all the tab stops that are to the left of the 5" mark out of the ruler. Don't worry if words or numbers in the five lines we've selected seem to go a bit berserk. We'll bring order to them shortly.<br/>
<br/>
Look for the tab stop well at the far right of the ruler which looks like this:<br/>
<br/>
p=. !/fs/images/voodoopad/57efe984-c71f-4add-9969-1de57423fbe3.png!<br/>
<br/>
Put your mouse pointer on each of the icons in the tab stop well for a couple seconds until a tool tips label appears. You should see that they are called from left to right respectively, the "Left tab stop", the "Center tab stop", the "Right tab stop" and the "Decimal tab stop".<br/>
<br/>
Now drag a left tab stop from the tab stop well to the ruler and drop it at the top of the 3/4" mark. Next drag a Center tab stop from the well and drop it on the 2 1/4" mark. Next drag a Decimal tab stop from the well and drop it on the 3 1/4" mark. Finally, drag a Decimal tab stop from the well and drop it on the 4 1/4" mark.<br/>
<br/>
If you've done this correctly, your five lines should now look like this:<br/>
<br/>
!/fs/images/voodoopad/bd09eaad-e1d3-448d-a6ed-570883e3497b.png!<br/>
<br/>
Notice that the words in the Item column are left justified in the column. The numbers in the Quantity column are centered and the money amounts in the Price and Amount columns are aligned on their decimal points. Also notice a couple weaknesses in our formatting: the numbers in the number column should probably be centered in the column and the headers for the Price and Amount columns are right justified on the Decimal tab stops for each of those columns.<br/>
<br/>
We could clean this up a bit by using different tab stops for the heading line then we used in the item and total lines, and by centering the numbers in the Number column, but we've demonstrated how the tab stops can be used and that was our objective in this tutorial.<br/>
<br/>
If the resulting columnar list makes you uncomfortable, feel free to clean it up by inserting a tab at the left end of each of the last four lines, selecting only those four lines and adding a Center tab stop at the 1/4" mark. You can also select only the header line and replace the two Decimal tab stops there with two left tab stops placed at the 3" and the 4" marks. If you decide to do that, your result should look as follows:<br/>
<br/>
!/fs/images/voodoopad/1dbfdbf1-3fa1-44b1-8170-8c9c72dc2263.png!<br/>
<br/>
But wait a minute, you say...  the price for VoodooPad and FlySketch are $39.95, not $19.95! However, we reply, if you buy them in quantities of two or more, they're only $19.95 each.<br/>
<br/>
Advanced Text Editing<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Importing and Exporting</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/53020980-ccaa-01da-067c-c0cbe4c4b7b0" rel="alternate" title="VoodooPad: Importing and Exporting" type="text/html" />
       <id>urn:uuid:53020980-ccaa-01da-067c-c0cbe4c4b7b0:10</id>
       <modified>2007-07-17T14:10:37Z</modified>
       <issued>2006-04-15T11:04:46Z</issued>
       <summary type="text/html"><html>h2. Importing and Exporting<br/>
<br/>
How does one publish or distribute a VoodooPad document?<br/>
<br/>
Beyond just emailing the VoodooPad document itself (which only works if the recipient also has the application), VoodooPad gives us other ways to export our work for distribution:<br/>
<br/>
* as a set of RTFD files (Rich Text Format with graphics)<br/>
* as a set of plain text files<br/>
* as Microsoft Word documents<br/>
* as an XML file<br/>
* to your iPod<br/>
* to HTML pages that retain the same links<br/>
<br/>
Let's try these one at a time.<br/>
<br/>
h3. Exporting as RTFD<br/>
<br/>
First, create a folder on your desktop or in your home folder in which to do some playing. For purposes of our discussion, we'll call it VDTemp but  you can call it any other name you can remember. <br/>
<br/>
If you've closed the LinksAndPages.vpdoc VoodooPad document, let's open it again. When it's open, choose File-&amp;gt;Export-&amp;gt;Export as RTFD files...  Navigate the resulting File Save sheet to your new folder, VDTemp, then click the Export button.<br/>
<br/>
Now open a Finder window into the VDTemp folder. You should see four documents in the folder:<br/>
<br/>
* HyperLinks.rtfd<br/>
* Index.rtfd<br/>
* manual creation of links.rtfd<br/>
* VoodooPad.rtfd<br/>
<br/>
If you double click on the Index.rtfd document, it should open in TextEdit as a Rich Text document containing the content of the page named VoodooPad from our LinksAndPages.vpdoc VoodooPad document.<br/>
<br/>
Notice that all of the links that were present on that page in LinksAndPage.vpdoc are present here, but though they look like links, they're not. That's because TextEdit doesn't support links between TextEdit documents.<br/>
<br/>
Instead of creating a single document with an arbitrary page order, VoodooPad creates a set of documents, one for each page, in a folder. You can reorder them and print them in any order you desire, rather than having an arbitrary order forced on you.<br/>
<br/>
When you've examined those pages sufficiently, throw them in the trash (or drag them to some other folder) to clear the VDTemp folder for our next experiment.<br/>
<br/>
h3. Exporting as Plain Text<br/>
<br/>
Next, let's try exporting as plain text. Once again, click on the LinksAndPages.vpdoc to make it active. This time choose File-&amp;gt;Export-&amp;gt;Export as Text files... Once again navigate the resulting Save File sheet to our VDTemp folder and click the Export button.<br/>
<br/>
Go back to the Finder window (or open a new one) in the VDTemp folder. Notice now that we have four files named the same as before, except this time they have the .txt suffix. Let's double click on Index.txt to open it again in TextEdit and examine its contents.<br/>
<br/>
This time we see the same content that was in our Index page, but all in the same font with no font styles and no apparent links, not even simulated links. This should not be a surprise, since this was created as a plain text document. So if your only interest is in the content of your pages without regard to any formatting, this would be the appropriate export method.<br/>
<br/>
h3. Exporting as XML<br/>
<br/>
Once again, clear the VDTemp folder for our next experiment. This time, choose File-&amp;gt;Export-&amp;gt;Export as XML..., navigate the Save File sheet to the VDTemp folder and click Save. When we go back to our Finder window in VDTemp, we have a small surprise. Instead of four files, one for each page in the original document, we only have a single file named after the VoodooPad document and suffixed with ".xml".<br/>
<br/>
Double clicking on this file could lead to various results depending on what applications you've installed that can open XML files. To make your results predictable so we can examine the file together, first open the TextEdit application (if it's not already open) and from its File menu, choose File-&amp;gt;Open. Navigate the resulting File Open dialog box to our VDTemp folder and open the LinksAndPages.xml document.<br/>
<br/>
It's beyond the scope of this tutorial to delve very deeply into what we're seeing here. It's legitimate XML, so if you're familiar with the XML format, the content of this open file might make some sense to you. For our purposes, it's sufficient to expose the file and add that this method of export works for at least two purposes:<br/>
<br/>
* to take a backup of our LinksAndPages.vpdoc document from which a new version, identical to the one we saved here, can be reconstituted.<br/>
* to provide a human and machine readable back up file that can be meaningfully examined by humans and can be parsed by other applications for reasons we haven't even considered yet.<br/>
<br/>
If you are a developer and have worked with XML formatted files, you'll recognize from this latter point that XML provides a medium for generated documents that may be directly imported into VoodooPad.<br/>
<br/>
h3. Exporting to Your iPod<br/>
<br/>
If you don't have an iPod, you can skip this section, but if you have one, then plug it in.<br/>
Once your iPod shows up in the Finder, choose File-&amp;gt;Export-&amp;gt;Export to iPod.  Once this command has completed, eject your iPod and navigate using the scroll wheel to Extras-&amp;gt;Notes.  Next you will see the name of your document listed, and when clicked on using the scroll wheel, you'll see your index page show up on the pod, with links!  To move around through your document on the iPod, use the scroll wheel to move up and down.<br/>
<br/>
You will notice that sometimes a link has a dark underline, while all the other ones have a light grey underline.  When a link is dark, you can use the iPod button in the middle of the scroll wheel to move to that page on your iPod, just like you would when clicking on a link in VoodooPad.<br/>
<br/>
h3. Exporting to the Web<br/>
<br/>
For our final exporting exercise, choose File-&amp;gt;Export-&amp;gt;Web Export... which will display the Web Export Manager panel. On this panel, choose RTFD in  the Export Format popup menu. Next, click the Choose... button to the far right of "Output directory:". When the Open dialog sheet appears, navigate it to our VDTemp folder and click Open. Leave the rest of the panel controls as they were and click the Export button. When you see the phrase, "Finished exporting" to the far left of the three buttons, Reset, Close and Export, then click the Close button.<br/>
<br/>
Go back to the Finder window (or open a new one) in the VDTemp folder. Notice that we have four files, as before, but this time with ".html" suffixes. If you double click on index.html, a page should open in your web browser with the content of our Index page showing links. If you click on any of the links, it should take you to the page comparable to that page in VoodooPad.<br/>
<br/>
It's important to recognize that though we are seeing the same content and clicking links with the same functionality, we are doing all of this in a web browser and using .html files, not the VoodooPad document. If we made a change to our VoodooPad document at this point, we wouldn't see the corresponding change in the web browser unless we exported again into the same folder.<br/>
<br/>
In fact, while keeping our web browser open, let's do that. Go back to our work area in VoodooPad and click on the Home button in the Toolbar. On the Index page, add the following indented line to the bottom of the page.<br/>
<br/>
p{padding-left: 20px;}. This is a line not yet reflected in our web pages.<br/>
<br/>
and click the Save button in the Toolbar. The line is now saved in our VoodooPad document, but should not be seen in our web version. To confirm that, let's go back to the Finder window and double click on the index.html file to reopen it in our web browser. The page that opens should be our Index page, but there should be no indication of the last line we added. Once again, keeping the page open in our web browser, go back to the Work Area in VoodooPad and choose Web export...<br/>
<br/>
The Web Export Manager panel should already be set up the way we want it, but to be sure, check that the Output directory is our VDTemp folder. Now click the Export button. When you see the phrase, "Finished exporting" to the far left of the three buttons, Reset, Close and Export, then click the Close button.<br/>
<br/>
Now if we go back to our web browser page and click the Reload button which looks like this in Safari:<br/>
<br/>
p=. !{border: solid 1px}/fs/images/voodoopad/e0931e37-1ec2-4560-8b30-a7350910fb31.png!<br/>
<br/>
...then we should see the last line appear. In other words, we've just updated our little local web site with the new content from VoodooPad.<br/>
<br/>
The other settings for web exporting in the Web Export Manager panel can be found in the VoodooPad manual under the Help menu.<br/>
<br/>
Exporting to the Web makes our document easier to distribute widely than the printed page. It is easily reviewed by anyone who has a web browser, and today, that includes nearly everyone using computers. Finally, it retains its dynamic organization of pages, in which each page is related to the others through hyperlinks rather than through some sort of simulated physical proximity.<br/>
<br/>
h3. Importing<br/>
<br/>
Now that we've seen how to get information out of a VoodooPad document in several different formats, the next natural concern is how to get information into the document. The most obvious answers, of course, are to do what we've been doing, that is, type or paste the information in. However, we have other options, including:<br/>
<br/>
* importing files<br/>
* dragging text<br/>
* dragging pages<br/>
<br/>
On to Editing Text</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Plugins</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/40de692c-e33c-01d9-12a1-c0cbe4c4d9e7" rel="alternate" title="VoodooPad: Plugins" type="text/html" />
       <id>urn:uuid:40de692c-e33c-01d9-12a1-c0cbe4c4d9e7:24</id>
       <modified>2007-07-17T11:03:49Z</modified>
       <issued>2005-06-22T09:39:51Z</issued>
       <summary type="text/html"><html>h2. Extra plugins you can have for VoodooPad<br/>
<br/>
The plugin interface for VoodooPad is accessed via the Plugin menu. Plugins have files named *.vpplugin and are installed by selecting the VoodooPad application file (.app) in the Finder, executing the Get Info command from the File menu, opening the Plugin section, hitting Add, and selecting the plugin file from the dialog box. Then when VoodooPad is closed and reopened the plugin command will appear in the Plugin menu. &amp;lt;!-- The following isn't true.. not sure where this idea comes from... Note that when you update VoodooPad to a new version, your plugins are not carried along, so you'll need to keep them and install them again when you update the application file. --&amp;gt;<br/>
( If you would like to know about developing plugins for VoodooPad, please visit the Plugin Development page. )<br/>
<br/>
h3. Script Plugins:<br/>
<br/>
Check out the Script Plugins page for information on how to build and install quick plugins.  Visit Lua Plugin Snippets for examples.<br/>
<br/>
h3. View Document (and save as PDF)<br/>
<br/>
Download: http://flyingmeat.com/fs/contrib/voodoopad/DocumentView.vpplugin.zip OS: 10.4+<br/>
<br/>
The View Document plugin opens up a window with a paginated view of your entire document, which really isn't all that useful by itself.  However- you can then bring up the print panel, and choose "Save As PDF" to get a PDF of your entire document.  That's cool and useful.<br/>
<br/>
The source is available for hacking on as well:<br/>
http://flycode.googlecode.com/svn/trunk/voodoopadplugins/documentview/<br/>
<br/>
h3. Python Plugin Enabler:<br/>
<br/>
Download: http://flyingmeat.com/download/plugin/PythonPlugin.vpplugin.zip<br/>
<br/>
The Python Plugin Enabler is a simple VoodooPad plugin that lets you write additional plugins .. in python.  Just double click it and it will install examples in:<br/>
~/Library/Application Support/VoodooPad/Script PlugIns/<br/>
<br/>
This plugin was written by Jonathan Wight of "Toxic Software":http://www.toxicsoftware.com/ .  Support questions should go to gus@flyingmeat.com however.<br/>
<br/>
h3. Render Math:<br/>
<br/>
Download: http://flyingmeat.com/fs/contrib/voodoopad/RenderMath.vpplugin.zip<br/>
<br/>
The Render Math VoodooPad Plugin uses LaTeX to render math in your VoodooPad documents. <br/>
<br/>
<br/>
h3. Extract Images<br/>
<br/>
Download: http://www.flyingmeat.com/download/plugin/ExtractImages.dmg (ppc only)<br/>
<br/>
Extract Images will add a plugin that will let you extract all the images in a page to the place of your choosing. Actually- it'll extract any file attachment in there, but you've probably only got images in.  OS: 10.3.5+<br/>
<br/>
h3. Hot Key<br/>
<br/>
Download: http://www.flyingmeat.com/download/plugin/HotKey.dmg (ppc only)<br/>
<br/>
The Hot Key plugin lets you assign a hot key to VoodooPad, which when pressed from any application will bring VoodooPad to the front. It is very useful for people who like to take down notes quickly. OS: 10.2.8+<br/>
<br/>
h3. HTML Tools<br/>
<br/>
Download: http://www.flyingmeat.com/download/plugin/HTMLTools-1.2.dmg<br/>
<br/>
HTML Tools provides a preview window for interpreting the current page as HTML. It also provides an option to view the page as rendered Textile or Markdown, as well as an option to copy the selected text as HTML. OS: 10.4+<br/>
<br/>
h3. Script Stuff<br/>
<br/>
Script Stuff provides two actions under the Script menu. The first on is "Execute as AppleScript", which will take the contents of the current page and run it like you would in ScriptEditor. The second function is "Format as Python", which will take the front page and colorize it like it is a python script. Make sure the preference "Allow manual underlining and font color changes" is enabled first.  OS: 10.3.5+<br/>
<br/>
Download: http://www.flyingmeat.com/download/plugin/ScriptStuff.dmg (ppc only)<br/>
<br/>
h3. VP's Missing Actions v1<br/>
<br/>
Random options that should probably be in VoodooPad.  OS: 10.4.3+<br/>
<br/>
* "New Current Date Page" This creates a new page (and inserts a link at the current position) in the format of 2005.01.31 (for January 1, 2005)<br/>
* "Select Line" selects the current line<br/>
* "Select Paragraph" selects the current paragraph<br/>
<br/>
Download: http://www.flyingmeat.com/download/plugin/VPsMissingActions.tgz (ppc only)<br/>
<br/>
h3. Lua Plugin Enabler<br/>
<br/>
(Available for VoodooPad 2.5 on the Lua Plugin Enabler page.  VoodooPad 3.0 and later includes the Lua Plugin Enabler by default)</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Andy's Blog Engine</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/2fa9d30e-6e27-01db-01a0-c0cbe4c4ec54" rel="alternate" title="VoodooPad: Andy's Blog Engine" type="text/html" />
       <id>urn:uuid:2fa9d30e-6e27-01db-01a0-c0cbe4c4ec54:21</id>
       <modified>2007-07-16T12:49:34Z</modified>
       <issued>2006-11-06T22:14:12Z</issued>
       <summary type="text/html"><html>h2. Andy's Blog Engine<br/>
<br/>
These are a couple of script plugins, for using the current document as a blog engine.  To install... well, I should add some links to install them.<br/>
<br/>
h3. Usage:<br/>
<br/>
Bear in mind that these scripts don't do any rendering. That is done during the Web Export. Because these scripts utilize the page meta function; they will only work in VoodooPad Pro.<br/>
<br/>
I have a line in my postflight script that changes the name of the rendered file @home.html@ to @index.html@. If you change the variable @homePageName@ from @home@ then this line will need to change as well.<br/>
<br/>
@mv -fv "$VPWebExportOutputDirectory/home.html" "$VPWebExportOutputDirectory/index.html"@<br/>
<br/>
To see what this looks like in action check out the site I'm doing for my son's "Boy Scout Troop 262":http://troop262ps.org/ . Please bear in mind this is a work in progress. I could point you to my business site, but I don't want to use this as a forum for advertising. ;-)<br/>
<br/>
Neither of these scripts has any data that are specific to any VPP document. I did this so that if you have multiple VPP documents that you are using as a CMS for a blog then the only thing that needs to be done is creating the "HomepageMeta" page in each document for the data.<br/>
<br/>
h4. Meta Markup<br/>
<br/>
* This script is used to *mark* the pages whose content will be placed on the "home" page.<br/>
* It does this by adding several page meta tags. Personalizing these tags for your document will be necessary.<br/>
* If you aren't using @Markdown@ markup then you should set @isMarkdown = "0"@<br/>
* This is where you set the location of Desktop folder that you write out the @atom.xml@ file. If you don't want it to be on your Desktop then you need to make changes in the other script.<br/>
* baseURL is the location of your blog page.<br/>
* homeURL is the index page of your site.<br/>
* categoryId is the name of the VoodooPad category that you want all the "posts" to go in.<br/>
* outdir is will be a folder on your Desktop at ~/Desktop/outdir<br/>
<br/>
*Set your data in a new document page named "HomepageMeta". It will be in the following format.*<br/>
<br/>
&amp;lt;carea class="textareaCode200"&amp;gt;t = {}<br/>
t = {<br/>
    baseURL = "http://troop262ps.org/info/news.html",<br/>
    homeURL = "http://troop262ps.org/",<br/>
    blogTitle = "Boy Scout Troop 262 - Palm Springs",<br/>
    authorName = "Andy Fragen",<br/>
    outdir = "/ScoutSite",<br/>
    home = "1",<br/>
    isMarkdown = "1",<br/>
    categoryId = "home"<br/>
}<br/>
&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*Meta Markup - HomepageMeta* script<br/>
<br/>
&amp;lt;carea class="textareaCodeLarge"&amp;gt;--[[<br/>
VPLanguage = lua<br/>
VPScriptSuperMenuTitle = Blog<br/>
VPScriptMenuTitle = Meta Markup - HomepageMeta<br/>
VPEndConfig<br/>
]]<br/>
 <br/>
--Written by Andy Fragen &amp;lt;andy@thefragens.com&amp;gt;<br/>
 <br/>
 <br/>
metaPage = document:pageForKey("homepagemeta")<br/>
text = metaPage:dataAsAttributedString():string()<br/>
 <br/>
-- run the page, like javascript's eval() function<br/>
assert(loadstring(text))()<br/>
 <br/>
item = document:pageForKey(windowController:key())<br/>
--item:setSkipOnExport_(true)<br/>
--item:setShouldHighlightLinks_(false)<br/>
 <br/>
for k,v in pairs (t) do<br/>
  item:setMetaValue_forKey(v,k)<br/>
end<br/>
 <br/>
item:store():setAttributesForItem(item)<br/>
objc.class("NSNotificationCenter"):defaultCenter():postNotificationName_object("VPItemMetaRefreshNotification", item)<br/>
 <br/>
-- add page to category<br/>
categoryId = item:metaValueForKey("categoryId")<br/>
categoryId = document:categoryIdForName(categoryId)<br/>
item:addCategoryId(categoryId)<br/>
objc.class("NSNotificationCenter"):defaultCenter():postNotificationName_object("VPCategoryChangeNotification", item)<br/>
&amp;lt;/carea&amp;gt;<br/>
<br/>
h4. Make Homepage &amp;amp; Feed<br/>
<br/>
* This is the script that does the work.<br/>
* It will find all the pages that you have marked using the *Meta Markup* script and concatenate their content.<br/>
* It will then place this content on a newly created page in the document named "home". You can change this name but you'll need to do it in this script.<br/>
* I've tried to keep most, if not all, the personalized data out of this script.<br/>
* I now make an Atom feed that converts relative URLs to absolute URLs, but only in the feed.<br/>
<br/>
*Make Homepage &amp;amp; Feed* script<br/>
<br/>
&amp;lt;carea class="textareaCodeLarge"&amp;gt;--[[<br/>
VPLanguage = lua<br/>
VPScriptSuperMenuTitle = Blog<br/>
VPScriptMenuTitle = Make Homepage &amp;amp; Feed<br/>
VPEndConfig<br/>
]]<br/>
 <br/>
--Written by Andy Fragen &amp;lt;andy@thefragens.com&amp;gt;<br/>
--with lots of help by Gus Mueller. :-)<br/>
 <br/>
function xmlEscape(str)<br/>
	str = string.gsub(str, "&amp;amp;", "&amp;amp;amp;")<br/>
	str = string.gsub(str, "&amp;lt;", "&amp;amp;lt;")<br/>
	str = string.gsub(str, "&amp;gt;", "&amp;amp;gt;")<br/>
	return str<br/>
end<br/>
 <br/>
function pageNameEscape(str)<br/>
    str = string.gsub(str, " ", "_")<br/>
    str = string.gsub(str, "/", "_")<br/>
    str = string.gsub(str, "\\", "_")<br/>
    str = string.gsub(str, "\"", "_")<br/>
    str = string.gsub(str, ",", "_")<br/>
    str = string.gsub(str, "'", "_")<br/>
	return str<br/>
end<br/>
 <br/>
homePageName = "home"<br/>
fileExtension = ".html"<br/>
--timeFormat = "%d %b %Y %I:%M %p"<br/>
timeFormat = "%d %b %Y"<br/>
all = nil<br/>
count = 1<br/>
maxPosts = 15<br/>
postTagOpen = "&amp;lt;div class='item'&amp;gt;"<br/>
postTagClose = "&amp;lt;/div&amp;gt;\n"<br/>
titleTagOpen = "&amp;lt;h2&amp;gt;"<br/>
titleTagClose = "&amp;lt;/h2&amp;gt;"<br/>
dateTagOpen = "&amp;lt;div class='time'&amp;gt;"<br/>
dateTagClose = "&amp;lt;/div&amp;gt;"<br/>
 <br/>
homedir = objc.luaToNSString("~/"):stringByExpandingTildeInPath()<br/>
deskdir = homedir .. "/Desktop"<br/>
atom = nil<br/>
feedContent = nil<br/>
feedEntry = nil<br/>
template = nil<br/>
 <br/>
-- make new page with name homePageName<br/>
document:createNewVPDataWithKey(homePageName)<br/>
 <br/>
for key in objc.enumToIterator(document:orderedKeysByCreateDateOfPageType(nil):reverseObjectEnumerator()) do<br/>
 <br/>
    page = document:pageForKey(key)<br/>
 <br/>
    if page:metaValueForKey("home") == "1" then<br/>
        <br/>
        if page:type() == VPPageType then<br/>
 <br/>
						--get personalized data stored in meta tags<br/>
		 				baseURL = page:metaValueForKey("baseURL")<br/>
		 				homeURL = page:metaValueForKey("homeURL")<br/>
						blogTitle = page:metaValueForKey("blogTitle")<br/>
						authorName = page:metaValueForKey("authorName")<br/>
						outdir = deskdir .. page:metaValueForKey("outdir")<br/>
						isMarkdown = page:metaValueForKey("isMarkdown")<br/>
						            <br/>
            content = page:dataAsAttributedString()<br/>
         		pageDate = os.date(timeFormat, page:createdDate():timeIntervalSince1970())<br/>
						atomDate = os.date("%Y-%m-%dT%H:%M:%S-08:00")<br/>
						atom = [[&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;<br/>
&amp;lt;feed xmlns='http://www.w3.org/2005/Atom'<br/>
      xml:lang='en-us'&amp;gt;<br/>
  &amp;lt;title&amp;gt;$blogTitle$&amp;lt;/title&amp;gt;<br/>
  &amp;lt;id&amp;gt;$baseURL$&amp;lt;/id&amp;gt;<br/>
  &amp;lt;link href='$homeURL$' /&amp;gt;<br/>
  &amp;lt;link rel='self' href='$homeURL$atom.xml' /&amp;gt;<br/>
  &amp;lt;link href="$baseURL$" rel="alternate" title="$blogTitle$" type="text/html" /&amp;gt;<br/>
  &amp;lt;updated&amp;gt;]] .. atomDate .. [[&amp;lt;/updated&amp;gt;<br/>
  &amp;lt;author&amp;gt;<br/>
    &amp;lt;name&amp;gt;$authorName$&amp;lt;/name&amp;gt;<br/>
  &amp;lt;/author&amp;gt;<br/>
]]<br/>
--vpconsole(page:displayName())<br/>
--vpconsole(homeURL)<br/>
 <br/>
			    	atom = string.replace(atom, "$baseURL$", baseURL)<br/>
			    	atom = string.replace(atom, "$blogTitle$", blogTitle)<br/>
			    	atom = string.replace(atom, "$authorName$", authorName)<br/>
			    	atom = string.replace(atom, "$homeURL$", homeURL)<br/>
 <br/>
						if isMarkdown == "1" then<br/>
								content = content:string()<br/>
								content = vp.formatViaMarkdown(content)<br/>
								document:createNewVPDataWithKey(pageDate)<br/>
								pageTemp = document:pageForKey(pageDate)<br/>
								attributedString = pageTemp:dataAsAttributedString()<br/>
								attributedString:objc_mutableString():setString(content)<br/>
								pageTemp:setDataAsAttributedString(attributedString)<br/>
 <br/>
								content = pageTemp:dataAsAttributedString()<br/>
						end<br/>
 <br/>
         		content:objc_mutableString():insertString_atIndex(postTagOpen .. "\n" .. titleTagOpen .. page:displayName() .. titleTagClose .. "\n".. dateTagOpen .. pageDate .. dateTagClose .. "\n\n", 0)<br/>
 <br/>
            if all == nil then<br/>
                all = content<br/>
            else<br/>
             		all:appendAttributedString(content)<br/>
            end     <br/>
 <br/>
						--Make Atom feed<br/>
					  template = [[&amp;lt;entry&amp;gt;<br/>
  &amp;lt;title&amp;gt;$displayName$&amp;lt;/title&amp;gt;<br/>
    &amp;lt;!-- link href="$url$" rel="alternate" title="$displayName$" type="text/html" / --&amp;gt;<br/>
    &amp;lt;id&amp;gt;urn:uuid:$uuid$&amp;lt;/id&amp;gt;<br/>
    &amp;lt;published&amp;gt;$createdDate$&amp;lt;/published&amp;gt;<br/>
    &amp;lt;updated&amp;gt;$modifiedDate$&amp;lt;/updated&amp;gt;<br/>
    &amp;lt;content type="xhtml"&amp;gt;<br/>
      &amp;lt;div xmlns='http://www.w3.org/1999/xhtml'&amp;gt;$feedContent$<br/>
      &amp;lt;/div&amp;gt;<br/>
    &amp;lt;/content&amp;gt;<br/>
&amp;lt;/entry&amp;gt;<br/>
]]<br/>
          <br/>
	    	    -- 2002-10-02T10:00:00-05:00<br/>
 <br/>
						if isMarkdown == "1" then<br/>
						  feedContent = string.replace(pageTemp:dataAsAttributedString():string(), "\n", "\n")<br/>
              feedContent = string.replace(pageTemp:dataAsAttributedString():string(), "./", homeURL)<br/>
						else<br/>
	    	      feedContent = string.replace(page:dataAsAttributedString():string(), "\n", "&amp;lt;br/&amp;gt;\n")<br/>
              feedContent = string.replace(page:dataAsAttributedString():string(), "./", homeURL)<br/>
						end<br/>
 <br/>
	    	    folder = os.date('archives/%Y/%m/', page:createdDate():timeIntervalSince1970())<br/>
	    	    url = homeURL .. folder .. pageNameEscape(page:key()) .. fileExtension<br/>
      <br/>
	    	    template = string.replace(template, "$displayName$", xmlEscape(page:displayName()))<br/>
	    	    template = string.replace(template, "$feedContent$", feedContent)<br/>
	    	    template = string.replace(template, "$uuid$", page:uuid())<br/>
	    	    template = string.replace(template, "$url$", url)<br/>
	    	    template = string.replace(template, "$createdDate$", os.date("%Y-%m-%dT%H:%M:%S-08:00", page:createdDate():timeIntervalSince1970()))<br/>
			      template = string.replace(template, "$modifiedDate$", os.date("%Y-%m-%dT%H:%M:%S-08:00", page:modifiedDate():timeIntervalSince1970()))<br/>
 			      <br/>
            if feedEntry == nil then<br/>
                feedEntry = template<br/>
            else<br/>
             		feedEntry = feedEntry .. template<br/>
            end     <br/>
						--end Atom feed<br/>
 						<br/>
        end<br/>
 <br/>
  	    atom = atom .. feedEntry<br/>
     		all:objc_mutableString():appendString(postTagClose .. "\n")<br/>
 <br/>
				if isMarkdown == "1" then<br/>
					document:deleteItemWithKey(pageDate)<br/>
				end<br/>
 <br/>
    		count = count + 1<br/>
    		if count &amp;gt;= maxPosts then<br/>
        	break<br/>
    		end    <br/>
    end<br/>
end<br/>
 <br/>
atom = atom .. "\n&amp;lt;/feed&amp;gt;"<br/>
 <br/>
--write out homepage<br/>
page = document:pageForKey(homePageName)<br/>
page:setDataAsAttributedString(all)<br/>
 <br/>
--write out atom feed<br/>
os.execute('mkdir -p ' .. outdir)<br/>
file = outdir .. "/atom.xml"<br/>
fd = io.open(file, 'w')<br/>
fd:write(atom)<br/>
fd:close()<br/>
 <br/>
 <br/>
--os.execute("open http://srv.local/xxx/")<br/>
vpconsole("Homepage and Atom feed created.")<br/>
&amp;lt;/carea&amp;gt;<br/>
<br/>
Much thanks to Gus. I couldn't have completed this without his time responses to my constant pestering. :-)</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Andy's Web Export Category Moving and Sitemap script</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/e5c0b6b8-33d3-01dc-07c7-c0cbe4c49166" rel="alternate" title="VoodooPad: Andy's Web Export Category Moving and Sitemap script" type="text/html" />
       <id>urn:uuid:e5c0b6b8-33d3-01dc-07c7-c0cbe4c49166:2</id>
       <modified>2007-07-16T12:36:50Z</modified>
       <issued>2007-07-16T12:36:50Z</issued>
       <summary type="text/html"><html>Describe Andy's Web Export Category Moving and Sitemap script here.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Andy's Fix Relative Links</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/440fe13e-7a5d-01db-029e-c0cbe4c4a87e" rel="alternate" title="VoodooPad: Andy's Fix Relative Links" type="text/html" />
       <id>urn:uuid:440fe13e-7a5d-01db-029e-c0cbe4c4a87e:8</id>
       <modified>2007-07-16T12:33:04Z</modified>
       <issued>2006-11-22T11:11:33Z</issued>
       <summary type="text/html"><html>h2. Andy's Fix Relative Paths script<br/>
<br/>
This is a little shell script that will traverse a VPWebExportOutputDirectory and convert any &amp;lt;code&amp;gt;./&amp;lt;/code&amp;gt; into &amp;lt;code&amp;gt;../&amp;lt;/code&amp;gt; in any &amp;lt;code&amp;gt;*.html&amp;lt;/code&amp;gt; files that it finds.<br/>
<br/>
h3. Usage<br/>
<br/>
Make this script executable and put it in your web export plugin and reference it in the Info.plist as a postflight script.<br/>
<br/>
h4. fixRelativePaths.sh<br/>
<br/>
&amp;lt;carea class="textareaCode250"&amp;gt;#!/bin/bash<br/>
# A script to fix the relative URL for folders one level deep<br/>
# for use in web export plugin<br/>
# written by Andy Fragen &amp;lt;andy@thefragens.com&amp;gt;<br/>
 <br/>
base="$VPWebExportOutputDirectory"<br/>
echo `date` "Fixing relative paths."<br/>
 <br/>
for i in `find $base -type d -mindepth 1 -maxdepth 1 -name '*'  -print`; do<br/>
	for F in `find $i -type f -maxdepth 1 -name '*.html' -print`; do<br/>
		mv $F $F.tmp ;<br/>
		sed 's_"\.\/_"\.\.\/_g' $F.tmp &amp;gt; $F ;<br/>
  	rm $F.tmp ;<br/>
  	echo $F<br/>
	done<br/>
done<br/>
 <br/>
echo `date` "Relative paths fixed."<br/>
&amp;lt;/carea&amp;gt;<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Aliases</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/f4e93228-d4c9-01db-1be9-c0cbe4c4fb0e" rel="alternate" title="VoodooPad: Aliases" type="text/html" />
       <id>urn:uuid:f4e93228-d4c9-01db-1be9-c0cbe4c4fb0e:4</id>
       <modified>2007-07-15T14:53:49Z</modified>
       <issued>2007-03-17T13:56:20Z</issued>
       <summary type="text/html"><html>h2. Aliases<br/>
<br/>
An alias in VoodooPad is a way to assign certain words or phrases to another page. For instance, if you have a page named "Pizza" and you would also like the words "Pizzas" and "Italian Pie" to link to the Pizza page, you would make an alias to it. Here's how:<br/>
<br/>
First bring up the Pizza page, and then choose "Page and Document Inspector" from the Window-&amp;amp;gt;Palettes menu. A window will come up that looks like this:<br/>
<br/>
p=. !$imagesDir$/voodoopad/pizza_alias1.png!<br/>
<br/>
<br/>
Press the " + " button on the bottom left, and then enter "Pizza". Press the " + " button again, and enter Italian Pie.<br/>
<br/>
p=. !$imagesDir$/voodoopad/pizza_alias2.png!<br/>
<br/>
Next, bring up another page such as the index page. Type in either "Pizzas" or "Italian Pie". The word(s) will highlight and when you click on them you will be taken to the Pizza page.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Advanced Text Editing</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/f9a2d632-ccbb-01da-0dd7-c0cbe4c4d793" rel="alternate" title="VoodooPad: Advanced Text Editing" type="text/html" />
       <id>urn:uuid:f9a2d632-ccbb-01da-0dd7-c0cbe4c4d793:7</id>
       <modified>2007-07-15T11:32:44Z</modified>
       <issued>2006-04-15T13:11:08Z</issued>
       <summary type="text/html"><html>h2. Advanced Text Editing<br/>
<br/>
In our last topic, we demonstrated that VoodooPad shares the flexibility of the Mac OS X Text System as represented in TextEdit. However, VoodooPad provides text editing features beyond that basic set, features such as tables, flexible bullet lists, more sophisticated line and paragraph spacing, highlight colors and a convenient margin shift capability for more convenient outlining.<br/>
<br/>
h3. Tables<br/>
<br/>
Let's open a new VoodooPad document by pressing Cmd-Shft-n, select everything in the window and delete it all with the delete key for a blank page.<br/>
<br/>
Now enter a title, such as "Comparing Apples and Oranges" at the top of the document followed by two blank lines. You can do this by typing the title in, or by copying it from the previous sentence and pasting it in. Instead, let's drag the text to the new window.<br/>
<br/>
To do this, double click on the word "Comparing" in the first sentence of the last paragraph, drag to the work "Oranges" and release the mouse button. Then click and hold the mouse within the selected text until the mouse pointer changes from an insertion bar to an arrow, then drag the selected text to the new blank VoodooPad window. Be sure to leave a couple blank lines after this title.<br/>
<br/>
Next, let's add a 4 row X 2 column table to our document. Choose Format-&amp;gt;Table... from the menu bar and notice that two things happened when you did so:<br/>
<br/>
* a 2 row X 3 column table was inserted into our document at the insertion bar<br/>
* a table control panel was displayed to help us configure the table<br/>
<br/>
Since this is not quite the table configuration we wanted, let's change it. While the table is still selected, click on the Table control panel, change the rows to 4 and the columns to 2. You can do this either by selecting the "2" and pressing the 4 key, or by clicking twice on the up arrow immediately to the right of the Rows text field. When you've changed the Rows field, select the "3" in the columns field and type in 2, or click once on the down arrow immediately to the right of the Columns text field.<br/>
<br/>
If the table hasn't changed its configuration, be sure that you've selected any cell of the table and that the window containing the table is the frontmost window. You can confirm this by noting that the three buttons in the upper left corner of the table are colored while you're changing the table's configuration.<br/>
<br/>
Now let's enter some values into the table. In the top row, type "Fruit" in the  left column and "Desirability" in the right. In the three rows of the left column under the heading "Fruit", type: "apples", "oranges" and "bananas". In the right hand column, type "7", "8", "10".<br/>
<br/>
You've probably heard that it's not possible to compare apples to oranges. With VoodooPad, we quite often do what other's have found difficult to impossible. We've gone one better, in this case, and included bananas in our comparison. But what if you don't like the desirability levels we've chosen. Hey, it's your VoodooPad document; change the values to suit you. Just because we believe bananas to be the perfect fruit doesn't mean that you have to agree.<br/>
<br/>
However, our goal here is to learn VoodooPad's special editing characteristics, so let's go back to making our page look better. To do that, first select the page title and press Cmd-t on the keyboard to bring up the font pallette. Then select some sans serif font in the "Family" column of the font table, such as Helvetica, click "Bold" in the Typeface column and either enter "18" in the size text field, or click on 18 in the column below that text field. Close the font pallette and while the title is still selected, choose Format-&amp;gt;Text-&amp;gt;Center (or just press the Cmd-Shft-| keys).<br/>
<br/>
Next we want to center the numbers in the desirability column. To do that, let's make use of a little known trick in the Mac OS X text repertoire: column selection. To select a column, hold down the Option key as you click and drag the mouse from the top left of the first number to the bottom right of the last number in the desirability column.<br/>
<br/>
As you do this, notice that only the bottom right three cells of the table are selected, which is exactly what we wanted. Now click on the Center alignment tab in the table control panel, which looks like this:<br/>
<br/>
p=. !/fs/images/voodoopad/9af40e63-f467-408e-896e-6b7d308fb27b.png!<br/>
<br/>
Let's next click and drag across the two heading cells at the top of the table to select the words "Fruit" and "Desirability" simultaneously. Then click on the Center alignment tab in the table control panel again and press Cmd-b to make both words bold.  You wouldn't actually need to select both words to center them in their cells as long as some part of each of the two cells is selected. However, we needed the words selected to make them both bold.<br/>
<br/>
To illustrate the flexibility of tables in VoodooPad, click anywhere in the table and increase the row count in the Table control panel from 4 to 5. Notice that a new row has been added to the bottom of the table. Next, we want to select the bottom two cells. The easiest way to do that is to double click in one of the cells of the new row and drag through the other. Then click the Merge Cells button in the Table control panel.<br/>
<br/>
We should now have a single cell at the bottom of the table that spans the table width. Click in this new cell and type "* mostly cloned", and suffix the word, banana, above with an asterisk.<br/>
</html></summary>
     </entry>
  <entry>
       <title>FlyGesture: How to Purchase and Register</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/53ca49ec-177c-01da-112c-c0cbe4c4e838" rel="alternate" title="FlyGesture: How to Purchase and Register" type="text/html" />
       <id>urn:uuid:53ca49ec-177c-01da-112c-c0cbe4c4e838:6</id>
       <modified>2007-07-03T11:01:35Z</modified>
       <issued>2005-08-27T21:29:31Z</issued>
       <summary type="text/html"><html>h2. How to Purchase and Register FlyGesture.<br/>
<br/>
You don't have too anymore - it's free!</html></summary>
     </entry>
  <entry>
       <title>FlyGesture: Start Page</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/4982c326-c72a-01d9-07fe-c0cbe4c4e873" rel="alternate" title="FlyGesture: Start Page" type="text/html" />
       <id>urn:uuid:4982c326-c72a-01d9-07fe-c0cbe4c4e873:20</id>
       <modified>2007-07-03T11:01:17Z</modified>
       <issued>2005-05-17T16:20:42Z</issued>
       <summary type="text/html"><html>h2. FlyGesture<br/>
<br/>
* About FlyGesture<br/>
Find out what Flying Meat's FlyGesture is all about.<br/>
<br/>
* How it Works.<br/>
Find out what makes FlyGesture tick.<br/>
<br/>
* Movies<br/>
Watch FlyGesture in action.<br/>
<br/>
* Frequently Asked Questions<br/>
Do you have a question that needs to be answered?<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Web Export</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/33e3c704-3124-01da-160e-c0cbe4c4be5d" rel="alternate" title="VoodooPad: Web Export" type="text/html" />
       <id>urn:uuid:33e3c704-3124-01da-160e-c0cbe4c4be5d:23</id>
       <modified>2007-05-25T15:03:33Z</modified>
       <issued>2005-09-29T13:04:12Z</issued>
       <summary type="text/html"><html>h1. Web Export<br/>
<br/>
Web Export is a new feature in VoodooPad 2.5.  It allows you to export your document as HTML files, with options for marking up the pages as Textile, Markdown, or just treating it as plain text.<br/>
<br/>
In addition, you are given the opportunity to specify "Web export plugins" to apply special formatting with the export.<br/>
<br/>
Here's a quick rundown of the various options available in the Web Export window.<br/>
<br/>
*Export format*:  This is the format that you would like the text in your VoodooPad pages to be written out as.<br/>
<br/>
* RTFD to HTML is probably going to be the most used option- it tries to match exactly what your pages look like on output.<br/>
* No Markup exports your pages as-is.  No attempt is used to try and interpret any formatting in the pages.<br/>
* Plain Text exports the pages without any special formatting, or images, but does format for line breaks.<br/>
* Interpret as Markdown exports your pages using a popular text to HTML formating script.  For more information on Markdown please visit http://daringfireball.net/projects/markdown/<br/>
* Interpret as Textile exports your pages using another popular text o HTML formatting script. For more information on Textile, please visit http://www.textism.com/tools/textile/<br/>
<br/>
*Output directory*: This is the folder where the html files and images are written to.<br/>
<br/>
*Web export plugin*:  You may select a specific plugin to be used to provided extra workflow options, or template for exporting.  These plugins are located in your "~/Library/Application Support/VoodooPad/Web Export PlugIns" folder.<br/>
<br/>
*Preflight script*:  This is a unix script (or application) that you may choose to be run before the actual export is taken place.  This is useful if you want to create resources such as folders or supporting files to manage your workflow.<br/>
<br/>
*Postflight script*: This follows the same idea as the preflight script, but is run after the export has taken place.  For example, you could use this to automate the uploading of your html files and images to a server.<br/>
<br/>
*Preset*:  If you spend a little bit of time and energy into setting up what scripts need to be run, and what folders you want everything to be exported to, then you might want to save those setting for use at a later time.  That's what this setting is for.  Use the + button to add or modify a preset, use the - button to remove a preset.<br/>
<br/>
*Reset button*: This resets all the export options to their default state.<br/>
<br/>
*Close button*: This closes the Web Export window.<br/>
<br/>
*Export*: This kicks off the export, and progress is updated via a label in the lower left corner of the window.<br/>
<br/>
&amp;lt;br/&amp;gt;<br/>
<br/>
h2. Special Pages:<br/>
<br/>
The Web Export feature allows you to create special pages within your VoodooPad document, which supply additional information, scripts, or templates to be used alongside whatever plugin is used for export.<br/>
<br/>
WebExportPreflightScript: This page will be executed like a normal shell script, and is called at the beginning of the export.<br/>
<br/>
WebExportPostflightScript: This page will be executed like a normal shell script, and is called at the end of the export.<br/>
<br/>
WebExportProperties: this page will be written to meta.xml, so you can place config information in here if it is needed.<br/>
<br/>
WebExportPageTemplate: this page will override the template given in the selected plugin.<br/>
<br/>
<br/>
h2. Including other pages / macro substitution:<br/>
<br/>
&amp;lt;code&amp;gt;&amp;amp;lt;!--#include page="header" --&amp;amp;gt;&amp;lt;/code&amp;gt;<br/>
<br/>
That'll include the page named "header" in your document.<br/>
<br/>
h2. Special Variables.<br/>
<br/>
&amp;lt;pre&amp;gt;$page$&amp;lt;/pre&amp;gt; This will be replaced with the contents of the page.<br/>
&amp;lt;pre&amp;gt;$alias$&amp;lt;/pre&amp;gt; This will include the first alias you have for a page.<br/>
&amp;lt;pre&amp;gt;$alias[0]$&amp;lt;/pre&amp;gt; This will also include the first alias you have for a page.<br/>
&amp;lt;pre&amp;gt;$alias[1]$&amp;lt;/pre&amp;gt; This will include the second alias you have for a page.<br/>
&amp;lt;pre&amp;gt;$alias[2]$&amp;lt;/pre&amp;gt; The third alias for a page... <br/>
&amp;lt;pre&amp;gt;$alias[x]$&amp;lt;/pre&amp;gt; Etc... (you get the point).<br/>
&amp;lt;pre&amp;gt;$displayName$&amp;lt;/pre&amp;gt; This will insert the page name. ($title$ works as well, but is deprecated).<br/>
&amp;lt;pre&amp;gt;$categories$&amp;lt;/pre&amp;gt; This will list the categories the page is in.<br/>
&amp;lt;pre&amp;gt;$documentName$&amp;lt;/pre&amp;gt; This will include the document name, with the .vpdoc extension<br/>
&amp;lt;pre&amp;gt;$documentTitle$&amp;lt;/pre&amp;gt; This will include the document name, excluding the .vpdoc extension<br/>
&amp;lt;pre&amp;gt;$year$,  $modifiedYear$, $shortDate$, $longDate$, $time$, $shortTime$,<br/>
$timeDate$, $modifiedShortDate$, $modifiedLongDate$, $modifiedTime$,<br/>
$modifiedShortTime$, $modifiedTimeDate$&amp;lt;/pre&amp;gt; These will list the dates in various formats, for both the create date, and last modified dates.<br/>
<br/>
<br/>
h2. AppleScript<br/>
<br/>
Web Export can be controlled via AppleScript.  Below are a couple of examples doing this.<br/>
<br/>
&amp;lt;carea class="textareaCode"&amp;gt;<br/>
tell application "VoodooPad"<br/>
    tell document 1<br/>
        web export to "/tmp" with properties {fileExtension:"php", <br/>
                                              postflightScript:"/path/to/some/script.sh",<br/>
                                              preflightScript:"/path/to/another/script.sh"}<br/>
    end tell<br/>
end tell<br/>
tell application "VoodooPad"<br/>
    tell document 1<br/>
        web export using conversion format plain text with properties {fileExtension:"html", <br/>
                                              preset:"to markdown folder",<br/>
                                              pluginName:"GMDC Blog Layout"}<br/>
    end tell<br/>
end tell<br/>
&amp;lt;/carea&amp;gt;<br/>
<br/>
h2. Automator<br/>
<br/>
There are a couple of Automator actions for invoking Web Export in VoodooPad.  Launch Automator and you will see them listed if you have installed VoodooPad.<br/>
<br/>
<br/>
&amp;lt;br/&amp;gt;<br/>
<br/>
h1. Information for advanced users or plugin developers.<br/>
<br/>
h2. Export / Script Execution Order<br/>
<br/>
The following steps are what takes place when you press the "Export" button in the Web Export window.  The hope is that this information will be useful for anyone wanting to make a plugin, or for advanced uses.<br/>
<br/>
1. Preflight script specified in the export window is run.<br/>
2. WebExportPreflightScript page, if available, is run.<br/>
3. Preflight script(s) specified in the "PreflightScripts" array of the plugin's Info.plist file are run.<br/>
4. Pages are exported to output directory.<br/>
5. meta.xml is written out to the output directory if the boolean key "WriteMetaInfo" is set to yes in the plugin's Info.plist<br/>
6. Category files are written out.<br/>
7. Postflight script(s) specified in the "PostflightScripts" array of the plugin's Info.plist file are run.<br/>
8. WebExportPostflightScript page, if available, is run.<br/>
9. Postflight script specified in the export window is run.<br/>
<br/>
h2. Shell Script Environment Variables:<br/>
<br/>
These are environment variables that VoodooPad exports, for use in pre and postflight scripts.<br/>
<br/>
VPWebExportOutputDirectory: The directory the files are written to.<br/>
<br/>
VPWebExportVoodooPadDocument: The document that is being exported.<br/>
<br/>
VPPluginPath: The path to the web export plugin that is being used.<br/>
<br/>
<br/>
h2. Plugin Info.plist keys<br/>
<br/>
These are the various keys you should have defined in the plugins Info.plist file.  This is really only of any use if you are wanting to write a Web Export plugin.<br/>
<br/>
*NSExcludedElementsDocumentAttribute* - An array with items to exclude for the apple rtf-&amp;gt;html converter.  Values are given on this page: http://developer.apple.com/releasenotes/Cocoa/AppKit.html (search for NSExcludedElementsDocumentAttribute) 10.4 only.<br/>
<br/>
*DisplayName* - what shows up in the pulldown list for the plugin.<br/>
<br/>
*PrincipalTemplate* - the path to the html template to use when exporting.<br/>
<br/>
*PreviewImage* - the path to a png image, which will be used for a preview in the WebExport window.<br/>
<br/>
*PreflightScripts* - an array of paths, pointing to scripts to be run before the export takes place.<br/>
<br/>
*PostflightScripts* - an array of paths, pointing to scripts to be run after the export takes place.<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: New in 3.2</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/20f83654-03df-01dc-1cdc-c0cbe4c4ad6b" rel="alternate" title="VoodooPad: New in 3.2" type="text/html" />
       <id>urn:uuid:20f83654-03df-01dc-1cdc-c0cbe4c4ad6b:5</id>
       <modified>2007-05-24T16:59:29Z</modified>
       <issued>2007-05-16T11:56:18Z</issued>
       <summary type="text/html"><html>h2. New in VoodooPad 3.2:<br/>
<br/>
h3. View Categories as Tags.<br/>
<br/>
Lots of people have been wanting the ability to view the assigned categories as "tags".  Well, now you've got it.  Just open up the category palette, and use the cog-widget in the categories list to change the view as "tags".<br/>
<br/>
h3. Page Previews.<br/>
<br/>
Holding down the command and control keys while hovering over an interal VoodooPad link gives you a preview of the linked page.  This is awesome if you want to be able to see the first couple of lines of a page, but don't want to open it up.<br/>
<br/>
h3. Drag and Drop Linking Between Documents.<br/>
<br/>
You can now drag and drop a tab from one document to another to create links.  It's a super easy way to have inter-document links.<br/>
<br/>
<br/>
h3. Copy Link to Item Command<br/>
<br/>
We've got a new command- Edit-&amp;amp;gt;Copy Link to Item, which will copy text to the clipboard which you can use to link to the specific page.  This will work for any applications that respect the NSLink attribute in rich text.<br/>
<br/>
h3. Link to Specific pages<br/>
<br/>
You no longer need to setup aliases to link custom text to pages in your document.  Select some text and choose "Link selection to item" in the Edit menu, and away you go.<br/>
<br/>
<br/>
h3.  Other Stuff<br/>
<br/>
Now using Sparkle to do updates of the application, no longer removing custom link attributes, bug fixes, you can view embedded web archives, improved searching, and more.<br/>
</html></summary>
     </entry>
  <entry>
       <title>test: Start Page</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/98230ce6-c019-01da-19cb-c0cbe4c4d0ff" rel="alternate" title="test: Start Page" type="text/html" />
       <id>urn:uuid:98230ce6-c019-01da-19cb-c0cbe4c4d0ff:3</id>
       <modified>2007-05-23T14:58:36Z</modified>
       <issued>2006-03-30T10:18:32Z</issued>
       <summary type="text/html"><html>LD<br/>
it's my home<br/>
not mine...<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Categories</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/26d7bcde-ce57-01da-1b50-c0cbe4c4b100" rel="alternate" title="VoodooPad: Categories" type="text/html" />
       <id>urn:uuid:26d7bcde-ce57-01da-1b50-c0cbe4c4b100:5</id>
       <modified>2007-05-16T12:21:45Z</modified>
       <issued>2006-04-17T14:14:27Z</issued>
       <summary type="text/html"><html>h2. Categories<br/>
<br/>
(To open up the Categories window, choose the Window-&amp;gt;Palettes-&amp;gt;Categories menu item)<br/>
<br/>
VoodooPad has the ability to assign different categories to a specific page in your document.  What this means is you can create a category named "Food" and then assign this category to the pages "Cupcake recipe", "Dinner Ideas", and "The Cake".<br/>
<br/>
And pages can belong in multiple categories as well.  For example, say we have a "Wedding" category and then assign the pages "Guest List", "Reception Info", and "The Cake" to it.  Notice that "The Cake" is in the Food category as well.<br/>
<br/>
This is an easy way to organize pages in VoodooPad document according to topics.<br/>
<br/>
p=. !$imagesDir$/voodoopad/categories_list.png!<br/>
<br/>
*Tip:* To rename a category, hold down the option key and double click its name in the  listing view.<br/>
<br/>
<br/>
h2. Categories as Tags<br/>
<br/>
You can also view the categories for an item as "tags".  To switch to this view, click on the widget in the top right corner of the categories list, and select "View as Tags":<br/>
<br/>
p=. !$imagesDir$/voodoopad/categories_view_as_tags.png!<br/>
<br/>
You will then be able to view all the categories that the item is in, as well as add new categories to the item from this view in an easy manner:<br/>
<br/>
p=. !$imagesDir$/voodoopad/tags_view.png!</html></summary>
     </entry>
  <entry>
       <title>FlySketch: Shortcuts</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/7304249a-e793-01d9-1b5e-c0cbe4c4b89f" rel="alternate" title="FlySketch: Shortcuts" type="text/html" />
       <id>urn:uuid:7304249a-e793-01d9-1b5e-c0cbe4c4b89f:20</id>
       <modified>2007-03-08T14:25:02Z</modified>
       <issued>2005-06-27T22:14:06Z</issued>
       <summary type="text/html"><html>h2. Keyboard ~Shortcuts<br/>
<br/>
Here are a list of keys that you can use to activate certain tools or features, just in case your hands don't feel like moving away from the keyboard.<br/>
<br/>
"0,1-9" Pressing the number keys will cycle the canvas through various levels of transparency. <br/>
<br/>
Here are the various key commands to change the current tool:<br/>
"V" Selection arrow.<br/>
"C" Oval.<br/>
"L" Line.<br/>
"R" Rectangle.<br/>
"E" Round Rectangle.<br/>
"T" Text.<br/>
"F" Freehand Sketch.<br/>
"H" Highlighter<br/>
<br/>
Command-C copies the current canvas, or the current selection if any.<br/>
Command-V pastes<br/>
Command-Shift-E will export the canvas as an image.<br/>
<br/>
<br/>
*FlySketch 1.5 Only:*<br/>
<br/>
* Option-drag in a color well to change the level of opacity.  Move up to make it opaque, move down to make it transparent.<br/>
* Command click in a color well to bring up the standard color picker.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Quicksilver Append to VoodooPad</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/4af589d2-5834-01da-05df-c0cbe4c4bc81" rel="alternate" title="VoodooPad: Quicksilver Append to VoodooPad" type="text/html" />
       <id>urn:uuid:4af589d2-5834-01da-05df-c0cbe4c4bc81:10</id>
       <modified>2007-03-04T07:18:47Z</modified>
       <issued>2005-11-18T05:07:38Z</issued>
       <summary type="text/html"><html>[AUTHOR UPDATE (MARCH 2007):  This script is no longer necessary for appending to QS.  If you want easy prepends and appends (and more!) for QS, go grab the Voodoopad plugin for QS, which has a great deal more functionality and is likely coded far better.]<br/>
<br/>
This is a script allowing appends to a number of VoodooPad pages from Quicksilver using a keyword at the beginnning of an entry.   I use it for quickly adding information on the fly to any of a number of lists without switching window focus and not maintaining several text files.  <br/>
<br/>
It's here in case anyone else might find it (or parts of it) useful.<br/>
<br/>
Please feel free to make changes if you have ideas or can improve on my limited scripting ability.<br/>
<br/>
&amp;lt;carea class="textareaCodeLarge"&amp;gt;<br/>
--Quicksilver Append to VoodooPad.scpt<br/>
--Version 0.21 (2005-11-16)<br/>
-- IMPORTANT:  This script MUST be modified in at least one place for it to work successfully.  At a minimum, the values of the VPDoc and VPDocPath variables defined below must be modified to point to an existing VoodooPad file and its full path.  Additionally, the triggers and pages in the big if block below should be modified to suit the particular desires of the user.  Note that the page targets defined in the if block below must exist when the script is invoked.  If they do not, data sent to those pages will be lost.  At a bare minimum, the user should add a "Log" page to the target VoodooPad document to catch default log entries.<br/>
-- Purpose:  This script works with the applications VoodooPad from Flying Meat Inc. and Quicksilver from Blacktree, Inc.  Both must be installed for the script to work.  It links the two to allow rapid-fire appends to VoodooPad pages by using a keyword of one or more letters at the beginning of a Quicksilver input string.  <br/>
-- Installation:  The script should be installed in a scripts folder.  Note, however, that the script does not work if called directly from the scripts menu; it only works when invoked via Quicksilver with a "Process Text" action.  Setting up a Quicksilver trigger that calls the script plus a "Process Text" action to allow one-keystroke access to the append command line is recommended.<br/>
-- Usage:  The text input expected is a keyword plus a text string to add to the page.  In the if block below, Quicksilver input string of "gr ice cream" would add "ice cream" to the "Groceries" page in Quicksilver.  This generally occurs in the background without distracting the user from the current work.  If a keyword is used by itself as input, however, it brings the corresponding VoodooPad page to the front of the current windows for input.  If no keyword is recognized, the entire text is appended with a timestamp to the "Log" page.<br/>
-- Declare globals<br/>
global InputKeyword, InputString, VPDocPath, VPDoc<br/>
-- Grab the input string from Quicksilver.<br/>
using terms from application "Quicksilver"<br/>
	on process text QSInputString<br/>
		-- The following global variables point to the VoodooPad document to which Quicksilver should append, and that VoodooPad document specified with its full path.  They should be changed by the user to match their preferred VoodooPad document and path.<br/>
		set VPDoc to "main.vdoc"<br/>
		set VPDocPath to "BB HD:Users:sample:Documents:VoodooPad:main.vdoc"<br/>
		-- Copy Quicksilver input string to global InputString.  The first word of InputString is InputKeyword which will be tested in the big if block below, and clipped (if specified) in the VPAppend handler.		<br/>
		set InputString to QSInputString<br/>
		set InputKeyword to first word of InputString<br/>
		-- The big if block.  Essentially, it tests InputKeyword against lists of possible keywords for a particular page or list, and calls VPAppend with parameters matching how that list should be treated.  The syntax is pretty straightforward:  the list of strings in brackets in the if-clause are all the possible keywords that will trigger sending the input to the page specified in the PageName parameter in the then-clause.  If a keyword is used in two different if clauses, the first clause will be the destination.<br/>
		-- ClipKeyword: Calling the handler with ClipKeyword will remove the first word from the input string before appending (so lists do not have various abbreviations before each entry if not desired).<br/>
		-- LogStyle:  Calling the handler with LogStyle will append a full date and timestamp before the input string for time-sensitive entries.<br/>
		-- IMPORTANT:  The page specified in PageName MUST already exist in the target VoodooPad document.  Entries will be lost if not.<br/>
		if InputKeyword is in {"g", "gr", "gl", "groceries", "groc", "food"} then<br/>
			VPAppend with ClipKeyword without LogStyle given PageName:"Groceries"<br/>
		else if InputKeyword is in {"id", "idea", "ideas"} then<br/>
			VPAppend with ClipKeyword without LogStyle given PageName:"Ideas"<br/>
		else if InputKeyword is in {"ln", "link", "links"} then<br/>
			VPAppend with ClipKeyword and LogStyle given PageName:"Links"<br/>
		else if InputKeyword is in {"n", "note", "notes"} then<br/>
			VPAppend with ClipKeyword without LogStyle given PageName:"Notes"<br/>
		else if InputKeyword is in {"s", "sc", "scr", "scratch"} then<br/>
			VPAppend with ClipKeyword without LogStyle given PageName:"Scratch"<br/>
		else if InputKeyword is in {"w", "wishlist", "wish"} then<br/>
			VPAppend with ClipKeyword without LogStyle given PageName:"Wishlist"<br/>
		else if InputKeyword is in {"log", "l"} then<br/>
			VPAppend with ClipKeyword and LogStyle given PageName:"Log"<br/>
		else<br/>
			-- Default action: if the first word of the input string is not recognized as a keyword, prepend "log" to the input string so that it is processed by the VPAppend handler as a log entry, then call the VPAppend handler.  The prepend is necessary so that input of a single non-keyword doesn't automatically bring up the log.<br/>
			set InputString to "log" &amp;amp; space &amp;amp; InputString<br/>
			VPAppend with ClipKeyword and LogStyle given PageName:"Log"<br/>
		end if<br/>
	end process text<br/>
end using terms from<br/>
-- VPAppend handler.  Takes the string PageName to which input should be directed, plus booleans LogStyle and ClipKeyword to define how the input string should be modified.  Actions of LogStyle and ClipKeyword are described below.<br/>
on VPAppend given PageName:PageName, LogStyle:LogStyle, ClipKeyword:ClipKeyword<br/>
	tell application "VoodooPad"<br/>
		-- Check to see whether document is already open.  If not, open it.<br/>
		if not (exists document named VPDoc) then<br/>
			open VPDocPath<br/>
		end if<br/>
		-- If only nonwhitespace and nonpunctuation input is the keyword, then bring document to the front for input, open corresponding page, move cursor to the bottom of the page, and return<br/>
		ignoring white space and punctuation<br/>
			if InputKeyword is InputString then<br/>
				tell application "Finder" to activate document VPDoc of application "VoodooPad"<br/>
				open page document VPDoc with title PageName<br/>
				-- This is a little hack to deal with VoodooPad's placing the cursor at the bottom of text on pages with 100 characters or fewer, but at the very top of all text on pages with more than 100 characters, when "open page" is called.  This sends a Command-DownArrow to the page to place the insert point at the bottom of the page.  Replacing "ASCII character 31" with "ASCII Character 30" below would cause the cursor to be placed at the top of the page, if that is preferred.<br/>
				tell application "System Events" to keystroke (ASCII character 31) using command down<br/>
				return<br/>
			end if<br/>
		end ignoring<br/>
		-- Process ClipKeyword: If true, delete the keyword from the append string (i.e., get second word through to the end of the string).<br/>
		if ClipKeyword then<br/>
			set AppendString to text from word 2 to last word in InputString<br/>
		else<br/>
			set AppendString to InputString<br/>
		end if<br/>
		<br/>
		-- Process LogStyle:  If true, prepend timestamp to the string<br/>
		if LogStyle then<br/>
			set AppendString to short date string of (current date) &amp;amp; space &amp;amp; time string of (current date) &amp;amp; ":" &amp;amp; space &amp;amp; AppendString<br/>
		end if<br/>
		<br/>
		-- Finally, append the text and a return character to the selected page.<br/>
		append text AppendString &amp;amp; return to page PageName of document VPDoc<br/>
	end tell<br/>
end VPAppend<br/>
&amp;lt;/carea&amp;gt;</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Triggers</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/96d13fbc-ed3b-01da-126a-c0cbe4c4d8a1" rel="alternate" title="VoodooPad: Triggers" type="text/html" />
       <id>urn:uuid:96d13fbc-ed3b-01da-126a-c0cbe4c4d8a1:14</id>
       <modified>2007-03-03T18:07:02Z</modified>
       <issued>2006-05-26T21:45:15Z</issued>
       <summary type="text/html"><html>h2. Triggers<br/>
<br/>
A VoodooPad Pro only feature- triggers are a handy way to script VoodooPad when certain events occur, such as a new page being created or deleted, documents opening or closing, files being written on web export and more.<br/>
<br/>
*Note*: triggers are written in a scripting language named Lua, and a little bit of programming experience is required.  You can find out more about Lua from http://www.lua.org/ .<br/>
<br/>
The easiest way to learn triggers is to create one.  Start off by creating a new page named "New Page Trigger", and delete all the text on the new page so we have a clean slate to work with.  Next, just copy and paste this quick script:<br/>
<br/>
<br/>
pre. newPage = triggerDictionary.item<br/>
vpconsole("we're creating a new page named " .. newPage:displayName())<br/>
<br/>
<br/>
What this script does is print out the name of the new page in the VoodooPad console.  Next we need to assign this script to an event in VoodooPad.  So bring up the Page and Document Inspector (under the "View" menu) and switch to the Triggers tab.  Select the event "Page opened" for the "On event:" label, and then press the plus button at the bottom of the window to select our new page:<br/>
<br/>
p=. !$imagesDir$/voodoopad/newpagetriggerselection.png!<br/>
<br/>
Press the "OK" button and we've created our first trigger.  You should then see something like this in the inspector window:<br/>
<br/>
p=. !{border: solid 1px;}$imagesDir$/voodoopad/triggercreated.png!<br/>
<br/>
Now try creating a new page in VoodooPad named "random".  You should see the text "we're creating a new page named random<br/>
" pop open in a little window.  Go ahead and delete the random page, and let's take a look at this script with a little more detail.<br/>
<br/>
pre. newPage = triggerDictionary.item<br/>
<br/>
Every trigger that is executed has a couple of global variables setup automatically.  One of these is named "triggerDictionary".  This dictionary contains values that can be of use when your triggers are being run.  An easy way to find out what all the values in the dictionary are is to use this simple line that will print out the keys in the dictionary:<br/>
<br/>
pre. table.foreach(triggerDictionary, vpconsole)<br/>
<br/>
So in the first line of our example, we are assigning the value "item" of the trigger dictionary to a new variable named "newPage".  This represents the page that has just been created.<br/>
<br/>
The next line simply prints out some text with the name of the page to the console:<br/>
<br/>
pre. vpconsole("we're creating a new page named " .. newPage:displayName())<br/>
<br/>
The two dots (..) is how Lua concatenates strings together, so we get a single line of text that we send to the console.  the newPage:displayName() bit calls a method named "displayName" on the new page object.  A couple of other methods that we could call are "modifiedDate", "createdDate", "key", "type".  There are more, but we won't get into those right now.  Instead, let's spice up our example a little more.<br/>
<br/>
Next, we're going to take the contents of our new page and modify them a little bit by adding the current date to it.  There are a couple of easier ways we could do this, but for this example let's just pretend there aren't.  So to start, let's go back to our "New Page Trigger" page and delete all the text there, and replace it with this:<br/>
<br/>
<br/>
pre. newPage = triggerDictionary.item<br/>
attributedString = newPage:dataAsAttributedString()<br/>
newString = os.date("\nThis page was created on %A, in %B")<br/>
attributedString:objc_mutableString():appendString(newString)<br/>
newPage:setDataAsAttributedString(attributedString)<br/>
<br/>
What we do here is:<br/>
<br/>
1: Grab the new page that's being created.<br/>
2: Grab the attributed string out of the page.  An attributed string is a technical way of saying "stylized text".  It is what keeps track of your bold and italic text, custom margins, and other fancy text stuff.<br/>
3: Create our date string that will will append to the end of our new page, in the format of "This page was created on Tuesday, in May"<br/>
4: Append our new text to our attributed string<br/>
5: Set that attributed string back into the page so it'll show up when we view it.<br/>
<br/>
<br/>
Now whenever we create a new page, you'll see that text appended to the end of it.<br/>
<br/>
Other Topics:<br/>
<br/>
* Trigger Examples<br/>
* "Lua website":http://www.lua.org/</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: New in 3.0</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/fafb03d4-ed49-01da-1cee-c0cbe4c4e99c" rel="alternate" title="VoodooPad: New in 3.0" type="text/html" />
       <id>urn:uuid:fafb03d4-ed49-01da-1cee-c0cbe4c4e99c:16</id>
       <modified>2007-01-31T18:29:17Z</modified>
       <issued>2006-05-26T23:28:16Z</issued>
       <summary type="text/html"><html>h2. New in VoodooPad 3.0:<br/>
<br/>
<br/>
*Tabs*<br/>
Open up multiple pages in the same window using tabs.   Command click on a link to open it in a new tab, or right click on a link and choose "Open Link in New Tab".  (And you can still open up pages in new windows by holding down shift-command when clicking on a link)<br/>
<br/>
*Search Improvements*<br/>
Search in VoodooPad is lightning fast now, and returns results in record times.<br/>
<br/>
*Support for big documents*<br/>
Stuff gigabytes of data inside a VoodooPad document, it won't mind.  A new file format makes saving documents super quick as well.<br/>
<br/>
*Linkback*<br/>
A user can paste content from any LinkBack-enabled application into VoodooPad and reopen that content later for editing with just a double-click.  See http://www.linkbackproject.org/ for more info.<br/>
<br/>
*Embed images, pdfs, and other types of files.*<br/>
The improved file format for VoodooPad 3.0 means you can embed files such as images, pdfs, mp3s, and most other types of files as well.  VoodooPad also includes a new PDF Service so you can print from any application directly into VoodooPad.<br/>
<br/>
*Full Screen*<br/>
Edit your pages in full screen mode, to keep you focused on the task at hand.<br/>
<br/>
*Script Plugins*<br/>
Script Plugins are an easy way to extend the functionality of VoodooPad.  Download new plugins or write your own.<br/>
<br/>
*Palettes*<br/>
VoodooPad sheds the drawer and moves content out into easy to use palettes.  Find your backlinks, pages list, categories, recently updated pages, and (new for 3.0) recently visited pages quick and easily.<br/>
<br/>
*Text Styles*<br/>
A new text styles palette lets you add and apply text styles to your pages.<br/>
<br/>
*Custom Shortcuts*<br/>
VoodooPad has a new preference pane where you can set and change the menu item shortcuts.  So if you don't like that a certain plugin has no shortcut- now you've got an easy way to fix it!<br/>
<br/>
*Merge and Split*<br/>
Merge two VoodooPad documents together using the import menu option, or split pages from a document into a new file to slim things down a bit.<br/>
<br/>
*Improvements and Other New Stuff*<br/>
<br/>
* Rulers stay in place now when moving from page to page.<br/>
* Smooth lines for sketch<br/>
* Clippings folder now supports RTFD files<br/>
* Sending by mail now includes images<br/>
* New Web Export date placeholders<br/>
* Upgraded linking engine recognizes CJK links without spaces, and much more.<br/>
* Copy no longer copies links that are only good to VoodooPad<br/>
* Plain text pages<br/>
* New package file format which is subversion friendly<br/>
* Double clicking an image will now prompt you to save the image to disk<br/>
* New toolbar buttons<br/>
* Window and tab states are now stored in the document<br/>
* Updates to the plugin api<br/>
* New preference to choose wether or not to use the default welcome text for new documents<br/>
* The open page panel is no longer case sensitive<br/>
* New applescript command "current page name" to get the name of the front most page<br/>
<br/>
<br/>
h2. VoodooPad Pro<br/>
<br/>
There's a new addition to the VoodooPad family for the 5% of you who want some crazy advanced features.  And here's what it has:<br/>
<br/>
*Document level encryption*<br/>
Have every bit of your VoodooPad document protected by a password, and not just on a page by page basis.<br/>
<br/>
*Triggers*<br/>
A handy way to script VoodooPad when certain events occur such as a new page being created or deleted, documents opening or closing, files being written on web export and more.<br/>
<br/>
*Item Meta*<br/>
Assign meta data to an individual page which can be used for whatever you'd like, and access them in script plugins or triggers.<br/>
<br/>
*Webserver*<br/>
A built in webserver to share your pages with friends or co-workers on your local network without any pain.  Bonjour support so you don't have to hand around cryptic urls.<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Old Versions</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/28fc7dd0-f3e0-01d9-0161-c0cbe4c49a7b" rel="alternate" title="VoodooPad: Old Versions" type="text/html" />
       <id>urn:uuid:28fc7dd0-f3e0-01d9-0161-c0cbe4c49a7b:12</id>
       <modified>2007-01-02T17:15:53Z</modified>
       <issued>2005-07-13T13:53:27Z</issued>
       <summary type="text/html"><html>Here are a list of links to older versions of VoodooPad, just in case you need one for some reason.  However, you should always be running the latest version of VP, since it usually has important bug fixes that older versions don't have.<br/>
<br/>
VoodooPad-2.5.5.dmg: http://flyingmeat.com/download/VoodooPad-2.5.5.dmg (Requires at least 10.3.9)<br/>
VoodooPadLite-2.5.5.dmg: http://flyingmeat.com/download/VoodooPadLite-2.5.5.dmg (Requires at least 10.3.9)<br/>
<br/>
VoodooPad 2.1.2 http://flyingmeat.com/download/VoodooPad-2.1.2.dmg<br/>
VoodooPad Lite 2.1.2: http://flyingmeat.com/download/VoodooPadLite-2.1.2.dmg<br/>
<br/>
VoodooPad 2.1.1: http://flyingmeat.com/download/VoodooPad-2.1.1.dmg<br/>
VoodooPad Lite 2.1.1: http://flyingmeat.com/download/VoodooPadLite-2.1.1.dmg<br/>
<br/>
VoodooPad 2.1: http://flyingmeat.com/download/VoodooPad-2.1.dmg<br/>
VoodooPad Lite 2.1: http://flyingmeat.com/download/VoodooPadLite-2.1.dmg<br/>
<br/>
VoodooPad 2.0.2: http://flyingmeat.com/download/VoodooPad-2.0.2.dmg<br/>
VoodooPad Lite 2.0.2: http://flyingmeat.com/download/VoodooPadLite-2.0.2.dmg<br/>
<br/>
VoodooPad 2.0.1: http://flyingmeat.com/download/VoodooPad-2.0.1.dmg<br/>
VoodooPad Lite 2.0.1: http://flyingmeat.com/download/VoodooPadLite-2.0.1.dmg<br/>
<br/>
VoodooPad 2.0: http://flyingmeat.com/download/VoodooPad2.dmg<br/>
VoodooPad Lite 2.0: http://flyingmeat.com/download/VoodooPadLite2.dmg<br/>
<br/>
VoodooPad 1.1.4 http://flyingmeat.com/x/VoodooPad1.1.4.dmg<br/>
VoodooPad Lite 1.1.4 http://flyingmeat.com/x/VoodooPadLite1.1.4.dmg<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Hidden Preferences</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/1b17df8c-c750-01d9-0c13-c0cbe4c4e94a" rel="alternate" title="VoodooPad: Hidden Preferences" type="text/html" />
       <id>urn:uuid:1b17df8c-c750-01d9-0c13-c0cbe4c4e94a:13</id>
       <modified>2006-12-26T19:10:58Z</modified>
       <issued>2005-05-17T20:51:25Z</issued>
       <summary type="text/html"><html>Sometimes preferences will be built into VoodooPad without an interface to set them.  Usually these are turned on and off via the command line, invoked from within one of Terminal.app's windows.  Here are a few of them:<br/>
<br/>
_(If you are using VoodooPad Pro instead of VoodooPad, substitute_ *com.flyingmeat.VoodooPad_Pro* _for_ *com.flyingmeat.VoodooPad* _below.)_<br/>
<br/>
h3. Print Margins.<br/>
<br/>
If you want to set the margins to 1/4 inch all around, open up the terminal and type this:<br/>
defaults write com.flyingmeat.VoodooPad VPPrintMarginHack -string "{{0.25, 0.25}, {0.25, 0.25}}"<br/>
<br/>
The values are for left, right, top, bottom<br/>
To remove the margin, type:<br/>
defaults delete com.flyingmeat.VoodooPad VPPrintMarginHack<br/>
<br/>
h3. Setting an external editor that is not BBEdit (VP 2.1+ only)<br/>
<br/>
To use "SubEthaEdit":http://www.codingmonkeys.de/subethaedit/ type this in the terminal:<br/>
defaults write com.flyingmeat.VoodooPad odbeditor de.codingmonkeys.SubEthaEdit<br/>
<br/>
To use "TextMate":http://macromates.com/ type:<br/>
defaults write com.flyingmeat.VoodooPad odbeditor com.macromates.textmate<br/>
<br/>
h3. Single click to open a page from the drawer (2.1.2+ only)<br/>
<br/>
Quit VoodooPad, and type this in the terminal:<br/>
defaults write com.flyingmeat.VoodooPad singleClickBacklinksToOpen -bool YES<br/>
<br/>
Then relaunch and you should be good to go.<br/>
<br/>
h3. Keep VoodooPad from opening a new document on launch (2.5+ only)<br/>
<br/>
In some cases, for example when you quit VoodooPad without an open document, VP will try to create a blank document on relaunch.  Use this hidden pref to change the behavior.<br/>
<br/>
Quit VoodooPad, and type this in Terminal.app:<br/>
<br/>
defaults write com.flyingmeat.VoodooPad noNewDocumentOnStartup -bool YES<br/>
<br/>
h3. Show the old "Export As HTML..." menu option (2.5+ only)<br/>
<br/>
VoodooPad 2.5 has a new "Web Export" engine, replacing the older HTML export options.  However, if still want to use the older export options, you can bring them back with the following command: <br/>
<br/>
defaults write com.flyingmeat.VoodooPad showTwoOhHTMLExportMenu -bool YES<br/>
<br/>
h3. Requiring a prefix for AddressBook links. (VoodooPad 3.1+ only)<br/>
<br/>
If you don't like that the AddressBook links names automagically, you can make it so it only links up when a prefix is given, such as "ab:".  For example, say I would like to link to the AddressBook entry "Gus Mueller", but I wanted to have to type "ab:Gus Mueller" for the link to show up, this is what I would enter in the terminal:<br/>
<br/>
defaults write com.flyingmeat.VoodooPad ABPrefix "ab:"<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>FlySketch: Extra Scripts</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/5e635a12-d1f2-01d9-0622-c0cbe4c49347" rel="alternate" title="FlySketch: Extra Scripts" type="text/html" />
       <id>urn:uuid:5e635a12-d1f2-01d9-0622-c0cbe4c49347:13</id>
       <modified>2006-12-19T10:44:10Z</modified>
       <issued>2005-05-31T09:38:08Z</issued>
       <summary type="text/html"><html>h2. ~Extra Scripts<br/>
<br/>
These extra scripts can be placed in your ~/Library/Application Support/FlySketch/Workflow Scripts/ folder, to add additional actions to the Workflow Scripts toolbar button.<br/>
<br/>
As always, be careful when installing applications or scripts from third parties- they may contain malicious code who's sole purpose is to destroy your computer.  Any scripts downloaded from flyingmeat.com have been verified to be safe.<br/>
<br/>
* "Open in Eudora" script, by Stephen Dodd<br/>
http://flyingmeat.com/fs/contrib/flysketch/OpeninEudora.sh.zip<br/>
<br/>
* Upload to Flickr (10.4+ only)<br/>
Build an "Automator":http://www.apple.com/macosx/features/automator/ action you can use to upload your canvas to http://flickr.com/ <br/>
<br/>
* Upload to Blog<br/>
Upload an image to your weblog via the MetaWeblog API.</html></summary>
     </entry>
  <entry>
       <title>FlySketch: Upload to Blog</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/b56efb5a-a26b-01da-08d8-c0cbe4c4f980" rel="alternate" title="FlySketch: Upload to Blog" type="text/html" />
       <id>urn:uuid:b56efb5a-a26b-01da-08d8-c0cbe4c4f980:4</id>
       <modified>2006-12-19T01:13:41Z</modified>
       <issued>2006-02-20T15:50:45Z</issued>
       <summary type="text/html"><html>h2. Upload to Blog<br/>
<br/>
Here's a quick workflow script written in python to upload an image to your blog.<br/>
You'll have to change the parameters at the top to your specific settings, and besides that there are a couple of other requirements:<br/>
<br/>
a) Your weblog system needs to support the metaweblog api (such as movable type)<br/>
b) Your workflow image format needs to be set to "PNG"<br/>
<br/>
&amp;lt;code&amp;gt;#!/usr/bin/python<br/>
<br/>
import os<br/>
import sys<br/>
import xmlrpclib<br/>
<br/>
rpcurl      = "http://myhostname.com/mt/mt-xmlrpc.cgi"<br/>
blogurl     = "http://myhostname.com/mt/"<br/>
blogid      = "1"<br/>
username    = "admin"<br/>
password    = "mypassword"<br/>
<br/>
postTitle   = "FlySketch Image Upload"<br/>
<br/>
imagePath   = sys.argv[ 1]<br/>
<br/>
metaWeblog = xmlrpclib.Server(rpcurl).metaWeblog<br/>
<br/>
imageStruct = {}<br/>
imageStruct['type'] = 'image/png'<br/>
imageStruct['name'] = os.path.split(imagePath)[1]<br/>
imageStruct['bits'] = xmlrpclib.Binary(open(imagePath, 'rb').read())<br/>
<br/>
res = metaWeblog.newMediaObject(blogid, username, password, imageStruct)<br/>
# we just assume all was well.<br/>
<br/>
url = res['url']<br/>
<br/>
postStruct = {}<br/>
postStruct['title'] = postTitle<br/>
postStruct['description'] = """&amp;amp;lt;center&amp;gt;&amp;amp;lt;img src="%s" alt="%s" /&amp;gt;&amp;amp;lt;/center&amp;gt;""" % (url, postTitle)<br/>
<br/>
res = metaWeblog.newPost(blogid, username, password, postStruct, xmlrpclib.Boolean(True))<br/>
<br/>
os.popen('/usr/bin/open ' + blogurl)<br/>
&amp;lt;/code&amp;gt;<br/>
<br/>
</html></summary>
     </entry>
  <entry>
       <title>FlySketch: About FlySketch</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/bba1c8c6-fb14-01d9-06f5-c0cbe4c4c5ff" rel="alternate" title="FlySketch: About FlySketch" type="text/html" />
       <id>urn:uuid:bba1c8c6-fb14-01d9-06f5-c0cbe4c4c5ff:31</id>
       <modified>2006-12-11T11:18:11Z</modified>
       <issued>2005-07-22T17:57:25Z</issued>
       <summary type="text/html"><html>h2. About  FlySketch<br/>
<br/>
FlySketch is a unique new application that allows you to draw on top of just about anything on your screen.  Highlight words or paragraphs, draw shapes to help define what you want to say, and then drag and drop the results onto another application, or email it to a friend<br/>
<br/>
h3. Great uses for FlySketch:<br/>
<br/>
Some applications just don’t do what you want them to do.  Take TextEdit for example- it’s a great writing application, but it doesn’t come with any drawing tools, and the same can be said about many applications.  With FlySketch you can bring up a window without ever leaving TextEdit to create diagrams using the built in line and shape tools.  And then adding your creations to TextEdit is done with only the drag of a mouse.<br/>
<br/>
Or maybe you’re surfing the web, and you come across a great interface that you would like to study in detail later or maybe a picture that you know might not be around for much longer.  Pop up FlySketch, use the screen capture button and tuck it away to a special “web collections” folder that you added to the workflow actions.<br/>
<br/>
Workflow actions may also be created out of regular applications.  Simply drag an alias of Microsoft Entourage®  to the workflow folder, and when you choose its corresponding action in the workflow actions the image will be attached to a new email.  You can also apply the same trick to Corel Painter®, Adobe Photoshop®, Mail, or just about any other application that allows you to drag images on to its application icon.<br/>
<br/>
<br/>
h3. Getting images out of FlySketch is a piece of cake.<br/>
<br/>
To place an image into an application, just hold down the command key and drag on the canvas to pull the image off.  Let go of mouse when you have your cursor positioned over your destination.  If you would like the image to have a transparent background when pasted, hold down command-option while you drag the image.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Trigger Examples</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/6e981020-ed40-01da-0879-c0cbe4c48c72" rel="alternate" title="VoodooPad: Trigger Examples" type="text/html" />
       <id>urn:uuid:6e981020-ed40-01da-0879-c0cbe4c48c72:14</id>
       <modified>2006-12-06T15:35:48Z</modified>
       <issued>2006-05-26T22:19:55Z</issued>
       <summary type="text/html"><html>h2. Trigger Examples<br/>
<br/>
*A trigger that creates a new page based on the current date when a document opens*<br/>
<br/>
&amp;lt;carea class="textareaCode60"&amp;gt;-- assign this to the "Document did open" event.<br/>
pageName = os.date("%Y.%m.%d", os.time())<br/>
triggerDictionary.document:openPageWithTitle(pageName)&amp;lt;/carea&amp;gt;<br/>
<br/>
*A simple trigger that you could use to modify the default text on a new page*<br/>
<br/>
&amp;lt;carea class="textareaCode300"&amp;gt;-- assign this to the "Page created" event<br/>
newPage = triggerDictionary.item<br/>
-- check and see if we are dealing with a regular page type.<br/>
-- if it's not a regular page type, then bail out on this trigger.<br/>
if (newPage:type() ~= VPPageType) then<br/>
    return<br/>
end<br/>
 <br/>
-- we grab the contents of the page<br/>
attributedString = newPage:dataAsAttributedString()<br/>
 <br/>
-- using objc_mutableString() insteadof mutableString() will return an objective-c object which we can then<br/>
-- call a function on, instead of a lua string.<br/>
attributedString:objc_mutableString():appendString("\nThis is an addition to the new page text.")<br/>
attributedString:objc_mutableString():appendString("\nThis new page's name is '" .. newPage:displayName() .. "'")<br/>
 <br/>
-- and now we set the value in the new page.<br/>
newPage:setDataAsAttributedString(attributedString)&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*A WebServer trigger example:*<br/>
<br/>
&amp;lt;carea class="textareaCode250"&amp;gt;-- assign this to the "Web server will send page" event<br/>
 <br/>
-- check and see if we are dealing with a regular page type.<br/>
-- if it's not a regular page type, then return.<br/>
if (triggerDictionary.item:type() ~= VPPageType) then<br/>
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return<br/>
end<br/>
 <br/>
-- grab what's going to be sent out to the browser (this is the raw html)<br/>
output = triggerDictionary.output<br/>
 <br/>
-- look for the key $lookingFor$ , and replace it with the string "replaceValue"<br/>
-- notice that we assign the value back to the trigger dictionary.  This way, VoodooPad<br/>
-- gets the updated value.<br/>
triggerDictionary.output = output:replace("$lookingFor$", "replaceValue")&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*A Trigger to update a page listing all the pages in the document:*<br/>
<br/>
&amp;lt;carea class="textareaCode250"&amp;gt;-- assign this to the "Page Deleted" and "Page Created" events.<br/>
-- the index is created in a page named "Page Index"<br/>
indexPageName = "Page Index"<br/>
document = triggerDictionary.document<br/>
list = "All the pages in this document:\n"<br/>
for key in objc.values(document:keys()) do<br/>
    page = document:pageForKey(key)<br/>
    list = list .. page:displayName() .. "\n"<br/>
end<br/>
document:createNewPageWithName(indexPageName) -- noop if it's already around.<br/>
pageData = document:pageForKey(indexPageName)<br/>
attributedString = pageData:dataAsAttributedString()<br/>
attributedString:objc_mutableString():setString(list)<br/>
pageData:setDataAsAttributedString(attributedString)<br/>
&amp;lt;/carea&amp;gt;<br/>
<br/>
<br/>
*Replace the template placeholder $clipboard$ with the text on the clipboard:*<br/>
<br/>
&amp;lt;carea class="textareaCode400"&amp;gt;-- assign this to the "Page created" event<br/>
newPage = triggerDictionary.item<br/>
-- check and see if we are dealing with a regular page type.<br/>
-- if it's not a regular page type, then bail out on this trigger.<br/>
if (newPage:type() ~= VPPageType) then<br/>
    return<br/>
end<br/>
-- we grab the contents of the page<br/>
attributedString = newPage:dataAsAttributedString()<br/>
-- grab the clipboard<br/>
p = objc.class("NSPasteboard"):generalPasteboard()<br/>
t = p:stringForType("NSStringPboardType")<br/>
range = objc.luaToNSRange({location=0, length=attributedString:objc_mutableString():length()})<br/>
if (t ~= nil) then<br/>
    count = attributedString:objc_mutableString():replaceOccurrencesOfString_withString_options_range_("$clipboard$", t, 0, range)<br/>
else<br/>
    -- otherwise just make the $clipboard$ placeholder an empty string<br/>
    attributedString:objc_mutableString():replaceOccurrencesOfString_withString_options_range_("$clipboard$", "", 0, range)<br/>
end<br/>
-- and now we set the value in the new page.<br/>
newPage:setDataAsAttributedString(attributedString)&amp;lt;/carea&amp;gt;<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Gems</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/81c0220a-83ea-01db-0f39-c0cbe4c4b42b" rel="alternate" title="VoodooPad: Gems" type="text/html" />
       <id>urn:uuid:81c0220a-83ea-01db-0f39-c0cbe4c4b42b:4</id>
       <modified>2006-12-04T14:57:41Z</modified>
       <issued>2006-12-04T14:55:16Z</issued>
       <summary type="text/html"><html>h2. VoodooPad Gems, or otherwise known as "Cool Tips"<br/>
<br/>
h3. Moving text between open windows.<br/>
<br/>
If you'd like to drag and drop text from window a, to window b, and have the text removed from window a after the drop, hold down the command key.  If you just do a normal drag and drop it will be copied instead of moved.</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: New in 3.1</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/7df7bd64-3a0b-01db-0eee-c0cbe4c4f9b3" rel="alternate" title="VoodooPad: New in 3.1" type="text/html" />
       <id>urn:uuid:7df7bd64-3a0b-01db-0eee-c0cbe4c4f9b3:20</id>
       <modified>2006-11-29T04:11:57Z</modified>
       <issued>2006-09-01T15:44:57Z</issued>
       <summary type="text/html"><html>h2. New in VoodooPad 3.1:<br/>
<br/>
(If you are new to VoodooPad, or are just curious; be sure to check out what's new in 3.0 as well)<br/>
<br/>
h3. Unified Window look, and Drawers are back<br/>
<br/>
After receiving tons off feedback we discovered something; people really liked the old drawers and the way the windows used to look.  So now you can have it both ways! If you like the darker "Pro" look, you can turn that on in the prefs. Otherwise you get the 100% all natural, no-preservatives traditional “Unified” windows.  And if you really liked the drawers or you would like to play with them to see how the other half lives, you can flip that option on in the prefs as well.<br/>
<br/>
Our new motto is: "We're not changing our mind, we're just agile".<br/>
<br/>
h3. New preferences pane for opening links in tabs and windows<br/>
<br/>
We got a lot of feedback about opening pages in new windows too, and a few of you wanted them to open up in new tabs all the time as well.  So for VoodooPad 3.1 a new preference pane has been added which allows you to control where new pages are opened up; in the same view, in a new tab, or in a new window.<br/>
<br/>
h3. Text Zoom<br/>
<br/>
VoodooPad as a presentation tool?  It’s been done on multiple occasions.  But man, sometimes that text is just a little too small to see from the back of the room...<br/>
<br/>
Text Zoom to the rescue!<br/>
<br/>
Located under the View menu, you can now control magnification of what you’re looking at.  Too big?  Shrink it down.  Too small?  Blow it up.<br/>
<br/>
h3. Sketch Improvements<br/>
<br/>
Want to draw some lines on an image you’ve already got in a VoodooPad page?  Now you can select an inline image and bring it up in the sketch sheet to edit it.<br/>
<br/>
h3. Links to run plugins.<br/>
<br/>
There are some folks out there with some crazy ideas.  They want to click on a link and have it run a plugin, and _make stuff happen_.<br/>
<br/>
It seems like it could be useful, who am I to say otherwise?  (Besides being the guy who wrote VoodooPad and having the ability to say “no!” that is…)<br/>
<br/>
So VoodooPad 3.1 includes a new url scheme “runplugin:”.  It’s pretty simple.<br/>
<br/>
Let’s say you made your own little script plugin named “Send Page to Entourage".  You could then make a custom url link like so: “runplugin:Send Page to Entourage” and with an alias of “Ent”.  Stay with me here...<br/>
<br/>
Now you can type Command-Shift-O to bring up the “Open Page” sheet, type “ent”, and have your plugin run automagically.  You can also add on parameters to the custom url, and it will be passed along to your script plugin.  How cool is that?<br/>
<br/>
Yes, it’s very geeky.  The theory is that some of you will be able to do some cool things with this and hopefully share it with everyone else.<br/>
<br/>
h3. New document idle trigger for VoodooPad Pro<br/>
<br/>
Have you got a trigger that you want to run when you aren’t doing anything?  Maybe commit your document to a Subversion repository, or something else?  With a new event named “Document went idle”, VoodooPad Pro can run a trigger to act on your very wishes.  After 15 seconds of you doing nothing at the computer, it’ll run.<br/>
<br/>
If you would like to change the timeout to something other than 15 seconds, you can do so with the following defaults command in Terminal.app:<br/>
<br/>
defaults write com.flyingmeat.VoodooPad_Pro documentIdleTimeoutSeconds 30<br/>
<br/>
Where the value 30 would make it time out at 30 seconds.<br/>
<br/>
h3. New "Send To" plugin.<br/>
<br/>
Take a copy of a page and send it to another application or folder.<br/>
<br/>
Place aliases of applications, shell scripts, or aliases to folders in the ~/Library/Application Support/VoodooPad/Send To/ folder, and it will magically show up in the Plugin menu.  You can then call on that menu item and the current page will be sent to it!  And for things like audio files or PDFs it will be copied out of VoodooPad and handed to your app/script/whatever.<br/>
<br/>
If you'd like for the current page to be sent as plain text to your "Send To" item, just hold down the option key when calling upon it.<br/>
<br/>
h3. New "Record Audio" plugin.<br/>
<br/>
Ok, this really happened in VoodooPad 3.0.2 but we thought it deserved its own headline here.<br/>
<br/>
If you have a microphone hooked up to your mac, or you have one of those fancy new intel machines with the microphone built in, you can now record audio notes for yourself and keep them inside VoodooPad for listening to later.  You can also combine this with the new "Send To" plugin to record something, and then send it off to your favorite email application to share with other folks.<br/>
<br/>
h3. Bug fixes, little things, and performance enhancements<br/>
<br/>
* VoodooPad is slightly faster at importing documents and xml files.  It's also faster at exporting as xml as well.<br/>
* If a bad search index is found, it's deleted and rebuilt instead of just VP beeping at you.<br/>
* Palette windows no longer float above all other windows.<br/>
* When importing files, you are now given the option to skip all duplicates when a conflicting page name is found.<br/>
* Fixed a crasher when embedding a file with drag and drop<br/>
* $clipboard$, and $fromPage$ can be used now as a variable in the new page template.<br/>
* New lua functions- vp.formatViaMarkdown(string) and vp.formatViaTextile(string).<br/>
* The new page sheet now has an "open in new tab" button, and auto fills the name box with "Untitled", "Untitled 2", etc..<br/>
* New preference to use smart quotes when editing text.<br/>
* Added a bit of eye candy when switching tabs in the preferences window.<br/>
* The voodoopad: bookmarklet now accepts some new parameters, such as "pageName" and "addDate".<br/>
* Holding down the option key while clicking the categories toolbar button will add the current page to the currently selected category.<br/>
* The plugin menu now shows up in the contextual menu when editing text.  You can right click on a link, and the Send To plugin will act on what is behind the link instead of the current page.<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Andy's Web Export Category Moving</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/ffd0144a-7a5b-01db-1622-c0cbe4c4a00b" rel="alternate" title="VoodooPad: Andy's Web Export Category Moving" type="text/html" />
       <id>urn:uuid:ffd0144a-7a5b-01db-1622-c0cbe4c4a00b:8</id>
       <modified>2006-11-25T21:59:16Z</modified>
       <issued>2006-11-22T11:02:29Z</issued>
       <summary type="text/html"><html>h2. Andy's Web Export Category Moving script<br/>
<br/>
This is a script, written in Ruby, that will parse the meta.xml file that is created during a web export and move the rendered html files into folders named for the VoodooPad categories. These folders are created elsewhere, like in the preflight script.<br/>
<br/>
h3. Usage<br/>
<br/>
I have this script in my web export plugin and have modified my Info.plist to run it as a postflight script. Remember to make the script executable.<br/>
<br/>
h4. parseMetaXml.rb<br/>
<br/>
&amp;lt;carea class="textareaCodeLarge"&amp;gt;#!/usr/bin/env ruby -w<br/>
# for use in web export plugin<br/>
# written by Andy Fragen &amp;lt;andy@thefragens.com&amp;gt;<br/>
 <br/>
require 'rexml/document'<br/>
require 'fileutils'<br/>
include REXML<br/>
include FileUtils<br/>
 <br/>
c = 0<br/>
dir = ENV['VPWebExportOutputDirectory'] + "/"<br/>
 <br/>
meta = dir + ("meta.xml")<br/>
file = File.new(meta)<br/>
doc = Document.new(file)<br/>
num = XPath.match(doc, "//page")<br/>
files = XPath.match(doc, "//fileName")<br/>
subcat = XPath.match(doc, "//category")<br/>
cat = XPath.match(doc, "//categories")<br/>
 <br/>
for i in 0..(num.size-1)<br/>
  if cat[i].size == 1<br/>
    c=c+1<br/>
    next <br/>
  end<br/>
  newDir = dir + subcat[i-c].text<br/>
  fp = subcat[i-c].text + ("/".concat(files[i].text))<br/>
  fpOld = dir + (files[i].text)<br/>
  fpNew = dir + fp<br/>
 <br/>
  if File.exists?(fpOld)<br/>
    if File.exists?(newDir)<br/>
      mv(fpOld, fpNew)<br/>
    else<br/>
      next<br/>
    end<br/>
  else<br/>
    next<br/>
  end<br/>
end<br/>
&amp;lt;/carea&amp;gt;<br/>
</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Poor Man's AppleScript HTML Export</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/42444f08-3610-01da-10f7-c0cbe4c4e0d3" rel="alternate" title="VoodooPad: Poor Man's AppleScript HTML Export" type="text/html" />
       <id>urn:uuid:42444f08-3610-01da-10f7-c0cbe4c4e0d3:7</id>
       <modified>2006-11-22T23:18:44Z</modified>
       <issued>2005-10-05T19:24:02Z</issued>
       <summary type="text/html"><html>h2. Poor Man's AppleScript HTML Export<br/>
<br/>
This example AppleScript will talk to the first document, gather all the pages, and then export them as pre-formatted html to the folder specified in the variable "outFolder"<br/>
<br/>
&amp;lt;carea class="textareaCodeLarge"&amp;gt;-- this is the path to the folder you would like to write out to.<br/>
set outFolder to "srv:Users:gus:Desktop:html"<br/>
tell application "VoodooPad"<br/>
    repeat with i from 1 to number of items in pages of document 1<br/>
        set s to text of page i of document 1<br/>
        set n to name of page i of document 1<br/>
        <br/>
        set s to my findAndReplace("&amp;amp;", "&amp;amp;amp;", s)<br/>
        set s to my findAndReplace("&amp;lt;", "&amp;amp;lt;", s)<br/>
        set s to my findAndReplace("&amp;gt;", "&amp;amp;gt;", s)<br/>
        <br/>
        set outfile to outFolder &amp;amp; ":" &amp;amp; n &amp;amp; ".html"<br/>
        set outText to "&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Here the title&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;pre&amp;gt;" &amp;amp; s &amp;amp; "&amp;lt;/pre&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;"<br/>
        <br/>
        tell application "Finder"<br/>
            set f to outfile<br/>
            set nref to open for access file f with write permission<br/>
            set eof nref to 0<br/>
            write outText to file f<br/>
            close access nref<br/>
        end tell<br/>
    end repeat<br/>
end tell<br/>
-- shamelessly stolen from http://bbs.applescript.net/viewtopic.php?id=13008<br/>
on findAndReplace(tofind, toreplace, TheString)<br/>
    set ditd to text item delimiters<br/>
    set text item delimiters to tofind<br/>
    set textItems to text items of TheString<br/>
    set text item delimiters to toreplace<br/>
    if (class of TheString is string) then<br/>
        set res to textItems as string<br/>
    else -- if (class of TheString is Unicode text) then<br/>
        set res to textItems as Unicode text<br/>
    end if<br/>
    set text item delimiters to ditd<br/>
    return res<br/>
end findAndReplace&amp;lt;/carea&amp;gt;</html></summary>
     </entry>
  <entry>
       <title>VoodooPad: Files and Documents</title>
       <link href="http://www.flyingmeat.com/fs/flystashweb.cgi/248431b4-ccaa-01da-044b-c0cbe4c49273" rel="alternate" title="VoodooPad: Files and Documents" type="text/html" />
       <id>urn:uuid:248431b4-ccaa-01da-044b-c0cbe4c49273:6</id>
       <modified>2006-11-01T10:08:01Z</modified>
       <issued>2006-04-15T11:03:29Z</issued>
       <summary type="text/html"><html>h2. Files and Documents<br/>
<br/>
You can create several pages of text with VoodooPad, and like a word processor, when you save all the pages that you've created go into the single document.<br/>
<br/>
However, unlike the pages in a word processor which represent printed pages, VoodooPad's pages represent ideas. They grow as large as needed to accommodate the text you add for the idea that the page represents. As long as you keep entering text in the page, it keeps growing.<br/>
<br/>
To understand VoodooPad's notion of a document, let's start by opening the "LinksAndPages.vpdoc" document that we saved at the end of the last topic. The easiest way to do this in Mac OS X is to first make VoodooPad the active application. Do this by clicking on it's icon in the Dock. Then choose the File-&amp;gt;Open Recent-&amp;gt;LinksAndPage.vpdoc menu item. If you don't see LinksAndPage.vpdoc within that menu, it may have been discarded from the Recent Items list by other new documents that you've opened since you worked with it.<br/>
<br/>
When the document has opened, hold down the command key and click the document icon in the Title bar of the window. This should open a drop-down menu showing the directories in the path to the document as menu item choices. If you drag to, and click on, one of the directories in the menu, of course, that directory will open in a Finder window, illustrating the fact that our VoodooPad document is similar in most ways to any other document or file on the system.<br/>
<br/>
There is another way that VoodooPad are dissimilar to a word processor's pages. Within the VoodooPad document there is no "natural" sequence of pages. Like the web, any VoodooPad page is a click away on an appropriate hyperlink. And, of course, this is a natural way to organize ideas. Any given page is a single page (or click) away from any other page on which there is a link to it.<br/>
<br/>
This is what helps VoodooPad organize our minds. As we write about an idea or concept on a named page, we naturally include words about related ideas on that page. The words for those related ideas can be made into pages of their own, in which case they are automatically related through links from the original page.<br/>
<br/>
Where VoodooPad's pages represent ideas and are easy to physically relate to other pages for closely related ideas, a word processor uses a completely different model for pages. A word processor "page" is analogous to the printed page within a printed document. It is of a fixed size and comes in a predetermined sequence within the document. The printing of a word processor document is