index.md - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       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