aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/functions/__fish_urlencode.fish
blob: df07eee03a88e19c9fb687fab2b596110ddbad01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function __fish_urlencode --description "URL-encode stdin"
	set -l join ''
	set -l chars
	# Set locale to C and IFS to "" in order to split a line into bytes.
	while begin; set -lx LC_ALL C; set -lx IFS ''; read -az chars; end
		printf '%s' $join
		# chomp off a trailing newline
		if test "$chars[-1]" = \n
			set -e chars[-1]
			set join '%0A%00'
		else
			set join '%00'
		end
		for c in $chars
			if string match -q -r '[/._~A-Za-z0-9-]' $c
				printf '%s' $c
			else
				printf '%%%02X' "'$c"
			end
		end
	end
end