about summary refs log blame commit diff stats
path: root/bin/fl
blob: bd98a630336b5efebcc5cbf71bf6cec3097efc7d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16















                                                                    

                                 











                                                                                
                 
                                                                         
#!/bin/sh
# fl: Find Links
# uses regular expressions to find links in the stream it's given,
# or its args if it is given args

# from pure-sh-bible, strips from the start of a string
lstrip() {
	printf '%s\n' "${1##$2}"
}

# put url-finding regex in a variable so no lines go over 80 chars
re_urls='((https?://|www\.)[[:alnum:].]*:?[[:alnum:]./@$&%?$#=_-]*)'

# finds links, puts them in a list
# sort -u prevents duplicates, but also sorts the links
urlparse() {
	lstrip "$(cat)" "*\│" |
	grep -Eo "$re_urls" |
	sort -u | sed 's|^www.|http://www\.|g'
}
if [ -n "$1" ]; then
	urls=$(echo "$@"|urlparse)
else
	urls=$(urlparse)
fi

# wipe IFS so dmenu handles being sent the links properly
IFS=

# send any found links to dmenu so one can be chosen to be sent to the clipboard
[ -n "$urls" ] &&
	echo $urls | dmenu -i -p 'copy which url?' -l 10 | xclip -r -sel c