+* `set <key> = <value>`
+ - used for changing variables on the fly
+ - the changes are effective immediately; for example, setting the variable `uri` will make uzbl start loading, and changing `status_format` will make the status bar react immediately
+ - if you want to unset a string, use `set` with one space after the equals sign
+* `print @<key>`
+ - use this to print the value of a variable.
+* `bind <string> = <command>`
+ - sets the character sequence `<string>` to invoke `<command>` when typed interactively in uzbl
+ - there are a few tricks you can do:
+ * `<string>` ends with an underscore: the command will only be invoked after pressing return/enter. If the user enters text where `<string>` has the underscore, `%s` in the `<command>` string will be replaced by this text. (optional)
+ * `<string>` ends with an asterisk: similar behavior as with an underscore, but also makes the binding incremental (i.e. the command will be invoked on every keystroke).
+ * `<string>` ends on a different character: you need to type the full string, which will trigger the command immediately, without pressing enter/return.
+ - examples:
+ * `bind o _ = uri %s`
+ - uzbl will load the url when you type: 'o <url><enter>'
+ * `bind /* = search %s`
+ - a search command which is called on every character typed after the slash, letting you see the search narrow down while typing.
+ - Hitting return, enter or esc will terminate the search.
+ * `bind ZZ = exit`
+ - When you type `ZZ` and nothing else, the exit command will be triggered immediately.
+
+* `back`
+* `forward`
+* `scroll_vert <amount>`
+* `scroll_horz <amount>`
+ - amount is given in pixels(?) or as a percentage of the size of the view
+ - set amount to 100% to scroll a whole page
+* `scroll_begin`
+* `scroll_end`
+* `reload`
+* `reload_ign_cache`
+* `stop`
+* `zoom_in`
+* `zoom_out`
+* `uri <address>`
+* `js <body>`
+ - execute the javascript in `<body>`
+ - remember that the commands must not contain line breaks
+* `script <file>`
+ - execute the javascript in `<file>`
+* `toggle_status`
+* `spawn <executable> <additonal args>`
+ - runs a command; see EXTERNAL SCRIPTS for details
+ - PATH is searched so giving the full path to commands is not neccessary
+ - note that the arguments as specified in "EXTERNAL SCRIPTS" are appended at the end, so the argument numbers will be higher.
+* `sh <command>`
+ - runs a shell command by expanding `%s` in the `shell_cmd` variable with the specified command; primarily useful as a shortcut for `spawn sh -c <body>`
+ - note that the arguments as specified in "EXTERNAL SCRIPTS" are appended at the end, so the argument numbers will be higher.
+* `sync_spawn <executable> <additional args>`
+* `sync_sh <command>`
+ - these are synchronous variants of `spawn` and `sh`, which means uzbl will wait for them to return
+ - you should only need to use these manually if you want to use a chain command in a handler that wants output from the command it runs
+* `talk_to_socket <socketfile> <tokens/command>`
+ - lets uzbl talk to a socketfile
+* `exit`
+* `search <string>`
+* `search_reverse <string>`
+ - search with no string will search for the next/previous occurrence of the string previously searched for
+* `toggle_insert_mode <optional state>`
+ - if the optional state is 0, disable insert mode. If 1, enable insert mode.
+* `dump_config`
+ - dumps your current config (which may have been changed at runtime) to stdout, in a format you can use to pipe into uzbl again (or use as config file)
+* `keycmd <string>`
+* `keycmd_nl <string>`
+ - keycmd sets the interactive command buffer to `<string>`. If the given string is a valid binding, it will execute. `Keycmd_nl` is like `keycmd`, but it also emulates a press of return, causing bindings with a parameter to execute. For example, `keycmd_nl o google.com` would load the said url if you have a binding like `bind o _ = uri %s`.
+* `keycmd_bs`
+ - erase (backspace) one character from the command buffer
+* `chain <command> <command> ..`
+ - use for chaining multiple commands
+ - remember to quote the commands; one command must come as one parameter
+ - if you use `chain` with a handler script which must return some output (such as a cookie handler -- uzbl will wait for and use its output), use sync_spawn or sync_sh instead of spawn or sh in the command that should give the output
+
+### VARIABLES AND CONSTANTS
+Uzbl has a lot of internal variables and constants. You can get the values (using the `print` command, see above), and for variables you can also change the value at
+runtime. Some of the values can be passed at start up through commandline arguments, others need to be set by using commands (eg in config file).
+Some of them have default values (see config.h)
+Some variables have callback functions which will get called after setting the variable to perform some additional logic (see below)
+
+* Variables:
+ - uri (callback: load the uri)
+ - verbose: affects output on stdout
+ - mode:insert or command mode
+ - inject_html
+ - base_url: used when passing html through stdin
+ - html_endmarker: delimiter when passing html through stdin
+ - html_mode_timeout: consider end of html input after x seconds when no endmarker found
+ - keycmd: holds the input buffer (callback: update input buffer)
+ - status_message (callback: update title)
+ - show_status: show statusbar or not
+ - status_top: statusbar on top?
+ - status_format: marked up, to be expanded string for statusbar (callback: update statusbar)
+ - status_pbar_done: character to denote done % of pageload
+ - status_pbar_pending: character to denote pending % of pageload
+ - status_pbar_width: width of progressbar
+ - status_background: color which can be used to override Gtk theme.
+ - insert_indicator: string to denote insert mode
+ - command_indicator: string to denote command mode
+ - title_format_long: titlebar string when no statusbar shown (will be expanded
+ - title_format_short: titlebar string when statusbar shown (will be expanded)
+ - icon: path to icon for Gtk
+ - insert_mode: whether insert mode is active
+ - always_insert_mode: set this to true if you don't like modal (vim-like) interfaces
+ - reset_command_mode: automatically revert to command mode on pageload (unless always_insert_mode is set)
+ - modkey: modkey which can be pressed to activate keybind from inside insert mode
+ - load_finish_handler
+ - load_start_handler
+ - load_commit_handler
+ - history_handler
+ - download_handler
+ - cookie_handler
+ - new_window: handler to execute to invoke new uzbl window (TODO better name)
+ - fifo_dir: location to store fifo's
+ - socket_dir: location to store sockets
+ - http_debug: http debug mode (value 0-3)
+ - shell_cmd: alias which will be expanded to use shell commands (eg sh -c)
+ - proxy_url: http traffic socks proxy (eg: http://<host>:<port>)
+ - max_conns
+ - max_conns_host
+ - useragent: to be expanded strin
+ - zoom_level
+ - font_size
+ - monospace_size
+ - minimum_font_size
+ - disable_plugins (TODO rename to enable)
+ - disable_scripts (TODO rename to enable)
+ - autoload_images
+ - autoshrink_images: shrink images to window size (default 0)
+ - enable_spellcheck
+ - enable_private
+ - print_backgrounds: print background images? (default 0)
+ - stylesheet_uri: use this to override the pagelayout with a custom stylesheet
+ - resizable_text_areas
+ - default_encoding: iso-8859-1 by default
+ - enforce_96_dpi: 1 by default
+ - caret_browsing
+ - default_font_family = sans-serif
+ - monospace_font_family = monospace (example "Aerial Mono" )
+ - cursive_font_family = sans
+ - fantasy_font_family = "Pterra"
+ - serif_font_family = serif (example "DejaVu Serif")
+ - sans_serif_font_family = sans (example "DejaVu Sans")
+
+
+* Constants (not dumpable or writeable):
+ - WEBKIT_MAJOR: set at compile time
+ - WEBKIT_MINOR: set at compile time
+ - WEBKIT_MICRO: set at compile time
+ - ARCH_UZBL: set at compile time
+ - COMMIT: set at compile time
+ - LOAD_PROGRESS
+ - LOAD_PROGRESSBAR
+ - TITLE
+ - SELECTED_URI
+ - MODE
+ - NAME: name of the uzbl instance (Xorg window id, unless set by cmdline arg) (TODO: can't we make this a variable?)
+
+
+### VARIABLE EXPANSION AND COMMAND/JAVA SCRIPT SUBSTITUTION
+
+Variable expansion works pretty much as known from shell interpreters (sh, bash, etc.). This means you can
+construct strings with uzbl variables in them and have uzbl replace the variable name with its contents.
+
+In order to let uzbl know what to expand you'll need to prepend @ to the variable name:
+
+ print The variable \@show_status contains @show_status
+
+The above example demonstrates two things:
+
+ * '\' is treated as escape character and will use the character immediatelly following it literallily
+ this means '\@show_status' will not expand to the variable content but be rather printed as
+ '@show_status'
+
+ * prepending the variable with '@' will expand to its contents
+
+ * like in the shell you can use @{uzbl_var} to denote the beginning/end of the variable name in
+ cases where it is not obvious what belongs to the name and what not.
+ E.g.: print @{show_status}foobar
+
+
+Command substitution will launch any commands and substitute the call with the return value of the command.
+
+Uzbl will substitute any commands enclosed within @( )@:
+
+ print Command substitution: @(uname -a)@
+
+You can access any uzbl variable from within a command substitution:
+
+ print @(echo -n 'Accessing the show_status var from an external script, value: @show_status')@
+
+
+Java script substitution works in the exact same way as command substitution but you will need to enclose
+the java script in @< >@.
+
+ print The currently viewed document contains @<document.links.length>@ links
+
+Variable expansion also works within a java script substitution.
+
+
+When a piece of text needs to be XML escaped after it is expanded (for example,
+in the status bar format), you can use @[ ]@ substitution: