120 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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"
 |