Fix up prezto.

This commit is contained in:
David Tomaschik
2018-03-10 23:11:35 -08:00
parent 4091cc3f03
commit 769989127b
10 changed files with 6 additions and 70 deletions

View File

@@ -0,0 +1,52 @@
#compdef jekyll
_jekyll() {
local curcontext="${curcontext}" state line file
typeset -A opt_args
local -a _subcommands
_subcommands=('docs:list documentation'
'import:import posts'
'serve:run server'
'help:get help'
'doctor:deprecation warnings'
'build:compile site'
'new:create new site'
'clean:clean output'
'draft:create new draft'
'post:create new post'
'publish:publish draft'
'edit:edit post')
_arguments -C \
"(source)"{-s,--source}"[source]:source dir:_files -/" \
"(dest)"{-d,--destination}"[dest]:dest dir:_files -/" \
"--safe[safe mode]" \
"(plugins)"{-p,--plugins}"[plugins]:plugins dir:_files -/" \
"--layouts[layouts]:layouts dir:_files -/" \
"--profile[generate liquid profile]" \
"(help)"{-h,--help}"[help]" \
"(version)"{-v,--version}"[version]" \
"(trace)"{-t,--trace}"[trace]" \
"1:command:->command" \
"*: :->args"
case $state in
command)
_describe -t commands "jekyll subcommand" _subcommands
;;
args)
case "$line[1]" in
edit)
# TODO: Fix to get --source argument
local -a postpaths
postpaths=("${JEKYLL_DIR}/_posts" "${JEKYLL_DIR}/_drafts")
_files -W postpaths
;;
publish)
# TODO: Fix to get --source argument
_files -W ${JEKYLL_DIR}/_drafts
esac
;;
esac
}

View File

@@ -0,0 +1,140 @@
function _jekyll_locate_dir {
if [[ -n "${JEKYLL_DIR}" && -f "${JEKYLL_DIR}" ]] ; then
echo ${JEKYLL_DIR}
elif test -f `pwd`/_config.yml ; then
pwd
elif test -f ${HOME}/Projects/blog/_config.yml ; then
echo ${HOME}/Projects/blog
else
echo "Jekyll instance not found!" >&2
fi
}
function _jekyll_set_date {
local FILENAME
local DATE
FILENAME=${1}
DATE=${2}
sed -i "2,/---/{s/^date:.*$/date: ${DATE}/;s/---/date: ${DATE}\n---/}" ${FILENAME}
}
function _jekyll_find_post {
local files
local fname
local jekyll_dir
jekyll_dir="${3}"
if [ -f "${1}" ] ; then
printf -- "${1}"
return 0
fi
if [ -f "${jekyll_dir}/_posts/${1}" ] ; then
printf -- "${jekyll_dir}/_posts/${1}"
return 0
fi
if [ -f "${jekyll_dir}/_drafts/${1}" ] ; then
printf -- "${jekyll_dir}/_drafts/${1}"
return 0
fi
fname=${2:-${1}}
files=(${jekyll_dir}/_posts/*${fname}* ${jekyll_dir}/_drafts/*${fname}*)
if [ ${#files} -eq "0" ] ; then
echo "No post found for ${fname}" >&2
return 1
fi
if [ ${#files} -gt "1" ] ; then
echo "Ambiguous results: ${files}" >&2
return 1
fi
printf -- ${files}
return 0
}
function jekyll {
setopt localoptions nullglob
local JTEMPLATE
local TITLE
local SLUG
local FILENAME
local DATE
local NEWNAME
local JEKYLL_DIR
JEKYLL_DIR=`_jekyll_locate_dir`
if [ -z "${JEKYLL_DIR}" ] ; then
return 1
fi
JTEMPLATE="---\n"
JTEMPLATE+="layout: post\n"
JTEMPLATE+="title: \"%s\"\n"
JTEMPLATE+="category: Blog\n"
JTEMPLATE+="---\n\n"
TITLE=${@[2,-1]}
SLUG=$(echo -n ${TITLE}|tr A-Z a-z|tr -c -s -- a-z0-9 -)
DATE=`date +%Y-%m-%d`
case "${1:-help}" in
help|--help)
command jekyll help
echo "Added by zsh plugin:"
echo " draft Create a new draft post."
echo " post Create a new post to publish immediately."
echo " publish Publish a draft post by name."
echo " edit Edit a post."
;;
draft)
if [ -z "${SLUG}" ] ; then
echo "slug is required."
return 1
fi
mkdir -p "${JEKYLL_DIR}/_drafts"
FILENAME="${JEKYLL_DIR}/_drafts/${SLUG}.md"
printf -- "${JTEMPLATE}" "${TITLE}" > "${FILENAME}"
vim "${FILENAME}" '+$' '+startinsert'
;;
post)
if [ -z "${SLUG}" ] ; then
echo "slug is required."
return 1
fi
FILENAME="${JEKYLL_DIR}/_posts/${DATE}-${SLUG}.md"
printf -- "${JTEMPLATE}" "${TITLE}" > "${FILENAME}"
_jekyll_set_date "${FILENAME}" "${DATE}"
vim "${FILENAME}" '+$' '+startinsert'
;;
publish)
if [ -z "${SLUG}" ] ; then
echo "slug is required."
return 1
fi
FILENAME=$(_jekyll_find_post "${TITLE}" "${SLUG}" "${JEKYLL_DIR}")
if [ $? -ne 0 ] ; then
return 1
fi
if ! [[ "${FILENAME}" =~ '/_drafts/' ]] ; then
echo "${FILENAME} is not a draft." >&2
return 1
fi
NEWNAME=$(echo "${FILENAME}" | sed "s/_drafts\//_posts\/${DATE}-/")
mv "${FILENAME}" "${NEWNAME}"
_jekyll_set_date "${NEWNAME}" "${DATE}"
;;
edit)
if [ -z "${SLUG}" ] ; then
echo "slug is required."
return 1
fi
FILENAME=$(_jekyll_find_post "${TITLE}" "${SLUG}" "${JEKYLL_DIR}")
if [ $? -ne 0 ] ; then
return
fi
vim "${FILENAME}"
;;
*)
command jekyll "$@"
;;
esac
}

View File

@@ -0,0 +1,58 @@
#compdef msfconsole
# ------------------------------------------------------------------------------
# Copyright (c) 2014 Spencer McIntyre
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the project nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for the Metasploit Framework's msfconsole command
# (http://www.metasploit.com/).
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Spencer McIntyre
#
# ------------------------------------------------------------------------------
_arguments \
{-a,--ask}"[Ask before exiting Metasploit or accept 'exit -y']" \
"-c[Load the specified configuration file]:configuration file:_files" \
{-d,--defanged}"[Execute the console as defanged]" \
{-E,--environment}"[Specify the database environment to load from the configuration]:environment:(production development)" \
{-h,--help}"[Show help text]" \
{-L,--real-readline}"[Use the system Readline library instead of RbReadline]" \
{-M,--migration-path}"[Specify a directory containing additional DB migrations]:directory:_files -/" \
{-m,--module-path}"[Specifies an additional module search path]:search path:_files -/" \
{-n,--no-database}"[Disable database support]" \
{-o,--output}"[Output to the specified file]:output file" \
{-p,--plugin}"[Load a plugin on startup]:plugin file:_files" \
{-q,--quiet}"[Do not print the banner on start up]" \
{-r,--resource}"[Execute the specified resource file]:resource file:_files" \
{-v,--version}"[Show version]" \
{-x,--execute-command}"[Execute the specified string as console commands]:commands" \
{-y,--yaml}"[Specify a YAML file containing database settings]:yaml file:_files"

View File

@@ -0,0 +1,100 @@
#compdef msfvenom
# ------------------------------------------------------------------------------
# Copyright (c) 2014 Spencer McIntyre
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the project nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------
# Description
# -----------
#
# Completion script for the Metasploit Framework's msfvenom command
# (http://www.metasploit.com/).
#
# ------------------------------------------------------------------------------
# Authors
# -------
#
# * Spencer McIntyre
#
# ------------------------------------------------------------------------------
_msfvenom_encoders_list=(
'cmd/generic_sh'
'cmd/ifs'
'cmd/powershell_base64'
'cmd/printf_php_mq'
'generic/eicar'
'generic/none'
'mipsbe/byte_xori'
'mipsbe/longxor'
'mipsle/byte_xori'
'mipsle/longxor'
'php/base64'
'ppc/longxor'
'ppc/longxor_tag'
'sparc/longxor_tag'
'x64/xor'
'x86/add_sub'
'x86/alpha_mixed'
'x86/alpha_upper'
'x86/avoid_underscore_tolower'
'x86/avoid_utf8_tolower'
'x86/bloxor'
'x86/call4_dword_xor'
'x86/context_cpuid'
'x86/context_stat'
'x86/context_time'
'x86/countdown'
'x86/fnstenv_mov'
'x86/jmp_call_additive'
'x86/nonalpha'
'x86/nonupper'
'x86/opt_sub'
'x86/shikata_ga_nai'
'x86/single_static_bit'
'x86/unicode_mixed'
'x86/unicode_upper'
)
_msfvenom_encoder() {
_describe -t encoders 'available encoders' _msfvenom_encoders_list || compadd "$@"
}
_arguments \
{-a,--arch}"[The architecture to encode as]:architecture:(cmd generic mipsbe mipsle php ppc sparc x64 x86)" \
{-b,--bad-chars}"[The list of characters to avoid, example: '\x00\xff']:bad characters" \
{-c,--add-code}"[Specify an additional win32 shellcode file to include]:shellcode file:_files" \
{-e,--encoder}"[The encoder to use]:encoder:_msfvenom_encoder" \
{-f,--format}"[Output format]:output format:(bash c csharp dw dword java js_be js_le num perl pl powershell ps1 py python raw rb ruby sh vbapplication vbscript asp aspx aspx-exe dll elf exe exe-only exe-service exe-small loop-vbs macho msi msi-nouac osx-app psh psh-net psh-reflection vba vba-exe vbs war)" \
"--help-formats[List available formats]" \
{-h,--help}"[Help banner]" \
{-i,--iterations}"[The number of times to encode the payload]:iterations" \
{-k,--keep}"[Preserve the template behavior and inject the payload as a new thread]" \
{-l,--list}"[List a module type]:module type:(all encoders nops payloads)" \
{-n,--nopsled}"[Prepend a nopsled of length size on to the payload]:nopsled length" \
{-o,--options}"[List the payload's standard options]" \
"--platform[The platform to encode for]:target platform:(android bsd bsdi java linux netware nodejs osx php python ruby solaris unix win)" \
{-p,--payload}"[Payload to use. Specify a '-' or stdin to use custom payloads]:payload" \
{-s,--space}"[The maximum size of the resulting payload]:length" \
{-x,--template}"[Specify an alternate executable template]:template file:_files"

View File

@@ -0,0 +1,161 @@
#compdef virsh
# Copyright (c) 2015, Jan-Philipp Litza <janphilipp@litza.de>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the <organization> nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
local -a args reply
function _virsh_domains() {
local -a out
local description="${(P)#}"
shift -p
local domaintype="${description/running/}"
out=( ${(f)"$(_call_program commands virsh list --name ${domaintype:+--$domaintype} 2>&1)"} )
if (( $#out == 0 )); then
_message "No $description domains"
else
_describe "$description domains" out "$@"
fi
return $?
}
_virsh() {
_arguments \
{-c,--connect}':hypervisor connection URI:_files' \
{-d,--debug}':debug level:( 0 1 2 3 4 )' \
{-e,--escape}':escape character for console:' \
{-h,--help}'[show help]' \
{-k,--keepalive-interval}':keepalive interval in seconds, 0 for disable:' \
{-K,--keepalive-count}':number of possible missed keepalive messages:' \
{-l,--log}'[output logging to file]:logfile:_files' \
{-q,--quiet}'[quiet mode]' \
{-r,--readonly}'[connect readonly]' \
{-t,--timing}'[print timing information]' \
'-v:show version' \
'-V:long version' \
'--version[show version]:type:( short long )' \
'::virsh command:_virsh_subcommand' \
'*::virsh command arguments:_virsh_subcommand_args'
}
_virsh_domain_or_file() {
_alternative \
"domains:domains:_virsh_domains ${1:-all}" \
"files:files:_files"
}
_virsh_fallback_command() {
domains() {
echo "$1 domains:_virsh_domains $1"
}
local files="file:_files"
local -A cmd_args
cmd_args=(
attach-device "$files"
autostart "$(domains all)"
cd "dirs:_dirs"
console "$(domains running)"
cpu-baseline "$files"
cpu-compare "$files"
create "$files"
start "$(domains inactive)"
destroy "$(domains running)"
detach-device "$(domains all)"
define "$files"
domid "$(domains all)"
domuuid "$(domains all)"
dominfo "$(domains all)"
domjobinfo "$(domains all)"
domjobabort "$(domains all)"
domname "$(domains all)"
domstate "$(domains all)"
dommemstat "$(domains all)"
dumpxml "$(domains all)"
edit "$(domains all)"
list "$(domains all)"
net-create "$files"
net-define "$files"
managedsave "$(domains running)"
managedsave-remove "$(domains all)"
nwfilter-define "$files"
pool-create "$files"
pool-define "$files"
secret-define "$files"
reboot "$(domains running)"
reset "$(domains running)"
restore "$files"
resume "$(domains running)"
send-key "$(domains running)"
setmem "$(domains all)"
setmaxmem "$(domains all)"
setvcpus "$(domains all)"
shutdown "$(domains running)"
suspend "$(domains running)"
ttyconsole "$(domains running)"
undefine "$(domains inactive)"
vcpuinfo "$(domains running)"
vncdisplay "$(domains running)"
snapshot-current "$(domains all)"
snapshot-list "$(domains all)"
)
local cmd="$1"
local -a options
options=(
${${(M)${(f)"$(_call_program commands virsh help $cmd 2>&1)"}:# -*}/#(#b) ([a-z-]##) ##([^[:space:]]*)/$match[1]:$match[2]}
)
if (( $+cmd_args[$cmd] )); then
options+=( ":$cmd_args[$cmd]" )
else
options+=( ":$(domains all)" ":$files" )
fi
_arguments "$options[@]"
}
_virsh_build_cmds() {
(( $+_virsh_cmds )) || _virsh_cmds=(
${${(M)${(f)"$(_call_program commands virsh help 2>&1)"}:# *}/#(#b) ([a-z-]##) ##([^[:space:]])/$match[1]:$match[2]}
)
}
_virsh_subcommand() {
_virsh_build_cmds
_describe 'virsh command' _virsh_cmds
}
_virsh_subcommand_args() {
_virsh_build_cmds
local curcontext="$curcontext"
cmd="${${_virsh_cmds[(r)$words[1]:*]%%:*}:-${(k)_virsh_syns[(r)(*:|)$words[1](:*|)]}}"
if (( $#cmd )); then
curcontext="${curcontext%:*:*}:virsh-${cmd}:"
_virsh_fallback_command "$cmd"
else
_message "unknown virsh command; $words[1]"
fi
}
_virsh "$@"