### INTRODUCTION Any program can only be really useful if it complies with the Unix philosophy. Web browsers (and other tools that work with HTML, such as feed readers) are frequent violators of this principle: * They build in way too much things into one (complex) program, dramatically decreasing the options to do things the way you want. * They store things in way too fancy formats (XML, RDF, SQLite, etc.) which are hard to store under version control, reuse in other scripts, and so on. The Uzbl project was started as an attempt to resolve this. ### EDITIONS "Uzbl" is an umbrella project consisting of different flavors. In the future more things may come, but for now: #### uzbl-core: main component meant for integration with other tools and scripts * Uses WebKitGtk+ for rendering and network interaction (libsoup). CSS, JavaScript, and plugin support come for free. * Provides interfaces to get data in (commands/configuration) and out (events): stdin/stdout/fifo/Unix sockets. * You see a WebKit view and (optionally) a statusbar which gets populated externally. * No built-in means for URL changing, loading/saving of bookmarks, saving history, keybinds, downloads, etc. * Extra functionality: many sample scripts come with it. More are available on the [Uzbl wiki](http://www.uzbl.org/wiki/scripts) or you can write them yourself. * Entire configuration/state can be changed at runtime. * Uzbl keeps it simple, and puts **you** in charge. #### uzbl-browser: a complete browser experience based on uzbl-core * Uses a set of scripts (mostly Python) that will fit most people, so things work out of the box; yet plenty of room for customization. * Brings everything you expect: URL changing, history, downloads, form filling, link navigation, cookies, event management etc. However: one page per instance. * Advanced, customizable keyboard interface with support for modes, modkeys, multichars, variables (keywords) etc. (eg you can tweak the interface to be Vi-like, Emacs-like or any-other-program-like). * Adequate default configuration. * Focus on plaintext storage for your data and configs in simple, parseable formats and adherence to the XDG basedir spec. * Visually, similar to `uzbl-core` except that the statusbar contains useful information. One window per webpage. #### uzbl-tabbed: wraps around uzbl-browser and multiplexes it * Spawns one window containing multiple tabs, each tab containing a full embedded `uzbl-browser`. * Ideal as a quick and simple solution to manage multiple `uzbl-browser` instances without getting lost. Throughout the documentation, when referring to `uzbl` we mean `uzbl-core`, unless otherwise specified. ### CONFIGURATION / CONTROL: The general idea is that Uzbl by default is very bare bones. You can send it commands to update settings and perform actions, through various interfaces. There is a limited default configuration. Please see `config.h` to see what it contains. By default, there are *no* keybinds defined at all. (Default keybinds would work counterproductive when you try to customize). For examples of the possibilities what you can do, please see the sample config(s), and uzbl wiki page. There are several interfaces to interact with Uzbl: * `uzbl --config `: `` will be read line by line, and the commands in it will be executed. Useful to configure Uzbl at startup. If you have a file in `$XDG_CONFIG_HOME/uzbl/config` (this expands to `~/.config/uzbl/config` on most systems), it will be automatically recognized. * `stdin`: to write commands into `stdin`, use `--config -` (or `-c -`). * Interactive: you can enter commands (and bind them to shortcuts, even at runtime) By default, the behaviour is modal (Vi style): - command mode: every keystroke is interpreted to run commands - insert mode: keystrokes are not interpreted so you can enter text into html forms There is also support for "chained" commands (multiple characters long), and keyworded commands. Also you can have incremental matching on commands or match after pressing return. See the sample configuration file for more info. Also, copy and paste works when typing commands: - `insert` (paste X cliboard) - `shift insert` (paste primary selection buffer) * FIFO & socket files: If enabled by setting their paths through one of the above means, you can have socket and fifo files available which are very useful to programmatically control `uzbl` (from scripts etc). - The advantage of the FIFO is you can write plaintext commands to it, but it's half duplex only (`uzbl` cannot send a response to you). - The socket is full duplex but you need a socket-compatible wrapper such as `socat` to work with it. For example: echo | socat - unix-connect: When `uzbl` forks a new instance (eg "open in new window") it will use the same command line arguments (eg the same `--config `), except `--uri` and `--named`. If you made changes to the configuration at runtime, these are not passed on to the child. #### Uzbl-browser * default config * Event Manager * Event Manager plugins * bindings/events/requests #### Uzbl-tabbed * also has some of its own keybindings. ### COMMAND SYNTAX Uzbl will read commands via standard input, named FIFO pipe (if `fifo_dir` is set) and Unix socket (when `socket_dir` is set). For convenience, `uzbl` can also be instructed to read commands from a file on startup by using the `--config` option. Indeed, the config file is nothing more than a list of commands. Each command starts with the name of a command or a `uzbl` variable that expands to it. A command is terminated by a newline. Empty lines and lines that start with the hash sign are ignored by the parser. Command names are always written in lowercase. The following commands are recognized: * `back` - Navigate to the previous URI in the history. * `forward` - Navigate to the next URI in the history. * `scroll ` - argument can be `begin`, `end`, or an amount given in pixels(?) or as a percentage of the size of the view - set the amount to 100% to scroll a whole page - argument can be appended with a `!` to scroll absolutely * `reload` - Reload the current page. * `reload_ign_cache` - Reload the current page, discarding any cached resources. * `stop` - Stop loading the current page. * `zoom_in` - Increase the zoom level. * `zoom_out` - Decrease the zoom level. * `uri
` - Attempt to load `
`. This is equivalent to `set uri =
`. * `js ` - Execute the JavaScript in ``. - Remember that the commands must not contain line breaks. * `script ` - Execute the JavaScript in ``. * `spawn ` TODO explain path-alike expansion - Runs a command; see EXTERNAL SCRIPTS for details. - `$PATH` is searched, so giving the full path to commands is not necessary. - Note that the arguments as specified in "EXTERNAL SCRIPTS" are appended at the end, so the argument numbers will be higher. * `sync_spawn ` - A synchronous variant of `spawn`, which means `uzbl` will wait for it to return. - You should only need to use this manually if you want to use a `chain` command in a handler that wants output from the command it runs. * `sh ` - 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 ` - Note that the arguments as specified in "EXTERNAL SCRIPTS" are appended at the end, so the argument numbers will be higher. * `sync_sh ` - Synchronous version of `sh`, See `sync_spawn`. * `exit` - Closes `uzbl`. * `search ` - Search forward for ``. With no string, search for the next occurrence of the previously searched string. * `search_reverse ` - Like `search`, but searches backward. * `search_clear` - Dehighlight matches and clear the search string. * `dehilight` - Remove highlighting of search matches. * `set = ` - Sets `` to ``. - 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. * `toggle [possibilities]` - Cycles the variable `var` through the list of options given in `possibilities`. - If `possibilities` are not given and the variable is an int or a float, toggles between 0 and 1. * `dump_config` - Dumps the current config (which may have been changed at runtime) to stdout. - Uses a format which can be piped into `uzbl` again or saved as a config file. * `dump_config_as_events` - Dump the current config as a series of `VARIABLE_SET` events, which can be handled by an event manager. * `chain ...` - Used 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. * `print ` - Expands variables in `` and prints its output to stdout. Is useful for getting the value of variables. * `event [event_details]` - Send a custom event. * `request [request_details]` - Send a custom request (same idea as events, but to be processed by the event manager, not `uzbl-core`). * `menu_add