Vodka
Release Notes
Vodka is a creative coding environment for music and text.
More info about Vodka can be found at:
Github
There are also help pages and a tutorial/walkthrough accessible by the links above.
Your session ID is 1234.
All data you save via the (_save_) and (_save-file_) builtins is sandboxed to this session.
You can access this session again with this link.
You can leave this session and start a whole new session with this link.
You can create an exact copy of this session (with all the same saved files) with this link.
You can create a read-only copy of this session (e.g. for sharing on social media) with this link.
To have a file load and be evaluated in normal mode at startup when a session link is visited, name the file "start-doc".
Vodka is in alpha and is under active development. I will do my best to preserve your data as much as I can. However:
- Sessions and sandbox contents may need to be deleted at any time without notice.
- Long term persistence of session contents is not guaranteed.
- Uptime or availability is not guaranteed.
- Sessions are not backed up in any way.
In addition, in the absence of problems, I may still periodically go through and delete old, inactive sessions. In other words, if you make something you like, it's probably prudent to capture it in some other way besides storing it here.
Abusive, harmful or illegal content of any kind is not allowed on this server.
The site admin (eeeeaaii) is the sole arbiter of what is allowed.
Disallowed content will be deleted immediately.
Vodka is created by Jason Scherer (eeeeaaii)
You retain all copyright to any creative works you make with Vodka.
Changes to the Vodka framework itself are protected by the GPL.
If you have questions or want to report a problem, join vodka-users@googlegroups.com and send an email.
Basic Usage
You can insert different sorts of objects (sometimes called "nexes").
Depending on its type, an object will usually have some kind of associated data, like a string value or a number.
Some objects also are containers for other objects. Others are "atoms" and just have associated data, but no child objects.
One (and only one) object can be selected at a time. It will have a red border.
You can use the "movement" hotkeys to change which object is selected, or click to select an object.
The small dot near the currently selected object is the "insertion pip." This tells you where the next inserted object will appear. The insertion pip can be moved around, but it will always be near the selected object.
To edit the data associated with an object, you have to be in "edit mode" (the object will have a pink background). You have to exit edit mode to insert more objects.
Objects with thin borders are immutable, and their associated data can't be edited.
Objects can be evaluated, which causes them to "do something".
Evaluating commands will execute some code.
Objects can be given tags, which are used for various annotation-type purposes.
!insert a boolean
@insert a symbol
#insert an integer
$insert a string
%insert a float
~insert a command
^insert an instantiator
&insert a lambda
*insert a deferred command
(insert an obj
_insert a wavetable
{insert a doc
[insert a line
<insert a word
Typing letters inside docs, lines, or words will insert letter objects.
rightarrowor downarrowselect next object in this container (to the right or below)
leftarrowor uparrowselect previous object in this container (to the left or above)
tab"go in" -- select first child of selected container (just moves insertion pip if container is empty)
shift-tab"come out" -- select parent of selected object
option-leftarrowor option-uparrowmove the insertion pip to before the currently selected object
option-rightarrowor option-downarrowmove the insertion pip to after the currently selected object
option-tabmove the insertion pip inside the currently selected container
option-shift-tabset the insertion pip to be a rectangle enclosing the currently selected object (only containers can be inserted this way)
)
>
}
]"close parens" -- move up to nearest corresponding container type and put insertion pip after it
`activate the tag editor for the selected object
enterevaluate the currently selected object and replace it with the result.
shift-enterevaluate the currently selected nex for side effects, but don't replace it.
deleteenters edit mode for currently selected object
shift-deletedeletes current object completely, including all children if it is a container
shift-spacetoggles direction of current container (horizontal/vertical)
shift-escapetoggle exploded/normal modes for entire document
shift-alt-escapetoggle exploded/normal modes for selected object (and its children)
option-shiftand any of ~&*^({[<wrap-inserts the specified container around the currently selected object
cmd-ccopy
cmd-xcut
cmd-vpaste
cmd-zundo
cmd-zredo
cmd-ssave
enterleave edit mode
escapeabort editing and restore previous value
Any of a-zA-Z0-9:-_<>=+-/*can be used in names of commands or symbols.
deletedeletes previous character
option-spaceautocomplete
enterleave edit mode
escapeabort editing and restore previous value
Any of a-zA-Z0-9_-can be used in names of function parameters. Spaces separate parameters.
deletedeletes previous character
n!n must evaluate to a boolean
n@n must evaluate to a symbol
n#n must evaluate to an integer
n$n must evaluate to a string
n%n must evaluate to a float
n^n must evaluate to a nil
n&n must evaluate to a closure
n*n must evaluate to a deferred value or command
n()n must evaluate to some kind of container/p>
_nn will not be evaluated before passing to function (call by reference)
n...variable number of arguments (only valid as last parameter)
#%or %#either float or integer types allowed
?optional parameter (non-optional parameters cannot follow optional ones)
Multiple parameter specifiers can be combined, for example _n#%...,n()?
If no type is specified, any type is allowed.
Any object can be tagged. Any character including spaces can be used in a tag.
deletedeletes previous character, or current tag if empty.
leftarrowor rightarrowgo to next tag, or create new tag if no tag there (duplicate tags are deleted).
enteror `finish editing tags and quit tag editor (empty tags are deleted when leaving editor).
Type or paste the desired string in the box. Drag the handle to make the editor larger. All other hotkeys are disabled while you are editing the string. To finish editing the string, click the "done" button.