From 1767681f9a61ac0789f5dafa76126e3446924b6d Mon Sep 17 00:00:00 2001 From: Jak Wings Date: Sat, 12 Dec 2015 07:35:57 +0800 Subject: [PATCH] Fix the file URL for Terminal.app * When using a UTF-8 locale, set locale to C temporarily in order to read one byte at a time. * Use the builtin printf in a forward-compatible way. (GNU) * Improve the readability of the code. --- share/functions/__fish_urlencode.fish | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/share/functions/__fish_urlencode.fish b/share/functions/__fish_urlencode.fish index ab13beaa6..d17451f32 100644 --- a/share/functions/__fish_urlencode.fish +++ b/share/functions/__fish_urlencode.fish @@ -1,10 +1,11 @@ function __fish_urlencode --description "URL-encode stdin" - set -l IFS '' set -l output - while read --array --local lines - if [ (count $lines) -gt 0 ] - set output $output (printf '%%%02x' "'"$lines"'" | sed -e 's/%2[fF]/\//g') + 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 --array chars; end + if count $chars > /dev/null + set output $output (printf '%%%02x' "'"$chars) end end - echo -s $output + echo -s $output | sed -e 's/%2[fF]/\//g' end