summaryrefslogtreecommitdiff
path: root/lib/functions.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/functions.zsh')
-rw-r--r--lib/functions.zsh17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/functions.zsh b/lib/functions.zsh
index f5c671f9c..330b0e3e9 100644
--- a/lib/functions.zsh
+++ b/lib/functions.zsh
@@ -23,6 +23,9 @@ function open_command() {
linux*) [[ "$(uname -r)" != *icrosoft* ]] && open_cmd='nohup xdg-open' || {
open_cmd='cmd.exe /c start ""'
[[ -e "$1" ]] && { 1="$(wslpath -w "${1:a}")" || return 1 }
+ [[ "$1" = (http|https)://* ]] && {
+ 1="$(echo "$1" | sed -E 's/([&|()<>^])/^\1/g')" || return 1
+ }
} ;;
msys*) open_cmd='start ""' ;;
*) echo "Platform $OSTYPE not supported"
@@ -57,6 +60,16 @@ function takeurl() {
cd "$thedir"
}
+function takezip() {
+ local data thedir
+ data="$(mktemp)"
+ curl -L "$1" > "$data"
+ unzip "$data" -d "./"
+ thedir="$(unzip -l "$data" | awk 'NR==4 {print $4}' | sed 's/\/.*//')"
+ rm "$data"
+ cd "$thedir"
+}
+
function takegit() {
git clone "$1"
cd "$(basename ${1%%.git})"
@@ -65,6 +78,8 @@ function takegit() {
function take() {
if [[ $1 =~ ^(https?|ftp).*\.(tar\.(gz|bz2|xz)|tgz)$ ]]; then
takeurl "$1"
+ elif [[ $1 =~ ^(https?|ftp).*\.(zip)$ ]]; then
+ takezip "$1"
elif [[ $1 =~ ^([A-Za-z0-9]\+@|https?|git|ssh|ftps?|rsync).*\.git/?$ ]]; then
takegit "$1"
else
@@ -160,6 +175,8 @@ zmodload zsh/langinfo
# -P causes spaces to be encoded as '%20' instead of '+'
function omz_urlencode() {
emulate -L zsh
+ setopt norematchpcre
+
local -a opts
zparseopts -D -E -a opts r m P