index.md (5430B)
1 Bookmarks for surf 2 ================== 3 4 Description 5 ----------- 6 7 This script enables bookmarks, url handlers, and history (find and url entries) for surf. 8 NB: This script obviates the need to patch surf at all with, e.g., the history or the url handlers patches! 9 10 Keybindings 11 ----------- 12 ^I (get some information) 13 ^b (bookmark current url with given tags) 14 ^g (open url with bookmark autocompletion) 15 ^G (open url without bookmark autocompletion) 16 17 URL handlers 18 ------------ 19 This script implements several url handlers 20 "d " (bookmark current url in delicious) 21 "t " (create tinyurl from current page) 22 "w word .." (lookup word in wikipedia) 23 "g word .." (google for given word) 24 "y word .." (search in youtube) 25 "x word .." (remove an entry from the bookmarks file) 26 27 Author 28 ------ 29 30 * The code was originally from Peter John Hartman, then filtered through pancake and nibble (see their bmarks) 31 and now back to Peter John Hartman. You can get the latest version at http://durandus.trilidun.org/durandus/code/surf/. 32 33 Installation 34 ------------ 35 36 Copy the following code into a shellscript named 'surf.sh' in $PATH. Edit config.h according to the rules explained in header. 37 38 Code 39 ---- 40 #!/bin/sh 41 # v. 2.0 - upgrade based on surf 4.0 42 # Creative Commons License. Peter John Hartman (http://individual.utoronto.ca/peterjh) 43 # Much thanks to nibble and pancake who have a different surf.sh script available which 44 # doesn't do the history bit. 45 # 46 # this script does: 47 # * stores history of: (1) successful uri entries; (2) certain smart prefix entries, e.g., "g foobar"; (3) find entries 48 # * direct bookmark (via ^b) 49 # * information debug (via ^I) 50 # * smart prefixes e.g. g for google search, t for tinyurl, etc. 51 # * delete (with smart prefix x) 52 # 53 # $1 = $xid 54 # $2 = $p = _SURF_FIND _SURF_BMARK _SURF_URI (what SETPROP sets in config.h) 55 # 56 # // replace default setprop with this one 57 # #define SETPROP(p) { .v = (char *[]){ "/bin/sh", "-c", "surf.sh $0 $1 $2", p, q, winid, NULL } } 58 # 59 # { MODKEY, GDK_b, spawn, SETPROP("_SURF_BMARK") }, 60 # { MODKEY|GDK_SHIFT_MASK, GDK_i, spawn, SETPROP("_SURF_INFO") }, 61 # { MODKEY|GDK_SHIFT_MASK, GDK_g, spawn, SETPROP("_SURF_URI_RAW") }, 62 63 font='-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*' 64 normbgcolor='#181818' 65 normfgcolor='#e9e9e9' 66 selbgcolor=$normbgcolor 67 selfgcolor='#dd6003' 68 bmarks=~/.surf/history.txt 69 ffile=~/.surf/find.txt 70 71 pid=$1 72 fid=$2 73 xid=$3 74 75 dmenu="dmenu -nb $normbgcolor -nf $normfgcolor \ 76 -sb $selbgcolor -sf $selfgcolor" 77 78 s_get_prop() { # xprop 79 xprop -id $xid $1 | cut -d '"' -f 2 80 } 81 82 s_set_prop() { # xprop value 83 [ -n "$2" ] && xprop -id $xid -f $1 8s -set $1 "$2" 84 } 85 86 s_write_f() { # file value 87 [ -n "$2" ] && (sed -i "\|$2|d" $1; echo "$2" >> $1) 88 #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks 89 } 90 91 s_set_write_proper_uri() { # uri 92 # TODO: (xprop -spy _SURF_URI ... | while read name __ value; do echo $value; done works quite nice for eventloops) 93 # input is whatever the use inputed, so don't store that! 94 # first, clear the name field because surf doesn't sometimes 95 #s_set_prop WM_ICON_NAME "" 96 # set the uri 97 s_set_prop _SURF_GO "$1" 98 # get the new name 99 name=`s_get_prop WM_ICON_NAME` 100 # loop until the [10%] stuff is finished and we have a load (is this necessary?) 101 #while echo $name | grep "[*%\]" >/dev/null 2>&1; do 102 # name=`s_get_prop WM_ICON_NAME` 103 #done 104 # bail on error and don't store 105 #if [[ $name != "Error" ]]; then 106 # uri=`s_get_prop _SURF_URI` 107 # store to the bmarks file the OFFICIAL url (with http://whatever) 108 s_write_f $bmarks "$1" 109 #grep "$uri" $bmarks >/dev/null 2>&1 || echo "$uri" >> $bmarks 110 #fi 111 } 112 113 case "$pid" in 114 "_SURF_INFO") 115 xprop -id $xid | sed 's/\t/ /g' | $dmenu -fn "$font" -b -l 20 116 ;; 117 "_SURF_FIND") 118 find="`tac $ffile 2>/dev/null | $dmenu -fn "$font" -b -p find:`" 119 s_set_prop _SURF_FIND "$find" 120 s_write_f $ffile "$find" 121 ;; 122 "_SURF_BMARK") 123 uri=`s_get_prop _SURF_URI` 124 s_write_f $bmarks "$uri" 125 ;; 126 "_SURF_URI_RAW") 127 uri=`echo $(s_get_prop _SURF_URI) | $dmenu -fn "$font" -b -p "uri:"` 128 s_set_prop _SURF_GO "$uri" 129 ;; 130 "_SURF_URI") 131 sel=`tac $bmarks 2> /dev/null | $dmenu -fn "$font" -b -l 5 -p "uri [dgtwuy*]:"` 132 [ -z "$sel" ] && exit 133 opt=$(echo $sel | cut -d ' ' -f 1) 134 arg=$(echo $sel | cut -d ' ' -f 2-) 135 save=0 136 case "$opt" in 137 "d") # del.icio.us 138 uri="http://del.icio.us/save?url=`s_get_prop _SURF_URI`" 139 ;; 140 "g") # google for it 141 uri="http://www.google.com/search?q=$arg" 142 save=1 143 ;; 144 "t") # tinyurl 145 uri="http://tinyurl.com/create.php?url=`s_get_prop _SURF_URI`" 146 ;; 147 "w") # wikipedia 148 uri="http://wikipedia.org/wiki/$arg" 149 save=1 150 ;; 151 "u") # utoronto 152 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" 153 save=1 154 ;; 155 "y") # youtube 156 uri="http://www.youtube.com/results?search_query=$arg&aq=f" 157 save=1 158 ;; 159 "x") # delete 160 sed -i "\|$arg|d" $bmarks 161 exit; 162 ;; 163 *) 164 uri="$sel" 165 save=2 166 ;; 167 esac 168 169 # only set the uri; don't write to file 170 [ $save -eq 0 ] && s_set_prop _SURF_GO "$uri" 171 # set the url and write exactly what the user inputed to the file 172 [ $save -eq 1 ] && (s_set_prop _SURF_GO "$uri"; s_write_f $bmarks "$sel") 173 # try to set the uri only if it is a success 174 [ $save -eq 2 ] && s_set_write_proper_uri "$uri" 175 ;; 176 *) 177 echo Unknown xprop 178 ;; 179 esac