surf-setprop - dotfiles - leot's dotfiles
 (HTM) hg clone https://bitbucket.org/iamleot/dotfiles
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       surf-setprop
       ---
            1 #!/bin/sh
            2 
            3 winid=$1
            4 readprop=$2
            5 setprop=$3
            6 prompt=$4
            7 
            8 list_bookmarks()
            9 {
           10         bookmarks list | cut -f 1 | sort -u
           11 }
           12 
           13 list_elvis()
           14 {
           15         if [ -f "${XDG_CACHE_HOME}/surf/elvis" ]; then
           16                 cat "${XDG_CACHE_HOME}/surf/elvis" 
           17         else
           18                 mkdir -p "${XDG_CACHE_HOME}/surf"
           19                 surfraw -elvi | awk '/-- / { print $1 }' | sort -u > "${XDG_CACHE_HOME}/surf/elvis"
           20                 cat "${XDG_CACHE_HOME}/surf/elvis" 
           21         fi
           22 }
           23 
           24 surfrawify()
           25 {
           26         # XXX: It is possible to inject arbitrary command in the two surfraw
           27         # XXX: invocations.
           28 
           29         # XXX: Never directly invoke ${BROWSER}.
           30         BROWSER=:
           31 
           32         [ -n "$1" ] && surfraw -p $1 2>/dev/null |
           33             awk -v var="$1" '
           34             /No elvis or bookmark with that name/ {
           35                 if (match(var, /:\/\//) || match(var, /\./)) {
           36                         # treat as URL and pass to web browser
           37                         printf("%s\n", var)
           38                 } else {
           39                         system(sprintf("surfraw -p S %s", var))
           40                 }
           41                 exit 0
           42             }
           43 
           44             {
           45                 printf("%s\n", $0)
           46                 exit 0
           47             }
           48             '
           49 }
           50 
           51 if [ "${readprop}" = "_SURF_URI" ]; then
           52         prop=$( { xprop -id ${winid} ${readprop} ; list_elvis ; list_bookmarks ; } |
           53             sed -e "s/^${readprop}(STRING) = //" -e 's/^"//' -e 's/"$//' |
           54             dmenu -p "${prompt}" -w "${winid}")
           55         prop=$(surfrawify "${prop}")
           56 else
           57         prop=$(xprop -id ${winid} ${readprop} | 
           58             sed -e "s/^${readprop}(STRING) = //" -e 's/^"//' -e 's/"$//' |
           59             dmenu -p "${prompt}" -w "${winid}")
           60 fi
           61 
           62 xprop -id "${winid}" -f "${setprop}" 8s -set "${setprop}" "${prop}"