# example.com => gemini://example.com/
_address() { # _address URL
addr="$1"
+
[[ "$addr" != *://* ]] && addr="$PROT://$addr"
trim <<<"$addr"
}
# handle the response
# cf. gemini://gemini.circumlunar.space/docs/spec-spec.txt
-handle() { # handle URL < RESPONSE
- url="$(_address "$1")"
-
+handle() { # handle < RESPONSE ## needs $URL in state
head="$(sed 1q)"
code="$(awk '{print $1}' <<<"$head")"
meta="$(awk '{for(i=2;i<=NF;i++)printf "%s ",$i;printf "\n"}' <<<"$head")"
log 3 "Input"
put "$meta"
read -rep "? "
- bollux "$url?$REPLY"
+ bollux "$URL?$REPLY"
;;
2*) # SUCCESS
log 3 "Success"
case "$mimetype" in
text/*)
# normalize line endings to "\n"
- awk 'BEGIN{RS=""}{gsub("\r\n?","\n");print}'
+ # awk 'BEGIN{RS=""}{gsub(/\r\n?/,"\n");print}'
+ cat
# TODO: use less with linking and stuff
# less -R -p'^=>' +g
# lesskey:
*)
tn="$(mktemp)"
dd status=progress >"$tn"
- fn="$DLDR/${url##*/}"
+ fn="$DLDR/${URL##*/}"
if [[ -f "$fn" ]]; then
log - "Saved '$tn'."
else
### main entry point ###
bollux() {
if (($# == 1)); then
- url="$1"
+ URL="$1"
else
- read -rp "GO> " url
+ read -rp "GO> " URL
fi
- log 5 "url : $url"
- log 5 "addr: $(_address "$url")"
- log 5 "serv: $(_server "$url")"
+ log 5 "URL : $URL"
+ log 5 "addr: $(_address "$URL")"
+ log 5 "serv: $(_server "$URL")"
- request "$url" | handle "$url"
+ request "$URL" | handle
}
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
# requirements here -- so they're only checked once
+ require awk
+ require dd
+ require mv
require openssl
+ require sed
bollux "$@"
fi