Je kunt niet meer dan 25 onderwerpen selecteren
Onderwerpen moeten beginnen met een letter of nummer, kunnen streepjes bevatten ('-') en kunnen maximaal 35 tekens lang zijn.
79 regels
1.7 KiB
79 regels
1.7 KiB
#!/usr/bin/env bash |
|
|
|
declare -r esc=$'\033' |
|
declare -r c_reset="${esc}[0m" |
|
declare -r c_red="${esc}[31m" |
|
|
|
err() { |
|
printf "${c_red}%s${c_reset}\n" "$*" >&2 |
|
} |
|
|
|
die() { |
|
[[ -n "$1" ]] && err "$1" |
|
exit 1 |
|
} |
|
|
|
has() { |
|
local verbose=0 |
|
if [[ $1 == '-v' ]]; then |
|
verbose=1 |
|
shift |
|
fi |
|
for c; do c="${c%% *}" |
|
if ! command -v "$c" &> /dev/null; then |
|
(( verbose > 0 )) && err "$c not found" |
|
return 1 |
|
fi |
|
done |
|
} |
|
|
|
openurl() { |
|
local url="$1" |
|
local browser |
|
case "$url" in |
|
*youtube.com*|*youtu.be*|*vimeo.com*) |
|
browser=$(select_from \ |
|
mpv mplayer2 mplayer) ;; |
|
*) |
|
browser=$(select_from \ |
|
-c "pgrep -u $USER -i" \ |
|
firefox chromium-browser chrome) |
|
[[ ! $browser ]] && browser='w3m' |
|
;; |
|
esac |
|
$browser "$url" |
|
} |
|
|
|
# http://stackoverflow.com/a/10660730 |
|
rawurlencode() { |
|
local string="$*" |
|
local strlen=${#string} |
|
local encoded="" |
|
for (( pos=0; pos < strlen; pos++ )); do |
|
c="${string:$pos:1}" |
|
case "$c" in |
|
[-_.~a-zA-Z0-9]) |
|
o="$c" ;; |
|
*) |
|
printf -v o '%%%02x' "'$c" |
|
esac |
|
encoded+="${o}" |
|
done |
|
echo "${encoded}" |
|
} |
|
|
|
has -v curl jq fzf || die |
|
|
|
if [[ -z "$*" ]]; then |
|
die 'nothing to search for' |
|
fi |
|
|
|
response=$( curl -sfL "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&q=$(rawurlencode "$*")" ) || die 'error connecting to google, check connection' |
|
json=$( jq -c '.["responseData"]["results"] | map("\(.unescapedUrl) \(.title) | \(.content)") | .[]' <<< "$response" ) || die 'error parsing results :(' |
|
url=$( fzf -e --ansi --cycle --inline-info <\ |
|
<( sed -r 's/<[^>]*>//g; s/\\n//g; s/^\s*"//; s/",?$//' <<< "$json" ) | |
|
cut -d' ' -f1 ) |
|
|
|
if [[ -n "$url" ]]; then |
|
openurl "$url" |
|
fi
|
|
|