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}"