+### 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:
+
+ print This text is XML escaped: @[<&>]@
+
+ # prints: This text is XML escaped: <&>
+
+
+NOTE: If you need to use literal @ or \ characters you will need to escape them:
+
+ print At sign: \@ and backslash: \\
+
+
+### TITLE AND STATUS BAR EVALUATION
+
+The contents of the status bar can be customized by setting the status_format
+variable. The contents of the window title can be customized by setting the
+title_format_short variable (which is used when the status bar is displayed) and
+the title_format_long variable (which is used when the status bar is not
+displayed). Their values can be set using the expansion and substitution
+techniques described above.
+
+These variables are expanded in multiple stages; once when the variable is set,
+and again every time that the status bar or window title are updated. Expansions
+that should be evaluated on every update need to be escaped: