mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-29 16:52:31 +08:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
27d048aa57
@ -4,18 +4,6 @@ alias bp="bundle package"
|
|||||||
alias bo="bundle open"
|
alias bo="bundle open"
|
||||||
alias bu="bundle update"
|
alias bu="bundle update"
|
||||||
|
|
||||||
bundler_version=`bundle version | cut -d' ' -f3`
|
|
||||||
if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
|
|
||||||
if [[ "$(uname)" == 'Darwin' ]]
|
|
||||||
then
|
|
||||||
local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
|
|
||||||
else
|
|
||||||
local cores_num="$(nproc)"
|
|
||||||
fi
|
|
||||||
eval "alias bi='bundle install --jobs=$cores_num'"
|
|
||||||
else
|
|
||||||
alias bi='bundle install'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The following is based on https://github.com/gma/bundler-exec
|
# The following is based on https://github.com/gma/bundler-exec
|
||||||
|
|
||||||
@ -44,14 +32,28 @@ _run-with-bundler() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
## Main program
|
if _bundler-installed; then
|
||||||
for cmd in $bundled_commands; do
|
bundler_version=`bundle version | cut -d' ' -f3`
|
||||||
eval "function unbundled_$cmd () { $cmd \$@ }"
|
if [[ $bundler_version > '1.4.0' || $bundler_version = '1.4.0' ]]; then
|
||||||
eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}"
|
if [[ "$(uname)" == 'Darwin' ]]
|
||||||
alias $cmd=bundled_$cmd
|
then
|
||||||
|
local cores_num="$(sysctl hw.ncpu | awk '{print $2}')"
|
||||||
|
else
|
||||||
|
local cores_num="$(nproc)"
|
||||||
|
fi
|
||||||
|
eval "alias bi='bundle install --jobs=$cores_num'"
|
||||||
|
else
|
||||||
|
alias bi='bundle install'
|
||||||
|
fi
|
||||||
|
|
||||||
if which _$cmd > /dev/null 2>&1; then
|
## Main program
|
||||||
compdef _$cmd bundled_$cmd=$cmd
|
for cmd in $bundled_commands; do
|
||||||
fi
|
eval "function unbundled_$cmd () { $cmd \$@ }"
|
||||||
done
|
eval "function bundled_$cmd () { _run-with-bundler $cmd \$@}"
|
||||||
|
alias $cmd=bundled_$cmd
|
||||||
|
|
||||||
|
if which _$cmd > /dev/null 2>&1; then
|
||||||
|
compdef _$cmd bundled_$cmd=$cmd
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
@ -31,7 +31,7 @@ open_jira_issue () {
|
|||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "Opening new issue"
|
echo "Opening new issue"
|
||||||
`open $jira_url/secure/CreateIssue!default.jspa`
|
$open_cmd "$jira_url/secure/CreateIssue!default.jspa"
|
||||||
else
|
else
|
||||||
echo "Opening issue #$1"
|
echo "Opening issue #$1"
|
||||||
if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
|
if [[ "x$JIRA_RAPID_BOARD" = "xtrue" ]]; then
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
_pip_all() {
|
_pip_all() {
|
||||||
# we cache the list of packages (originally from the macports plugin)
|
# we cache the list of packages (originally from the macports plugin)
|
||||||
if (( ! $+piplist )); then
|
if (( ! $+piplist )); then
|
||||||
echo -n " (caching package index...)"
|
zsh-pip-cache-packages
|
||||||
piplist=($(pip search * | cut -d ' ' -f 1 | tr '[A-Z]' '[a-z]'))
|
piplist=($(cat $ZSH_PIP_CACHE_FILE))
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
78
plugins/pip/pip.plugin.zsh
Normal file
78
plugins/pip/pip.plugin.zsh
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# Usage:
|
||||||
|
# Just add pip to your installed plugins.
|
||||||
|
|
||||||
|
# If you would like to change the cheeseshops used for autocomplete set
|
||||||
|
# ZSH_PIP_INDEXES in your zshrc. If one of your indexes are bogus you won't get
|
||||||
|
# any kind of error message, pip will just not autocomplete from them. Double
|
||||||
|
# check!
|
||||||
|
#
|
||||||
|
# If you would like to clear your cache, go ahead and do a
|
||||||
|
# "zsh-pip-clear-cache".
|
||||||
|
|
||||||
|
ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
|
||||||
|
ZSH_PIP_INDEXES=(https://pypi.python.org/simple/)
|
||||||
|
|
||||||
|
zsh-pip-clear-cache() {
|
||||||
|
rm $ZSH_PIP_CACHE_FILE
|
||||||
|
unset piplist
|
||||||
|
}
|
||||||
|
|
||||||
|
zsh-pip-clean-packages() {
|
||||||
|
sed -nr '/<a href/ s/.*>([^<]+).*/\1/p'
|
||||||
|
}
|
||||||
|
|
||||||
|
zsh-pip-cache-packages() {
|
||||||
|
if [[ ! -d ${PIP_CACHE_FILE:h} ]]; then
|
||||||
|
mkdir -p ${PIP_CACHE_FILE:h}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
|
||||||
|
echo -n "(...caching package index...)"
|
||||||
|
tmp_cache=/tmp/zsh_tmp_cache
|
||||||
|
for index in $ZSH_PIP_INDEXES ; do
|
||||||
|
# well... I've already got two problems
|
||||||
|
curl $index 2>/dev/null | \
|
||||||
|
zsh-pip-clean-packages \
|
||||||
|
>> $tmp_cache
|
||||||
|
done
|
||||||
|
sort $tmp_cache | uniq | tr '\n' ' ' > $ZSH_PIP_CACHE_FILE
|
||||||
|
rm $tmp_cache
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# A test function that validates the regex against known forms of the simple
|
||||||
|
# index. If you modify the regex to make it work for you, you should add a test
|
||||||
|
# case in here and make sure that your changes don't break things for someone
|
||||||
|
# else.
|
||||||
|
zsh-pip-test-clean-packages() {
|
||||||
|
local expected
|
||||||
|
local actual
|
||||||
|
expected="0x10c-asm
|
||||||
|
1009558_nester"
|
||||||
|
|
||||||
|
actual=$(echo -n "<html><head><title>Simple Index</title><meta name=\"api-version\" value=\"2\" /></head><body>
|
||||||
|
<a href='0x10c-asm'>0x10c-asm</a><br/>
|
||||||
|
<a href='1009558_nester'>1009558_nester</a><br/>
|
||||||
|
</body></html>" | zsh-pip-clean-packages)
|
||||||
|
|
||||||
|
if [[ $actual != $expected ]] ; then
|
||||||
|
echo -e "python's simple index is broken:\n$actual\n !=\n$expected"
|
||||||
|
else
|
||||||
|
echo "python's simple index is fine"
|
||||||
|
fi
|
||||||
|
|
||||||
|
actual=$(echo -n '<html>
|
||||||
|
<head>
|
||||||
|
<title>Simple Package Index</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="0x10c-asm">0x10c-asm</a><br/>
|
||||||
|
<a href="1009558_nester">1009558_nester</a><br/>
|
||||||
|
</body></html>' | zsh-pip-clean-packages)
|
||||||
|
|
||||||
|
if [[ $actual != $expected ]] ; then
|
||||||
|
echo -e "the djangopypi2 index is broken:\n$actual\n !=\n$expected"
|
||||||
|
else
|
||||||
|
echo "the djangopypi2 index is fine"
|
||||||
|
fi
|
||||||
|
}
|
@ -3,18 +3,19 @@
|
|||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# FILE: _pod
|
# FILE: _pod
|
||||||
# DESCRIPTION: Cocoapods autocomplete plugin for Oh-My-Zsh
|
# DESCRIPTION: Cocoapods (0.27.1) autocomplete plugin for Oh-My-Zsh
|
||||||
# http://cocoapods.org
|
# http://cocoapods.org
|
||||||
# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
|
# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch)
|
||||||
# GITHUB: https://github.com/mekanics
|
# GITHUB: https://github.com/mekanics
|
||||||
# TWITTER: @jolyAlexandre
|
# TWITTER: @jolyAlexandre
|
||||||
# VERSION: 0.0.1
|
# VERSION: 0.0.3
|
||||||
# LICENSE: MIT
|
# LICENSE: MIT
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
local -a _1st_arguments
|
local -a _1st_arguments
|
||||||
_1st_arguments=(
|
_1st_arguments=(
|
||||||
'help:Show help for the given command.'
|
'help:Show help for the given command'
|
||||||
|
'init:Generate a Podfile for the current directory'
|
||||||
'install:Install project dependencies'
|
'install:Install project dependencies'
|
||||||
'ipc:Inter-process communication'
|
'ipc:Inter-process communication'
|
||||||
'list:List pods'
|
'list:List pods'
|
||||||
@ -32,6 +33,7 @@ local -a _repo_arguments
|
|||||||
_repo_arguments=(
|
_repo_arguments=(
|
||||||
'add:Add a spec repo'
|
'add:Add a spec repo'
|
||||||
'lint:Validates all specs in a repo'
|
'lint:Validates all specs in a repo'
|
||||||
|
'remove:Remove a spec repo.'
|
||||||
'update:Update a spec repo'
|
'update:Update a spec repo'
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -158,7 +160,7 @@ __first_command_list ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
__repo_list() {
|
__repo_list() {
|
||||||
_wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods 2>/dev/null | sed -e 's/ /\\ /g')
|
_wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods/repos 2>/dev/null | sed -e 's/ /\\ /g')
|
||||||
}
|
}
|
||||||
|
|
||||||
__pod-repo() {
|
__pod-repo() {
|
||||||
@ -193,6 +195,12 @@ __pod-repo() {
|
|||||||
(add)
|
(add)
|
||||||
_arguments \
|
_arguments \
|
||||||
$_inherited_options
|
$_inherited_options
|
||||||
|
|
||||||
|
(remove)
|
||||||
|
_arguments \
|
||||||
|
$_inherited_options \
|
||||||
|
':feature:__repo_list'
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -6,6 +6,7 @@ alias pyfind='find . -name "*.py"'
|
|||||||
function pyclean() {
|
function pyclean() {
|
||||||
ZSH_PYCLEAN_PLACES=${*:-'.'}
|
ZSH_PYCLEAN_PLACES=${*:-'.'}
|
||||||
find ${ZSH_PYCLEAN_PLACES} -type f -name "*.py[co]" -delete
|
find ${ZSH_PYCLEAN_PLACES} -type f -name "*.py[co]" -delete
|
||||||
|
find ${ZSH_PYCLEAN_PLACES} -type d -name "__pycache__" -delete
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grep among .py files
|
# Grep among .py files
|
||||||
|
9
plugins/wd2/wd2/wd.plugin.zsh
Executable file
9
plugins/wd2/wd2/wd.plugin.zsh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
# WARP
|
||||||
|
# ====
|
||||||
|
# oh-my-zsh plugin
|
||||||
|
#
|
||||||
|
# @github.com/mfaerevaag/wd
|
||||||
|
|
||||||
|
alias wd='. ~/.oh-my-zsh/plugins/wd/wd.sh'
|
201
plugins/wd2/wd2/wd.sh
Executable file
201
plugins/wd2/wd2/wd.sh
Executable file
@ -0,0 +1,201 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
# WARP
|
||||||
|
# ====
|
||||||
|
# Jump to custom directories in terminal
|
||||||
|
# because `cd` takes too long...
|
||||||
|
#
|
||||||
|
# @github.com/mfaerevaag/wd
|
||||||
|
|
||||||
|
|
||||||
|
## variables
|
||||||
|
CONFIG=$HOME/.warprc
|
||||||
|
|
||||||
|
## colors
|
||||||
|
BLUE="\033[96m"
|
||||||
|
GREEN="\033[92m"
|
||||||
|
YELLOW="\033[93m"
|
||||||
|
RED="\033[91m"
|
||||||
|
NOC="\033[m"
|
||||||
|
|
||||||
|
|
||||||
|
## load warp points
|
||||||
|
typeset -A points
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
arr=(${(s,:,)line})
|
||||||
|
key=${arr[1]}
|
||||||
|
val=${arr[2]}
|
||||||
|
|
||||||
|
points[$key]=$val
|
||||||
|
done < $CONFIG
|
||||||
|
|
||||||
|
|
||||||
|
## functions
|
||||||
|
# prepended wd_ to not conflict with your environment (no sub shell)
|
||||||
|
|
||||||
|
wd_warp()
|
||||||
|
{
|
||||||
|
if [[ $1 =~ "^\.+$" ]]
|
||||||
|
then
|
||||||
|
if [[ $#1 < 2 ]]
|
||||||
|
then
|
||||||
|
wd_print_msg $YELLOW "Warping to current directory?"
|
||||||
|
else
|
||||||
|
(( n = $#1 - 1 ))
|
||||||
|
wd_print_msg $BLUE "Warping..."
|
||||||
|
cd -$n > /dev/null
|
||||||
|
fi
|
||||||
|
elif [[ ${points[$1]} != "" ]]
|
||||||
|
then
|
||||||
|
wd_print_msg $BLUE "Warping..."
|
||||||
|
cd ${points[$1]}
|
||||||
|
else
|
||||||
|
wd_print_msg $RED "Unkown warp point '$1'"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_add()
|
||||||
|
{
|
||||||
|
if [[ $1 =~ "^\.+$" ]]
|
||||||
|
then
|
||||||
|
wd_print_msg $RED "Illeagal warp point (see README)."
|
||||||
|
elif [[ ${points[$1]} == "" ]] || $2
|
||||||
|
then
|
||||||
|
wd_remove $1 > /dev/null
|
||||||
|
print "$1:$PWD" >> $CONFIG
|
||||||
|
wd_print_msg $GREEN "Warp point added"
|
||||||
|
else
|
||||||
|
wd_print_msg $YELLOW "Warp point '$1' alredy exists. Use 'add!' to overwrite."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_remove()
|
||||||
|
{
|
||||||
|
if [[ ${points[$1]} != "" ]]
|
||||||
|
then
|
||||||
|
if wd_tmp=`sed "/^$1:/d" $CONFIG`
|
||||||
|
then
|
||||||
|
echo $wd_tmp > $CONFIG
|
||||||
|
wd_print_msg $GREEN "Warp point removed"
|
||||||
|
else
|
||||||
|
wd_print_msg $RED "Warp point unsuccessfully removed. Sorry!"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
wd_print_msg $RED "Warp point was not found"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_show()
|
||||||
|
{
|
||||||
|
wd_print_msg $BLUE "Warp points to current directory:"
|
||||||
|
wd_list_all | grep $PWD$
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_list_all()
|
||||||
|
{
|
||||||
|
wd_print_msg $BLUE "All warp points:"
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if [[ $line != "" ]]
|
||||||
|
then
|
||||||
|
arr=(${(s,:,)line})
|
||||||
|
key=${arr[1]}
|
||||||
|
val=${arr[2]}
|
||||||
|
|
||||||
|
print "\t" $key "\t -> \t" $val
|
||||||
|
fi
|
||||||
|
done < $CONFIG
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_print_msg()
|
||||||
|
{
|
||||||
|
if [[ $1 == "" || $2 == "" ]]
|
||||||
|
then
|
||||||
|
print " $RED*$NOC Could not print message. Sorry!"
|
||||||
|
else
|
||||||
|
print " $1*$NOC $2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
wd_print_usage()
|
||||||
|
{
|
||||||
|
print "Usage: wd [add|-a|--add] [rm|-r|--remove] [ls|-l|--list] <point>"
|
||||||
|
print "\nCommands:"
|
||||||
|
print "\t add \t Adds the current working directory to your warp points"
|
||||||
|
print "\t add! \t Overwrites existing warp point"
|
||||||
|
print "\t remove Removes the given warp point"
|
||||||
|
print "\t list \t Outputs all stored warp points"
|
||||||
|
print "\t help \t Show this extremely helpful text"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
## run
|
||||||
|
|
||||||
|
# get opts
|
||||||
|
args=`getopt -o a:r:lhs -l add:,remove:,list,help,show -- $*`
|
||||||
|
|
||||||
|
if [[ $? -ne 0 || $#* -eq 0 ]]
|
||||||
|
then
|
||||||
|
wd_print_usage
|
||||||
|
else
|
||||||
|
# can't exit, as this would exit the excecuting shell
|
||||||
|
# e.i. your terminal
|
||||||
|
|
||||||
|
#set -- $args # WTF
|
||||||
|
|
||||||
|
for i
|
||||||
|
do
|
||||||
|
case "$i"
|
||||||
|
in
|
||||||
|
-a|--add|add)
|
||||||
|
wd_add $2 false
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-a!|--add!|add!)
|
||||||
|
wd_add $2 true
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-r|--remove|rm)
|
||||||
|
wd_remove $2
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-l|--list|ls)
|
||||||
|
wd_list_all
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-h|--help|help)
|
||||||
|
wd_print_usage
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-s|--show|show)
|
||||||
|
wd_show
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
wd_warp $i
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift; break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
## garbage collection
|
||||||
|
# if not, next time warp will pick up variables from this run
|
||||||
|
# remember, there's no sub shell
|
||||||
|
points=""
|
||||||
|
args=""
|
||||||
|
unhash -d val &> /dev/null # fixes issue #1
|
@ -95,38 +95,38 @@ prompt_git() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
prompt_hg() {
|
prompt_hg() {
|
||||||
local rev status
|
local rev status
|
||||||
if $(hg id >/dev/null 2>&1); then
|
if $(hg id >/dev/null 2>&1); then
|
||||||
if $(hg prompt >/dev/null 2>&1); then
|
if $(hg prompt >/dev/null 2>&1); then
|
||||||
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
|
if [[ $(hg prompt "{status|unknown}") = "?" ]]; then
|
||||||
# if files are not added
|
# if files are not added
|
||||||
prompt_segment red white
|
prompt_segment red white
|
||||||
st='±'
|
st='±'
|
||||||
elif [[ -n $(hg prompt "{status|modified}") ]]; then
|
elif [[ -n $(hg prompt "{status|modified}") ]]; then
|
||||||
# if any modification
|
# if any modification
|
||||||
prompt_segment yellow black
|
prompt_segment yellow black
|
||||||
st='±'
|
st='±'
|
||||||
else
|
else
|
||||||
# if working copy is clean
|
# if working copy is clean
|
||||||
prompt_segment green black
|
prompt_segment green black
|
||||||
fi
|
fi
|
||||||
echo -n $(hg prompt "☿ {rev}@{branch}") $st
|
echo -n $(hg prompt "☿ {rev}@{branch}") $st
|
||||||
else
|
else
|
||||||
st=""
|
st=""
|
||||||
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
|
rev=$(hg id -n 2>/dev/null | sed 's/[^-0-9]//g')
|
||||||
branch=$(hg id -b 2>/dev/null)
|
branch=$(hg id -b 2>/dev/null)
|
||||||
if `hg st | grep -Eq "^\?"`; then
|
if `hg st | grep -Eq "^\?"`; then
|
||||||
prompt_segment red black
|
prompt_segment red black
|
||||||
st='±'
|
st='±'
|
||||||
elif `hg st | grep -Eq "^(M|A)"`; then
|
elif `hg st | grep -Eq "^(M|A)"`; then
|
||||||
prompt_segment yellow black
|
prompt_segment yellow black
|
||||||
st='±'
|
st='±'
|
||||||
else
|
else
|
||||||
prompt_segment green black
|
prompt_segment green black
|
||||||
fi
|
fi
|
||||||
echo -n " $rev@$branch" $st
|
echo -n "☿ $rev@$branch" $st
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Dir: current working directory
|
# Dir: current working directory
|
||||||
@ -137,7 +137,7 @@ prompt_dir() {
|
|||||||
# Virtualenv: current working virtualenv
|
# Virtualenv: current working virtualenv
|
||||||
prompt_virtualenv() {
|
prompt_virtualenv() {
|
||||||
local virtualenv_path="$VIRTUAL_ENV"
|
local virtualenv_path="$VIRTUAL_ENV"
|
||||||
if [[ -n $virtualenv_path && -z $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
|
if [[ -n $virtualenv_path && -n $VIRTUAL_ENV_DISABLE_PROMPT ]]; then
|
||||||
prompt_segment blue black "(`basename $virtualenv_path`)"
|
prompt_segment blue black "(`basename $virtualenv_path`)"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user