Conceptually looks nice, but the script uses some bashisms and linuxsms and depends on urlencode.sh which is not distributed with the script. it also has a race condition in the history file on multiuser environments and it is possible to steal the history information because of the cp hack: (while : ; chmod 000 /tmp/history* ; done)
I think I can simplify it a bit and fix these issues: http://lolcathost.org/b/surf.sh Some functionalities has changed and some other has been added. actually it supports: - bookmarking with tags ^b - sorted by bookmark date - autocompletion of bookmarked uris with ^g - open uri without autocomplete ^G - fix search keybinding in spanish keyboard ^f (can this be added in mainstream?) - uri handlers: - google (g food) - wikipedia (w foo bar) - del.icio.us (d ) - tinyurl (t ) - open url matching tags (h web editor) it can be improved, but at least it works with no dependencies or linuxisms. Let me know if you find any issue. --pancake On Wed, 31 Mar 2010 13:14:26 -0400 (EDT) Peter John Hartman <peterjohnhart...@gmail.com> wrote: > Hi Folks, > > So, I've cobbled together the attached shell script to do most of what I > want to do with surf, including history, smart prefixes, and bookmarks. > The upshot is that one doesn't need the history patch and the searchengines > patch. > > I'd appreciate comments on this, esp.\ with respect to how I can figure > out what the TITLE value is of a new uri. The current technique does > a nasty little loop; and it still sometimes returns odd values for the > TITLE. You can see that in the comments to the code. > > In config.h replace the SETPROP line with: > > #define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", "surf.sh $1 $0", > p, winid, NULL } } > > And you also bind: > > { MODKEY, GDK_b, spawn, SETPROP("_SURF_BMARK") }, > > > ============= surf.sh =================================================== > > #!/bin/sh > # TODO add to surf-start.sh a cleanup routine to get rid of all old entries > # $1 = $xid > # $2 = $p = _SURF_FIND _SURF_BMARK _SURF_URI i.e. what SETPROP states in > config.h > > function s_add() { > url=$1 > name=$2 > timestamp=`date +%Y%m%d%H%M%S` > grep "$url" ~/.surf/history >/dev/null || echo -e > "$url\t$name\t$timestamp" >> ~/.surf/history > } > > function s_get_uri() { > xid=$1 > xprop -id $xid _SURF_URI | cut -d '"' -f 2 > } > > function s_get_name() { > xid=$1 > xprop -id $xid WM_ICON_NAME | cut -d '"' -f 2 > } > > function s_set_uri() { > xid=$1 > newuri=$2 > xprop -id $xid -f _SURF_URI 8s -set _SURF_URI "$newuri" 2>/dev/null > >/dev/null > } > > xid=$1 > p=$2 > > if [[ $p == "_SURF_FIND" ]]; then > dmenu -b -p ":" > exit; > elif [[ $p == "_SURF_BMARK" ]]; then > cur=`s_get_uri $xid` > name=`s_get_name $xid` > s_add "$cur" "$name" > exit; > else > # display the history PLUS the current uri via dmenu > cur=`s_get_uri $xid` > curname=`s_get_name $xid` > cp ~/.surf/history /tmp/surf.history.$$ > echo -e "$cur\t$curname\t$timestamp" >> /tmp/surf.history.$$ > selection=`tac /tmp/surf.history.$$ | awk 'BEGIN { FS="\t" } {print $1" > "$2}' | dmenu -b -l 10` > rm -f /tmp/surf.history.$$ > > # if we hit escape, then exit > if [[ $selection == "" ]]; then > exit; > fi > > # post "smart" process > # entries ($selection) will either be: > # gg foobar foo foo2 foo3 i.e. <SMART ABBV><SPACE><VALUE> > # or: > # http://www.google.com/ NAME OF SITE i.e. <URL><SPACE><NAME> > # > > # this removes trailing whitespace, ie when there is no name > OPTION=$(echo $selection | sed -e 's/^ *//g;s/ *//g' | awk '{print > $1}') > > if [[ $OPTION == "gg" ]]; then > VALUE=$(echo $selection | sed 's/gg //' | urlencode.sh) > URL="http://www.google.com/search?q=$VALUE" > s_set_uri $xid $URL > s_add "$selection" "" > elif [[ $OPTION == "ut" ]]; then > VALUE=$(echo $selection | sed 's/ut //' | urlencode.sh) > > URL="http://search2.library.utoronto.ca/UTL/index?N=0&Ntk=Anywhere&Ntt=$VALUE&Ntx=mode%2Bmatchallpartial&Nu=p_work_normalized&Np=1&formName=search_form_simple" > s_set_uri $xid $URL > s_add "$selection" "" > else > # otherwise go to the url they enter > URL=$(echo $selection | awk '{print $1}') > s_set_uri $xid $URL > # NASTY little hack to figure out what the REAL TITLE is. > name="`s_get_name $xid`" > while echo $name | grep "[*%\]"; do > name=`s_get_name $xid` > done > s_add $URL "$name" > fi > fi > > Peter Hartman > > > > -- > sic dicit magister P. > http://individual.utoronto.ca/peterjh/ >