# # ~/.config/uzbl/config # # Credits: # [1] VimFx: https://addons.mozilla.org/en-US/firefox/addon/vimfx/ # For some of the keybindings. # # Aaron LI # Created: 2016-04-10 # # 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 @data_home:@data_dirs:@prefix/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 @on_event NEW_WINDOW event NEW_TAB_NEXT %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="khaki">wait</span> # Reset the keycmd on navigation @on_event LOAD_START @set_mode # Load commit handlers @on_event LOAD_COMMIT @set_status <span foreground="green">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="gold">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 SCROLL_VERT set scroll_message \@<(function(curr, min, max, size){if(max == size) return '--'; var p=(curr/(max - size)); return Math.round(10000*p)/100;})(%1,%2,%3,%4)>\@% # === 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 #303030 set modcmd_style weight="bold" foreground="red" set keycmd_style weight="light" foreground="red" set prompt_style foreground="grey" set cursor_style underline="single" set completion_style foreground="green" set hint_style weight="bold" set mode_section <span background="khaki" foreground="black">[\@[\@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="#606060">\@[\@progress.output]\@</span> set scroll_section <span foreground="#606060">\@[\@scroll_message]\@</span> set uri_section <span foreground="\@< if(\@frozen) "#00BFFF"; else "#99FF66"; >\@">\@[\@uri]\@</span> set name_section <span foreground="khaki">\@[\@NAME]\@</span> set status_section <span foreground="orange">\@status_message</span> set selected_section <span foreground="#606060">\@[\@SELECTED_URI]\@</span> set download_section <span foreground="white">\@downloads</span> set proxy_section <span foreground="cyan">\@[\@proxy_url]\@</span> set status_format <span font_family="monospace">@mode_section @keycmd_section @progress_section @name_section @status_section @scroll_section @selected_section @download_section</span> set status_format_right <span font_family="monospace"><span foreground="#666">uri:</span> @uri_section</span> set status_format_right <span font_family="monospace"><span foreground="#666">proxy:</span> @proxy_section <span foreground="#666">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 # === Useragent setup ======================================================== set useragent Mozilla/5.0 (X11; @(+uname -sm)@) AppleWebKit/602.1 (KHTML; like Gecko) Uzbl/@COMMIT # === 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> # --- 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 20 #@cbind k = scroll vertical -20 #@cbind h = scroll horizontal -20 #@cbind l = scroll horizontal 20 @cbind j = scroll vertical 50 @cbind k = scroll vertical -50 @cbind h = scroll horizontal -50 @cbind l = scroll horizontal 50 @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 <Space> = scroll vertical 100% #@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 H = back @cbind L = 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 @cbind z = 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 @cbind gG<Google:>_ = uri https://www.google.com/search?q=\@<encodeURIComponent(%r)>\@ @cbind gD<DuckDuckGo:>_ = uri https://duckduckgo.com/?q=%s @cbind gW<Wikipedia:>_ = uri https://en.wikipedia.org/w/index.php?title=Special:Search&search=\@<encodeURIComponent(%r)>\@&go=Go # 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 %s # Or have it load the current uri into the keycmd for editing @cbind O<uri:\@uri>_ = uri %s # Mode setting binds @cbind i = @set_mode insert @bind <Ctrl>i = @set_mode insert # Hard-bound bookmarks @cbind gh = uri http://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 (function () { var r = document.createRange(), s = window.getSelection(); r.selectNodeContents(document); s.removeAllRanges(); s.addRange(r); })(); @cbind <Ctrl>c = sh 'echo '\@< window.getSelection().toString().replace(/'/g, "\\'"); >\@' | 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 t = event NEW_TAB @cbind T = 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 x = 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 J = event NEXT_TAB @cbind K = 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 http://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="red" @command status_background #202020 @command mode_indicator Cmd @command keycmd_events 1 @command forward_keys 0 @command modcmd_updates 1 # Insert mode config. @insert status_background #303030 @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="red" @stack status_background #202020 @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 ts=8 sw=4 tw=0 fenc=utf-8 ft=conf: #