summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/1password/1password.plugin.zsh51
-rw-r--r--plugins/1password/README.md11
-rw-r--r--plugins/1password/_opswd19
-rw-r--r--plugins/1password/opswd78
-rw-r--r--plugins/autoenv/autoenv.plugin.zsh1
-rw-r--r--plugins/aws/aws.plugin.zsh2
-rw-r--r--plugins/bazel/README.md17
-rw-r--r--plugins/cargo/cargo.plugin.zsh8
-rw-r--r--plugins/charm/README.md9
-rw-r--r--plugins/charm/charm.plugin.zsh14
-rw-r--r--plugins/coffee/_coffee12
-rw-r--r--plugins/copydir/README.md9
-rw-r--r--plugins/copydir/copydir.plugin.zsh8
-rw-r--r--plugins/copypath/README.md15
-rw-r--r--plugins/copypath/copypath.plugin.zsh15
-rw-r--r--plugins/dash/dash.plugin.zsh132
-rw-r--r--plugins/deno/deno.plugin.zsh13
-rw-r--r--plugins/fnm/fnm.plugin.zsh13
-rw-r--r--plugins/fzf/README.md2
-rw-r--r--plugins/fzf/fzf.plugin.zsh33
-rw-r--r--plugins/gh/gh.plugin.zsh13
-rw-r--r--plugins/gpg-agent/gpg-agent.plugin.zsh2
-rw-r--r--plugins/helm/helm.plugin.zsh13
-rw-r--r--plugins/kubectl/README.md13
-rw-r--r--plugins/kubectl/kubectl.plugin.zsh23
-rw-r--r--plugins/rails/README.md122
-rw-r--r--plugins/rails/_rails688
-rw-r--r--plugins/rails/rails.plugin.zsh84
-rw-r--r--plugins/rbw/rbw.plugin.zsh6
-rw-r--r--plugins/rust/rust.plugin.zsh5
-rw-r--r--plugins/rustup/rustup.plugin.zsh8
-rw-r--r--plugins/rvm/README.md1
-rw-r--r--plugins/rvm/rvm.plugin.zsh1
-rw-r--r--plugins/sprunge/README.md8
-rw-r--r--plugins/sprunge/sprunge.plugin.zsh4
-rw-r--r--plugins/svn-fast-info/README.md4
-rw-r--r--plugins/terraform/README.md1
-rw-r--r--plugins/terraform/terraform.plugin.zsh1
-rw-r--r--plugins/toolbox/README.md19
-rw-r--r--plugins/toolbox/kubectx.plugin.zsh3
-rw-r--r--plugins/volta/volta.plugin.zsh5
-rw-r--r--plugins/zsh-navigation-tools/README.md2
42 files changed, 1107 insertions, 381 deletions
diff --git a/plugins/1password/1password.plugin.zsh b/plugins/1password/1password.plugin.zsh
index 9398b02b4..941523ca8 100644
--- a/plugins/1password/1password.plugin.zsh
+++ b/plugins/1password/1password.plugin.zsh
@@ -1,46 +1,9 @@
-if (( ${+commands[op]} )); then
- eval "$(op completion zsh)"
- compdef _op op
-fi
+# Do nothing if op is not installed
+(( ${+commands[op]} )) || return
-# opswd puts the password of the named service into the clipboard. If there's a
-# one time password, it will be copied into the clipboard after 10 seconds. The
-# clipboard is cleared after another 20 seconds.
-function opswd() {
- if [[ $# -lt 1 ]]; then
- echo "Usage: opswd <service>"
- return 1
- fi
+# Load op completion
+eval "$(op completion zsh)"
+compdef _op op
- local service=$1
-
- # If not logged in, print error and return
- op list users > /dev/null || return
-
- local password
- # Copy the password to the clipboard
- if ! password=$(op get item "$service" --fields password 2>/dev/null); then
- echo "error: could not obtain password for $service"
- return 1
- fi
-
- echo -n "$password" | clipcopy
- echo "✔ password for $service copied to clipboard"
-
- # If there's a one time password, copy it to the clipboard after 5 seconds
- local totp
- if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
- sleep 10 && echo -n "$totp" | clipcopy
- echo "✔ TOTP for $service copied to clipboard"
- fi
-
- (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
-}
-
-function _opswd() {
- local -a services
- services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
- [[ -z "$services" ]] || compadd -a -- services
-}
-
-compdef _opswd opswd
+# Load opswd function
+autoload -Uz opswd
diff --git a/plugins/1password/README.md b/plugins/1password/README.md
index f6790ca8a..f6854da53 100644
--- a/plugins/1password/README.md
+++ b/plugins/1password/README.md
@@ -25,11 +25,14 @@ which service you want to get.
For example, `opswd github.com` will put your GitHub password into your clipboard, and if
a TOTP is available, it will be copied to the clipboard after 10 seconds.
-> NOTE: you need to be logged in for `opswd` to work. See:
+> NOTE: you need to be signed in for `opswd` to work. If you are using biometric unlock,
+> 1Password CLI will automatically prompt you to sign in. See:
>
-> - [Sign in or out](https://support.1password.com/command-line/#sign-in-or-out)
-> - [Session management](https://support.1password.com/command-line/#appendix-session-management)
+> - [Get started with 1Password CLI 2: Sign in](https://developer.1password.com/docs/cli/get-started#sign-in)
+> - [Sign in to your 1Password account manually](https://developer.1password.com/docs/cli/sign-in-manually)
## Requirements
-- [1Password's command line utility](https://1password.com/downloads/command-line/).
+- [1Password CLI 2](https://developer.1password.com/docs/cli/get-started#install)
+
+ > NOTE: if you're using 1Password CLI 1, [see how to upgrade to CLI 2](https://developer.1password.com/docs/cli/upgrade).
diff --git a/plugins/1password/_opswd b/plugins/1password/_opswd
new file mode 100644
index 000000000..dbc094f87
--- /dev/null
+++ b/plugins/1password/_opswd
@@ -0,0 +1,19 @@
+#compdef opswd
+
+function _opswd() {
+ local -a services
+ services=("${(@f)$(op item list --categories Login --cache 2>/dev/null | awk 'NR != 1 { print $2 }')}")
+ [[ -z "$services" ]] || compadd -a -- services
+}
+
+# TODO: 2022-03-26: Remove support for op CLI 1
+autoload -Uz is-at-least
+is-at-least 2.0.0 $(op --version) || {
+ function _opswd() {
+ local -a services
+ services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}")
+ [[ -z "$services" ]] || compadd -a -- services
+ }
+}
+
+_opswd "$@"
diff --git a/plugins/1password/opswd b/plugins/1password/opswd
new file mode 100644
index 000000000..57672807e
--- /dev/null
+++ b/plugins/1password/opswd
@@ -0,0 +1,78 @@
+#autoload
+
+# opswd puts the password of the named service into the clipboard. If there's a
+# one time password, it will be copied into the clipboard after 10 seconds. The
+# clipboard is cleared after another 20 seconds.
+function opswd() {
+ if [[ $# -lt 1 ]]; then
+ echo "Usage: opswd <service>"
+ return 1
+ fi
+
+ local service=$1
+
+ # If not logged in, print error and return
+ op user list > /dev/null || return
+
+ local password
+ # Copy the password to the clipboard
+ if ! password=$(op item get "$service" --fields password 2>/dev/null); then
+ echo "error: could not obtain password for $service"
+ return 1
+ fi
+
+ echo -n "$password" | clipcopy
+ echo "✔ password for $service copied to clipboard"
+
+ # If there's a one time password, copy it to the clipboard after 10 seconds
+ local totp
+ if totp=$(op item get --otp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
+ sleep 10 && echo -n "$totp" | clipcopy
+ echo "✔ TOTP for $service copied to clipboard"
+ fi
+
+ (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
+}
+
+# TODO: 2022-03-26: Remove support for op CLI 1
+autoload -Uz is-at-least
+is-at-least 2.0.0 $(op --version) || {
+ print -ru2 ${(%):-"%F{yellow}opswd: usage with op version $(op --version) is deprecated. Upgrade to CLI 2 and reload zsh.
+For instructions, see https://developer.1password.com/docs/cli/upgrade.%f"}
+
+ # opswd puts the password of the named service into the clipboard. If there's a
+ # one time password, it will be copied into the clipboard after 10 seconds. The
+ # clipboard is cleared after another 20 seconds.
+ function opswd() {
+ if [[ $# -lt 1 ]]; then
+ echo "Usage: opswd <service>"
+ return 1
+ fi
+
+ local service=$1
+
+ # If not logged in, print error and return
+ op list users > /dev/null || return
+
+ local password
+ # Copy the password to the clipboard
+ if ! password=$(op get item "$service" --fields password 2>/dev/null); then
+ echo "error: could not obtain password for $service"
+ return 1
+ fi
+
+ echo -n "$password" | clipcopy
+ echo "✔ password for $service copied to clipboard"
+
+ # If there's a one time password, copy it to the clipboard after 5 seconds
+ local totp
+ if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then
+ sleep 10 && echo -n "$totp" | clipcopy
+ echo "✔ TOTP for $service copied to clipboard"
+ fi
+
+ (sleep 20 && clipcopy </dev/null 2>/dev/null) &!
+ }
+}
+
+opswd "$@"
diff --git a/plugins/autoenv/autoenv.plugin.zsh b/plugins/autoenv/autoenv.plugin.zsh
index bd03cf4b2..229a8a834 100644
--- a/plugins/autoenv/autoenv.plugin.zsh
+++ b/plugins/autoenv/autoenv.plugin.zsh
@@ -13,6 +13,7 @@ if ! type autoenv_init >/dev/null; then
~/.autoenv
~/.local/bin
/usr/local/opt/autoenv
+ /opt/homebrew/opt/autoenv
/usr/local/bin
/usr/share/autoenv-git
~/Library/Python/bin
diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
index 920a7139d..b8625d7ac 100644
--- a/plugins/aws/aws.plugin.zsh
+++ b/plugins/aws/aws.plugin.zsh
@@ -158,7 +158,7 @@ compctl -K _aws_profiles asp acp aws_change_access_key
# AWS prompt
function aws_prompt_info() {
[[ -n "$AWS_PROFILE" ]] || return
- echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE:gs/%/%%}${ZSH_THEME_AWS_SUFFIX:=>}"
+ echo "${ZSH_THEME_AWS_PREFIX=<aws:}${AWS_PROFILE:gs/%/%%}${ZSH_THEME_AWS_SUFFIX=>}"
}
if [[ "$SHOW_AWS_PROMPT" != false && "$RPROMPT" != *'$(aws_prompt_info)'* ]]; then
diff --git a/plugins/bazel/README.md b/plugins/bazel/README.md
index e5ffe6ea1..fc375d219 100644
--- a/plugins/bazel/README.md
+++ b/plugins/bazel/README.md
@@ -1,5 +1,14 @@
-## Bazel autocomplete plugin
+# Bazel plugin
-A copy of the completion script from the
-[bazelbuild/bazel](https://github.com/bazelbuild/bazel/master/scripts/zsh_completion/_bazel)
-git repo.
+This plugin adds completion for [bazel](https://bazel.build), an open-source build and
+test tool that scalably supports multi-language and multi-platform projects.
+
+To use it, add `bazel` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... bazel)
+```
+
+The plugin has a copy of [the completion script from the git repository][1].
+
+[1]: https://github.com/bazelbuild/bazel/blob/master/scripts/zsh_completion/_bazel
diff --git a/plugins/cargo/cargo.plugin.zsh b/plugins/cargo/cargo.plugin.zsh
index e4b338207..692025e8f 100644
--- a/plugins/cargo/cargo.plugin.zsh
+++ b/plugins/cargo/cargo.plugin.zsh
@@ -1,14 +1,6 @@
print ${(%):-'%F{yellow}The `cargo` plugin is deprecated and has been moved to the `rust` plugin.'}
print ${(%):-'Please update your .zshrc to use the `%Brust%b` plugin instead.%f'}
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated completion file
-command rm -f "${0:A:h}/_cargo" "$ZSH_CACHE_DIR/cargo_version"
-
(( ${fpath[(Ie)$ZSH/plugins/rust]} )) || {
fpath=("$ZSH/plugins/rust" $fpath)
source "$ZSH/plugins/rust/rust.plugin.zsh"
diff --git a/plugins/charm/README.md b/plugins/charm/README.md
new file mode 100644
index 000000000..f237dceeb
--- /dev/null
+++ b/plugins/charm/README.md
@@ -0,0 +1,9 @@
+# Charm plugin
+
+This plugin adds completion for the [charm](https://github.com/charmbracelet/charm) CLI.
+
+To use it, add `charm` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... charm)
+```
diff --git a/plugins/charm/charm.plugin.zsh b/plugins/charm/charm.plugin.zsh
new file mode 100644
index 000000000..52361ce95
--- /dev/null
+++ b/plugins/charm/charm.plugin.zsh
@@ -0,0 +1,14 @@
+# Autocompletion for the Charm CLI (charm).
+if (( ! $+commands[charm] )); then
+ return
+fi
+
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it to `charm`. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_charm" ]]; then
+ typeset -g -A _comps
+ autoload -Uz _charm
+ _comps[charm]=_charm
+fi
+
+charm completion zsh >| "$ZSH_CACHE_DIR/completions/_charm" &|
diff --git a/plugins/coffee/_coffee b/plugins/coffee/_coffee
index 5e52b30e6..e2814f7ba 100644
--- a/plugins/coffee/_coffee
+++ b/plugins/coffee/_coffee
@@ -39,14 +39,14 @@
#
# ------------------------------------------------------------------------------
-local curcontext="$curcontext" state line ret=1 version opts first second third
+local curcontext="$curcontext" state line ret=1 version
+local -a opts
typeset -A opt_args
-version=(${(f)"$(_call_program version $words[1] --version)"})
+version=(${(f)"$(_call_program version $words[1] --version)"}) || return ret
version=${${(z)${version[1]}}[3]}
-first=$(echo $version|cut -d '.' -f 1)
-second=$(echo $version|cut -d '.' -f 2)
-third=$(echo $version|cut -d '.' -f 3)
-if (( $first < 2 )) && (( $second < 7 )) && (( $third < 3 ));then
+
+autoload -Uz is-at-least
+if ! is-at-least 1.6.3 "$version"; then
opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]'
'(-r --require)'{-r,--require}'[require a library before executing your script]:library')
fi
diff --git a/plugins/copydir/README.md b/plugins/copydir/README.md
index 594bf1065..cf24b789f 100644
--- a/plugins/copydir/README.md
+++ b/plugins/copydir/README.md
@@ -1,10 +1,3 @@
# copydir plugin
-Copies the path of your current folder to the system clipboard.
-
-To use, add `copydir` to your plugins array:
-```
-plugins=(... copydir)
-```
-
-Then use the command `copydir` to copy the $PWD.
+This plugin is deprecated. Use the [`copypath` plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/copypath) instead.
diff --git a/plugins/copydir/copydir.plugin.zsh b/plugins/copydir/copydir.plugin.zsh
index c45106240..a2b489ec0 100644
--- a/plugins/copydir/copydir.plugin.zsh
+++ b/plugins/copydir/copydir.plugin.zsh
@@ -1,5 +1,7 @@
-# Copies the pathname of the current directory to the system or X Windows clipboard
+echo ${(%):-'%F{yellow}The `%Bcopydir%b` plugin is deprecated. Use the `%Bcopypath%b` plugin instead.%f'}
+source "$ZSH/plugins/copypath/copypath.plugin.zsh"
+
+# TODO: 2022-02-22: Remove deprecated copydir function.
function copydir {
- emulate -L zsh
- print -n $PWD | clipcopy
+ copypath
}
diff --git a/plugins/copypath/README.md b/plugins/copypath/README.md
new file mode 100644
index 000000000..1e5a463a6
--- /dev/null
+++ b/plugins/copypath/README.md
@@ -0,0 +1,15 @@
+# copypath plugin
+
+Copies the path of given directory or file to the system clipboard.
+
+To use it, add `copypath` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... copypath)
+```
+
+## Usage
+
+- `copypath`: copies the absolute path of the current directory.
+
+- `copypath <file_or_directory>`: copies the absolute path of the given file.
diff --git a/plugins/copypath/copypath.plugin.zsh b/plugins/copypath/copypath.plugin.zsh
new file mode 100644
index 000000000..8fe0a85f4
--- /dev/null
+++ b/plugins/copypath/copypath.plugin.zsh
@@ -0,0 +1,15 @@
+# Copies the path of given directory or file to the system or X Windows clipboard.
+# Copy current directory if no parameter.
+function copypath {
+ # If no argument passed, use current directory
+ local file="${1:-.}"
+
+ # If argument is not an absolute path, prepend $PWD
+ [[ $file = /* ]] || file="$PWD/$file"
+
+ # Copy the absolute path without resolving symlinks
+ # If clipcopy fails, exit the function with an error
+ print -n "${file:a}" | clipcopy || return 1
+
+ echo ${(%):-"%B${file:a}%b copied to clipboard."}
+}
diff --git a/plugins/dash/dash.plugin.zsh b/plugins/dash/dash.plugin.zsh
index ace2e33c1..f6801a870 100644
--- a/plugins/dash/dash.plugin.zsh
+++ b/plugins/dash/dash.plugin.zsh
@@ -1,80 +1,84 @@
# Usage: dash [keyword:]query
-dash() { open dash://"$*" }
+dash() { open -a Dash.app dash://"$*" }
compdef _dash dash
_dash() {
# No sense doing this for anything except the 2nd position and if we haven't
# specified which docset to query against
- if [[ $CURRENT -eq 2 && ! "$words[2]" =~ ":" ]]; then
- local -a _all_docsets
- _all_docsets=()
- # Use defaults to get the array of docsets from preferences
- # Have to smash it into one big line so that each docset is an element of
- # our DOCSETS array
- DOCSETS=("${(@f)$(defaults read com.kapeli.dashdoc docsets | tr -d '\n' | grep -oE '\{.*?\}')}")
+ if [[ $CURRENT -ne 2 || "$words[2]" =~ ":" ]]; then
+ return
+ fi
- # remove all newlines since defaults prints so pretty like
- # Now get each docset and output each on their own line
- for doc in "$DOCSETS[@]"; do
- # Only output docsets that are actually enabled
- if [[ "`echo $doc | grep -Eo \"isEnabled = .*?;\" | sed 's/[^01]//g'`" == "0" ]]; then
- continue
+ local -aU docsets
+ docsets=()
+
+ # Use defaults to get the array of docsets from preferences
+ # Have to smash it into one big line so that each docset is an element of our docsets array
+ # Only output docsets that are actually enabled
+ local -a enabled_docsets
+ enabled_docsets=("${(@f)$(defaults read com.kapeli.dashdoc docsets \
+ | tr -d '\n' | grep -oE '\{.*?\}' | grep -E 'isEnabled = 1;')}")
+
+ local docset name keyword
+ # Now get each docset and output each on their own line
+ for docset in "$enabled_docsets[@]"; do
+ keyword=''
+ # Order of preference as explained to me by @kapeli via email
+ for locator in keyword suggestedKeyword platform; do
+ # Echo the docset, try to find the appropriate keyword
+ # Strip doublequotes and colon from any keyword so that everything has the
+ # same format when output (we'll add the colon in the completion)
+ if [[ "$docset" =~ "$locator = ([^;]*);" ]]; then
+ keyword="${match[1]//[\":]}"
fi
- keyword=''
+ if [[ -z "$keyword" ]]; then
+ continue
+ fi
- # Order of preference as explained to me by @kapeli via email
- KEYWORD_LOCATORS=(keyword suggestedKeyword platform)
- for locator in "$KEYWORD_LOCATORS[@]"; do
- # Echo the docset, try to find the appropriate keyword
- # Strip doublequotes and colon from any keyword so that everything has the
- # same format when output (we'll add the colon in the completion)
- keyword=`echo $doc | grep -Eo "$locator = .*?;" | sed -e "s/$locator = \(.*\);/\1/" -e "s/[\":]//g"`
- if [[ ! -z "$keyword" ]]; then
- # if we fall back to platform, we should do some checking per @kapeli
- if [[ "$locator" == "platform" ]]; then
- # Since these are the only special cases right now, let's not do the
- # expensive processing unless we have to
- if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then
- docsetName=`echo $doc | grep -Eo "docsetName = .*?;" | sed -e "s/docsetName = \(.*\);/\1/" -e "s/[\":]//g"`
- case "$keyword" in
- python)
- case "$docsetName" in
- "Python 2") keyword="python2" ;;
- "Python 3") keyword="python3" ;;
- esac ;;
- java)
- case "$docsetName" in
- "Java SE7") keyword="java7" ;;
- "Java SE6") keyword="java6" ;;
- "Java SE8") keyword="java8" ;;
- esac ;;
- qt)
- case "$docsetName" in
- "Qt 5") keyword="qt5" ;;
- "Qt 4"|Qt) keyword="qt4" ;;
- esac ;;
- cocos2d)
- case "$docsetName" in
- Cocos3D) keyword="cocos3d" ;;
- esac ;;
- esac
- fi
+ # if we fall back to platform, we should do some checking per @kapeli
+ if [[ "$locator" == "platform" ]]; then
+ # Since these are the only special cases right now, let's not do the
+ # expensive processing unless we have to
+ if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then
+ if [[ "$docset" =~ "docsetName = ([^;]*);" ]]; then
+ name="${match[1]//[\":]}"
+ case "$keyword" in
+ python)
+ case "$name" in
+ "Python 2") keyword="python2" ;;
+ "Python 3") keyword="python3" ;;
+ esac ;;
+ java)
+ case "$name" in
+ "Java SE7") keyword="java7" ;;
+ "Java SE6") keyword="java6" ;;
+ "Java SE8") keyword="java8" ;;
+ esac ;;
+ qt)
+ case "$name" in
+ "Qt 5") keyword="qt5" ;;
+ "Qt 4"|Qt) keyword="qt4" ;;
+ esac ;;
+ cocos2d)
+ case "$name" in
+ Cocos3D) keyword="cocos3d" ;;
+ esac ;;
+ esac
fi
-
- # Bail once we have a match
- break
fi
- done
-
- # If we have a keyword, add it to the list!
- if [[ ! -z "$keyword" ]]; then
- _all_docsets+=($keyword)
fi
+
+ # Bail once we have a match
+ break
done
- # special thanks to [arx] on #zsh for getting me sorted on this piece
- compadd -qS: -- "$_all_docsets[@]"
- return
- fi
+ # If we have a keyword, add it to the list!
+ if [[ -n "$keyword" ]]; then
+ docsets+=($keyword)
+ fi
+ done
+
+ # special thanks to [arx] on #zsh for getting me sorted on this piece
+ compadd -qS: -- "$docsets[@]"
}
diff --git a/plugins/deno/deno.plugin.zsh b/plugins/deno/deno.plugin.zsh
index 6c12bae13..7708f84df 100644
--- a/plugins/deno/deno.plugin.zsh
+++ b/plugins/deno/deno.plugin.zsh
@@ -16,19 +16,6 @@ if (( ! $+commands[deno] )); then
return
fi
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated files
-command rm -f "${0:A:h}/_deno" "$ZSH_CACHE_DIR/deno_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `deno`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_deno" ]]; then
diff --git a/plugins/fnm/fnm.plugin.zsh b/plugins/fnm/fnm.plugin.zsh
index 044e16a04..6219025cd 100644
--- a/plugins/fnm/fnm.plugin.zsh
+++ b/plugins/fnm/fnm.plugin.zsh
@@ -2,19 +2,6 @@ if (( ! $+commands[fnm] )); then
return
fi
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# remove old generated files
-command rm -f "${0:A:h}/_fnm" "$ZSH_CACHE_DIR/fnm_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `fnm`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_fnm" ]]; then
diff --git a/plugins/fzf/README.md b/plugins/fzf/README.md
index 15d4d31f3..beedf4690 100644
--- a/plugins/fzf/README.md
+++ b/plugins/fzf/README.md
@@ -31,8 +31,8 @@ export FZF_DEFAULT_COMMAND='<your fzf default command>'
If not set, the plugin will try to set it to these, in the order in which they're found:
-- [`rg`](https://github.com/BurntSushi/ripgrep)
- [`fd`](https://github.com/sharkdp/fd)
+- [`rg`](https://github.com/BurntSushi/ripgrep)
- [`ag`](https://github.com/ggreer/the_silver_searcher)
### `DISABLE_FZF_AUTO_COMPLETION`
diff --git a/plugins/fzf/fzf.plugin.zsh b/plugins/fzf/fzf.plugin.zsh
index 102605958..a946cf762 100644
--- a/plugins/fzf/fzf.plugin.zsh
+++ b/plugins/fzf/fzf.plugin.zsh
@@ -173,6 +173,32 @@ function fzf_setup_using_cygwin() {
return 0
}
+function fzf_setup_using_macports() {
+ # If the command is not found, the package isn't installed
+ (( $+commands[fzf] )) || return 1
+
+ # The fzf-zsh-completion package installs the auto-completion in
+ local completions="/opt/local/share/zsh/site-functions/fzf"
+ # The fzf-zsh-completion package installs the key-bindings file in
+ local key_bindings="/opt/local/share/fzf/shell/key-bindings.zsh"
+
+ if [[ ! -f "$completions" || ! -f "$key_bindings" ]]; then
+ return 1
+ fi
+
+ # Auto-completion
+ if [[ -o interactive && "$DISABLE_FZF_AUTO_COMPLETION" != "true" ]]; then
+ source "$completions" 2>/dev/null
+ fi
+
+ # Key bindings
+ if [[ "$DISABLE_FZF_KEY_BINDINGS" != "true" ]]; then
+ source "$key_bindings" 2>/dev/null
+ fi
+
+ return 0
+}
+
# Indicate to user that fzf installation not found if nothing worked
function fzf_setup_error() {
cat >&2 <<'EOF'
@@ -185,16 +211,17 @@ fzf_setup_using_openbsd \
|| fzf_setup_using_debian \
|| fzf_setup_using_opensuse \
|| fzf_setup_using_cygwin \
+ || fzf_setup_using_macports \
|| fzf_setup_using_base_dir \
|| fzf_setup_error
unset -f -m 'fzf_setup_*'
if [[ -z "$FZF_DEFAULT_COMMAND" ]]; then
- if (( $+commands[rg] )); then
- export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"'
- elif (( $+commands[fd] )); then
+ if (( $+commands[fd] )); then
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
+ elif (( $+commands[rg] )); then
+ export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"'
elif (( $+commands[ag] )); then
export FZF_DEFAULT_COMMAND='ag -l --hidden -g "" --ignore .git'
fi
diff --git a/plugins/gh/gh.plugin.zsh b/plugins/gh/gh.plugin.zsh
index 9263220ca..1d8d84c55 100644
--- a/plugins/gh/gh.plugin.zsh
+++ b/plugins/gh/gh.plugin.zsh
@@ -3,19 +3,6 @@ if (( ! $+commands[gh] )); then
return
fi
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated files
-command rm -f "${0:A:h}/_gh" "$ZSH_CACHE_DIR/gh_version"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `gh`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_gh" ]]; then
diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index 0adc8de5d..1f4be20b0 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -9,7 +9,7 @@ autoload -U add-zsh-hook
add-zsh-hook preexec _gpg-agent_update-tty_preexec
# If enable-ssh-support is set, fix ssh agent integration
-if [[ $(gpgconf --list-options gpg-agent | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then
+if [[ $(gpgconf --list-options gpg-agent 2>/dev/null | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then
unset SSH_AGENT_PID
if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
diff --git a/plugins/helm/helm.plugin.zsh b/plugins/helm/helm.plugin.zsh
index cadfa551a..151c43d88 100644
--- a/plugins/helm/helm.plugin.zsh
+++ b/plugins/helm/helm.plugin.zsh
@@ -2,21 +2,12 @@ if (( ! $+commands[helm] )); then
return
fi
-# TODO: 2021-12-28: delete this block
-# Remove old generated file
-command rm -f "${ZSH_CACHE_DIR}/helm_completion"
-
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file does not exist, generate it and then source it
# Otherwise, source it and regenerate in the background
if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then
- helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm"
+ helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null
source "$ZSH_CACHE_DIR/completions/_helm"
else
source "$ZSH_CACHE_DIR/completions/_helm"
- helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm" &|
+ helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null &|
fi
diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md
index f6651c8cd..579a90b3b 100644
--- a/plugins/kubectl/README.md
+++ b/plugins/kubectl/README.md
@@ -22,7 +22,7 @@ plugins=(... kubectl)
| kcsc | `kubectl config set-context` | Set a context entry in kubeconfig |
| kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig |
| kccc | `kubectl config current-context` | Display the current-context |
-| kcgc | `kubectl config get-contexts` | List of contexts available
+| kcgc | `kubectl config get-contexts` | List of contexts available |
| | | **General aliases** |
| kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector |
| kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument |
@@ -71,9 +71,11 @@ plugins=(... kubectl)
| kdeld | `kubectl delete deployment` | Delete the deployment |
| ksd | `kubectl scale deployment` | Scale a deployment |
| krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment |
-| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
+| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime |
| | | **Rollout management** |
-| kgrs | `kubectl get rs` | To see the ReplicaSet `rs` created by the deployment |
+| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment |
+| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail |
+| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor |
| krh | `kubectl rollout history` | Check the revisions of this deployment |
| kru | `kubectl rollout undo` | Rollback to the previous revision |
| | | **Port forwarding** |
@@ -120,6 +122,11 @@ plugins=(... kubectl)
| kecj | `kubectl edit cronjob` | Edit CronJob from the default editor |
| kdcj | `kubectl describe cronjob` | Describe a CronJob in details |
| kdelcj | `kubectl delete cronjob` | Delete the CronJob |
+| | | **Job management** |
+| kgj | `kubectl get job` | List all Job in ps output format |
+| kej | `kubectl edit job` | Edit a Job in details |
+| kdj | `kubectl describe job` | Describe the Job |
+| kdelj | `kubectl delete job` | Delete the Job |
## Wrappers
diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index eed5727d1..095d2b328 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -1,21 +1,12 @@
if (( $+commands[kubectl] )); then
- # TODO: 2022-01-05: remove this block
- # remove old generated files
- command rm -f "$ZSH_CACHE_DIR/kubectl_completion"
-
- # TODO: 2022-01-05: remove this bit of code as it exists in oh-my-zsh.sh
- # Add completions folder in $ZSH_CACHE_DIR
- command mkdir -p "$ZSH_CACHE_DIR/completions"
- (( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file does not exist, generate it and then source it
# Otherwise, source it and regenerate in the background
if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then
- kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl"
+ kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null
source "$ZSH_CACHE_DIR/completions/_kubectl"
else
source "$ZSH_CACHE_DIR/completions/_kubectl"
- kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl" &|
+ kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null &|
fi
fi
@@ -112,7 +103,9 @@ function kres(){
}
# Rollout management.
-alias kgrs='kubectl get rs'
+alias kgrs='kubectl get replicaset'
+alias kdrs='kubectl describe replicaset'
+alias kers='kubectl edit replicaset'
alias krh='kubectl rollout history'
alias kru='kubectl rollout undo'
@@ -178,6 +171,12 @@ alias kecj='kubectl edit cronjob'
alias kdcj='kubectl describe cronjob'
alias kdelcj='kubectl delete cronjob'
+# Job management.
+alias kgj='kubectl get job'
+alias kej='kubectl edit job'
+alias kdj='kubectl describe job'
+alias kdelj='kubectl delete job'
+
# Only run if the user actually has kubectl installed
if (( ${+_comps[kubectl]} )); then
function kj() { kubectl "$@" -o json | jq; }
diff --git a/plugins/rails/README.md b/plugins/rails/README.md
index efdb8f8ba..fa66750f0 100644
--- a/plugins/rails/README.md
+++ b/plugins/rails/README.md
@@ -1,6 +1,7 @@
# Rails
-This plugin adds completion for [Ruby On Rails Framework](https://rubyonrails.org/) and [Rake](https://ruby.github.io/rake/) commands, as well as some aliases for logs and environment variables.
+This plugin adds completion for [Ruby On Rails Framework](https://rubyonrails.org/) and
+[Rake](https://ruby.github.io/rake/) commands, as well as some aliases for logs and environment variables.
To use it, add `rails` to the plugins array in your zshrc file:
@@ -12,47 +13,52 @@ plugins=(... rails)
### Rails aliases
-| Alias | Command | Description |
-|-------|----------------------------|----------------------------------------------------|
-| `rc` | `rails console` | Interact with your Rails app from the CLI |
-| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data |
-| `rd` | `rails destroy` | Undo a generate operation |
-| `rdb` | `rails dbconsole` | Interact with your db from the console |
-| `rgen`| `rails generate` | Generate boilerplate code |
-| `rgm` | `rails generate migration` | Generate a db migration |
-| `rp` | `rails plugin` | Run a Rails plugin command |
-| `rr` | `rails routes` | List all defined routes |
-| `rrg` | `rails routes \| grep` | List and filter the defined routes |
-| `ru` | `rails runner` | Run Ruby code in the context of Rails |
-| `rs` | `rails server` | Launch a web server |
-| `rsd` | `rails server --debugger` | Launch a web server with debugger |
-| `rsp` | `rails server --port` | Launch a web server and specify the listening port |
+| Alias | Command | Description |
+| ------- | -------------------------------- | ------------------------------------------------------ |
+| `rc` | `rails console` | Interact with your Rails app from the CLI |
+| `rcs` | `rails console --sandbox` | Test code in a sandbox, without changing any data |
+| `rd` | `rails destroy` | Undo a generate operation |
+| `rdb` | `rails dbconsole` | Interact with your db from the console |
+| `rdc` | `rails db:create` | Create the database |
+| `rdd` | `rails db:drop` | Delete the database |
+| `rdm` | `rails db:migrate` | Run pending db migrations |
+| `rdmd` | `rails db:migrate:down` | Undo specific db migration |
+| `rdmr` | `rails db:migrate:redo` | Redo specific db migration |
+| `rdms` | `rails db:migrate:status` | Show current db migration status |
+| `rdmtc` | `rails db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rdmu` | `rails db:migrate:up` | Run specific db migration |
+| `rdr` | `rails db:rollback` | Roll back the last migration |
+| `rdrs` | `rails db:reset` | Delete the database and set it up again |
+| `rds` | `rails db:seed` | Seed the database |
+| `rdsl` | `rails db:schema:load` | Load the database schema |
+| `rdtc` | `rails db:test:clone` | Clone the database into the test database |
+| `rdtp` | `rails db:test:prepare` | Duplicate the db schema into your test database |
+| `rgen` | `rails generate` | Generate boilerplate code |
+| `rgm` | `rails generate migration` | Generate a db migration |
+| `rlc` | `rails log:clear` | Clear Rails logs |
+| `rmd` | `rails middleware` | Interact with Rails middlewares |
+| `rn` | `rails notes` | Search for notes (`FIXME`, `TODO`) in code comments |
+| `rp` | `rails plugin` | Run a Rails plugin command |
+| `rr` | `rails routes` | List all defined routes |
+| `rrg` | `rails routes \| grep` | List and filter the defined routes |
+| `rs` | `rails server` | Launch a web server |
+| `rsb` | `rails server --bind` | Launch a web server binding it to a specific IP |
+| `rsd` | `rails server --debugger` | Launch a web server with debugger |
+| `rsp` | `rails server --port` | Launch a web server and specify the listening port |
+| `rsts` | `rails stats` | Print code statistics |
+| `rt` | `rails test` | Run Rails tests |
+| `ru` | `rails runner` | Run Ruby code in the context of Rails |
-### Rake aliases
+### Foreman
-| Alias | Command | Description |
-|---------|---------------------------------|--------------------------------------------------------|
-| `rdm` | `rake db:migrate` | Run pending db migrations |
-| `rdms` | `rake db:migrate:status` | Show current db migration status |
-| `rdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
-| `rdr` | `rake db:rollback` | Roll back the last migration |
-| `rdc` | `rake db:create` | Create the database |
-| `rds` | `rake db:seed` | Seed the database |
-| `rdd` | `rake db:drop` | Delete the database |
-| `rdrs` | `rake db:reset` | Delete the database and set it up again |
-| `rdtc` | `rake db:test:clone` | Clone the database into the test database |
-| `rdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database |
-| `rdsl` | `rake db:schema:load` | Load the database schema |
-| `rlc` | `rake log:clear` | Clear Rails logs |
-| `rn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments |
-| `rt` | `rake test` | Run Rails tests |
-| `rmd` | `rake middleware` | Interact with Rails middlewares |
-| `rsts` | `rake stats` | Print code statistics |
+| Alias | Command | Description |
+| ------ | --------------- | ----------------------------------------- |
+| `fmns` | `foreman start` | Interact with your Rails app from the CLI |
### Utility aliases
| Alias | Command | Description |
-|-----------|-------------------------------|------------------------------------------------|
+| --------- | ----------------------------- | ---------------------------------------------- |
| `devlog` | `tail -f log/development.log` | Show and follow changes to the development log |
| `prodlog` | `tail -f log/production.log` | Show and follow changes to the production log |
| `testlog` | `tail -f log/test.log` | Show and follow changes to the test log |
@@ -60,7 +66,7 @@ plugins=(... rails)
### Environment settings
| Alias | Command | Description |
-|-------|-------------------------|---------------------------------|
+| ----- | ----------------------- | ------------------------------- |
| `RED` | `RAILS_ENV=development` | Sets `RAILS_ENV` to development |
| `REP` | `RAILS_ENV=production` | Sets `RAILS_ENV` to production |
| `RET` | `RAILS_ENV=test` | Sets `RAILS_ENV` to test |
@@ -68,15 +74,45 @@ plugins=(... rails)
These are global aliases. Use in combination with a command or just run them
separately. For example: `REP rake db:migrate` will migrate the production db.
-### Legacy stuff
+## Legacy
+
+### Rake aliases
+
+The following commands are run [using `rails` instead of `rake` since Rails v5][1], but are preserved under the
+prefix `rk` for backwards compatibility.
+
+[1]: https://guides.rubyonrails.org/v5.2/command_line.html#bin-rails
+
+| Alias | Command | Description |
+| -------- | ------------------------------- | ------------------------------------------------------ |
+| `rkdc` | `rake db:create` | Create the database |
+| `rkdd` | `rake db:drop` | Delete the database |
+| `rkdm` | `rake db:migrate` | Run pending db migrations |
+| `rkdms` | `rake db:migrate:status` | Show current db migration status |
+| `rkdmtc` | `rake db:migrate db:test:clone` | Run pending migrations and clone db into test database |
+| `rkdr` | `rake db:rollback` | Roll back the last migration |
+| `rkdrs` | `rake db:reset` | Delete the database and set it up again |
+| `rkds` | `rake db:seed` | Seed the database |
+| `rkdsl` | `rake db:schema:load` | Load the database schema |
+| `rkdtc` | `rake db:test:clone` | Clone the database into the test database |
+| `rkdtp` | `rake db:test:prepare` | Duplicate the db schema into your test database |
+| `rklc` | `rake log:clear` | Clear Rails logs |
+| `rkmd` | `rake middleware` | Interact with Rails middlewares |
+| `rkn` | `rake notes` | Search for notes (`FIXME`, `TODO`) in code comments |
+| `rksts` | `rake stats` | Print code statistics |
+| `rkt` | `rake test` | Run Rails tests |
+
+### Other
| Alias | Command |
-|---------|------------------------------------|
-| `sstat` | `thin --stats "/thin/stats" start` |
-| `sg` | `ruby script/generate` |
+| ------- | ---------------------------------- |
+| `sc` | `ruby script/console` |
| `sd` | `ruby script/destroy` |
+| `sd` | `ruby script/server --debugger` |
+| `sg` | `ruby script/generate` |
| `sp` | `ruby script/plugin` |
| `sr` | `ruby script/runner` |
| `ssp` | `ruby script/spec` |
-| `sc` | `ruby script/console` |
-| `sd` | `ruby script/server --debugger` |
+| `sstat` | `thin --stats "/thin/stats" start` |
+
+- `remote_console <server> <directory>`: runs `ruby script/console production` on a remote server.
diff --git a/plugins/rails/_rails b/plugins/rails/_rails
index ad7505506..6dc85d458 100644
--- a/plugins/rails/_rails
+++ b/plugins/rails/_rails
@@ -1,66 +1,624 @@
#compdef rails
-#autoload
-
-local -a _1st_arguments
-_1st_arguments=(
- 'generate:Generate new code (short-cut alias: "g")'
- 'console:Start the Rails console (short-cut alias: "c")'
- 'server:Start the Rails server (short-cut alias: "s")'
- 'dbconsole:Start a console for the database specified in config/database.yml (short-cut alias: "db")'
- 'new:Create a new Rails application. "rails new my_app" creates a new application called MyApp in "./my_app"'
- 'application:Generate the Rails application code'
- 'destroy:Undo code generated with "generate"'
-
- 'benchmarker:See how fast a piece of code runs'
- 'profiler:Get profile information from a piece of code'
- 'plugin:Install a plugin'
-
- 'plugin new:Generates skeleton for developing a Rails plugin'
- 'runner:Run a piece of code in the application environment (short-cut alias: "r")'
-)
-
-_rails_generate_arguments() {
- generate_arguments=(
- assets
- controller
- decorator
- generator
- helper
- integration_test
- mailer
- migration
- model
- observer
- performance_test
- plugin
- resource
- scaffold
- scaffold_controller
- session_migration
- stylesheets
- task
- )
-}
-
-
-_arguments \
- '(--version)--version[show version]' \
- '(--help)--help[show help]' \
- '*:: :->subcmds' && return 0
-
-if (( CURRENT == 1 )); then
- _describe -t commands "rails subcommand" _1st_arguments
- return
-else
- _files
- return
-fi
-
-case "$words[1]" in
- g|generate)
- _rails_generate_arguments
- _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
- d|destroy)
- _rails_generate_arguments
- _wanted generate_arguments expl 'all generate' compadd -a generate_arguments ;;
-esac
+# ------------------------------------------------------------------------------
+# Copyright (c) 2016 Github zsh-users - http://github.com/zsh-users
+# 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 zsh-users 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 Ruby on Rails (http://rubyonrails.org/).
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Kazuya Takeshima (https://github.com/mitukiii)
+#
+# ------------------------------------------------------------------------------
+
+
+_rails() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_${words[1]}" || _nothing
+ else
+ __rails_commands
+ fi
+}
+
+__rails_commands() {
+ local context state line curcontext="$curcontext"
+
+ local -a rails_options
+ __rails_setup_rails_options
+
+ _arguments -C \
+ $rails_options \
+ ': :->command'
+
+ case "$state" in
+ command)
+ local -a commands
+ local application_directory
+ __rails_setup_application_directory
+
+ if [ -n "$application_directory" ]; then
+ commands=(
+ {generate,g}'[Generate new code]'
+ {console,c}'[Start the Rails console]'
+ {server,s}'[Start the Rails server]'
+ {dbconsole,db}'[Start a console for the database specified in config/database.yml]'
+ application'[Generate the Rails application code]'
+ {destroy,d}'[Undo code generated with "generate"]'
+ benchmarker'[See how fast a piece of code runs]'
+ profiler'[Get profile information from a piece of code]'
+ plugin'[Install a plugin]'
+ {runner,r}'[Run a piece of code in the application environment]'
+ {test,t}'[Run tests]'
+ )
+ else
+ commands=(
+ new'[Create a new Rails application]'
+ )
+ fi
+
+ _values 'command' $commands
+ ;;
+ esac
+}
+
+__rails_setup_application_directory() {
+ application_directory="$(pwd)"
+
+ while [ -n "$application_directory" ]; do
+ if [ -f "${application_directory}/script/rails" -o -f "${application_directory}/bin/rails" ]; then
+ return
+ fi
+ application_directory="${application_directory%/*}"
+ done
+
+ application_directory=
+}
+
+__rails_setup_rails_options() {
+ rails_options=(
+ {-h,--help}'[Show this help message and quit]'
+ {-v,--version}'[Show Rails version number and quit]'
+ )
+}
+
+__rails_setup_runtime_options() {
+ runtime_options=(
+ '(-f --force)'{-f,--force}'[Overwrite files that already exist]'
+ '(-p --pretend)'{-p,--pretend}'[Run but do not make any changes]'
+ '(-q --quiet)'{-q,--quiet}'[Suppress status output]'
+ '(-s --skip)'{-s,--skip}'[Skip files that already exist]'
+ )
+}
+
+__rails_setup_generators_options() {
+ local -a runtime_options
+ __rails_setup_runtime_options
+
+ generators_options=(
+ $runtime_options
+ --skip-namespace'[Skip namespace (affects only isolated applications)]'
+ --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]"
+ )
+}
+
+__rails_setup_model_generators_options() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ model_generators_options=(
+ $generators_options
+ '(-o --orm)'{-o,--orm=}'[Orm to be invoked]:orm'
+ )
+}
+
+__rails_setup_resource_generators_options() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ resource_generators_options=(
+ $model_generators_options
+ --force-plural'[Forces the use of a plural ModelName]'
+ --resource-route'[Indicates when to generate resource route]: :__rails_boolean'
+ )
+}
+
+__rails_boolean() {
+ _values 'boolean' 'true' 'false'
+}
+
+__rails_migration_fields() {
+ if compset -P '*:*:'; then
+ _values 'index' 'index' 'uniq'
+ else
+ if compset -P '*:'; then
+ _values -s ':' 'type' 'string' 'text' 'integer' 'float' 'decimal' 'datetime' 'timestamp' 'time' 'date' 'binary' 'boolean' 'references'
+ else
+ _guard '[[:alnum:]_]#' 'field'
+ fi
+ fi
+}
+
+_rails_generate() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_generate_${words[1]}" || _rails_generate_default
+ else
+ __rails_generate_commands
+ fi
+}
+
+_rails_g() {
+ _rails_generate
+}
+
+__rails_generate_commands() {
+ local context curcontext="$curcontext" update_policy
+
+ zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+ if [ -z "$update_policy" ]; then
+ zstyle ":completion:${curcontext}:" cache-policy _rails_generate_commands_caching_policy
+ fi
+
+ local application_directory
+ __rails_setup_application_directory
+ local cache_name
+ cache_name="rails/${application_directory##*/}/all_generators"
+ if ! _retrieve_cache ${cache_name}; then
+ local -a all_generators
+ all_generators=($(_call_program rails_generators rails generate 2> /dev/null | awk '/^ [a-zA-Z_]+/{ print $1 }'))
+ _store_cache ${cache_name} all_generators
+ fi
+
+ local -a rails_generators
+ rails_generators=(${all_generators:#*:*})
+ _describe -t rails_generators 'rails generator' rails_generators
+
+ local -a -U namespaces
+ local namespace
+ local -a generators
+ namespaces=(${(R)${(M)all_generators:#*:*}%:*})
+ for namespace in $namespaces; do
+ generators=(${${(M)all_generators:#${namespace}:*}/:/\\:})
+ _describe -t ${namespace}_generators "${namespace/_/ } generator" generators
+ done
+}
+
+_rails_generate_commands_caching_policy() {
+ local application_directory
+ __rails_setup_application_directory
+
+ if [ "${application_directory}/Gemfile" -nt "$1" ]; then
+ return 0
+ fi
+
+ local -a oldp
+ oldp=( "$1"(Nmw+1) )
+ (( $#oldp ))
+}
+
+_rails_generate_default() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '*:argument'
+}
+
+_rails_generate_assets() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-j --javascripts)'{-j,--javascripts}'[Generate JavaScripts]: :__rails_boolean' \
+ '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+ '(-je --javascript-engine)'{-je,--javascript-engine=}'[Engine for JavaScripts]:javascript engine' \
+ '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_controller() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ --helper'[Indicates when to generate helper]: :__rails_boolean' \
+ --assets'[Indicates when to generate assets]: :__rails_boolean' \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "action"'
+}
+
+_rails_generate_generator() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --namespace'[Namespace generator under lib/generators/name]: :__rails_boolean' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_helper() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_integration_test() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --integration-tool='[Integration tool to be invoke]:integration tool' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_jbuilder() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_mailer() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "method"'
+}
+
+_rails_generate_migration() {
+ local -a modelgenerators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_model() {
+ _rails_generate_migration
+}
+
+_rails_generate_observer() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_performance_test() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ --performance-tool='[Performance tool to be invoked]:performance tool' \
+ ': :_guard "^-*" "name"' \
+}
+
+_rails_generate_resource() {
+ local context state line curcontext="$curcontext"
+
+ local -a resource_generators_options
+ __rails_setup_resource_generators_options
+
+ _arguments -C \
+ $resource_generators_options \
+ '(-c --resource-controller)'{-c,--resource-controller=}'[Resource controller to be invoked]:name' \
+ '(-a --actions)'{-a,--actions=}'[Actions for the resource controller]: :->actions' \
+ ': :->name' \
+ '*: :->fields'
+
+ if (( words[(I)(--actions=*|-a)] > 0 && words[(I)(--actions=*|-a)] == words[(I)-*] )); then
+ state=actions
+ fi
+
+ case "$state" in
+ actions)
+ _guard "[[:alnum:]_]#" "actions"
+ ;;
+ name)
+ _guard "^-*" "name"
+ ;;
+ fields)
+ __rails_migration_fields
+ ;;
+ esac
+}
+
+_rails_generate_scaffold() {
+ local -a resource_generators_options
+ __rails_setup_resource_generators_options
+
+ _arguments \
+ $resource_generators_options \
+ '(-y --stylesheets)'{-y,--stylesheets}'[Generate Stylesheets]: :__rails_boolean' \
+ '(-se --stylesheet-engine)'{-se,--stylesheet-engine=}'[Engine for Stylesheets]:stylesheet engine' \
+ '(-c --scaffold-controller)'{-c,--scaffold-controller=}'[Scaffold controller to be invoked]:name' \
+ --assets'[Indicates when to generate assets]:boolean:(true false)' \
+ ': :_guard "^-*" "name"' \
+ '*: :__rails_migration_fields'
+}
+
+_rails_generate_scaffold_controller() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ '(-e --template-engine)'{-e,--template-engine=}'[Template engine to be invoked]:template engine' \
+ '(-t --test-framework)'{-t,--test-framework=}'[Test framework to be invoked]:test framework' \
+ --helper'[Indicates when to generate helper]: :__rails_boolean' \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_session_migration() {
+ local -a model_generators_options
+ __rails_setup_model_generators_options
+
+ _arguments \
+ $model_generators_options \
+ ': :_guard "^-*" "name"'
+}
+
+_rails_generate_task() {
+ local -a generators_options
+ __rails_setup_generators_options
+
+ _arguments \
+ $generators_options \
+ ': :_guard "^-*" "name"' \
+ '*: :_guard "^-*" "action"'
+}
+
+_rails_console() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-s --sandbox)'{-s,--sandbox}'[Rollback database modifications on exit]' \
+ --debugger'[Enable ruby-debugging for the console]'
+}
+
+_rails_c() {
+ _rails_console
+}
+
+_rails_server() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-p --port)'{-p,--port=}'[Runs Rails on the specified port]: :_guard "[[\:digit\:]]#" "port"' \
+ '(-b --binding)'{-b,--binding=}'[Binds Rails to the specified ip]:ip:_hosts' \
+ '(-c --config)'{-c,--config=}'[Use custom rackup configuration file]:file:_files -g "*.ru"' \
+ '(-d --daemon)'{-d,--daemon}'[Make server run as a Daemon]' \
+ '(-u --debugger)'{-u,--debugger}'[Enable ruby-debugging for the server]' \
+ '(-e --environment)'{-e,--environment=}'[Specifies the environment to run this server under (test/development/production)]:name:(test development production)' \
+ '(-P --pid)'{-P,--pid=}'[Specifies the PID file]:pid:_files -g "*.pid"'
+}
+
+_rails_s() {
+ _rails_server
+}
+
+_rails_dbconsole() {
+ _arguments \
+ '(- *)'--help'[Show this help message]' \
+ '(-p --include-password)'{-p,--include-password}'[Automatically provide the password from database.yml]' \
+ --mode'[Automatically put the sqlite3 database in the specified mode (html, list, line, column)]:mode:(html list line column)' \
+ --header
+}
+
+_rails_new() {
+ local context state line curcontext="$curcontext"
+
+ local _a rails_options runtime_options
+ __rails_setup_rails_options
+ __rails_setup_runtime_options
+
+ _arguments -C \
+ $rails_options \
+ $runtime_options \
+ '(-r --ruby)'{-r,--ruby=}'[Path to the Ruby binary of your choice]:path' \
+ '(-b --builder)'{-b,--builder=}'[Path to a application builder (can be a filesystem path or URL)]: :->path_or_url' \
+ '(-m --template)'{-m,--template=}'[Path to an application template (can be a filesystem path or URL)]: :->path_or_url' \
+ --skip-gemfile"[Don't create a Gemfile]" \
+ --skip-bundle"[Don't run bundle install]" \
+ '(-G --skip-git)'{-G,--skip-git}'[Skip Git ignores and keeps]' \
+ '(-O --skip-active-record)'{-O,--skip-active-record}'[Skip Active Record files]' \
+ '(-S --skip-sprockets)'{-S,--skip-sprockets}'[Skip Sprockets files]' \
+ '(-d --database)'{-d,--database=}'[Preconfigure for selected database]:database:(mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc)' \
+ '(-j --javascript)'{-j,--javascript=}'[Preconfigure for selected JavaScript library]:javascript' \
+ '(-J --skip-javascript)'{-J,--skip-javascript}'[Skip JavaScript files]' \
+ --dev'[Setup the application with Gemfile pointing to your Rails checkout]' \
+ --edge'[Setup the application with Gemfile pointing to Rails repository]' \
+ '(-T --skip-test-unit)'{-T,--skip-test-unit}'[Skip Test::Unit files]' \
+ --old-style-hash"[Force using old style hash (:foo => 'bar') on Ruby >= 1.9]" \
+ ':app path:_directories'
+
+ case "$state" in
+ path_or_url)
+ _alternative \
+ 'files:path:_files -g "*.rb"' \
+ 'url:url:_urls'
+ ;;
+ esac
+}
+
+_rails_application() {
+ _rails_new
+}
+
+_rails_db() {
+ _rails_dbconsole
+}
+
+_rails_destroy() {
+ _rails_generate
+}
+
+_rails_d() {
+ _rails_destroy
+}
+
+_rails_benchmarker() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+ '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+ '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "wall_time" "memory" "objects" "gc_runs" "gc_time"' \
+ '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_profiler() {
+ _arguments \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-r --runs)'{-r,--runs}'[Number of runs]: :_guard "[[\:digit\:]]#" "number"' \
+ '(-o --output)'{-o,--output}'[Directory to use when writing the results]:directory:_directories' \
+ '(-m --metrics)'{-m,--metrics}'[Metrics to use]: :_values -s "," "metrics" "process_time" "memory" "objects"' \
+ '(-f --formats)'{-f,--formats}'[Formats to output to]: :_values -s "," "formats" "flat" "graph" "html" "call_tree" "call_stack"' \
+ '*: :_guard "^-*" "ruby code"'
+}
+
+_rails_plugin() {
+ local context state line curcontext="$curcontext"
+
+ if (( CURRENT > 2 )); then
+ (( CURRENT-- ))
+ shift words
+ _call_function - "_rails_plugin_${words[1]}" || _nothing
+ else
+ __rails_plugin_commands
+ fi
+}
+
+__rails_plugin_commands() {
+ _values 'plugin command' \
+ install'[Install plugin(s) from known repositories or URLs]' \
+ remove'[Uninstall plugins]' \
+ new
+}
+
+_rails_plugin_install() {
+ _arguments \
+ '(-x --externals)'{-x,--externals}'[Use svn:externals to grab the plugin. Enables plugin updates and plugin versioning]' \
+ '(-o --checkout)'{-o,--checkout}'[Use svn checkout to grab the plugin. Enables updating but does not add a svn:externals entry]' \
+ '(-e --export)'{-e,--export}'[Use svn export to grab the plugin. Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry]' \
+ '(-q --quiet)'{-q,--quiet}'[Suppresses the output from installation. Ignored if -v is passed (rails plugin -v install ...)]' \
+ '(-r --revision)'{-r,--revision=}'[Checks out the given revision from subversion or git. Ignored if subversion/git is not used]:revision' \
+ '(-f --force)'{-f,--force}"[Reinstalls a plugin if it's already installed]" \
+ '*:plugin:_urls'
+}
+
+_rails_plugin_remove() {
+ local -a plugins
+
+ plugins=($(_call_program rails_plugins ls -1 vendor/plugins))
+
+ _describe -t plugins 'plugin' plugins
+}
+
+_rails_plugin_new() {
+ _rails_new
+}
+
+_rails_runner() {
+ local context state line curcontext="$curcontext"
+
+ _arguments -C \
+ '(- *)'{-h,--help}'[Show this help message]' \
+ '(-e --environment)'{-e,--environment=}'[Specifies the environment for the runner to operate under (test/development/production)]:name:(test development production)' \
+ ': :->code_or_path'
+
+ case "$state" in
+ code_or_path)
+ _alternative \
+ 'files:filename:_files -g "*.rb"' \
+ 'codes:ruby code:_guard "^-*" "ruby code"'
+ ;;
+ esac
+}
+
+_rails_r() {
+ _rails_runner
+}
+
+_rails_test() {
+ local context state line curcontext="$curcontext"
+
+ _arguments -C \
+ ': :->path'
+
+ case "$state" in
+ path)
+ _alternative \
+ 'files:filename:_files -g "*.rb"'
+ ;;
+ esac
+}
+
+_rails_t() {
+ _rails_test
+}
+
+_rails "$@"
+
+# Local Variables:
+# mode: Shell-Script
+# sh-indentation: 2
+# indent-tabs-mode: nil
+# sh-basic-offset: 2
+# End:
+# vim: ft=zsh sw=2 ts=2 et
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index 29b413434..b11cbb5c7 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -1,3 +1,4 @@
+# rails command wrapper
function _rails_command () {
if [ -e "bin/stubs/rails" ]; then
bin/stubs/rails $@
@@ -12,28 +13,31 @@ function _rails_command () {
fi
}
+alias rails='_rails_command'
+compdef _rails_command=rails
+
+# rake command wrapper
function _rake_command () {
if [ -e "bin/stubs/rake" ]; then
bin/stubs/rake $@
elif [ -e "bin/rake" ]; then
bin/rake $@
- elif type bundle &> /dev/null && ([ -e "Gemfile" ] || [ -e "gems.rb" ]); then
+ elif type bundle &> /dev/null && [[ -e "Gemfile" || -e "gems.rb" ]]; then
bundle exec rake $@
else
command rake $@
fi
}
-alias rails='_rails_command'
-compdef _rails_command=rails
-
alias rake='_rake_command'
compdef _rake_command=rake
+# Log aliases
alias devlog='tail -f log/development.log'
alias prodlog='tail -f log/production.log'
alias testlog='tail -f log/test.log'
+# Environment settings
alias -g RED='RAILS_ENV=development'
alias -g REP='RAILS_ENV=production'
alias -g RET='RAILS_ENV=test'
@@ -43,47 +47,69 @@ alias rc='rails console'
alias rcs='rails console --sandbox'
alias rd='rails destroy'
alias rdb='rails dbconsole'
+alias rdc='rails db:create'
+alias rdd='rails db:drop'
+alias rdm='rails db:migrate'
+alias rdmd='rails db:migrate:down'
+alias rdmr='rails db:migrate:redo'
+alias rdms='rails db:migrate:status'
+alias rdmtc='rails db:migrate db:test:clone'
+alias rdmu='rails db:migrate:up'
+alias rdr='rails db:rollback'
+alias rdrs='rails db:reset'
+alias rds='rails db:seed'
+alias rdsl='rails db:schema:load'
+alias rdtc='rails db:test:clone'
+alias rdtp='rails db:test:prepare'
alias rgen='rails generate'
alias rgm='rails generate migration'
+alias rlc='rails log:clear'
+alias rmd='rails middleware'
+alias rn='rails notes'
alias rp='rails plugin'
alias rr='rails routes'
alias rrg='rails routes | grep'
-alias ru='rails runner'
alias rs='rails server'
+alias rsb='rails server --bind'
alias rsd='rails server --debugger'
alias rsp='rails server --port'
-alias rsb='rails server --bind'
+alias rsts='rails stats'
+alias rt='rails test'
+alias ru='rails runner'
+
+# Foreman aliases
+alias fmns='foreman start'
# Rake aliases
-alias rdm='rake db:migrate'
-alias rdmr='rake db:migrate:redo'
-alias rdmd='rake db:migrate:down'
-alias rdms='rake db:migrate:status'
-alias rdmu='rake db:migrate:up'
-alias rdr='rake db:rollback'
-alias rdc='rake db:create'
-alias rds='rake db:seed'
-alias rdd='rake db:drop'
-alias rdrs='rake db:reset'
-alias rdtc='rake db:test:clone'
-alias rdtp='rake db:test:prepare'
-alias rdmtc='rake db:migrate db:test:clone'
-alias rdsl='rake db:schema:load'
-alias rlc='rake log:clear'
-alias rn='rake notes'
-alias rt='rake test'
-alias rmd='rake middleware'
-alias rsts='rake stats'
+alias rkdc='rake db:create'
+alias rkdd='rake db:drop'
+alias rkdm='rake db:migrate'
+alias rkdmd='rake db:migrate:down'
+alias rkdmr='rake db:migrate:redo'
+alias rkdms='rake db:migrate:status'
+alias rkdmtc='rake db:migrate db:test:clone'
+alias rkdmu='rake db:migrate:up'
+alias rkdr='rake db:rollback'
+alias rkdrs='rake db:reset'
+alias rkds='rake db:seed'
+alias rkdsl='rake db:schema:load'
+alias rkdtc='rake db:test:clone'
+alias rkdtp='rake db:test:prepare'
+alias rklc='rake log:clear'
+alias rkmd='rake middleware'
+alias rkn='rake notes'
+alias rksts='rake stats'
+alias rkt='rake test'
# legacy stuff
-alias sstat='thin --stats "/thin/stats" start'
-alias sg='ruby script/generate'
+alias sc='ruby script/console'
alias sd='ruby script/destroy'
+alias sd='ruby script/server --debugger'
+alias sg='ruby script/generate'
alias sp='ruby script/plugin'
alias sr='ruby script/runner'
alias ssp='ruby script/spec'
-alias sc='ruby script/console'
-alias sd='ruby script/server --debugger'
+alias sstat='thin --stats "/thin/stats" start'
function remote_console() {
/usr/bin/env ssh $1 "( cd $2 && ruby script/console production )"
diff --git a/plugins/rbw/rbw.plugin.zsh b/plugins/rbw/rbw.plugin.zsh
index 523e35aff..b6cecf8b4 100644
--- a/plugins/rbw/rbw.plugin.zsh
+++ b/plugins/rbw/rbw.plugin.zsh
@@ -2,12 +2,6 @@ if (( ! $+commands[rbw] )); then
return
fi
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `rbw`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_rbw" ]]; then
diff --git a/plugins/rust/rust.plugin.zsh b/plugins/rust/rust.plugin.zsh
index db6ca9e74..858f14126 100644
--- a/plugins/rust/rust.plugin.zsh
+++ b/plugins/rust/rust.plugin.zsh
@@ -2,11 +2,6 @@ if ! (( $+commands[rustup] && $+commands[cargo] )); then
return
fi
-# Add completions folder in $ZSH_CACHE_DIR
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `cargo`. Otherwise, compinit will have already done that
if [[ ! -f "$ZSH_CACHE_DIR/completions/_cargo" ]]; then
diff --git a/plugins/rustup/rustup.plugin.zsh b/plugins/rustup/rustup.plugin.zsh
index 3d59c1c54..ef141cf8f 100644
--- a/plugins/rustup/rustup.plugin.zsh
+++ b/plugins/rustup/rustup.plugin.zsh
@@ -1,14 +1,6 @@
print ${(%):-'%F{yellow}The `rustup` plugin is deprecated and has been moved to the `rust` plugin.'}
print ${(%):-'Please update your .zshrc to use the `%Brust%b` plugin instead.%f'}
-# TODO: 2021-12-28: remove this block
-# Handle $0 according to the standard:
-# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html
-0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}"
-0="${${(M)0:#/*}:-$PWD/$0}"
-# Remove old generated completion file
-command rm -f "${0:A:h}/_rustup" "$ZSH_CACHE_DIR/rustup_version"
-
(( ${fpath[(Ie)$ZSH/plugins/rust]} )) || {
fpath=("$ZSH/plugins/rust" $fpath)
source "$ZSH/plugins/rust/rust.plugin.zsh"
diff --git a/plugins/rvm/README.md b/plugins/rvm/README.md
index 258c89420..576b037b0 100644
--- a/plugins/rvm/README.md
+++ b/plugins/rvm/README.md
@@ -23,6 +23,7 @@ plugins=(... rvm)
| `rb26` | `rvm use ruby-2.6` |
| `rb27` | `rvm use ruby-2.7` |
| `rb30` | `rvm use ruby-3.0` |
+| `rb31` | `rvm use ruby-3.1` |
| `rvm-update` | `rvm get head` |
| `gems` | `gem list` |
| `rvms` | `rvm gemset` |
diff --git a/plugins/rvm/rvm.plugin.zsh b/plugins/rvm/rvm.plugin.zsh
index 864389ba8..2a091d019 100644
--- a/plugins/rvm/rvm.plugin.zsh
+++ b/plugins/rvm/rvm.plugin.zsh
@@ -26,6 +26,7 @@ rubies=(
26 'ruby-2.6'
27 'ruby-2.7'
30 'ruby-3.0'
+ 31 'ruby-3.1'
)
for v in ${(k)rubies}; do
diff --git a/plugins/sprunge/README.md b/plugins/sprunge/README.md
index fb70d42eb..80e3b30dc 100644
--- a/plugins/sprunge/README.md
+++ b/plugins/sprunge/README.md
@@ -18,7 +18,8 @@ plugins=(... sprunge)
| `echo data \| sprunge` | Any piped data will be uploaded |
Once sprunge has processed the input it will give you a unique HTTP address:
-```
+
+```console
$ sprunge "hello"
http://sprunge.us/XxjnKz
```
@@ -30,3 +31,8 @@ http://sprunge.us/XxjnKz
- Argument precedence goes as follows: stdin > piped input > text strings.
- If a filename is misspelled or doesn't have the necessary path description, it will NOT
generate an error, but instead treat it as a text string.
+
+## Credits
+
+- Original code: [shellperson.net](https://web.archive.org/web/20190910065842/https://www.shellperson.net/sprunge-pastebin-script/).
+- Adapted by: Matt Parnell (@ilikenwf).
diff --git a/plugins/sprunge/sprunge.plugin.zsh b/plugins/sprunge/sprunge.plugin.zsh
index 5d5687a82..48dff5837 100644
--- a/plugins/sprunge/sprunge.plugin.zsh
+++ b/plugins/sprunge/sprunge.plugin.zsh
@@ -1,7 +1,3 @@
-# Contributed and SLIGHTLY modded by Matt Parnell/ilikenwf <parwok -at- gmail>
-# Created by the blogger at the URL below...I don't know where to find his/her name
-# Original found at https://www.shellperson.net/sprunge-pastebin-script/
-
sprunge() {
if [[ "$1" = --help ]]; then
fmt -s >&2 << EOF
diff --git a/plugins/svn-fast-info/README.md b/plugins/svn-fast-info/README.md
index 771378254..e86ba21e3 100644
--- a/plugins/svn-fast-info/README.md
+++ b/plugins/svn-fast-info/README.md
@@ -9,10 +9,10 @@ To use it, add `svn-fast-info` to the plugins array in your zshrc file:
plugins=(... svn-fast-info)
```
-It's faster because his efficient use of svn (single svn call) which saves a lot on a huge codebase
+It's faster because it has an efficient use of svn (single svn call) which saves a lot on a huge codebase.
It displays the current status of the local files (added, deleted, modified, replaced, or else...)
-Use `svn_prompt_info` method to display the svn repository status in your theme.
+Use `svn_prompt_info` method to display the svn repository status in your theme.
## Functions
diff --git a/plugins/terraform/README.md b/plugins/terraform/README.md
index 474346dc0..59c6e7f2a 100644
--- a/plugins/terraform/README.md
+++ b/plugins/terraform/README.md
@@ -22,6 +22,7 @@ plugins=(... terraform)
| `tfd` | `terraform destroy` |
| `tff` | `terraform fmt` |
| `tfi` | `terraform init` |
+| `tfo` | `terraform output` |
| `tfp` | `terraform plan` |
| `tfv` | `terraform validate` |
diff --git a/plugins/terraform/terraform.plugin.zsh b/plugins/terraform/terraform.plugin.zsh
index f224b79f0..d9e39e6ac 100644
--- a/plugins/terraform/terraform.plugin.zsh
+++ b/plugins/terraform/terraform.plugin.zsh
@@ -13,5 +13,6 @@ alias tfa='terraform apply'
alias tfd='terraform destroy'
alias tff='terraform fmt'
alias tfi='terraform init'
+alias tfo='terraform output'
alias tfp='terraform plan'
alias tfv='terraform validate'
diff --git a/plugins/toolbox/README.md b/plugins/toolbox/README.md
new file mode 100644
index 000000000..aac2bb3b0
--- /dev/null
+++ b/plugins/toolbox/README.md
@@ -0,0 +1,19 @@
+# toolbox plugin
+
+Plugin for [toolbox](https://containertoolbx.org), a tool to use containerized CLI environments.
+
+To use it, add `toolbox` to your plugins array in your `.zshrc` file:
+
+```zsh
+plugins=(... toolbox)
+```
+
+## Prompt function
+
+This plugins adds `toolbox_prompt_info()` function. Using it in your prompt, it will show the toolbox indicator ⬢ (if you are running in a toolbox container), and nothing if not.
+
+You can use it by adding `$(toolbox_prompt_info)` to your `PROMPT` or `RPROMPT` variable:
+
+```zsh
+RPROMPT='$(toolbox_prompt_info)'
+```
diff --git a/plugins/toolbox/kubectx.plugin.zsh b/plugins/toolbox/kubectx.plugin.zsh
new file mode 100644
index 000000000..8b6bf5ecd
--- /dev/null
+++ b/plugins/toolbox/kubectx.plugin.zsh
@@ -0,0 +1,3 @@
+function toolbox_prompt_info() {
+ [[ -f /run/.toolboxenv ]] && echo "⬢"
+}
diff --git a/plugins/volta/volta.plugin.zsh b/plugins/volta/volta.plugin.zsh
index 79319394c..ab05ed5df 100644
--- a/plugins/volta/volta.plugin.zsh
+++ b/plugins/volta/volta.plugin.zsh
@@ -3,11 +3,6 @@ if (( ! $+commands[volta] )); then
return
fi
-# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh
-# Add completions folder in $ZSH_CACHE_DIR
-command mkdir -p "$ZSH_CACHE_DIR/completions"
-(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath)
-
# If the completion file doesn't exist yet, we need to autoload it and
# bind it to `deno`. Otherwise, compinit will have already done that.
if [[ ! -f "$ZSH_CACHE_DIR/completions/_volta" ]]; then
diff --git a/plugins/zsh-navigation-tools/README.md b/plugins/zsh-navigation-tools/README.md
index bdbfac976..4dc9cdba2 100644
--- a/plugins/zsh-navigation-tools/README.md
+++ b/plugins/zsh-navigation-tools/README.md
@@ -226,7 +226,7 @@ Zsh plugins may look scary, as they seem to have some "architecture". In fact, w
1. It has its directory added to `fpath`
2. It has any first `*.plugin.zsh` file sourced
-That's it. When one contributes to Oh-My-Zsh or creates a plugin for any plugin manager, he only needs to account for this.
+That's it. When one contributes to Oh-My-Zsh or creates a plugin for any plugin manager, they only need to account for this.
The same with doing any non-typical Zsh Navigation Tools installation.
## More