====== Per instance history menu ====== {{rob_uzbl001.png?440}} ===== Description ===== This script will display a history menu overlaying only the //uzbl// instance being spawned from. You can still use all history entries, i.e. it doesn't matter which //uzbl// instance wrote a specific history entry.\\ Think of it as a way to emulate the url/history bars in traditional browsers. ===== Requirements ===== * dmenu-vertical ===== Installation ===== Copy the history script to a suitable place and create a binding that spawns the history script from //uzbl//: @bind U = spawn /path/to/pi_history.sh Use the default history handler script: @on_event LOAD_FINISH spawn @scripts_dir/history.sh Set //fifo_dir// to a path of your liking: set fifo_dir = /tmp You can supply these commands to //uzbl// using either one of the provided interfaces. ===== Script ===== #!/bin/bash history_file=/tmp/uzbl.history xy=$(xwininfo -id $3 | \ sed -ne 's/Corners:[ ]*[+-]\([0-9]*\)[+-]\([0-9]*\).*$/\1 \2/p') w=$(xwininfo -id $3 | \ sed -ne 's/-geometry[ ]*\([0-9]*\)x.*$/\1/p') x=${xy% *}; y=${xy##* } goto=$(tac $history_file | dmenu-vertical -i -xs -rs -l 10 \ -fn '-*-profont-*-*-*-*-11-*-*-*-*-*-*-*' \ -nf grey50 -nb black -sb '#494b4f' -sf 'orange' \ -x $x -y $y -w $w -p '>>:'| cut -d ' ' -f -3 | awk '{print $NF}') [ -n "$goto" ] && echo "set uri = $goto" > $4 ===== Alternative ===== {{http://www.linuxized.com/wp-content/uploads/2009/12/uzbl-history-smart-xft.jpg?400}} This version draws dmenu at the bottom of the window and includes bookmarks in the search. Also passing "u" as a parameter filters out duplicate entries and will sort urls based on length. @bind U = spawn /path/to/pi_history.sh u #!/bin/bash history_file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/history bookmarks_file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/bookmarks xy=$(xwininfo -id $3 | \ sed -ne 's/Corners:[ ]*[+-]\([0-9]*\)[+-]\([0-9]*\).*$/\1 \2/p') wh=$(xwininfo -id $3 | \ sed -ne 's/-geometry[ ]*\([0-9]*\)x\([0-9]*\).*$/\1 \2/p') x=${xy% *}; y=${xy##* } x=$((x + 1)) w=${wh% *}; h=${wh##* } y=$((y + h - 215))  if [[ $8 == "u" ]]; then goto=$(cat $history_file | cut -d ' ' -f3- | cat $bookmarks_file - | sort -u | awk '{ print length($1), $0 | "sort -n" }' | dmenu -i -xs -rs -l 10 \ -fn '-*-profont-*-*-*-*-11-*-*-*-*-*-*-*' \ -nf grey50 -nb black -sb '#494b4f' -sf 'orange' \ -x $x -y $y -w $w -p '>>:'| cut -d ' ' -f2) else goto=$(tac $history_file $bookmarks_file | dmenu -i -xs -rs -l 10 \ -fn '-*-profont-*-*-*-*-11-*-*-*-*-*-*-*' \ -nf grey50 -nb black -sb '#494b4f' -sf 'orange' \ -x $x -y $y -w $w -p '>>:'| cut -d ' ' -f -3 | awk '{print $NF}') fi   [ -n "$goto" ] && echo "set uri = $goto" > $4 if you have dmenu patched with xft and visit non-english sites, you'll appreciate this version more: #!/bin/bash history_file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/history bookmarks_file=${XDG_DATA_HOME:-$HOME/.local/share}/uzbl/bookmarks xy=$(xwininfo -id $3 | \ sed -ne 's/Corners:[ ]*[+-]\([0-9]*\)[+-]\([0-9]*\).*$/\1 \2/p') wh=$(xwininfo -id $3 | \ sed -ne 's/-geometry[ ]*\([0-9]*\)x\([0-9]*\).*$/\1 \2/p') x=${xy% *}; y=${xy##* } x=$((x + 1)) w=${wh% *}; h=${wh##* } y=$((y + h - 215))  if [[ $8 == "u" ]]; then goto=$(cat $history_file | cut -d ' ' -f3- | cat $bookmarks_file - | sort -u | awk '{ print length($1), $0 | "sort -n" }' | dmenu -i -xs -rs -l 10 \ -fn 'xft:dejavusansmono-8' \ -nf grey80 -nb black -sb '#494b4f' -sf 'orange' \ -x $x -y $y -w $w -p '>>:'| cut -d ' ' -f2) else goto=$(tac $history_file $bookmarks_file | dmenu -i -xs -rs -l 10 \ -fn 'xft:dejavusansmono-8' \ -nf grey80 -nb black -sb '#494b4f' -sf 'orange' \ -x $x -y $y -w $w -p '>>:'| cut -d ' ' -f -3 | awk '{print $NF}') fi   [ -n "$goto" ] && echo "set uri = $goto" > $4