120 lines
3.5 KiB
Plaintext
120 lines
3.5 KiB
Plaintext
|
#!/usr/bin/env bash
|
|||
|
set -eo pipefail
|
|||
|
this="${0##*/}"
|
|||
|
version="2022-07-27"
|
|||
|
config_file="$HOME/.config/${this}rc"
|
|||
|
[ ! -t 0 ] && exo-open --launch TerminalEmulator -- -e "$this $*" && exit 0
|
|||
|
|
|||
|
arg=${1:---help}
|
|||
|
if [[ "$arg" = "--completion-bash" ]]; then
|
|||
|
echo "_${this}_completion(){
|
|||
|
local cur=\"\${COMP_WORDS[COMP_CWORD]}\"
|
|||
|
local com_basic=\"--alias --help --version --tips\"
|
|||
|
local com_urls=\"cht.sh wttr.in rate.sx qrenco.de ifconfig.co\"
|
|||
|
if [[ \$COMP_CWORD != 1 ]]; then
|
|||
|
local com_web=\"\"
|
|||
|
case \"\${COMP_WORDS[1]}\" in
|
|||
|
--raw)
|
|||
|
COMPREPLY=( \$(compgen -W \"\$com_urls \$com_basic\" -- \"\$cur\" ) )
|
|||
|
return 0;
|
|||
|
;;
|
|||
|
--alias)
|
|||
|
COMPREPLY=( \$(compgen -W \"? + -\" -- \"\$cur\" ) )
|
|||
|
return 0;
|
|||
|
;;
|
|||
|
wttr.in)
|
|||
|
local com_web+=\"moon m u M 0 1 2 A F n q Q T\"
|
|||
|
;;
|
|||
|
ifconfig.co)
|
|||
|
local com_web+=\"json\"
|
|||
|
;;
|
|||
|
cht.sh)
|
|||
|
local com_web+=\"\$(compgen -c)\"
|
|||
|
;;
|
|||
|
esac
|
|||
|
COMPREPLY=( \$(compgen -W \":help \$com_web\" -- \"\$cur\" ) )
|
|||
|
return 0;
|
|||
|
fi
|
|||
|
|
|||
|
COMPREPLY=( \$(compgen -W \"--raw \$com_urls \$com_basic\" -- \"\$cur\" ) )
|
|||
|
}
|
|||
|
complete -o bashdefault -o default -F _${this}_completion ${this}
|
|||
|
"
|
|||
|
exit 0;
|
|||
|
fi
|
|||
|
|
|||
|
_echo(){ [[ $is_raw == 1 ]] && echo -e "$1" || echo "$1" | less -R -S; }
|
|||
|
[[ "$arg" = "--raw" ]] && is_raw=1 && command shift && arg=${1:---help} || is_raw=0
|
|||
|
|
|||
|
if [[ "$arg" = "--help" ]]; then
|
|||
|
_echo "\
|
|||
|
$this@v$version – URL UTILS
|
|||
|
This is helper around \`curl\` to run web-based commands such as 'wttr.in', 'cht.sh', …
|
|||
|
Usage:
|
|||
|
$this [--raw] BASE_URL [PARAMS]
|
|||
|
$this [--raw] --[help|version|tips]
|
|||
|
$this [--raw] --alias NAME +|-|? FULL_URL
|
|||
|
|
|||
|
Options:
|
|||
|
--raw – no output using \`less\`
|
|||
|
--alias – you can also use vars '\\\$1', …
|
|||
|
PARAMS – parameters to be concatenated with BASE_URL with '/' or '?'/'&' when parameter starts with '?' … se below
|
|||
|
Examples:
|
|||
|
$this cht.sh/less $this cht.sh less
|
|||
|
$this wttr.in/prague?M&n $this wttr.in prague ?M ?n
|
|||
|
$this --raw ident.me/json | jq
|
|||
|
Config file:
|
|||
|
$config_file
|
|||
|
"
|
|||
|
exit 0
|
|||
|
fi
|
|||
|
[[ "$arg" = "--version" ]] && echo "$version" && exit 0
|
|||
|
if [[ "$arg" = "--tips" ]]; then
|
|||
|
_echo "\
|
|||
|
cht.sh – The only cheat sheet you need Unified access to the best community driven documentation repositories of the world.
|
|||
|
wttr.in – Weather report
|
|||
|
rate.sx – show exchange rates for cryptocurrencies
|
|||
|
qrenco.de
|
|||
|
ifconfig.co
|
|||
|
https://github.com/chubin/awesome-console-services/tree/65e8e897c9c5a2ec013747dd9f1acc03c8573fe7
|
|||
|
"
|
|||
|
exit 0
|
|||
|
fi
|
|||
|
command shift
|
|||
|
|
|||
|
if [[ "$arg" == "--alias" ]]; then
|
|||
|
alias_name="${1:-[^_]*}"
|
|||
|
[[ $alias_name == *.* ]] && echo "Alias should not contains '.'" && exit 1
|
|||
|
case "$2" in
|
|||
|
"+")
|
|||
|
out=$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)
|
|||
|
out="$out\nuu_${alias_name}_alias=\"$3\""
|
|||
|
out="$out\nuu_${alias_name}_is_raw=$is_raw"
|
|||
|
echo -e "$out" > $config_file
|
|||
|
exit 0
|
|||
|
;;
|
|||
|
"-") echo -e "$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)" > $config_file || echo "No aliases yet"; exit 0;;
|
|||
|
*) grep -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file || echo "No aliases yet"; exit 0;;
|
|||
|
esac
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
args=""
|
|||
|
if [[ $arg != *.* ]]; then
|
|||
|
. $config_file
|
|||
|
is_raw_name=uu_${arg}_is_raw
|
|||
|
is_raw=${!is_raw_name}
|
|||
|
|
|||
|
[[ -z $is_raw ]] && echo "No alias '$arg' found." && exit 1
|
|||
|
arg_name=uu_${arg}_alias
|
|||
|
arg=${!arg_name}
|
|||
|
else
|
|||
|
for p in "$@"; do
|
|||
|
[[ $p == "?"* ]] \
|
|||
|
&& args+=" --data-urlencode ${p:1} " \
|
|||
|
|| arg+="/$p"
|
|||
|
done
|
|||
|
fi
|
|||
|
out=$(curl -fGsS -H 'Accept-Language: cs' $args --compressed $arg || echo 'Curl error, see terminal error output.')
|
|||
|
_echo "$out"
|