surf.sh (4469B)
1 #!/bin/sh 2 # v. 2.0 - upgrade based on surf 4.0 3 # Creative Commons License. Peter John Hartman (http://individual.utoronto.ca/peterjh) 4 # Much thanks to nibble and pancake who have a different surf.sh script available which 5 # doesn't do the history bit. 6 # 7 # this script does: 8 # * stores history of: (1) successful uri entries; (2) certain smart prefix entries, e.g., "g foobar"; (3) find entries 9 # * direct bookmark (via ^b) 10 # * information debug (via ^I) 11 # * smart prefixes e.g. g for google search, t for tinyurl, etc. 12 # * delete (with smart prefix x) 13 # 14 # $1 = $xid 15 # $2 = $p = _SURF_FIND _SURF_BMARK _SURF_URI (what SETPROP sets in config.h) 16 # 17 # // replace default setprop with this one 18 # #define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", "surf.sh $0 $1 $2", p, q, winid, NULL } } 19 # 20 # { MODKEY, GDK_b, spawn, SETPROP("_SURF_BMARK") }, 21 # { MODKEY|GDK_SHIFT_MASK, GDK_i, spawn, SETPROP("_SURF_INFO") }, 22 # { MODKEY|GDK_SHIFT_MASK, GDK_g, spawn, SETPROP("_SURF_URI_RAW") }, 23 24 #font='-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*' 25 font='Terminus:pixelsize=14' 26 normbgcolor='#181818' 27 normfgcolor='#e9e9e9' 28 selbgcolor=$normbgcolor 29 selfgcolor='#dd6003' 30 bmarks=~/.surf/history.txt 31 ffile=~/.surf/find.txt 32 33 pid=$1 34 fid=$2 35 xid=$3 36 37 dmenu="dmenu -nb $normbgcolor -nf $normfgcolor \ 38 -sb $selbgcolor -sf $selfgcolor" 39 40 s_get_prop() { # xprop 41 xprop -id $xid $1 | cut -d '"' -f 2 42 } 43 44 s_set_prop() { # xprop value 45 [ -n "$2" ] && xprop -id $xid -f $1 8s -set $1 "$2" 46 } 47 48 s_write_f() { # file value 49 [ -n "$2" ] && (sed -i "\|$2|d" $1; echo "$2" >> $1) 50 #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks 51 } 52 53 s_set_write_proper_uri() { # uri 54 # TODO: (xprop -spy _SURF_URI ... | while read name __ value; do echo $value; done works quite nice for eventloops) 55 # input is whatever the use inputed, so don't store that! 56 # first, clear the name field because surf doesn't sometimes 57 #s_set_prop WM_ICON_NAME "" 58 # set the uri 59 s_set_prop _SURF_GO "$1" 60 # get the new name 61 name=`s_get_prop WM_ICON_NAME` 62 # loop until the [10%] stuff is finished and we have a load (is this necessary?) 63 #while echo $name | grep "[*%\]" >/dev/null 2>&1; do 64 # name=`s_get_prop WM_ICON_NAME` 65 #done 66 # bail on error and don't store 67 #if [[ $name != "Error" ]]; then 68 # uri=`s_get_prop _SURF_URI` 69 # store to the bmarks file the OFFICIAL url (with http://whatever) 70 s_write_f $bmarks "$1" 71 #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks 72 #fi 73 } 74 75 case "$pid" in 76 "_SURF_INFO") 77 xprop -id $xid | sed 's/\t/ /g' | $dmenu -fn "$font" -b -l 20 78 ;; 79 "_SURF_FIND") 80 find="`tac $ffile 2>/dev/null | $dmenu -fn "$font" -b -p find:`" 81 s_set_prop _SURF_FIND "$find" 82 s_write_f $ffile "$find" 83 ;; 84 "_SURF_BMARK") 85 uri=`s_get_prop _SURF_URI` 86 s_write_f $bmarks "$uri" 87 ;; 88 "_SURF_URI_RAW") 89 uri=`echo $(s_get_prop _SURF_URI) | $dmenu -fn "$font" -b -p "uri:"` 90 s_set_prop _SURF_GO "$uri" 91 ;; 92 "_SURF_URI") 93 sel=`tac $bmarks 2> /dev/null | $dmenu -fn "$font" -b -l 5 -p "uri [dgtwuy*]:"` 94 [ -z "$sel" ] && exit 95 opt=$(echo $sel | cut -d ' ' -f 1) 96 arg=$(echo $sel | cut -d ' ' -f 2-) 97 save=0 98 case "$opt" in 99 "d") # del.icio.us 100 uri="http://del.icio.us/save?url=`s_get_prop _SURF_URI`" 101 ;; 102 "g") # google for it 103 uri="http://www.google.com/search?q=$arg" 104 save=1 105 ;; 106 "t") # tinyurl 107 uri="http://tinyurl.com/create.php?url=`s_get_prop _SURF_URI`" 108 ;; 109 "w") # wikipedia 110 uri="http://wikipedia.org/wiki/$arg" 111 save=1 112 ;; 113 "u") # utoronto 114 uri="http://search2.library.utoronto.ca/UTL/index?N=0&Ntk=Anywhere&Ntt=$arg&Ntx=mode%2Bmatchallpartial&Nu=p_work_normalized&Np=1&formName=search_form_simple" 115 save=1 116 ;; 117 "y") # youtube 118 uri="http://www.youtube.com/results?search_query=$arg&aq=f" 119 save=1 120 ;; 121 "x") # delete 122 sed -i "\|$arg|d" $bmarks 123 exit; 124 ;; 125 *) 126 uri="$sel" 127 save=2 128 ;; 129 esac 130 131 # only set the uri; don't write to file 132 [ $save -eq 0 ] && s_set_prop _SURF_GO "$uri" 133 # set the url and write exactly what the user inputed to the file 134 [ $save -eq 1 ] && (s_set_prop _SURF_GO "$uri"; s_write_f $bmarks "$sel") 135 # try to set the uri only if it is a success 136 [ $save -eq 2 ] && s_set_write_proper_uri "$uri" 137 ;; 138 *) 139 echo Unknown xprop 140 ;; 141 esac