Introduction
Introduction Statistics Contact Development Disclaimer Help
surf_linkselect.sh - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
surf_linkselect.sh (1974B)
---
1 #!/usr/bin/env sh
2 # surf_linkselect.sh:
3 # Usage: curl somesite.com | surf_linkselect [SURFWINDOWID] [PROMPT]
4 # Deps: xmllint, dmenu
5 # Info:
6 # Designed to be used w/ surf externalpipe patch. Enables keyboard-o…
7 # link selection via dmenu. Given HTML stdin, extracts links one per…
8 # Selected link is normalized based on current URI and printed to ST…
9 # Pipe the result to a new surf or xprop _SURF_URI accordingly.
10 SURF_WINDOW="${1:-$(xprop -root | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* //p…
11 DMENU_PROMPT="${2:-Link}"
12
13 dump_links_with_titles() {
14 awk '{
15 input = $0;
16
17 $0 = input;
18 gsub("<[^>]*>", "");
19 gsub(/[ ]+/, " ");
20 gsub("&amp;", "\\&");
21 gsub("&lt;", "<");
22 gsub("&gt;", ">");
23 $1 = $1;
24 title = ($0 == "" ? "None" : $0);
25
26 $0 = input;
27 match($0, /\<[ ]*[aA][^>]* [hH][rR][eE][fF]=["]([^"]+)["]/, linkextr…
28 $0 = linkextract[1];
29 gsub(/^[ \t]+/,"");
30 gsub(/[ \t]+$/,"");
31 gsub("[ ]", "%20");
32 link = $0;
33
34 if (link != "") {
35 print title ": " link;
36 }
37 }'
38 }
39
40 link_normalize() {
41 URI=$1
42 awk -v uri=$URI '{
43 gsub("&amp;", "\\&");
44
45 if ($0 ~ /^https?:\/\// || $0 ~ /^\/\/.+$/) {
46 print $0;
47 } else if ($0 ~/^#/) {
48 gsub(/[#?][^#?]+/, "", uri);
49 print uri $0;
50 } else if ($0 ~/^\//) {
51 split(uri, uri_parts, "/");
52 print uri_parts[3] $0;
53 } else {
54 gsub(/[#][^#]+/, "", uri);
55 uri_parts_size = split(uri, uri_parts, "/");
56 delete uri_parts[uri_parts_size];
57 for (v in uri_parts) {
58 uri_pagestripped = uri_pagestripped uri_parts[v] "/"
59 }
60 print uri_pagestripped $0;
61 }
62 }'
63 }
64
65 link_select() {
66 tr '\n\r' ' ' |
67 xmllint --html --xpath "//a" - |
68 dump_links_with_titles |
69 awk '!x[$0]++' |
70 # sort | uniq
71 dmenu -p "$DMENU_PROMPT" -l 10 -i -w $SURF_WINDOW |
72 awk -F' ' '{print $NF}' |
73 link_normalize $(xprop -id $SURF_WINDOW _SURF_URI | cut -d '"' -f 2)
74 }
75
76 link_select
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.