etc/uzbl/config
2020-11-04 04:03:20 +05:00

529 lines
22 KiB
Text

# Example uzbl config. All settings are optional. You can use uzbl without
# any config at all (but it won't do much).
# === Core settings ==========================================================
# common directory locations
set prefix @(echo $UZBL_PREFIX)@
set data_home @(echo $XDG_DATA_HOME/uzbl)@
set data_dirs @(echo $(echo ${XDG_DATA_DIRS}|sed 's%:%/uzbl:%g')/uzbl)@
set cache_home @(echo $XDG_CACHE_HOME/uzbl)@
set config_home @(echo $XDG_CONFIG_HOME/uzbl)@
set local_storage_path @data_home/databases/
# Interface paths.
set comm_dir @([ -n "$XDG_RUNTIME_DIR" ] && echo "$XDG_RUNTIME_DIR/uzbl" || echo "/tmp/uzbl-$USER")@
set fifo_dir @comm_dir
set socket_dir @comm_dir
# === General config aliases =================================================
# Config related events (use the event function):
# event MODE_CONFIG <mode> <key> = <value>
set mode_config event MODE_CONFIG
# event ON_EVENT <EVENT_NAME> <command>
set on_event event ON_EVENT
# event ON_SET <key/glob> <command>
set on_set event ON_SET
# event MODMAP <From> <To>
set modmap event MODMAP
# event IGNORE_KEY <glob>
set ignore_key event IGNORE_KEY
set set_mode set mode
set set_status set status_message
# Spawn path shortcuts. In spawn the first dir+path match is used in "dir1:dir2:dir3:executable"
set scripts_dir /usr/share/uzbl/examples/data/scripts
# Search case-insensitive by default
search option case_insensitive
# === Hardcoded handlers =====================================================
set navigation_handler spawn_sync @scripts_dir/scheme.py
#set request_handler spawn_sync @scripts_dir/request.py
set authentication_handler spawn_sync @scripts_dir/auth.py
set download_handler spawn_sync @scripts_dir/download.sh
# === Dynamic event handlers =================================================
# What to do when a website wants to open a new window:
# Open link in new window
@on_event NEW_WINDOW spawn_sh 'uzbl-browser ${0:-"$0"}' %r
# Open in current window (also see the REQ_NEW_WINDOW event handler below)
#@on_event NEW_WINDOW uri %s
# Open in new tab. Other options are NEW_TAB_NEXT, NEW_BG_TAB and NEW_BG_TAB_NEXT.
#@on_event NEW_WINDOW event NEW_TAB %s
# What to do when the user requests a new window:
# If your the NEW_WINDOW handler opens the uri in the current window, you'll
# probably want to change this handler to open a new window or tab.
@on_event REQ_NEW_WINDOW event @- if (@embedded) "NEW_TAB"; else "NEW_WINDOW" -@ %s
# Load start handler
@on_event LOAD_START @set_status '<span foreground="#cb4b16">wait</span>'
# Reset the keycmd on navigation
@on_event LOAD_START @set_mode
# Load commit handlers
@on_event LOAD_COMMIT @set_status '<span foreground="#859900">recv</span>'
# add some javascript to the page for other 'js' commands to access later.
@on_event LOAD_COMMIT js page string 'uzbl = {}'
@on_event LOAD_COMMIT js page file @scripts_dir/formfiller.js
@on_event LOAD_COMMIT js page file @scripts_dir/follow.js
@on_event LOAD_COMMIT js page file @scripts_dir/go_input.js
@on_event LOAD_COMMIT js page file @scripts_dir/navigation.js
# Userscripts/per-site-settings. See the script and the example configuration for details
#@on_event LOAD_COMMIT spawn @scripts_dir/per-site-settings.py @data_home/per-site-settings
# Load finish handlers
@on_event LOAD_FINISH @set_status '<span foreground="#d33682">done</span>'
@on_event LOAD_FINISH spawn @scripts_dir/history.sh
# Switch to insert mode if a (editable) html form is clicked
@on_event FORM_ACTIVE @set_mode insert
# Switch to insert mode if a (editable) html form gains focus
@on_event FOCUS_ELEMENT spawn_sh 'if [ "$0" = INPUT -o "$0" = TEXTAREA -o "$0" = SELECT ]; then echo "@set_mode insert" > $UZBL_FIFO; fi' %s
# Switch to command mode if anything else is clicked
@on_event ROOT_ACTIVE @set_mode command
# Clear input when the page or an element gains focus.
@on_event ROOT_ACTIVE event KEYCMD_CLEAR
@on_event FOCUS_ELEMENT event KEYCMD_CLEAR
# Example CONFIG_CHANGED event handler
#@on_event CONFIG_CHANGED print Config changed: %1 = %2
# Scroll percentage calculation
@on_event VIEWPORT set scroll_message \@<(function(curr, max, size){if(max == size) return '--'; var p=(curr/(max - size)); return Math.round(10000*p)/100;})(%2,%4,%6)>\@%
# === Behaviour and appearance ===============================================
# Custom CSS can be defined here, including link follower hint styles
css add file://@config_home/style.css
set forward_keys 0
set show_status 1
set status_top 0
set status_background #dc322f
set modcmd_style weight="bold" foreground="#dc322f"
set keycmd_style weight="light" foreground="#dc322f"
set prompt_style foreground="grey"
set cursor_style underline="single"
set completion_style foreground="#eee8d5"
set hint_style weight="bold"
set mode_section <span background="#6c71c4" foreground="#eee8d5">[\@[\@mode_indicator]\@]</span>
set keycmd_section <span \@prompt_style>\@[\@keycmd_prompt]\@</span><span \@modcmd_style>\@modcmd</span><span \@keycmd_style>\@keycmd</span><span \@completion_style>\@completion_list</span>
set progress_section <span foreground="#d33682">\@[\@progress.output]\@</span>
set scroll_section <span foreground="#93a1a1">\@[\@scroll_message]\@</span>
set uri_section <span foreground="\@< if(\@frozen) "#268bd2"; else "#859900"; >\@">\@[\@uri]\@</span>
set name_section <span foreground="#b58900">&lt;\@[\@NAME]\@&gt;</span>
set status_section <span foreground="#cb4b16">\@status_message</span>
set selected_section <span foreground="#839496">\@[\@SELECTED_URI]\@</span>
set download_section <span foreground="#93a1a1">\@downloads</span>
set proxy_section <span foreground="#2aa198">\@[\@proxy_url]\@</span>
set status_format <span font_family="monospace">@mode_section @indicator_section @keycmd_section @progress_section @status_section @name_section @scroll_section @selected_section @download_section</span>
set status_format_right <span font_family="monospace"><span foreground="#586e75">proxy:</span> @proxy_section <span foreground="#586e75">uri:</span> @uri_section</span>
set title_format_long \@keycmd_prompt \@raw_modcmd \@raw_keycmd \@TITLE - Uzbl browser <\@NAME> \@SELECTED_URI
# Progress bar config
# %d = done, %p = pending %c = percent done, %i = int done, %s = spinner,
# %t = percent pending, %o = int pending, %r = sprite scroll
set progress.width 8
set progress.format [%d>%p]%c
set progress.done =
set progress.pending
# === Configure cookie blacklist =============================================
set cookie_policy always
# Accept 'session cookies' from uzbl.org (when you have a whitelist all other cookies are dropped)
#event WHITELIST_COOKIE domain '(^|\.)uzbl\.org$' expires '^$'
# Drop google analytics tracking cookies (applied after whitelists, if any)
#event BLACKLIST_COOKIE name '^__utm.$'
# === Javascript configuration ==============================================
# Turn off javascript support
# set enable_scripts 0
# === Key binding configuration ==============================================
# --- Internal modmapping and ignoring ---------------------------------------
#modmap <From> <To>
@modmap <Control> <Ctrl>
@modmap <ISO_Left_Tab> <Shift-Tab>
@modmap <KP_Enter> <Enter>
@modmap " " <Space>
#ignore_key <glob>
@ignore_key <ISO_*>
@ignore_key <Shift>
@ignore_key <Multi_key>
@ignore_key <Mod2>
@ignore_key <Mod4>
@ignore_key <Mod5>
# --- Bind aliases -----------------------------------------------------------
# event MODE_BIND <mode> <bind cmd> = <command>
set mode_bind event MODE_BIND
# event BIND <bind cmd> = <command>
set bind @mode_bind global
# Insert mode binding alias
set ibind @mode_bind insert
# Command mode binding alias
set cbind @mode_bind command
# Non-insert mode bindings alias (ebind for edit-bind).
set ebind @mode_bind global,-insert
# --- Global & keycmd editing binds ------------------------------------------
# Resets keycmd and returns to default mode.
@on_event ESCAPE @set_mode
@on_event ESCAPE event KEYCMD_CLEAR
@on_event ESCAPE js page string uzbl.follow.clearHints()
@on_event ESCAPE search clear
@on_event ESCAPE js page string window.getSelection().removeAllRanges()
@bind <Escape> = event ESCAPE
@bind <Ctrl>[ = event ESCAPE
# Commands for editing and traversing the keycmd.
@ebind <Return> = event KEYCMD_EXEC_CURRENT
@ebind <Home> = event SET_CURSOR_POS 0
@ebind <End> = event SET_CURSOR_POS -1
@ebind <Left> = event SET_CURSOR_POS -
@ebind <Right> = event SET_CURSOR_POS +
@ebind <BackSpace> = event KEYCMD_BACKSPACE
@ebind <Delete> = event KEYCMD_DELETE
@ebind <Tab> = event START_COMPLETION
# Readline-ish bindings.
@ebind <Ctrl>w = event KEYCMD_STRIP_WORD \ -./&?=
@ebind <Ctrl>u = event SET_KEYCMD
@ebind <Ctrl>a = event SET_CURSOR_POS 0
@ebind <Ctrl>e = event SET_CURSOR_POS -1
@ebind <Up> = event HISTORY_PREV
@ebind <Down> = event HISTORY_NEXT
@ebind <Ctrl>r<search:>_ = event HISTORY_SEARCH %s
set history_disable_easter_egg 1
# Keycmd injection/append examples.
#@ebind <Ctrl>su = event INJECT_KEYCMD \@uri
#@ebind <Ctrl>st = event INJECT_KEYCMD \@title
#@ebind <Ctrl>du = event APPEND_KEYCMD \@uri
#@ebind <Ctrl>dt = event APPEND_KEYCMD \@title
# --- Mouse bindings ---------------------------------------------------------
# Middle click open in new window
@bind <Button2> = spawn_sh 'if [ "$0" ]; then echo "event REQ_NEW_WINDOW $0" > "$UZBL_FIFO"; else echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"; fi' '\@SELECTED_URI'
# --- Keyboard bindings ------------------------------------------------------
# With this command you can enter in any command at runtime when prefixed with
# a colon.
@cbind :_ = %s
# open a new window or a new tab (see the on_event NEW_WINDOW settings above)
@cbind w = event REQ_NEW_WINDOW
# Page movement binds
@cbind j = scroll vertical 100
@cbind k = scroll vertical -100
@cbind h = scroll horizontal -100
@cbind l = scroll horizontal 100
@cbind <Page_Up> = scroll vertical -100%
@cbind <Page_Down> = scroll vertical 100%
@cbind <Ctrl>f = scroll vertical 100%
@cbind <Ctrl>b = scroll vertical -100%
@cbind gg = scroll vertical begin
@cbind G = scroll vertical end
@cbind << = scroll vertical begin
@cbind >> = scroll vertical end
@cbind <Home> = scroll vertical begin
@cbind <End> = scroll vertical end
@cbind ^ = scroll horizontal begin
@cbind $ = scroll horizontal end
@cbind <Shift><Space> = scroll vertical -98%
@cbind <Space> = scroll vertical 98%
@cbind !G<"Go To":>_ = scroll vertical %r!
# The first '_' is literal, so type '_G' to trigger this binding.
@cbind _G<"Go To":>_ = scroll horizontal %r!
# Frozen binding
@cbind <Shift><Ctrl>F = toggle frozen
# Navigation binds
@cbind b = back
@cbind m = forward
@cbind gb = uri \@< encodeURI(uzbl.navigation.prev()) >\@
@cbind gf = uri \@< encodeURI(uzbl.navigation.next()) >\@
@cbind S = stop
@cbind r = reload cached
@cbind R = reload full
# Zoom binds
@cbind + = zoom in
@cbind - = zoom out
@cbind T = toggle zoom_text_only
@cbind 1 = set zoom_level 1.0
@cbind 2 = set zoom_level 2.0
# Appearance binds
@cbind t = toggle show_status
# Page searching binds
@cbind /* = search find %s
@cbind <Ctrl>/<search:>_ = search find %s
@cbind ?* = search rfind %s
@cbind <Ctrl>?<'reverse search':>_ = search rfind %s
# Jump to next and previous items
@cbind n = search next
@cbind N = search prev
# Print pages to a printer
@cbind <Ctrl>p = hardcopy page
# Web searching binds
# NOTE you may search Google by adding "!g" to your DuckDuckGo search string
@cbind ddg<DuckDuckGo:>_ = uri https://duckduckgo.com/?q=\@-encodeURIComponent(%r)-\@
# These bindings should be entered as simply \wiki but due to escaping
# happening in multiple stages it needs to be written like this
@cbind \\\\awiki<Archwiki:>_ = uri https://wiki.archlinux.org/index.php/Special:Search?search=\@-encodeURIComponent(%r)-\@&go=Go
@cbind \\\\wiki<Wikipedia:>_ = uri https://secure.wikimedia.org/wikipedia/en/w/index.php?fulltext=Search&title=Special%3ASearch&search=\@-encodeURIComponent(%r)-\@
# Handy binds
# Set function shortcut
@cbind s<var:>_<value:>_ = set %1 %2
# Exit binding
@cbind ZZ = exit
# Dump config to stdout
@cbind !dump = spawn_sh 'echo dump_config > "$UZBL_FIFO"'
# Reload all variables in the config
@cbind !reload = spawn_sh "sed '/^# === Post-load misc commands/,$d' \"$UZBL_CONFIG\" | grep '^set ' > \"$UZBL_FIFO\""
# Use socat to directly inject commands into uzbl-core and view events
# raised by uzbl-core:
@cbind <Ctrl><Mod1>t = spawn_sh 'xterm -e "socat unix-connect:\"$UZBL_SOCKET\" -"'
#@cbind <Ctrl><Mod1>t = spawn_sh 'urxvt -e socat unix-connect:"$UZBL_SOCKET" -'
# Uri opening prompts
@cbind o<uri:>_ = uri %r
# Or have it load the current uri into the keycmd for editing
@cbind O<uri:\@uri>_ = uri %r
# Mode setting binds
@cbind i = @set_mode insert
@bind <Ctrl>i = @set_mode insert
# Hard-bound bookmarks
@cbind gh = uri https://www.uzbl.org
# New window binds
@cbind gw = event REQ_NEW_WINDOW
# SSL-ify bindings
@cbind zs = uri \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@
@cbind zS = event REQ_NEW_WINDOW \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@
# Yanking & pasting binds
@cbind yu = spawn_sh 'echo -n "$UZBL_URI" | xclip'
@cbind yU = spawn_sh 'echo -n "$0" | xclip' '\@SELECTED_URI'
@cbind yy = spawn_sh 'echo -n "$UZBL_TITLE" | xclip'
@cbind ys = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard
# Selection bindings
@cbind <Ctrl>a = js page string '(function () { var r = document.createRange(), s = window.getSelection(); r.selectNodeContents(document); s.removeAllRanges(); s.addRange(r); })();'
@cbind <Ctrl>c = spawn_sh 'echo \@< btoa(window.getSelection().toString()) >\@ | base64 -d | xclip -selection clipboard -i'
# Clone current window
@cbind c = event REQ_NEW_WINDOW \@uri
# Go the page from primary selection
@cbind p = spawn_sh 'echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"'
# Go to the page in clipboard
@cbind P = spawn_sh 'echo "uri $(xclip -selection clipboard -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"'
# Start a new uzbl instance from the page in primary selection
@cbind "'p" = spawn_sh 'echo "event REQ_NEW_WINDOW $(xclip -o)" > "$UZBL_FIFO"'
# paste primary selection into keycmd at the cursor position
@bind <Shift><Insert> = spawn_sh 'echo "event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"'
# Bookmark inserting binds
@cbind <Ctrl>m<tags:>_ = spawn_sh 'echo "$UZBL_URI $0" >> "@data_home/bookmarks"' '%s'
# Or use a script to insert a bookmark.
@cbind M = spawn @scripts_dir/insert_bookmark.sh
# Bookmark/history loading
@cbind U = spawn @scripts_dir/load_url_from_history.sh
@cbind u = spawn @scripts_dir/load_url_from_bookmarks.sh
# Temporary bookmarks
@cbind <Ctrl>d = spawn @scripts_dir/insert_temp.sh
@cbind D = spawn @scripts_dir/load_url_from_temps.sh
# Link following (similar to vimperator and konqueror)
# Set custom keys you wish to use for navigation. Some common examples:
set follow_hint_keys 0123456789
#set follow_hint_keys qwerty
#set follow_hint_keys asdfghjkl;
#set follow_hint_keys thsnd-rcgmvwb/;789aefijkopquxyz234
# follow links
# The structure for these calls is to call a shell script (follow.sh) with the
# output of some JavaScript code (follow.js) which gets a URI from the page to
# act on. The first argument to followLinks() is the list of characters to use
# for labelling links, the second is the currently entered keys, and the third
# is the 'mode' to use. The modes are 'click', 'newwindow', and 'returnuri'.
# The 'click' and 'newwindow' modes are handled in follow.js completely. When
# using 'returnuri' the second argument to follow.sh is the action to use for
# the URI. Currently implemented are 'set' (uses the 'uri' command),
# 'newwindow' (uses the REQ_NEW_WINDOW event), and 'clipboard' (copies the URI
# to the clipboard).
# follow hint keys:
# fl -> emulate a click on the link
# Fl -> open in a new window
# fL -> take the url and navigate directly to it
# FL -> copy the url to the clipboard
@cbind fl* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followLinks("\@follow_hint_keys", "%s", 'click') >\@
@cbind Fl* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followLinks("\@follow_hint_keys", "%s", 'newwindow') >\@ newwindow
@cbind fL* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followLinks("\@follow_hint_keys", "%s", 'returnuri') >\@ set
@cbind FL* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followLinks("\@follow_hint_keys", "%s", 'returnuri') >\@ clipboard
@cbind fi = spawn @scripts_dir/go_input.sh
# follow selected link:
# NOTE "selected" refers to marked text (e.g. via mouse or search), not by simply "tabbing" to a certain link.
# fs -> emulate a click on the link
# Fs -> open in a new window
# fS -> take the url and navigate directly to it
# FS -> copy the url to the clipboard
@cbind fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('click') >\@
@cbind fS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('newwindow') >\@ newwindow
@cbind Fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ set
@cbind FS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard
# follow by link text (i.e., <a>foo</a> is selected with "ftfoo" or "'foo")
# ft -> emulate a click on the link
# Ft -> open in a new window
# fT -> take the url and navigate directly to it
# FT -> copy the url to the clipboard
@cbind ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'click') >\@
@cbind fT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'newwindow') >\@ newwindow
@cbind Ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ set
@cbind FT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ clipboard
# Form filler binds
# This script allows you to configure (per domain) values to fill in form
# fields (eg login information) and to fill in these values automatically.
# This implementation allows you to save multiple profiles for each form
# (think about multiple accounts on some website).
set formfiller spawn @scripts_dir/formfiller.sh
@cbind ze = @formfiller edit
@cbind zn = @formfiller new
@cbind zl = @formfiller load
@cbind zo = @formfiller once
# --- Uzbl tabbed binds ------------------------------------------------------
# Tab opening
@cbind gn = event NEW_TAB
@cbind gN = event NEW_TAB_NEXT
@cbind go<uri:>_ = event NEW_TAB %s
@cbind gO<uri:>_ = event NEW_TAB_NEXT %s
# Closing / resetting
@cbind gC = exit
@cbind gQ = event CLEAN_TABS
# Tab navigating
@cbind g< = event FIRST_TAB
@cbind g> = event LAST_TAB
@cbind gt = event NEXT_TAB
@cbind gT = event PREV_TAB
@cbind gi<index:>_ = event GOTO_TAB %s
@cbind <Ctrl><Left> = event MOVE_CURRENT_TAB_LEFT
@cbind <Ctrl><Right> = event MOVE_CURRENT_TAB_RIGHT
@cbind gm<index:>_ = event MOVE_CURRENT_TAB %s
# Preset loading
set preset event PRESET_TABS
@cbind gs<"preset save":>_ = @preset save %s
@cbind glo<"preset load":>_ = @preset load %s
@cbind gd<"preset del":>_ = @preset del %s
# This doesn't work right now.
#@cbind gli = @preset list
# === Context menu items =====================================================
# Default context menu
menu add link Google "uri https://google.com"
menu add link "Go Home" "uri https://uzbl.org"
menu add_separator separator_1
menu add link "Quit uzbl" exit
# Link context menu
menu add link "Print Link" "print \@SELECTED_URI"
# === Mode configuration =====================================================
# Define some mode specific uzbl configurations.
set command @mode_config command
set insert @mode_config insert
set stack @mode_config stack
# Command mode config.
@command keycmd_style foreground="#dc322f"
@command status_background #002b36
@command mode_indicator Cmd
@command keycmd_events 1
@command forward_keys 0
@command modcmd_updates 1
# Insert mode config.
@insert status_background #eee8d5
@insert mode_indicator Ins
@insert forward_keys 1
@insert keycmd_events 0
@insert modcmd_updates 0
# Multi-stage-binding mode config.
@stack keycmd_style foreground="#dc322f"
@stack status_background #400040
@stack mode_indicator Bnd
@stack prompt_style foreground="#888" weight="light"
@stack keycmd_events 1
@stack modcmd_updates 1
@stack forward_keys 0
set default_mode command
# === SSL related configuration ==============================================
set ssl_policy fail
# Command to toggle ssl_policy value:
@cbind !ssl = chain 'toggle ssl_policy fail ignore' 'reload'
# Example SSL error handler:
@on_event LOAD_ERROR js page string 'if (/SSL handshake failed/.test("%3")) {alert ("%3");}'
# === Post-load misc commands ================================================
spawn_sync_exec @scripts_dir/load_cookies.sh
spawn_sync_exec @scripts_dir/load_cookies.sh @(echo "${UZBL_SESSION_COOKIE_FILE:-@data_home/session-cookies.txt}")@
# Set the "home" page.
uri uzbl.org/doesitwork/@COMMIT
# vim: set fdm=syntax: