summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.editorconfig10
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md39
-rw-r--r--.github/ISSUE_TEMPLATE/feature_request.md26
-rw-r--r--.github/ISSUE_TEMPLATE/support.md12
-rw-r--r--.github/main.workflow17
-rw-r--r--.gitignore2
-rw-r--r--CODE_OF_CONDUCT.md76
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--README.md74
-rw-r--r--lib/directories.zsh10
-rw-r--r--lib/git.zsh34
-rw-r--r--lib/history.zsh4
-rw-r--r--lib/misc.zsh6
-rw-r--r--lib/prompt_info_functions.zsh19
-rw-r--r--lib/theme-and-appearance.zsh7
-rw-r--r--oh-my-zsh.sh21
-rw-r--r--plugins/archlinux/README.md2
-rw-r--r--plugins/autojump/autojump.plugin.zsh58
-rw-r--r--plugins/aws/README.md2
-rw-r--r--plugins/aws/aws.plugin.zsh62
-rw-r--r--plugins/bwana/README.md3
-rw-r--r--plugins/bwana/bwana.plugin.zsh4
-rw-r--r--plugins/catimg/catimg.plugin.zsh2
-rw-r--r--plugins/catimg/catimg.sh2
-rw-r--r--plugins/cloudapp/cloudapp.plugin.zsh8
-rw-r--r--plugins/colorize/README.md15
-rw-r--r--plugins/colorize/colorize.plugin.zsh23
-rw-r--r--plugins/debian/README.md114
-rw-r--r--plugins/debian/debian.plugin.zsh97
-rw-r--r--plugins/django/django.plugin.zsh2
-rw-r--r--plugins/docker-compose/_docker-compose168
-rw-r--r--plugins/dotenv/README.md11
-rw-r--r--plugins/dotenv/dotenv.plugin.zsh12
-rw-r--r--plugins/drush/README.md83
-rw-r--r--plugins/drush/drush.complete.sh50
-rw-r--r--plugins/drush/drush.plugin.zsh104
-rw-r--r--plugins/emotty/emotty.plugin.zsh10
-rw-r--r--plugins/fasd/fasd.plugin.zsh2
-rw-r--r--plugins/frontend-search/README.md77
-rw-r--r--plugins/frontend-search/_frontend-search.sh61
-rw-r--r--plugins/frontend-search/frontend-search.plugin.zsh38
-rw-r--r--plugins/git-extras/git-extras.plugin.zsh4
-rw-r--r--plugins/git-hubflow/git-hubflow.plugin.zsh12
-rw-r--r--plugins/git-prompt/README.md61
-rw-r--r--plugins/git-prompt/git-prompt.plugin.zsh3
-rw-r--r--plugins/git-prompt/gitstatus.py3
-rw-r--r--plugins/git/README.md211
-rw-r--r--plugins/git/git.plugin.zsh60
-rw-r--r--plugins/gitfast/README.md129
-rw-r--r--plugins/gitfast/_git11
-rw-r--r--plugins/gitfast/git-completion.bash922
-rw-r--r--plugins/gitfast/git-prompt.sh16
-rw-r--r--plugins/gitfast/gitfast.plugin.zsh4
-rwxr-xr-xplugins/gitfast/update9
-rw-r--r--plugins/gitfast/updates.patch56
-rw-r--r--plugins/github/_hub11
-rw-r--r--plugins/gradle/gradle.plugin.zsh4
-rw-r--r--plugins/gulp/gulp.plugin.zsh6
-rw-r--r--plugins/httpie/README.md17
-rw-r--r--plugins/httpie/_httpie181
-rw-r--r--plugins/httpie/httpie.plugin.zsh33
-rw-r--r--plugins/iwhois/README.md24
-rw-r--r--plugins/iwhois/iwhois.plugin.zsh5
-rw-r--r--plugins/jira/README.md1
-rw-r--r--plugins/jira/jira.plugin.zsh5
-rw-r--r--plugins/kube-ps1/README.md28
-rw-r--r--plugins/kube-ps1/kube-ps1.plugin.zsh28
-rw-r--r--plugins/kubectl/README.md1
-rw-r--r--plugins/kubectl/kubectl.plugin.zsh3
-rw-r--r--plugins/ng/ng.plugin.zsh5
-rw-r--r--plugins/nvm/nvm.plugin.zsh7
-rw-r--r--plugins/osx/README.md2
-rw-r--r--plugins/osx/osx.plugin.zsh53
-rw-r--r--plugins/osx/spotify64
-rw-r--r--plugins/per-directory-history/README.md71
-rw-r--r--plugins/pip/pip.plugin.zsh5
-rw-r--r--plugins/pipenv/README.md28
-rw-r--r--plugins/pipenv/pipenv.plugin.zsh42
-rw-r--r--plugins/please/README.md26
-rw-r--r--plugins/please/please.plugin.zsh7
-rw-r--r--plugins/pyenv/pyenv.plugin.zsh4
-rw-r--r--plugins/rails/README.md83
-rw-r--r--plugins/rails/rails.plugin.zsh2
-rw-r--r--plugins/rbenv/rbenv.plugin.zsh87
-rw-r--r--plugins/react-native/README.md58
-rw-r--r--plugins/react-native/react-native.plugin.zsh44
-rw-r--r--plugins/sdk/README.md8
-rw-r--r--plugins/sdk/sdk.plugin.zsh82
-rw-r--r--plugins/sfdx/README.md11
-rw-r--r--plugins/sfdx/_sfdx1110
-rw-r--r--plugins/ssh-agent/ssh-agent.plugin.zsh2
-rw-r--r--plugins/sublime/README.md38
-rw-r--r--plugins/sublime/sublime.plugin.zsh189
-rw-r--r--plugins/svn-fast-info/svn-fast-info.plugin.zsh49
-rw-r--r--plugins/swiftpm/README.md2
-rw-r--r--plugins/swiftpm/_swift235
-rw-r--r--plugins/tmuxinator/_tmuxinator6
-rw-r--r--plugins/torrent/README.md13
-rw-r--r--plugins/vault/README.md19
-rw-r--r--plugins/vi-mode/vi-mode.plugin.zsh24
-rw-r--r--plugins/vscode/README.md15
-rw-r--r--plugins/vscode/vscode.plugin.zsh31
-rw-r--r--templates/zshrc.zsh-template9
-rw-r--r--themes/3den.zsh-theme2
-rw-r--r--themes/agnoster.zsh-theme1
-rw-r--r--themes/alanpeabody.zsh-theme14
-rw-r--r--themes/amuse.zsh-theme27
-rw-r--r--themes/bira.zsh-theme32
-rw-r--r--themes/crunch.zsh-theme10
-rw-r--r--themes/dallas.zsh-theme13
-rw-r--r--themes/fino-time.zsh-theme8
-rw-r--r--themes/fino.zsh-theme12
-rw-r--r--themes/fishy.zsh-theme2
-rw-r--r--themes/frontcube.zsh-theme5
-rw-r--r--themes/gallois.zsh-theme4
-rw-r--r--themes/gnzh.zsh-theme12
-rw-r--r--themes/itchy.zsh-theme4
-rw-r--r--themes/jaischeema.zsh-theme10
l---------[-rw-r--r--]themes/macovsky-ruby.zsh-theme16
-rw-r--r--themes/macovsky.zsh-theme14
-rw-r--r--themes/mira.zsh-theme20
-rw-r--r--themes/pure.zsh-theme10
-rw-r--r--themes/refined.zsh-theme1
-rw-r--r--themes/simonoff.zsh-theme6
-rw-r--r--themes/suvash.zsh-theme15
-rw-r--r--themes/wedisagree.zsh-theme5
-rw-r--r--tools/check_for_upgrade.sh4
-rwxr-xr-xtools/install.sh377
-rw-r--r--tools/uninstall.sh36
129 files changed, 4769 insertions, 1541 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..aa18e0e5c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+charset = utf-8
+
+[*.sh]
+indent_size = 4
+indent_style = tab
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 000000000..ff55f36be
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,39 @@
+---
+name: Bug report
+about: Create a report to help us improve
+labels: 'Type: bug'
+
+---
+
+<!--
+Fill this out before posting. You can delete irrelevant sections, but
+an issue where no sections have been filled will be deleted without comment.
+-->
+
+**Describe the bug**
+<!-- A clear and concise description of what the bug is. -->
+
+**To Reproduce**
+<!--
+Steps to reproduce the behavior:
+1. Enable plugin '...'
+2. Run command '...', _or_ try to complete command '...', _etc._
+3. See error
+-->
+
+**Expected behavior**
+<!-- A clear and concise description of what you expected to happen. -->
+
+**Screenshots or recordings**
+<!--
+If applicable, add screenshots or record an asciinema session (https://asciinema.org/)
+to help explain your problem.
+-->
+
+**System:**
+ - OS: [e.g. macOS]
+ - Zsh version [e.g. 5.6]
+ - Terminal emulator [e.g. iTerm2]
+
+**Additional context**
+<!-- Add any other context about the problem here. -->
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 000000000..d9c324a55
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,26 @@
+---
+name: Feature request
+about: Suggest a feature for Oh My Zsh
+labels: 'Type: feature'
+
+---
+
+<!--
+Fill this out before posting. You can delete irrelevant sections, but
+an issue where no sections have been filled will be deleted without comment.
+-->
+
+**Is your feature request related to a particular plugin or theme? If so, specify it.**
+<!-- The name of the plugin or theme you'd like us to improve. -->
+
+**Is your feature request related to a problem? Please describe.**
+<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
+
+**Describe the solution you'd like**
+<!-- A clear and concise description of what you want to happen. -->
+
+**Describe alternatives you've considered**
+<!-- A clear and concise description of any alternative solutions or features you've considered. -->
+
+**Additional context**
+<!-- Add any other context or screenshots about the feature request here. -->
diff --git a/.github/ISSUE_TEMPLATE/support.md b/.github/ISSUE_TEMPLATE/support.md
new file mode 100644
index 000000000..3c69a7d5e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/support.md
@@ -0,0 +1,12 @@
+---
+name: Support
+about: Request support for any problem you're having with Oh My Zsh
+labels: 'Type: support'
+
+---
+
+<!--
+1. Look for similar issues already posted (including closed ones)
+2. Include as much relevant information as possible
+3. Try to make sure the issue is due to Oh My Zsh
+-->
diff --git a/.github/main.workflow b/.github/main.workflow
new file mode 100644
index 000000000..0dbb0247a
--- /dev/null
+++ b/.github/main.workflow
@@ -0,0 +1,17 @@
+workflow "Triage Pull Request" {
+ on = "pull_request"
+ resolves = ["Triage"]
+}
+
+# Only act if there are code changes: if the pull_request
+# event's action is either 'opened' (new PR) or 'synchronize' (new commits)
+action "Filter actions" {
+ uses = "actions/bin/filter@0ac6d44"
+ args = "action 'opened|synchronize'"
+}
+
+action "Triage" {
+ needs = ["Filter actions"]
+ uses = "ohmyzsh/github-actions/pull-request-triage@master"
+ secrets = ["GITHUB_TOKEN"]
+}
diff --git a/.gitignore b/.gitignore
index b2022081a..87a79cdae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,5 @@
# custom files
custom/
-!custom/plugins/example
-!custom/example.zsh
# temp files directories
cache/
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..20ad1ccee
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,76 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, sex characteristics, gender identity and expression,
+level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies when
+an individual is representing the project or its community in public spaces.
+Examples of representing a project or community include using an official
+project e-mail address, posting via an official social media account, or acting
+as an appointed representative at an online or offline event. Representation of
+a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at ohmyzsh@planetargon.com. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see
+https://www.contributor-covenant.org/faq
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ac263fd18..f575157c2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,8 +1,10 @@
# CONTRIBUTING GUIDELINES
-Oh-My-Zsh is a community-driven project. Contribution is welcome, encouraged and appreciated.
+Oh-My-Zsh is a community-driven project. Contribution is welcome, encouraged, and appreciated.
It is also essential for the development of the project.
+First, please take a moment to review our [code of conduct](CODE_OF_CONDUCT.md).
+
These guidelines are an attempt at better addressing the huge amount of pending
issues and pull requests. Please read them closely.
diff --git a/README.md b/README.md
index 511e6aeff..3924c3a92 100644
--- a/README.md
+++ b/README.md
@@ -38,7 +38,18 @@ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/mas
#### via wget
```shell
-sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
+sh -c "$(wget -O- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+```
+
+#### Manual inspection
+
+It's a good idea to inspect the install script from projects you don't yet know. You can do
+that by downloading the install script first, looking through it so everything looks normal,
+then running it:
+
+```shell
+curl -Lo install.sh https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
+sh install.sh
```
## Using Oh My Zsh
@@ -69,6 +80,8 @@ plugins=(
)
```
+_Note that the plugins are separated by whitespace. **Do not** use commas between them._
+
#### Using Plugins
Most plugins (should! we're working on this) include a __README__, which documents how to use them.
@@ -124,16 +137,53 @@ If you're the type that likes to get their hands dirty, these sections might res
### Advanced Installation
-Some users may want to change the default path, or manually install Oh My Zsh.
+Some users may want to manually install Oh My Zsh, or change the default path or other settings that
+the installer accepts (these settings are also documented at the top of the install script).
#### Custom Directory
The default location is `~/.oh-my-zsh` (hidden in your home directory)
-If you'd like to change the install directory with the `ZSH` environment variable, either by running `export ZSH=/your/path` before installing, or by setting it before the end of the install pipeline like this:
+If you'd like to change the install directory with the `ZSH` environment variable, either by running
+`export ZSH=/your/path` before installing, or by setting it before the end of the install pipeline
+like this:
+
+```shell
+ZSH="$HOME/.dotfiles/oh-my-zsh" sh install.sh
+```
+
+#### Unattended install
+
+If you're running the Oh My Zsh install script as part of an automated install, you can pass the
+flag `--unattended` to the `install.sh` script. This will have the effect of not trying to change
+the default shell, and also won't run `zsh` when the installation has finished.
+
+```shell
+curl -Lo install.sh https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
+sh install.sh --unattended
+```
+
+#### Installing from a forked repository
+
+The install script also accepts these variables to allow installation of a different repository:
+
+- `REPO` (default: `robbyrussell/oh-my-zsh`): this takes the form of `owner/repository`. If you set
+ this variable, the installer will look for a repository at `https://github.com/{owner}/{repository}`.
+
+- `REMOTE` (default: `https://github.com/${REPO}.git`): this is the full URL of the git repository
+ clone. You can use this setting if you want to install from a fork that is not on GitHub (GitLab,
+ Bitbucket...) or if you want to clone with SSH instead of HTTPS (`git@github.com:user/project.git`).
+
+ _NOTE: it's incompatible with setting the `REPO` variable. This setting will take precedence._
+
+- `BRANCH` (default: `master`): you can use this setting if you want to change the default branch to be
+ checked out when cloning the repository. This might be useful for testing a Pull Request, or if you
+ want to use a branch other than `master`.
+
+For example:
```shell
-export ZSH="$HOME/.dotfiles/oh-my-zsh"; sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+REPO=apjanke/oh-my-zsh BRANCH=edge sh install.sh
```
#### Manual Installation
@@ -161,9 +211,11 @@ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
##### 4. Change your default shell
```shell
-chsh -s /bin/zsh
+chsh -s $(which zsh)
```
+You must log out from your user session and log back in to see this change.
+
##### 5. Initialize your new zsh configuration
Once you open up a new terminal window, it should load zsh with Oh My Zsh's configuration.
@@ -172,8 +224,10 @@ Once you open up a new terminal window, it should load zsh with Oh My Zsh's conf
If you have any hiccups installing, here are a few common fixes.
-* You _might_ need to modify your `PATH` in `~/.zshrc` if you're not able to find some commands after switching to `oh-my-zsh`.
-* If you installed manually or changed the install location, check the `ZSH` environment variable in `~/.zshrc`.
+* You _might_ need to modify your `PATH` in `~/.zshrc` if you're not able to find some commands after
+switching to `oh-my-zsh`.
+* If you installed manually or changed the install location, check the `ZSH` environment variable in
+`~/.zshrc`.
### Custom Plugins and Themes
@@ -213,12 +267,16 @@ Oh My Zsh isn't for everyone. We'll miss you, but we want to make this an easy b
If you want to uninstall `oh-my-zsh`, just run `uninstall_oh_my_zsh` from the command-line. It will remove itself and revert your previous `bash` or `zsh` configuration.
-## Contributing
+## How do I contribute to Oh My Zsh?
+
+Before you participate in our delightful community, please read the [code of conduct](CODE_OF_CONDUCT.md).
I'm far from being a [Zsh](https://www.zsh.org/) expert and suspect there are many ways to improve – if you have ideas on how to make the configuration easier to maintain (and faster), don't hesitate to fork and send pull requests!
We also need people to test out pull-requests. So take a look through [the open issues](https://github.com/robbyrussell/oh-my-zsh/issues) and help where you can.
+See [Contributing](CONTRIBUTING.md) for more details.
+
### Do NOT send us themes
We have (more than) enough themes for the time being. Please add your theme to the [external themes](https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes) wiki page.
diff --git a/lib/directories.zsh b/lib/directories.zsh
index 14064b86f..cf87bd7e4 100644
--- a/lib/directories.zsh
+++ b/lib/directories.zsh
@@ -21,7 +21,15 @@ alias 9='cd -9'
alias md='mkdir -p'
alias rd=rmdir
-alias d='dirs -v | head -10'
+
+function d () {
+ if [[ -n $1 ]]; then
+ dirs "$@"
+ else
+ dirs -v | head -10
+ fi
+}
+compdef _dirs d
# List directory contents
alias lsa='ls -lah'
diff --git a/lib/git.zsh b/lib/git.zsh
index b92373153..640561e97 100644
--- a/lib/git.zsh
+++ b/lib/git.zsh
@@ -10,13 +10,10 @@ function git_prompt_info() {
# Checks if working tree is dirty
function parse_git_dirty() {
- local STATUS=''
+ local STATUS
local -a FLAGS
- FLAGS=('--porcelain')
+ FLAGS=('--porcelain' '--ignore-submodules=dirty')
if [[ "$(command git config --get oh-my-zsh.hide-dirty)" != "1" ]]; then
- if [[ $POST_1_7_2_GIT -gt 0 ]]; then
- FLAGS+='--ignore-submodules=dirty'
- fi
if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" == "true" ]]; then
FLAGS+='--untracked-files=no'
fi
@@ -181,28 +178,6 @@ function git_prompt_status() {
echo $STATUS
}
-# Compares the provided version of git to the version installed and on path
-# Outputs -1, 0, or 1 if the installed version is less than, equal to, or
-# greater than the input version, respectively.
-function git_compare_version() {
- local INPUT_GIT_VERSION INSTALLED_GIT_VERSION i
- INPUT_GIT_VERSION=(${(s/./)1})
- INSTALLED_GIT_VERSION=($(command git --version 2>/dev/null))
- INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]})
-
- for i in {1..3}; do
- if [[ $INSTALLED_GIT_VERSION[$i] -gt $INPUT_GIT_VERSION[$i] ]]; then
- echo 1
- return 0
- fi
- if [[ $INSTALLED_GIT_VERSION[$i] -lt $INPUT_GIT_VERSION[$i] ]]; then
- echo -1
- return 0
- fi
- done
- echo 0
-}
-
# Outputs the name of the current user
# Usage example: $(git_current_user_name)
function git_current_user_name() {
@@ -214,8 +189,3 @@ function git_current_user_name() {
function git_current_user_email() {
command git config user.email 2>/dev/null
}
-
-# This is unlikely to change so make it all statically assigned
-POST_1_7_2_GIT=$(git_compare_version "1.7.2")
-# Clean up the namespace slightly by removing the checker function
-unfunction git_compare_version
diff --git a/lib/history.zsh b/lib/history.zsh
index d8bbd41c4..52e45bf4c 100644
--- a/lib/history.zsh
+++ b/lib/history.zsh
@@ -12,12 +12,12 @@ function omz_history {
builtin fc "$@"
else
# unless a number is provided, show all history events (starting from 1)
- [[ ${@[-1]} = *[0-9]* ]] && builtin fc -l "$@" || builtin fc -l "$@" 1
+ [[ ${@[-1]-} = *[0-9]* ]] && builtin fc -l "$@" || builtin fc -l "$@" 1
fi
}
# Timestamp format
-case $HIST_STAMPS in
+case ${HIST_STAMPS-} in
"mm/dd/yyyy") alias history='omz_history -f' ;;
"dd.mm.yyyy") alias history='omz_history -E' ;;
"yyyy-mm-dd") alias history='omz_history -i' ;;
diff --git a/lib/misc.zsh b/lib/misc.zsh
index b30822b50..40ffa479d 100644
--- a/lib/misc.zsh
+++ b/lib/misc.zsh
@@ -1,7 +1,7 @@
-## Load smart urls if available
-# bracketed-paste-magic is known buggy in zsh 5.1.1 (only), so skip it there; see #4434
autoload -Uz is-at-least
-if [[ $ZSH_VERSION != 5.1.1 ]]; then
+
+# *-magic is known buggy in some versions; disable if so
+if [[ $DISABLE_MAGIC_FUNCTIONS != true ]]; then
for d in $fpath; do
if [[ -e "$d/url-quote-magic" ]]; then
if is-at-least 5.1; then
diff --git a/lib/prompt_info_functions.zsh b/lib/prompt_info_functions.zsh
index 1d5c23e41..5069c4b21 100644
--- a/lib/prompt_info_functions.zsh
+++ b/lib/prompt_info_functions.zsh
@@ -10,9 +10,15 @@
# Dummy implementations that return false to prevent command_not_found
# errors with themes, that implement these functions
# Real implementations will be used when the respective plugins are loaded
-function chruby_prompt_info hg_prompt_info pyenv_prompt_info \
- rbenv_prompt_info svn_prompt_info vi_mode_prompt_info \
- virtualenv_prompt_info jenv_prompt_info {
+function chruby_prompt_info \
+ rbenv_prompt_info \
+ hg_prompt_info \
+ pyenv_prompt_info \
+ svn_prompt_info \
+ vi_mode_prompt_info \
+ virtualenv_prompt_info \
+ jenv_prompt_info \
+{
return 1
}
@@ -22,10 +28,13 @@ function rvm_prompt_info() {
[ -f $HOME/.rvm/bin/rvm-prompt ] || return 1
local rvm_prompt
rvm_prompt=$($HOME/.rvm/bin/rvm-prompt ${=ZSH_THEME_RVM_PROMPT_OPTIONS} 2>/dev/null)
- [[ "${rvm_prompt}x" == "x" ]] && return 1
- echo "${ZSH_THEME_RVM_PROMPT_PREFIX:=(}${rvm_prompt}${ZSH_THEME_RVM_PROMPT_SUFFIX:=)}"
+ [[ -z "${rvm_prompt}" ]] && return 1
+ echo "${ZSH_THEME_RUBY_PROMPT_PREFIX}${rvm_prompt}${ZSH_THEME_RUBY_PROMPT_SUFFIX}"
}
+ZSH_THEME_RVM_PROMPT_OPTIONS="i v g"
+
+
# use this to enable users to see their ruby version, no matter which
# version management system they use
function ruby_prompt_info() {
diff --git a/lib/theme-and-appearance.zsh b/lib/theme-and-appearance.zsh
index 96f34aa81..5016d86ca 100644
--- a/lib/theme-and-appearance.zsh
+++ b/lib/theme-and-appearance.zsh
@@ -19,7 +19,7 @@ if [[ "$DISABLE_LS_COLORS" != "true" ]]; then
# coreutils, so prefer it to "gls".
gls --color -d . &>/dev/null && alias ls='gls --color=tty'
colorls -G -d . &>/dev/null && alias ls='colorls -G'
- elif [[ "$OSTYPE" == darwin* ]]; then
+ elif [[ "$OSTYPE" == (darwin|freebsd)* ]]; then
# this is a good alias, it works by default just using $LSCOLORS
ls -G . &>/dev/null && alias ls='ls -G'
@@ -45,11 +45,10 @@ setopt prompt_subst
[[ -n "$WINDOW" ]] && SCREEN_NO="%B$WINDOW%b " || SCREEN_NO=""
-# Apply theming defaults
-PS1="%n@%m:%~%# "
-
# git theming default: Variables for theming the git info prompt
ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name
ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt
ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty
ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean
+ZSH_THEME_RUBY_PROMPT_PREFIX="("
+ZSH_THEME_RUBY_PROMPT_SUFFIX=")"
diff --git a/oh-my-zsh.sh b/oh-my-zsh.sh
index e080257c1..6b2662d5e 100644
--- a/oh-my-zsh.sh
+++ b/oh-my-zsh.sh
@@ -29,15 +29,6 @@ if [[ -z "$ZSH_CUSTOM" ]]; then
fi
-# Load all of the config files in ~/oh-my-zsh that end in .zsh
-# TIP: Add files you don't want in git to .gitignore
-for config_file ($ZSH/lib/*.zsh); do
- custom_config_file="${ZSH_CUSTOM}/lib/${config_file:t}"
- [ -f "${custom_config_file}" ] && config_file=${custom_config_file}
- source $config_file
-done
-
-
is_plugin() {
local base_dir=$1
local name=$2
@@ -53,7 +44,7 @@ for plugin ($plugins); do
elif is_plugin $ZSH $plugin; then
fpath=($ZSH/plugins/$plugin $fpath)
else
- echo "Warning: plugin $plugin not found"
+ echo "[oh-my-zsh] plugin '$plugin' not found"
fi
done
@@ -71,6 +62,7 @@ if [ -z "$ZSH_COMPDUMP" ]; then
fi
if [[ $ZSH_DISABLE_COMPFIX != true ]]; then
+ source $ZSH/lib/compfix.zsh
# If completion insecurities exist, warn the user
handle_completion_insecurities
# Load only from secure directories
@@ -80,6 +72,15 @@ else
compinit -u -C -d "${ZSH_COMPDUMP}"
fi
+
+# Load all of the config files in ~/oh-my-zsh that end in .zsh
+# TIP: Add files you don't want in git to .gitignore
+for config_file ($ZSH/lib/*.zsh); do
+ custom_config_file="${ZSH_CUSTOM}/lib/${config_file:t}"
+ [ -f "${custom_config_file}" ] && config_file=${custom_config_file}
+ source $config_file
+done
+
# Load all of the plugins that were defined in ~/.zshrc
for plugin ($plugins); do
if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then
diff --git a/plugins/archlinux/README.md b/plugins/archlinux/README.md
index 7ebe8e53d..ff2b6a4c4 100644
--- a/plugins/archlinux/README.md
+++ b/plugins/archlinux/README.md
@@ -14,7 +14,7 @@
| yalocs | yay -Qs | Search for packages in the local database |
| yalst | yay -Qe | List installed packages including from AUR (tagged as "local") |
| yamir | yay -Syy | Force refresh of all package lists after updating mirrorlist |
-| yaorph | yay -Qtd | Remove orphans using yaourt |
+| yaorph | yay -Qtd | Remove orphans using yay |
| yare | yay -R | Remove packages, keeping its settings and dependencies |
| yarem | yay -Rns | Remove packages, including its settings and unneeded dependencies |
| yarep | yay -Si | Display information about a package in the repositories |
diff --git a/plugins/autojump/autojump.plugin.zsh b/plugins/autojump/autojump.plugin.zsh
index c0af67631..13c1d00ed 100644
--- a/plugins/autojump/autojump.plugin.zsh
+++ b/plugins/autojump/autojump.plugin.zsh
@@ -1,23 +1,39 @@
-if [ $commands[autojump] ]; then # check if autojump is installed
- if [ -f $HOME/.autojump/etc/profile.d/autojump.zsh ]; then # manual user-local installation
- . $HOME/.autojump/etc/profile.d/autojump.zsh
- elif [ -f $HOME/.autojump/share/autojump/autojump.zsh ]; then # another manual user-local installation
- . $HOME/.autojump/share/autojump/autojump.zsh
- elif [ -f $HOME/.nix-profile/etc/profile.d/autojump.zsh ]; then # nix installation
- . $HOME/.nix-profile/etc/profile.d/autojump.zsh
- elif [ -f /run/current-system/sw/share/autojump/autojump.zsh ]; then # nixos installation
- . /run/current-system/sw/share/autojump/autojump.zsh
- elif [ -f /usr/share/autojump/autojump.zsh ]; then # debian and ubuntu package
- . /usr/share/autojump/autojump.zsh
- elif [ -f /etc/profile.d/autojump.zsh ]; then # manual installation
- . /etc/profile.d/autojump.zsh
- elif [ -f /etc/profile.d/autojump.sh ]; then # gentoo installation
- . /etc/profile.d/autojump.sh
- elif [ -f /usr/local/share/autojump/autojump.zsh ]; then # freebsd installation
- . /usr/local/share/autojump/autojump.zsh
- elif [ -f /opt/local/etc/profile.d/autojump.sh ]; then # mac os x with ports
- . /opt/local/etc/profile.d/autojump.sh
- elif [ $commands[brew] -a -f `brew --prefix`/etc/autojump.sh ]; then # mac os x with brew
- . `brew --prefix`/etc/autojump.sh
+(( $+commands[autojump] )) || {
+ echo '[oh-my-zsh] Please install autojump first (https://github.com/wting/autojump)'
+ return
+}
+
+declare -a autojump_paths
+autojump_paths=(
+ $HOME/.autojump/etc/profile.d/autojump.zsh # manual installation
+ $HOME/.autojump/share/autojump/autojump.zsh # manual installation
+ $HOME/.nix-profile/etc/profile.d/autojump.sh # NixOS installation
+ /run/current-system/sw/share/autojump/autojump.zsh # NixOS installation
+ /usr/share/autojump/autojump.zsh # Debian and Ubuntu package
+ /etc/profile.d/autojump.zsh # manual installation
+ /etc/profile.d/autojump.sh # Gentoo installation
+ /usr/local/share/autojump/autojump.zsh # FreeBSD installation
+ /opt/local/etc/profile.d/autojump.sh # macOS with MacPorts
+ /usr/local/etc/profile.d/autojump.sh # macOS with Homebrew (default)
+)
+
+for file in $autojump_paths; do
+ if [[ -f "$file" ]]; then
+ source "$file"
+ found=1
+ break
+ fi
+done
+
+# if no path found, try Homebrew
+if (( ! found && $+commands[brew] )); then
+ file=$(brew --prefix)/etc/profile.d/autojump.sh
+ if [[ -f "$file" ]]; then
+ source "$file"
+ found=1
fi
fi
+
+(( ! found )) && echo '[oh-my-zsh] autojump script not found'
+
+unset autojump_paths file found
diff --git a/plugins/aws/README.md b/plugins/aws/README.md
index a52024128..57c3b54ac 100644
--- a/plugins/aws/README.md
+++ b/plugins/aws/README.md
@@ -25,6 +25,8 @@ plugins=(... aws)
## Plugin options
* Set `SHOW_AWS_PROMPT=false` in your zshrc file if you want to prevent the plugin from modifying your RPROMPT.
+ Some themes might overwrite the value of RPROMPT instead of appending to it, so they'll need to be fixed to
+ see the AWS profile prompt.
## Theme
diff --git a/plugins/aws/aws.plugin.zsh b/plugins/aws/aws.plugin.zsh
index 6de329bb8..231ac5ad2 100644
--- a/plugins/aws/aws.plugin.zsh
+++ b/plugins/aws/aws.plugin.zsh
@@ -1,27 +1,35 @@
-# AWS profile selection
-
-function agp {
+function agp() {
echo $AWS_PROFILE
}
-function asp {
- export AWS_DEFAULT_PROFILE=$1
- export AWS_PROFILE=$1
- export AWS_EB_PROFILE=$1
-
+# AWS profile selection
+function asp() {
if [[ -z "$1" ]]; then
+ unset AWS_DEFAULT_PROFILE AWS_PROFILE AWS_EB_PROFILE
echo AWS profile cleared.
+ return
+ fi
+
+ local available_profiles=($(aws_profiles))
+ if [[ -z "${available_profiles[(r)$1]}" ]]; then
+ echo "${fg[red]}Profile '$1' not found in '${AWS_CONFIG_FILE:-$HOME/.aws/config}'" >&2
+ echo "Available profiles: ${(j:, :)available_profiles:-no profiles found}${reset_color}" >&2
+ return 1
fi
+
+ export AWS_DEFAULT_PROFILE=$1
+ export AWS_PROFILE=$1
+ export AWS_EB_PROFILE=$1
}
-function aws_change_access_key {
- if [[ -z "$1" ]] then
+function aws_change_access_key() {
+ if [[ -z "$1" ]]; then
echo "usage: $0 <profile>"
return 1
fi
echo Insert the credentials when asked.
- asp "$1"
+ asp "$1" || return 1
aws iam create-access-key
aws configure --profile "$1"
@@ -30,27 +38,30 @@ function aws_change_access_key {
aws iam list-access-keys
}
-function aws_profiles {
- reply=($(grep '\[profile' "${AWS_CONFIG_FILE:-$HOME/.aws/config}"|sed -e 's/.*profile \([a-zA-Z0-9_\.-]*\).*/\1/'))
+function aws_profiles() {
+ [[ -r "${AWS_CONFIG_FILE:-$HOME/.aws/config}" ]] || return 1
+ grep '\[profile' "${AWS_CONFIG_FILE:-$HOME/.aws/config}"|sed -e 's/.*profile \([a-zA-Z0-9_\.-]*\).*/\1/'
}
-compctl -K aws_profiles asp aws_change_access_key
+function _aws_profiles() {
+ reply=($(aws_profiles))
+}
+compctl -K _aws_profiles asp aws_change_access_key
# AWS prompt
-
function aws_prompt_info() {
[[ -z $AWS_PROFILE ]] && return
echo "${ZSH_THEME_AWS_PREFIX:=<aws:}${AWS_PROFILE}${ZSH_THEME_AWS_SUFFIX:=>}"
}
if [ "$SHOW_AWS_PROMPT" != false ]; then
- export RPROMPT='$(aws_prompt_info)'"$RPROMPT"
+ RPROMPT='$(aws_prompt_info)'"$RPROMPT"
fi
# Load awscli completions
-_awscli-homebrew-installed() {
+function _awscli-homebrew-installed() {
# check if Homebrew is installed
(( $+commands[brew] )) || return 1
@@ -67,11 +78,18 @@ _awscli-homebrew-installed() {
# get aws_zsh_completer.sh location from $PATH
_aws_zsh_completer_path="$commands[aws_zsh_completer.sh]"
-# otherwise check if installed via Homebrew
-if [[ -z $_aws_zsh_completer_path ]] && _awscli-homebrew-installed; then
- _aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh
-else
- _aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh
+# otherwise check common locations
+if [[ -z $_aws_zsh_completer_path ]]; then
+ # Homebrew
+ if _awscli-homebrew-installed; then
+ _aws_zsh_completer_path=$_brew_prefix/libexec/bin/aws_zsh_completer.sh
+ # Ubuntu
+ elif [[ -e /usr/share/zsh/vendor-completions/_awscli ]]; then
+ _aws_zsh_completer_path=/usr/share/zsh/vendor-completions/_awscli
+ # RPM
+ else
+ _aws_zsh_completer_path=/usr/share/zsh/site-functions/aws_zsh_completer.sh
+ fi
fi
[[ -r $_aws_zsh_completer_path ]] && source $_aws_zsh_completer_path
diff --git a/plugins/bwana/README.md b/plugins/bwana/README.md
index 8cbeaa32e..dd4fe9f9c 100644
--- a/plugins/bwana/README.md
+++ b/plugins/bwana/README.md
@@ -7,3 +7,6 @@ To use it add bwana to the plugins array in your zshrc file.
```bash
plugins=(... bwana)
```
+
+The `bwana` function opens the man page of the passed argument in the Bwana app.
+For example: `bwana ln` opens the man page for `ln` in Bwana.
diff --git a/plugins/bwana/bwana.plugin.zsh b/plugins/bwana/bwana.plugin.zsh
index b9a04793f..71c9eb18d 100644
--- a/plugins/bwana/bwana.plugin.zsh
+++ b/plugins/bwana/bwana.plugin.zsh
@@ -4,10 +4,10 @@
if [[ -e /Applications/Bwana.app ]] ||
( system_profiler -detailLevel mini SPApplicationsDataType | grep -q Bwana )
then
- function man() {
+ function bwana() {
open "man:$1"
}
else
- echo "Bwana lets you read man files in Safari through a man: URI scheme"
+ echo "Bwana lets you read man files in Safari through a man: URI scheme"
echo "To use it within Zsh, install it from https://www.bruji.com/bwana/"
fi
diff --git a/plugins/catimg/catimg.plugin.zsh b/plugins/catimg/catimg.plugin.zsh
index 5f58ecde3..ca46444cc 100644
--- a/plugins/catimg/catimg.plugin.zsh
+++ b/plugins/catimg/catimg.plugin.zsh
@@ -4,7 +4,7 @@
# #
# Ouput the content of an image to the stdout using the 256 colors of the #
# terminal. #
-# Github: https://github.com/posva/catimg #
+# GitHub: https://github.com/posva/catimg #
################################################################################
diff --git a/plugins/catimg/catimg.sh b/plugins/catimg/catimg.sh
index 83ccf6a95..713a03291 100644
--- a/plugins/catimg/catimg.sh
+++ b/plugins/catimg/catimg.sh
@@ -4,7 +4,7 @@
# #
# Ouput the content of an image to the stdout using the 256 colors of the #
# terminal. #
-# Github: https://github.com/posva/catimg #
+# GitHub: https://github.com/posva/catimg #
################################################################################
function help() {
diff --git a/plugins/cloudapp/cloudapp.plugin.zsh b/plugins/cloudapp/cloudapp.plugin.zsh
index 99252f690..3b363c81b 100644
--- a/plugins/cloudapp/cloudapp.plugin.zsh
+++ b/plugins/cloudapp/cloudapp.plugin.zsh
@@ -1,2 +1,6 @@
-#!/bin/zsh
-alias cloudapp=$ZSH/plugins/cloudapp/cloudapp.rb
+alias cloudapp="${0:a:h}/cloudapp.rb"
+
+# Ensure only the owner can access the credentials file
+if [[ -f ~/.cloudapp ]]; then
+ chmod 600 ~/.cloudapp
+fi
diff --git a/plugins/colorize/README.md b/plugins/colorize/README.md
index c006071f9..71fa87861 100644
--- a/plugins/colorize/README.md
+++ b/plugins/colorize/README.md
@@ -2,6 +2,10 @@
With this plugin you can syntax-highlight file contents of over 300 supported languages and other text formats.
+Colorize will highlight the content based on the filename extension. If it can't find a syntax-highlighting
+method for a given extension, it will try to find one by looking at the file contents. If no highlight method
+is found it will just cat the file normally, without syntax highlighting.
+
To use it, add colorize to the plugins array of your zshrc file:
```
plugins=(... colorize)
@@ -9,9 +13,16 @@ plugins=(... colorize)
## Usage
-* `ccat <file> [files]`: colorize the contents of the file (or files, if more than one are provided). If no arguments are passed it will colorize the standard input or stdin.
+* `ccat <file> [files]`: colorize the contents of the file (or files, if more than one are provided).
+ If no arguments are passed it will colorize the standard input or stdin.
+
+* `cless <file> [files]`: colorize the contents of the file (or files, if more than one are provided) and
+ open less. If no arguments are passed it will colorize the standard input or stdin.
-Colorize will highlight the content based on the filename extension. If it can't find a syntax-highlighting method for a given extension, it will try to find one by looking at the file contents. If no highlight method is found it will just cat the file normally, without syntax highlighting.
+Note that `cless` will behave as less when provided more than one file: you have to navigate files with
+the commands `:n` for next and `:p` for previous. The downside is that less options are not supported.
+But you can circumvent this by either using the LESS environment variable, or by running `ccat file1 file2|less --opts`.
+In the latter form, the file contents will be concatenated and presented by less as a single file.
## Requirements
diff --git a/plugins/colorize/colorize.plugin.zsh b/plugins/colorize/colorize.plugin.zsh
index 8eede9a94..bec9a2ac6 100644
--- a/plugins/colorize/colorize.plugin.zsh
+++ b/plugins/colorize/colorize.plugin.zsh
@@ -1,5 +1,6 @@
# easier alias to use the plugin
alias ccat='colorize_via_pygmentize'
+alias cless='colorize_via_pygmentize_less'
colorize_via_pygmentize() {
if ! (( $+commands[pygmentize] )); then
@@ -16,7 +17,7 @@ colorize_via_pygmentize() {
# guess lexer from file extension, or
# guess it from file contents if unsuccessful
local FNAME lexer
- for FNAME in $@
+ for FNAME in "$@"
do
lexer=$(pygmentize -N "$FNAME")
if [[ $lexer != text ]]; then
@@ -26,3 +27,23 @@ colorize_via_pygmentize() {
fi
done
}
+
+colorize_via_pygmentize_less() (
+ # this function is a subshell so tmp_files can be shared to cleanup function
+ declare -a tmp_files
+
+ cleanup () {
+ [[ ${#tmp_files} -gt 0 ]] && rm -f "${tmp_files[@]}"
+ exit
+ }
+ trap 'cleanup' EXIT HUP TERM INT
+
+ while (( $# != 0 )); do #TODO: filter out less opts
+ tmp_file="$(mktemp -t "tmp.colorize.XXXX.$(sed 's/\//./g' <<< "$1")")"
+ tmp_files+=("$tmp_file")
+ colorize_via_pygmentize "$1" > "$tmp_file"
+ shift 1
+ done
+
+ less -f "${tmp_files[@]}"
+)
diff --git a/plugins/debian/README.md b/plugins/debian/README.md
index a676674dc..da5675c66 100644
--- a/plugins/debian/README.md
+++ b/plugins/debian/README.md
@@ -1,75 +1,85 @@
# debian
-This plugin provides debian related zsh aliases.
+This plugin provides Debian-related aliases and functions for zsh.
+
To use it add `debian` to the plugins array in your zshrc file.
```zsh
plugins=(... debian)
```
+## Settings
+
+- `$apt_pref`: use apt or aptitude if installed, fallback is apt-get.
+- `$apt_upgr`: use upgrade or safe-upgrade (for aptitude).
+
+Set `$apt_pref` and `$apt_upgr` to whatever command you want (before sourcing Oh My Zsh) to override this behavior.
+
## Common Aliases
-| Alias | Command | Description |
-| -------- | ------------------------------------------------------------------------------|--------------------------------------------------------------------------- |
-| `age` | apt-get | Command line tool for handling packages |
-| `api` | aptitude | Same functionality as `apt-get`, provides extra options while installation |
-| `acs` | apt-cache search | Command line tool for searching apt software package cache |
-| `aps` | aptitude search | Searches installed packages using aptitude |
-| `as` | aptitude -F \"* %p -> %d \n(%v/%V)\" \ -no-gui --disable-columns search | - |
-| `afs` | apt-file search --regexp | Search file in packages |
-| `asrc` | apt-get source | Fetch source packages through `apt-get` |
-| `app` | apt-cache policy | Displays priority of package sources |
+| Alias | Command | Description |
+| ------ | ---------------------------------------------------------------------- | ---------------------------------------------------------- |
+| `age` | `apt-get` | Command line tool for handling packages |
+| `api` | `aptitude` | Same functionality as `apt-get`, provides extra options |
+| `acs` | `apt-cache search` | Command line tool for searching apt software package cache |
+| `aps` | `aptitude search` | Searches installed packages using aptitude |
+| `as` | `aptitude -F '* %p -> %d \n(%v/%V)' --no-gui --disable-columns search` | Print searched packages using a custom format |
+| `afs` | `apt-file search --regexp` | Search file in packages |
+| `asrc` | `apt-get source` | Fetch source packages through `apt-get` |
+| `app` | `apt-cache policy` | Displays priority of package sources |
## Superuser Operations Aliases
-| Alias | Command | Description |
-| -------- | -------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------- |
-| `aac` | sudo $apt_pref autoclean | Clears out the local repository of retrieved package files |
-| `abd` | sudo $apt_pref build-dep | Installs all dependencies for building packages |
-| `ac` | sudo $apt_pref clean | Clears out the local repository of retrieved package files except lock files |
-| `ad` | sudo $apt_pref update | Updates the package lists for upgrades for packages |
-| `adg` | sudo $apt_pref update && sudo $apt_pref $apt_upgr | Update and upgrade packages |
-| `adu` | sudo $apt_pref update && sudo $apt_pref dist-upgrade | Smart upgrade that handles dependencies |
-| `afu` | sudo apt-file update | Update the files in packages |
-| `au` | sudo $apt_pref $apt_upgr | - |
-| `ai` | sudo $apt_pref install | Command-line tool to install package |
-| `ail` | sed -e 's/ */ /g' -e 's/ *//' &#124; cut -s -d ' ' -f 1 &#124; "' xargs sudo $apt_pref install | Install all packages given on the command line while using only the first word of each line |
-| `ap` | sudo $apt_pref purge | Removes packages along with configuration files |
-| `ar` | sudo $apt_pref remove | Removes packages, keeps the configuration files |
-| `ads` | sudo apt-get dselect-upgrade | Installs packages from list and removes all not in the list |
-| `dia` | sudo dpkg -i ./*.deb | Install all .deb files in the current directory |
-| `di` | sudo dpkg -i | Install all .deb files in the current directory |
-| `kclean` | sudo aptitude remove -P ?and(~i~nlinux-(ima&#124;hea) ?not(~n`uname -r`)) | Remove ALL kernel images and headers EXCEPT the one in use |
-
-- `$apt_pref` - Use apt or aptitude if installed, fallback is apt-get.
-- `$apt_upgr` - Use upgrade.
+| Alias | Command | Description |
+| -------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
+| `aac` | `sudo $apt_pref autoclean` | Clears out the local repository of retrieved package files |
+| `abd` | `sudo $apt_pref build-dep` | Installs all dependencies for building packages |
+| `ac` | `sudo $apt_pref clean` | Clears out the local repository of retrieved package files except lock files |
+| `ad` | `sudo $apt_pref update` | Updates the package lists for upgrades for packages |
+| `adg` | `sudo $apt_pref update && sudo $apt_pref $apt_upgr` | Update and upgrade packages |
+| `adu` | `sudo $apt_pref update && sudo $apt_pref dist-upgrade` | Smart upgrade that handles dependencies |
+| `afu` | `sudo apt-file update` | Update the files in packages |
+| `au` | `sudo $apt_pref $apt_upgr` | Install package upgrades |
+| `ai` | `sudo $apt_pref install` | Command-line tool to install package |
+| `ail` | `sed -e 's/ */ /g' -e 's/ *//' \| cut -s -d ' ' -f 1 \| xargs sudo $apt_pref install` | Install all packages given on the command line while using only the first word of each line |
+| `ap` | `sudo $apt_pref purge` | Removes packages along with configuration files |
+| `ar` | `sudo $apt_pref remove` | Removes packages, keeps the configuration files |
+| `ads` | `sudo apt-get dselect-upgrade` | Installs packages from list and removes all not in the list |
+| `dia` | `sudo dpkg -i ./*.deb` | Install all .deb files in the current directory |
+| `di` | `sudo dpkg -i` | Install all .deb files in the current directory |
+| `kclean` | `sudo aptitude remove -P ?and(~i~nlinux-(ima\|hea) ?not(~n$(uname -r)))` | Remove ALL kernel images and headers EXCEPT the one in use |
## Aliases - Commands using `su`
-| Alias | Command |
-| -------- | ------------------------------------------------------------------------------|
-| `aac` | su -ls \'$apt_pref autoclean\' root |
-| `ac` | su -ls \'$apt_pref clean\' root |
-| `ad` | su -lc \'$apt_pref update\' root |
-| `adg` | su -lc \'$apt_pref update && aptitude $apt_upgr\' root |
-| `adu` | su -lc \'$apt_pref update && aptitude dist-upgrade\' root |
-| `afu` | su -lc "apt-file update |
-| `ag` | su -lc \'$apt_pref $apt_upgr\' root |
-| `dia` | su -lc "dpkg -i ./*.deb" root |
+| Alias | Command |
+| ----- | --------------------------------------------------------- |
+| `aac` | `su -ls "$apt_pref autoclean" root` |
+| `ac` | `su -ls "$apt_pref clean" root` |
+| `ad` | `su -lc "$apt_pref update" root` |
+| `adg` | `su -lc "$apt_pref update && aptitude $apt_upgr" root` |
+| `adu` | `su -lc "$apt_pref update && aptitude dist-upgrade" root` |
+| `afu` | `su -lc "apt-file update"` |
+| `au` | `su -lc "$apt_pref $apt_upgr" root` |
+| `dia` | `su -lc "dpkg -i ./*.deb" root` |
## Miscellaneous Aliases
-| Alias | Command | Description |
-| -------- | -------------------------------------------------|---------------------------------------- |
-| `allpkgs`| aptitude search -F "%p" --disable-columns ~i | Display all installed packages |
-| `mydeb` | time dpkg-buildpackage -rfakeroot -us -uc | Create a basic .deb package |
+| Alias | Command | Description |
+| --------- | ---------------------------------------------- | ------------------------------ |
+| `allpkgs` | `aptitude search -F "%p" --disable-columns ~i` | Display all installed packages |
+| `mydeb` | `time dpkg-buildpackage -rfakeroot -us -uc` | Create a basic .deb package |
## Functions
-| Fucntion | Description |
-|-----------------------|-------------------------------------------------------------------------------|
-| `apt-copy` | Create a simple script that can be used to 'duplicate' a system |
-| `apt-history` | Displays apt history for a command |
-| `kerndeb` | Builds kernel packages |
-| `apt-list-packages` | List packages by size |
+| Function | Description |
+| ------------------- | --------------------------------------------------------------- |
+| `apt-copy` | Create a simple script that can be used to 'duplicate' a system |
+| `apt-history` | Displays apt history for a command |
+| `kerndeb` | Builds kernel packages |
+| `apt-list-packages` | List packages by size |
+
+## Authors
+- [@AlexBio](https://github.com/AlexBio)
+- [@dbb](https://github.com/dbb)
+- [@Mappleconfusers](https://github.com/Mappleconfusers)
diff --git a/plugins/debian/debian.plugin.zsh b/plugins/debian/debian.plugin.zsh
index 654b692d2..be4062ebf 100644
--- a/plugins/debian/debian.plugin.zsh
+++ b/plugins/debian/debian.plugin.zsh
@@ -1,25 +1,21 @@
-# Authors:
-# https://github.com/AlexBio
-# https://github.com/dbb
-# https://github.com/Mappleconfusers
-#
-# Debian-related zsh aliases and functions for zsh
-
# Use apt or aptitude if installed, fallback is apt-get
# You can just set apt_pref='apt-get' to override it.
-if [[ -e $( which -p apt 2>&1 ) ]]; then
- apt_pref='apt'
- apt_upgr='upgrade'
-elif [[ -e $( which -p aptitude 2>&1 ) ]]; then
- apt_pref='aptitude'
- apt_upgr='safe-upgrade'
-else
- apt_pref='apt-get'
- apt_upgr='upgrade'
+
+if [[ -z $apt_pref || -z $apt_upgr ]]; then
+ if [[ -e $commands[apt] ]]; then
+ apt_pref='apt'
+ apt_upgr='upgrade'
+ elif [[ -e $commands[aptitude] ]]; then
+ apt_pref='aptitude'
+ apt_upgr='safe-upgrade'
+ else
+ apt_pref='apt-get'
+ apt_upgr='upgrade'
+ fi
fi
# Use sudo by default if it's installed
-if [[ -e $( which -p sudo 2>&1 ) ]]; then
+if [[ -e $commands[sudo] ]]; then
use_sudo=1
fi
@@ -32,8 +28,7 @@ alias api='aptitude'
# Some self-explanatory aliases
alias acs="apt-cache search"
alias aps='aptitude search'
-alias as="aptitude -F \"* %p -> %d \n(%v/%V)\" \
- --no-gui --disable-columns search" # search package
+alias as="aptitude -F '* %p -> %d \n(%v/%V)' --no-gui --disable-columns search"
# apt-file
alias afs='apt-file search --regexp'
@@ -46,49 +41,48 @@ alias app='apt-cache policy'
# superuser operations ######################################################
if [[ $use_sudo -eq 1 ]]; then
# commands using sudo #######
- alias aac='sudo $apt_pref autoclean'
- alias abd='sudo $apt_pref build-dep'
- alias ac='sudo $apt_pref clean'
- alias ad='sudo $apt_pref update'
- alias adg='sudo $apt_pref update && sudo $apt_pref $apt_upgr'
- alias adu='sudo $apt_pref update && sudo $apt_pref dist-upgrade'
- alias afu='sudo apt-file update'
- alias au='sudo $apt_pref $apt_upgr'
- alias ai='sudo $apt_pref install'
+ alias aac="sudo $apt_pref autoclean"
+ alias abd="sudo $apt_pref build-dep"
+ alias ac="sudo $apt_pref clean"
+ alias ad="sudo $apt_pref update"
+ alias adg="sudo $apt_pref update && sudo $apt_pref $apt_upgr"
+ alias adu="sudo $apt_pref update && sudo $apt_pref dist-upgrade"
+ alias afu="sudo apt-file update"
+ alias au="sudo $apt_pref $apt_upgr"
+ alias ai="sudo $apt_pref install"
# Install all packages given on the command line while using only the first word of each line:
# acs ... | ail
- alias ail="sed -e 's/ */ /g' -e 's/ *//' | cut -s -d ' ' -f 1 | "' xargs sudo $apt_pref install'
- alias ap='sudo $apt_pref purge'
- alias ar='sudo $apt_pref remove'
+ alias ail="sed -e 's/ */ /g' -e 's/ *//' | cut -s -d ' ' -f 1 | xargs sudo $apt_pref install"
+ alias ap="sudo $apt_pref purge"
+ alias ar="sudo $apt_pref remove"
# apt-get only
- alias ads='sudo apt-get dselect-upgrade'
+ alias ads="sudo apt-get dselect-upgrade"
# Install all .deb files in the current directory.
# Warning: you will need to put the glob in single quotes if you use:
# glob_subst
- alias dia='sudo dpkg -i ./*.deb'
- alias di='sudo dpkg -i'
+ alias dia="sudo dpkg -i ./*.deb"
+ alias di="sudo dpkg -i"
# Remove ALL kernel images and headers EXCEPT the one in use
- alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) \
- ?not(~n`uname -r`))'
+ alias kclean='sudo aptitude remove -P ?and(~i~nlinux-(ima|hea) ?not(~n$(uname -r)))'
# commands using su #########
else
- alias aac='su -ls \'$apt_pref autoclean\' root'
+ alias aac="su -ls '$apt_pref autoclean' root"
abd() {
cmd="su -lc '$apt_pref build-dep $@' root"
print "$cmd"
eval "$cmd"
}
- alias ac='su -ls \'$apt_pref clean\' root'
- alias ad='su -lc \'$apt_pref update\' root'
- alias adg='su -lc \'$apt_pref update && aptitude $apt_upgr\' root'
- alias adu='su -lc \'$apt_pref update && aptitude dist-upgrade\' root'
- alias afu='su -lc "apt-file update"'
- alias ag='su -lc \'$apt_pref $apt_upgr\' root'
+ alias ac="su -ls '$apt_pref clean' root"
+ alias ad="su -lc '$apt_pref update' root"
+ alias adg="su -lc '$apt_pref update && aptitude $apt_upgr' root"
+ alias adu="su -lc '$apt_pref update && aptitude dist-upgrade' root"
+ alias afu="su -lc '$apt-file update'"
+ alias au="su -lc '$apt_pref $apt_upgr' root"
ai() {
cmd="su -lc 'aptitude -P install $@' root"
print "$cmd"
@@ -111,8 +105,7 @@ else
alias di='su -lc "dpkg -i" root'
# Remove ALL kernel images and headers EXCEPT the one in use
- alias kclean='su -lc '\''aptitude remove -P ?and(~i~nlinux-(ima|hea) \
- ?not(~n`uname -r`))'\'' root'
+ alias kclean='su -lc "aptitude remove -P ?and(~i~nlinux-(ima|hea) ?not(~n$(uname -r)))" root'
fi
# Completion ################################################################
@@ -126,11 +119,11 @@ apt_pref_compdef() {
f="_apt_pref_${2}"
eval "function ${f}() {
- shift words;
- service=\"\$apt_pref\";
- words=(\"\$apt_pref\" '$2' \$words);
- ((CURRENT++))
- test \"\${apt_pref}\" = 'aptitude' && _aptitude || _apt
+ shift words;
+ service=\"\$apt_pref\";
+ words=(\"\$apt_pref\" '$2' \$words);
+ ((CURRENT++))
+ test \"\${apt_pref}\" = 'aptitude' && _aptitude || _apt
}"
compdef "$f" "$1"
@@ -141,7 +134,7 @@ apt_pref_compdef abd "build-dep"
apt_pref_compdef ac "clean"
apt_pref_compdef ad "update"
apt_pref_compdef afu "update"
-apt_pref_compdef ag "$apt_upgr"
+apt_pref_compdef au "$apt_upgr"
apt_pref_compdef ai "install"
apt_pref_compdef ail "install"
apt_pref_compdef ap "purge"
@@ -213,7 +206,7 @@ kerndeb () {
# temporarily unset MAKEFLAGS ( '-j3' will fail )
MAKEFLAGS=$( print - $MAKEFLAGS | perl -pe 's/-j\s*[\d]+//g' )
print '$MAKEFLAGS set to '"'$MAKEFLAGS'"
- appendage='-custom' # this shows up in $ (uname -r )
+ appendage='-custom' # this shows up in $(uname -r )
revision=$(date +"%Y%m%d") # this shows up in the .deb file name
make-kpkg clean
diff --git a/plugins/django/django.plugin.zsh b/plugins/django/django.plugin.zsh
index 29a51d29d..86558ff2e 100644
--- a/plugins/django/django.plugin.zsh
+++ b/plugins/django/django.plugin.zsh
@@ -154,7 +154,7 @@ _managepy-makemessages(){
"--no-default-ignore[Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and '*.pyc'.]" \
"--no-wrap[Don't break long message lines into several lines.]" \
"--no-location[Don't write '#: filename:line' lines.]" \
- '--no-obsolete[emove obsolete message strings.]' \
+ '--no-obsolete[Remove obsolete message strings.]' \
'--keep-pot[Keep .pot file after making messages.]' \
$nul_args && ret=0
}
diff --git a/plugins/docker-compose/_docker-compose b/plugins/docker-compose/_docker-compose
index c0a54cced..808b068a3 100644
--- a/plugins/docker-compose/_docker-compose
+++ b/plugins/docker-compose/_docker-compose
@@ -23,7 +23,7 @@ __docker-compose_all_services_in_compose_file() {
local already_selected
local -a services
already_selected=$(echo $words | tr " " "|")
- __docker-compose_q config --services \
+ __docker-compose_q ps --services "$@" \
| grep -Ev "^(${already_selected})$"
}
@@ -31,125 +31,42 @@ __docker-compose_all_services_in_compose_file() {
__docker-compose_services_all() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
- services=$(__docker-compose_all_services_in_compose_file)
+ services=$(__docker-compose_all_services_in_compose_file "$@")
_alternative "args:services:($services)" && ret=0
return ret
}
-# All services that have an entry with the given key in their docker-compose.yml section
-__docker-compose_services_with_key() {
- local already_selected
- local -a buildable
- already_selected=$(echo $words | tr " " "|")
- # flatten sections to one line, then filter lines containing the key and return section name.
- __docker-compose_q config \
- | sed -n -e '/^services:/,/^[^ ]/p' \
- | sed -n 's/^ //p' \
- | awk '/^[a-zA-Z0-9]/{printf "\n"};{printf $0;next;}' \
- | grep " \+$1:" \
- | cut -d: -f1 \
- | grep -Ev "^(${already_selected})$"
-}
-
# All services that are defined by a Dockerfile reference
__docker-compose_services_from_build() {
[[ $PREFIX = -* ]] && return 1
- integer ret=1
- buildable=$(__docker-compose_services_with_key build)
- _alternative "args:buildable services:($buildable)" && ret=0
-
- return ret
+ __docker-compose_services_all --filter source=build
}
# All services that are defined by an image
__docker-compose_services_from_image() {
[[ $PREFIX = -* ]] && return 1
- integer ret=1
- pullable=$(__docker-compose_services_with_key image)
- _alternative "args:pullable services:($pullable)" && ret=0
-
- return ret
-}
-
-__docker-compose_get_services() {
- [[ $PREFIX = -* ]] && return 1
- integer ret=1
- local kind
- declare -a running paused stopped lines args services
-
- docker_status=$(docker ps > /dev/null 2>&1)
- if [ $? -ne 0 ]; then
- _message "Error! Docker is not running."
- return 1
- fi
-
- kind=$1
- shift
- [[ $kind =~ (stopped|all) ]] && args=($args -a)
-
- lines=(${(f)"$(_call_program commands docker $docker_options ps $args)"})
- services=(${(f)"$(_call_program commands docker-compose 2>/dev/null $compose_options ps -q)"})
-
- # Parse header line to find columns
- local i=1 j=1 k header=${lines[1]}
- declare -A begin end
- while (( j < ${#header} - 1 )); do
- i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
- j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
- k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
- begin[${header[$i,$((j-1))]}]=$i
- end[${header[$i,$((j-1))]}]=$k
- done
- lines=(${lines[2,-1]})
-
- # Container ID
- local line s name
- local -a names
- for line in $lines; do
- if [[ ${services[@]} == *"${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"* ]]; then
- names=(${(ps:,:)${${line[${begin[NAMES]},-1]}%% *}})
- for name in $names; do
- s="${${name%_*}#*_}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}"
- s="$s, ${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"
- s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}"
- if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then
- stopped=($stopped $s)
- else
- if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = *\(Paused\)* ]]; then
- paused=($paused $s)
- fi
- running=($running $s)
- fi
- done
- fi
- done
-
- [[ $kind =~ (running|all) ]] && _describe -t services-running "running services" running "$@" && ret=0
- [[ $kind =~ (paused|all) ]] && _describe -t services-paused "paused services" paused "$@" && ret=0
- [[ $kind =~ (stopped|all) ]] && _describe -t services-stopped "stopped services" stopped "$@" && ret=0
-
- return ret
+ __docker-compose_services_all --filter source=image
}
__docker-compose_pausedservices() {
[[ $PREFIX = -* ]] && return 1
- __docker-compose_get_services paused "$@"
+ __docker-compose_services_all --filter status=paused
}
__docker-compose_stoppedservices() {
[[ $PREFIX = -* ]] && return 1
- __docker-compose_get_services stopped "$@"
+ __docker-compose_services_all --filter status=stopped
}
__docker-compose_runningservices() {
[[ $PREFIX = -* ]] && return 1
- __docker-compose_get_services running "$@"
+ __docker-compose_services_all --filter status=running
}
__docker-compose_services() {
[[ $PREFIX = -* ]] && return 1
- __docker-compose_get_services all "$@"
+ __docker-compose_services_all
}
__docker-compose_caching_policy() {
@@ -196,9 +113,12 @@ __docker-compose_subcommand() {
$opts_help \
"*--build-arg=[Set build-time variables for one service.]:<varname>=<value>: " \
'--force-rm[Always remove intermediate containers.]' \
- '--memory[Memory limit for the build container.]' \
+ '(--quiet -q)'{--quiet,-q}'[Curb build output]' \
+ '(--memory -m)'{--memory,-m}'[Memory limit for the build container.]' \
'--no-cache[Do not use cache when building the image.]' \
'--pull[Always attempt to pull a newer version of the image.]' \
+ '--compress[Compress the build context using gzip.]' \
+ '--parallel[Build images in parallel.]' \
'*:services:__docker-compose_services_from_build' && ret=0
;;
(bundle)
@@ -213,7 +133,8 @@ __docker-compose_subcommand() {
'(--quiet -q)'{--quiet,-q}"[Only validate the configuration, don't print anything.]" \
'--resolve-image-digests[Pin image tags to digests.]' \
'--services[Print the service names, one per line.]' \
- '--volumes[Print the volume names, one per line.]' && ret=0
+ '--volumes[Print the volume names, one per line.]' \
+ '--hash[Print the service config hash, one per line. Set "service1,service2" for a list of specified services.]' \ && ret=0
;;
(create)
_arguments \
@@ -222,11 +143,12 @@ __docker-compose_subcommand() {
$opts_no_recreate \
$opts_no_build \
"(--no-build)--build[Build images before creating containers.]" \
- '*:services:__docker-compose_services_all' && ret=0
+ '*:services:__docker-compose_services' && ret=0
;;
(down)
_arguments \
$opts_help \
+ $opts_timeout \
"--rmi[Remove images. Type must be one of: 'all': Remove all images used by any service. 'local': Remove only images that don't have a custom tag set by the \`image\` field.]:type:(all local)" \
'(-v --volumes)'{-v,--volumes}"[Remove named volumes declared in the \`volumes\` section of the Compose file and anonymous volumes attached to containers.]" \
$opts_remove_orphans && ret=0
@@ -235,16 +157,18 @@ __docker-compose_subcommand() {
_arguments \
$opts_help \
'--json[Output events as a stream of json objects]' \
- '*:services:__docker-compose_services_all' && ret=0
+ '*:services:__docker-compose_services' && ret=0
;;
(exec)
_arguments \
$opts_help \
'-d[Detached mode: Run command in the background.]' \
'--privileged[Give extended privileges to the process.]' \
- '(-u --user)'{-u,--user=}'[Run the command as this user.]:username:_users' \
+ '(-u --user)'{-u,--user=}'[Run the command as this user.]:username:_users' \
'-T[Disable pseudo-tty allocation. By default `docker-compose exec` allocates a TTY.]' \
'--index=[Index of the container if there are multiple instances of a service \[default: 1\]]:index: ' \
+ '*'{-e,--env}'[KEY=VAL Set an environment variable (can be used multiple times)]:environment variable KEY=VAL: ' \
+ '(-w --workdir)'{-w,--workdir=}'[Working directory inside the container]:workdir: ' \
'(-):running services:__docker-compose_runningservices' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
@@ -252,12 +176,12 @@ __docker-compose_subcommand() {
(help)
_arguments ':subcommand:__docker-compose_commands' && ret=0
;;
- (images)
- _arguments \
- $opts_help \
- '-q[Only display IDs]' \
- '*:services:__docker-compose_services_all' && ret=0
- ;;
+ (images)
+ _arguments \
+ $opts_help \
+ '-q[Only display IDs]' \
+ '*:services:__docker-compose_services' && ret=0
+ ;;
(kill)
_arguments \
$opts_help \
@@ -271,7 +195,7 @@ __docker-compose_subcommand() {
$opts_no_color \
'--tail=[Number of lines to show from the end of the logs for each container.]:number of lines: ' \
'(-t --timestamps)'{-t,--timestamps}'[Show timestamps]' \
- '*:services:__docker-compose_services_all' && ret=0
+ '*:services:__docker-compose_services' && ret=0
;;
(pause)
_arguments \
@@ -290,12 +214,16 @@ __docker-compose_subcommand() {
_arguments \
$opts_help \
'-q[Only display IDs]' \
- '*:services:__docker-compose_services_all' && ret=0
+ '--filter KEY=VAL[Filter services by a property]:<filtername>=<value>:' \
+ '*:services:__docker-compose_services' && ret=0
;;
(pull)
_arguments \
$opts_help \
'--ignore-pull-failures[Pull what it can and ignores images with pull failures.]' \
+ '--no-parallel[Disable parallel pulling]' \
+ '(-q --quiet)'{-q,--quiet}'[Pull without printing progress information]' \
+ '--include-deps[Also pull services declared as dependencies]' \
'*:services:__docker-compose_services_from_image' && ret=0
;;
(push)
@@ -317,6 +245,7 @@ __docker-compose_subcommand() {
$opts_no_deps \
'-d[Detached mode: Run container in the background, print new container name.]' \
'*-e[KEY=VAL Set an environment variable (can be used multiple times)]:environment variable KEY=VAL: ' \
+ '*'{-l,--label}'[KEY=VAL Add or override a label (can be used multiple times)]:label KEY=VAL: ' \
'--entrypoint[Overwrite the entrypoint of the image.]:entry point: ' \
'--name=[Assign a name to the container]:name: ' \
'(-p --publish)'{-p,--publish=}"[Publish a container's port(s) to the host]" \
@@ -326,6 +255,7 @@ __docker-compose_subcommand() {
'(-u --user)'{-u,--user=}'[Run as specified username or uid]:username or uid:_users' \
'(-v --volume)*'{-v,--volume=}'[Bind mount a volume]:volume: ' \
'(-w --workdir)'{-w,--workdir=}'[Working directory inside the container]:workdir: ' \
+ "--use-aliases[Use the services network aliases in the network(s) the container connects to]" \
'(-):services:__docker-compose_services' \
'(-):command: _command_names -e' \
'*::arguments: _normal' && ret=0
@@ -369,8 +299,10 @@ __docker-compose_subcommand() {
"(--no-build)--build[Build images before starting containers.]" \
"(-d)--abort-on-container-exit[Stops all containers if any container was stopped. Incompatible with -d.]" \
'(-t --timeout)'{-t,--timeout}"[Use this timeout in seconds for container shutdown when attached or when containers are already running. (default: 10)]:seconds: " \
+ '--scale[SERVICE=NUM Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present.]:service scale SERVICE=NUM: ' \
+ '--exit-code-from=[Return the exit code of the selected service container. Implies --abort-on-container-exit]:service:__docker-compose_services' \
$opts_remove_orphans \
- '*:services:__docker-compose_services_all' && ret=0
+ '*:services:__docker-compose_services' && ret=0
;;
(version)
_arguments \
@@ -409,8 +341,11 @@ _docker-compose() {
'(- :)'{-h,--help}'[Get help]' \
'*'{-f,--file}"[${file_description}]:file:_files -g '*.yml'" \
'(-p --project-name)'{-p,--project-name}'[Specify an alternate project name (default: directory name)]:project name:' \
- '--verbose[Show more output]' \
+ "--compatibility[If set, Compose will attempt to convert keys in v3 files to their non-Swarm equivalent]" \
'(- :)'{-v,--version}'[Print version and exit]' \
+ '--verbose[Show more output]' \
+ '--log-level=[Set log level]:level:(DEBUG INFO WARNING ERROR CRITICAL)' \
+ '--no-ansi[Do not print ANSI control characters]' \
'(-H --host)'{-H,--host}'[Daemon socket to connect to]:host:' \
'--tls[Use TLS; implied by --tlsverify]' \
'--tlscacert=[Trust certs signed only by this CA]:ca path:' \
@@ -421,7 +356,7 @@ _docker-compose() {
'(-): :->command' \
'(-)*:: :->option-or-argument' && ret=0
- local -a relevant_compose_flags relevant_docker_flags compose_options docker_options
+ local -a relevant_compose_flags relevant_compose_repeatable_flags relevant_docker_flags compose_options docker_options
relevant_compose_flags=(
"--file" "-f"
@@ -435,6 +370,10 @@ _docker-compose() {
"--skip-hostname-check"
)
+ relevant_compose_repeatable_flags=(
+ "--file" "-f"
+ )
+
relevant_docker_flags=(
"--host" "-H"
"--tls"
@@ -452,9 +391,18 @@ _docker-compose() {
fi
fi
if [[ -n "${relevant_compose_flags[(r)$k]}" ]]; then
- compose_options+=$k
- if [[ -n "$opt_args[$k]" ]]; then
- compose_options+=$opt_args[$k]
+ if [[ -n "${relevant_compose_repeatable_flags[(r)$k]}" ]]; then
+ values=("${(@s/:/)opt_args[$k]}")
+ for value in $values
+ do
+ compose_options+=$k
+ compose_options+=$value
+ done
+ else
+ compose_options+=$k
+ if [[ -n "$opt_args[$k]" ]]; then
+ compose_options+=$opt_args[$k]
+ fi
fi
fi
done
diff --git a/plugins/dotenv/README.md b/plugins/dotenv/README.md
index e880e9d69..cac552485 100644
--- a/plugins/dotenv/README.md
+++ b/plugins/dotenv/README.md
@@ -32,6 +32,17 @@ PORT=3001
```
You can even mix both formats, although it's probably a bad idea.
+### ZSH_DOTENV_FILE
+
+You can also modify the name of the file to be loaded with the variable `ZSH_DOTENV_FILE`.
+If the variable isn't set, the plugin will default to use `.env`.
+For example, this will make the plugin look for files named `.dotenv` and load them:
+
+```
+# in ~/.zshrc, before Oh My Zsh is sourced:
+ZSH_DOTENV_FILE=.dotenv
+```
+
## Version Control
**It's strongly recommended to add `.env` file to `.gitignore`**, because usually it contains sensitive information such as your credentials, secret keys, passwords etc. You don't want to commit this file, it's supposed to be local only.
diff --git a/plugins/dotenv/dotenv.plugin.zsh b/plugins/dotenv/dotenv.plugin.zsh
index b701b5596..89763d0ee 100644
--- a/plugins/dotenv/dotenv.plugin.zsh
+++ b/plugins/dotenv/dotenv.plugin.zsh
@@ -1,13 +1,13 @@
source_env() {
- if [[ -f .env ]]; then
+ if [[ -f $ZSH_DOTENV_FILE ]]; then
# test .env syntax
- zsh -fn .env || echo 'dotenv: error when sourcing `.env` file' >&2
+ zsh -fn $ZSH_DOTENV_FILE || echo "dotenv: error when sourcing '$ZSH_DOTENV_FILE' file" >&2
if [[ -o a ]]; then
- source .env
+ source $ZSH_DOTENV_FILE
else
set -a
- source .env
+ source $ZSH_DOTENV_FILE
set +a
fi
fi
@@ -16,4 +16,8 @@ source_env() {
autoload -U add-zsh-hook
add-zsh-hook chpwd source_env
+if [[ -z $ZSH_DOTENV_FILE ]]; then
+ ZSH_DOTENV_FILE=.env
+fi
+
source_env
diff --git a/plugins/drush/README.md b/plugins/drush/README.md
new file mode 100644
index 000000000..df7b82bdd
--- /dev/null
+++ b/plugins/drush/README.md
@@ -0,0 +1,83 @@
+# Drush
+
+## Description
+This plugin offers aliases and functions to make the work with drush easier and more productive.
+
+To enable it, add the `drush` to your `plugins` array in `~/.zshrc`:
+
+```
+plugins=(... drush)
+```
+
+## Aliases
+| Alias | Description | Command |
+|-------|-----------------------------------------------------------------------|-----------------------------|
+| dr | Display drush help | drush |
+| drca | Clear all drupal caches. | drush cc all |
+| drcb | Clear block cache. | drush cc block |
+| drcg | Clear registry cache. | drush cc registry |
+| drcj | Clear css-js cache. | drush cc css-js |
+| drcm | Clear menu cache. | drush cc menu |
+| drcml | Clear module-list cache. | drush cc module-list |
+| drcr | Run all cron hooks in all active modules for specified site. | drush core-cron |
+| drct | Clear theme-registry cache. | drush cc theme-registry |
+| drcv | Clear views cache. (Make sure that the views module is enabled) | drush cc views |
+| drdmp | Backup database in a new dump.sql file | drush drush sql-dump --ordered-dump --result-file=dump.sql|
+| drf | Display features status | drush features |
+| drfr | Revert a feature module on your site. | drush features-revert -y |
+| drfu | Update a feature module on your site. | drush features-update -y |
+| drfra | Revert all enabled feature module on your site. | drush features-revert-all |
+| drif | Flush all derived images. | drush image-flush --all |
+| drpm | Show a list of available modules. | drush pm-list --type=module |
+| drst | Provides a birds-eye view of the current Drupal installation, if any. | drush core-status |
+| drup | Apply any database updates required (as with running update.php). | drush updatedb |
+| drups | List any pending database updates. | drush updatedb-status |
+| drv | Show drush version. | drush version |
+| drvd | Delete a variable. | drush variable-del |
+| drvg | Get a list of some or all site variables and values. | drush variable-get |
+| drvs | Set a variable. | drush variable-set |
+
+## Functions
+
+### dren
+Download and enable one or more extensions (modules or themes).
+Must be invoked with one or more parameters. e.g.:
+`dren devel` or `dren devel module_filter views`
+
+### drf
+Edit drushrc, site alias, and Drupal settings.php files.
+Can be invoked with one or without parameters. e.g.:
+`drf 1`
+
+### dris
+Disable one or more extensions (modules or themes)
+Must be invoked with one or more parameters. e.g.:
+`dris devel` or `dris devel module_filter views`
+
+### drpu
+Uninstall one or more modules.
+Must be invoked with one or more parameters. e.g.:
+`drpu devel` or `drpu devel module_filter views`
+
+### drnew
+Creates a brand new drupal website.
+Note: As soon as the installation is complete, drush will print a username and a random password into the terminal:
+```
+Installation complete. User name: admin User password: cf7t8yqNEm
+```
+
+## Additional features
+
+### Autocomplete
+The [completion script for drush](https://github.com/drush-ops/drush/blob/8.0.1/drush.complete.sh) comes enabled with this plugin.
+So, it is possible to type a command:
+```
+drush sql
+```
+
+And as soon as the tab key is pressed, the script will display the available commands:
+```
+drush sql
+sqlc sql-conf sql-create sql-dump sql-query sql-sanitize
+sql-cli sql-connect sql-drop sqlq sqlsan sql-sync
+```
diff --git a/plugins/drush/drush.complete.sh b/plugins/drush/drush.complete.sh
new file mode 100644
index 000000000..38b882ec3
--- /dev/null
+++ b/plugins/drush/drush.complete.sh
@@ -0,0 +1,50 @@
+# BASH completion script for Drush.
+#
+# Place this in your /etc/bash_completion.d/ directory or source it from your
+# ~/.bash_completion or ~/.bash_profile files. Alternatively, source
+# examples/example.bashrc instead, as it will automatically find and source
+# this file.
+#
+# If you're using ZSH instead of BASH, add the following to your ~/.zshrc file
+# and source it.
+#
+# autoload bashcompinit
+# bashcompinit
+# source /path/to/your/drush.complete.sh
+
+# Ensure drush is available.
+which drush > /dev/null || alias drush &> /dev/null || return
+
+__drush_ps1() {
+ f="${TMPDIR:-/tmp/}/drush-env-${USER}/drush-drupal-site-$$"
+ if [ -f $f ]
+ then
+ __DRUPAL_SITE=$(cat "$f")
+ else
+ __DRUPAL_SITE="$DRUPAL_SITE"
+ fi
+
+ # Set DRUSH_PS1_SHOWCOLORHINTS to a non-empty value and define a
+ # __drush_ps1_colorize_alias() function for color hints in your Drush PS1
+ # prompt. See example.prompt.sh for an example implementation.
+ if [ -n "${__DRUPAL_SITE-}" ] && [ -n "${DRUSH_PS1_SHOWCOLORHINTS-}" ]; then
+ __drush_ps1_colorize_alias
+ fi
+
+ [[ -n "$__DRUPAL_SITE" ]] && printf "${1:- (%s)}" "$__DRUPAL_SITE"
+}
+
+# Completion function, uses the "drush complete" command to retrieve
+# completions for a specific command line COMP_WORDS.
+_drush_completion() {
+ # Set IFS to newline (locally), since we only use newline separators, and
+ # need to retain spaces (or not) after completions.
+ local IFS=$'\n'
+ # The '< /dev/null' is a work around for a bug in php libedit stdin handling.
+ # Note that libedit in place of libreadline in some distributions. See:
+ # https://bugs.launchpad.net/ubuntu/+source/php5/+bug/322214
+ COMPREPLY=( $(drush --early=includes/complete.inc "${COMP_WORDS[@]}" < /dev/null 2> /dev/null) )
+}
+
+# Register our completion function. We include common short aliases for Drush.
+complete -o bashdefault -o default -o nospace -F _drush_completion d dr drush drush5 drush6 drush7 drush8 drush.php
diff --git a/plugins/drush/drush.plugin.zsh b/plugins/drush/drush.plugin.zsh
new file mode 100644
index 000000000..8a20d79f2
--- /dev/null
+++ b/plugins/drush/drush.plugin.zsh
@@ -0,0 +1,104 @@
+# Drush support.
+
+function dren() {
+ drush en $@ -y
+}
+
+function dris() {
+ drush pm-disable $@ -y
+}
+
+function drpu() {
+ drush pm-uninstall $@ -y
+}
+
+function drf() {
+ if [[ $1 == "" ]] then
+ drush core-config
+ else
+ drush core-config --choice=$1
+ fi
+}
+
+function drfi() {
+ if [[ $1 == "fields" ]]; then
+ drush field-info fields
+ elif [[ $1 == "types" ]]; then
+ drush field-info types
+ else
+ drush field-info
+ fi
+}
+
+function drnew() {
+
+ cd ~
+ echo "Website's name: "
+ read WEBSITE_NAME
+
+ HOST=http://$(hostname -i)/
+
+ if [[ $WEBSITE_NAME == "" ]] then
+ MINUTES=$(date +%M:%S)
+ WEBSITE_NAME="Drupal-$MINUTES"
+ echo "Your website will be named: $WEBSITE_NAME"
+ fi
+
+ drush dl drupal --drupal-project-rename=$WEBSITE_NAME
+
+ echo "Type your localhost directory: (Leave empty for /var/www/html/)"
+ read DIRECTORY
+
+ if [[ $DIRECTORY == "" ]] then
+ DIRECTORY="/var/www/html/"
+ fi
+
+ echo "Moving to $DIRECTORY$WEBSITE_NAME"
+ sudo mv $WEBSITE_NAME $DIRECTORY
+ cd $DIRECTORY$WEBSITE_NAME
+
+ echo "Database's user: "
+ read DATABASE_USR
+ echo "Database's password: "
+ read -s DATABASE_PWD
+ echo "Database's name for your project: "
+ read DATABASE
+
+ DB_URL="mysql://$DATABASE_USR:$DATABASE_PWD@localhost/$DATABASE"
+ drush site-install standard --db-url=$DB_URL --site-name=$WEBSITE_NAME
+
+ open_command $HOST$WEBSITE_NAME
+ echo "Done"
+
+}
+
+# Aliases, sorted alphabetically.
+alias dr="drush"
+alias drca="drush cc all" # Deprecated for Drush 8
+alias drcb="drush cc block" # Deprecated for Drush 8
+alias drcg="drush cc registry" # Deprecated for Drush 8
+alias drcj="drush cc css-js"
+alias drcm="drush cc menu"
+alias drcml="drush cc module-list"
+alias drcr="drush core-cron"
+alias drct="drush cc theme-registry"
+alias drcv="drush cc views"
+alias drdmp="drush sql-dump --ordered-dump --result-file=dump.sql"
+alias drf="drush features"
+alias drfr="drush features-revert -y"
+alias drfu="drush features-update -y"
+alias drfra="drush features-revert-all"
+alias drif="drush image-flush --all"
+alias drpm="drush pm-list --type=module"
+alias drst="drush core-status"
+alias drup="drush updatedb"
+alias drups="drush updatedb-status"
+alias drv="drush version"
+alias drvd="drush variable-del"
+alias drvg="drush variable-get"
+alias drvs="drush variable-set"
+
+# Enable drush autocomplete support
+autoload bashcompinit
+bashcompinit
+source $(dirname $0)/drush.complete.sh
diff --git a/plugins/emotty/emotty.plugin.zsh b/plugins/emotty/emotty.plugin.zsh
index b0d24c322..e288b5cfb 100644
--- a/plugins/emotty/emotty.plugin.zsh
+++ b/plugins/emotty/emotty.plugin.zsh
@@ -25,8 +25,14 @@ emotty_default_set=emoji
function emotty() {
# Use emotty set defined by user, fallback to default
local emotty=${_emotty_sets[${emotty_set:-$emotty_default_set}]}
- # Parse $TTY number, normalizing it to an emotty set index
- (( tty = (${TTY##/dev/tty} % ${#${=emotty}}) + 1 ))
+
+ # Parse tty number via prompt expansion. %l equals:
+ # - N if tty = /dev/ttyN
+ # - pts/N if tty = /dev/pts/N
+ local tty = ${${(%):-%l}##pts/}
+ # Normalize it to an emotty set index
+ (( tty = (tty % ${#${=emotty}}) + 1 ))
+
local character_name=${${=emotty}[tty]}
echo "${emoji[${character_name}]}${emoji2[emoji_style]}"
}
diff --git a/plugins/fasd/fasd.plugin.zsh b/plugins/fasd/fasd.plugin.zsh
index 36a0428a7..ec2e5183a 100644
--- a/plugins/fasd/fasd.plugin.zsh
+++ b/plugins/fasd/fasd.plugin.zsh
@@ -6,7 +6,7 @@ if [ $commands[fasd] ]; then # check if fasd is installed
source "$fasd_cache"
unset fasd_cache
- alias v="f -e \"$EDITOR\""
+ alias v='f -e "$EDITOR"'
alias o='a -e xdg-open'
alias j='zz'
fi
diff --git a/plugins/frontend-search/README.md b/plugins/frontend-search/README.md
index f06e79102..bf76902fd 100644
--- a/plugins/frontend-search/README.md
+++ b/plugins/frontend-search/README.md
@@ -1,9 +1,8 @@
-## Introduction ##
+## Introduction
> Searches for your frontend web development made easier
-
-## Installation ##
+## Installation
Open your `~/.zshrc` file and enable the `frontend-search` plugin:
@@ -13,53 +12,59 @@ plugins=( ... frontend-search)
```
-
-## Usage ##
+## Usage
You can use the frontend-search plugin in these two forms:
-* `frontend <context> <term> [more terms if you want]`
-* `<context> <term> [more terms if you want]`
+- `frontend <context> <term> [more terms if you want]`
+- `<context> <term> [more terms if you want]`
For example, these two are equivalent:
```zsh
-$ frontend angularjs dependency injection
-$ angularjs dependency injection
+$ angular dependency injection
+# Will turn into ...
+$ frontend angular dependency injection
```
Available search contexts are:
-| context | URL |
-|---------------|--------------------------------------------------------------------------|
-| angularjs | `https://google.com/search?as_sitesearch=angularjs.org&as_q=` |
-| aurajs | `http://aurajs.com/api/#stq=` |
-| bem | `https://google.com/search?as_sitesearch=bem.info&as_q=` |
-| bootsnipp | `https://bootsnipp.com/search?q=` |
-| caniuse | `https://caniuse.com/#search=` |
-| codepen | `https://codepen.io/search?q=` |
-| compassdoc | `http://compass-style.org/search?q=` |
-| cssflow | `http://www.cssflow.com/search?q=` |
-| dartlang | `https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:` |
-| emberjs | `https://emberjs.com/api/#stp=1&stq=` |
-| fontello | `http://fontello.com/#search=` |
-| html5please | `http://html5please.com/#` |
-| jquery | `https://api.jquery.com/?s=` |
-| lodash | `https://devdocs.io/lodash/index#` |
-| mdn | `https://developer.mozilla.org/search?q=` |
-| npmjs | `https://www.npmjs.com/search?q=` |
-| qunit | `https://api.qunitjs.com/?s=` |
-| reactjs | `https://google.com/search?as_sitesearch=facebook.github.io/react&as_q=` |
-| smacss | `https://google.com/search?as_sitesearch=smacss.com&as_q=` |
-| stackoverflow | `https://stackoverflow.com/search?q=` |
-| unheap | `http://www.unheap.com/?s=` |
+| context | URL |
+| ------------- | --------------------------------------------------------------------------- |
+| angular | `https://angular.io/?search=` |
+| angularjs | `https://google.com/search?as_sitesearch=angularjs.org&as_q=` |
+| bem | `https://google.com/search?as_sitesearch=bem.info&as_q=` |
+| bootsnipp | `https://bootsnipp.com/search?q=` |
+| bundlephobia | `https://bundlephobia.com/result?p=` |
+| caniuse | `https://caniuse.com/#search=` |
+| codepen | `https://codepen.io/search?q=` |
+| compassdoc | `http://compass-style.org/search?q=` |
+| cssflow | `http://www.cssflow.com/search?q=` |
+| dartlang | `https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:` |
+| emberjs | `https://www.google.com/search?as_sitesearch=emberjs.com/&as_q=` |
+| flowtype | `https://google.com/search?as_sitesearch=flow.org/en/docs/&as_q=` |
+| fontello | `http://fontello.com/#search=` |
+| github | `https://github.com/search?q=` |
+| html5please | `https://html5please.com/#` |
+| jestjs | `https://www.google.com/search?as_sitesearch=jestjs.io&as_q=` |
+| jquery | `https://api.jquery.com/?s=` |
+| lodash | `https://devdocs.io/lodash/index#` |
+| mdn | `https://developer.mozilla.org/search?q=` |
+| nodejs | `https://www.google.com/search?as_sitesearch=nodejs.org/en/docs/&as_q=` |
+| npmjs | `https://www.npmjs.com/search?q=` |
+| qunit | `https://api.qunitjs.com/?s=` |
+| reactjs | `https://google.com/search?as_sitesearch=facebook.github.io/react&as_q=` |
+| smacss | `https://google.com/search?as_sitesearch=smacss.com&as_q=` |
+| stackoverflow | `https://stackoverflow.com/search?q=` |
+| typescript | `https://google.com/search?as_sitesearch=www.typescriptlang.org/docs&as_q=` |
+| unheap | `http://www.unheap.com/?s=` |
+| vuejs | `https://www.google.com/search?as_sitesearch=vuejs.org&as_q=` |
If you want to have another context, open an Issue and tell us!
-
## Author
**Wilson Mendes (willmendesneto)**
-+ <https://plus.google.com/+WilsonMendes>
-+ <https://twitter.com/willmendesneto>
-+ <https://github.com/willmendesneto>
+
+- <https://twitter.com/willmendesneto>
+- <https://github.com/willmendesneto>
diff --git a/plugins/frontend-search/_frontend-search.sh b/plugins/frontend-search/_frontend-search.sh
index 9aad76f76..c59640e74 100644
--- a/plugins/frontend-search/_frontend-search.sh
+++ b/plugins/frontend-search/_frontend-search.sh
@@ -17,27 +17,34 @@ function _frontend() {
frontend_points=( "${(f)mapfile[$CONFIG]//$HOME/~}" )
commands=(
- 'jquery: Search in jQuery website'
- 'mdn: Search in MDN website'
- 'compassdoc: Search in COMPASS website'
- 'html5please: Search in HTML5 Please website'
+ 'angular: Search in Angular.io website'
+ 'angularjs: Search in docs.angularjs.org website'
+ 'bem: Search in BEM website'
+ 'bootsnipp: Search in bootsnipp website'
+ 'bundlephobia: Search in Bundlephobia website'
'caniuse: Search in Can I Use website'
- 'aurajs: Search in AuraJs website'
+ 'codepen: Search in codepen website'
+ 'compassdoc: Search in COMPASS website'
+ 'cssflow: Search in cssflow website'
'dartlang: Search in Dart website'
+ 'emberjs: Search in Ember website'
+ 'flowtype: Search in Flowtype website'
+ 'fontello: Search in fontello website'
+ 'github: Search in GitHub website'
+ 'html5please: Search in HTML5 Please website'
+ 'jestjs: Search in Jest website'
+ 'jquery: Search in jQuery website'
'lodash: Search in Lo-Dash website'
+ 'mdn: Search in MDN website'
+ 'nodejs: Search in NodeJS website'
+ 'npmjs: Search in NPMJS website'
'qunit: Search in Qunit website'
- 'fontello: Search in fontello website'
- 'bootsnipp: Search in bootsnipp website'
- 'cssflow: Search in cssflow website'
- 'codepen: Search in codepen website'
- 'unheap: Search in unheap website'
- 'bem: Search in BEM website'
- 'smacss: Search in SMACSS website'
- 'angularjs: Search in Angular website'
'reactjs: Search in React website'
- 'emberjs: Search in Ember website'
+ 'smacss: Search in SMACSS website'
'stackoverflow: Search in StackOverflow website'
- 'npmjs: Search in NPMJS website'
+ 'typescript: Search in TypeScript website'
+ 'unheap: Search in unheap website'
+ 'vuejs: Search in VueJS website'
)
_arguments -C \
@@ -66,9 +73,6 @@ function _frontend() {
caniuse)
_describe -t points "Warp points" frontend_points && ret=0
;;
- aurajs)
- _describe -t points "Warp points" frontend_points && ret=0
- ;;
dartlang)
_describe -t points "Warp points" frontend_points && ret=0
;;
@@ -81,6 +85,9 @@ function _frontend() {
fontello)
_describe -t points "Warp points" frontend_points && ret=0
;;
+ github)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
bootsnipp)
_describe -t points "Warp points" frontend_points && ret=0
;;
@@ -114,6 +121,24 @@ function _frontend() {
npmjs)
_describe -t points "Warp points" frontend_points && ret=0
;;
+ bundlephobia)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
+ flowtype)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
+ typescript)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
+ vuejs)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
+ nodejs)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
+ jestjs)
+ _describe -t points "Warp points" frontend_points && ret=0
+ ;;
esac
;;
esac
diff --git a/plugins/frontend-search/frontend-search.plugin.zsh b/plugins/frontend-search/frontend-search.plugin.zsh
index 14877fb0d..87243be13 100644
--- a/plugins/frontend-search/frontend-search.plugin.zsh
+++ b/plugins/frontend-search/frontend-search.plugin.zsh
@@ -1,24 +1,31 @@
+alias angular='frontend angular'
alias angularjs='frontend angularjs'
-alias aurajs='frontend aurajs'
alias bem='frontend bem'
alias bootsnipp='frontend bootsnipp'
+alias bundlephobia='frontend bundlephobia'
alias caniuse='frontend caniuse'
alias codepen='frontend codepen'
alias compassdoc='frontend compassdoc'
alias cssflow='frontend cssflow'
alias dartlang='frontend dartlang'
alias emberjs='frontend emberjs'
+alias flowtype='frontend flowtype'
alias fontello='frontend fontello'
+alias github='frontend github'
alias html5please='frontend html5please'
+alias jestjs='frontend jestjs'
alias jquery='frontend jquery'
alias lodash='frontend lodash'
alias mdn='frontend mdn'
+alias nodejs='frontend nodejs'
alias npmjs='frontend npmjs'
alias qunit='frontend qunit'
alias reactjs='frontend reactjs'
alias smacss='frontend smacss'
alias stackoverflow='frontend stackoverflow'
+alias typescript='frontend typescript'
alias unheap='frontend unheap'
+alias vuejs='frontend vuejs'
function frontend() {
emulate -L zsh
@@ -26,27 +33,34 @@ function frontend() {
# define search context URLS
typeset -A urls
urls=(
+ angular 'https://angular.io/?search='
angularjs 'https://google.com/search?as_sitesearch=angularjs.org&as_q='
- aurajs 'http://aurajs.com/api/#stq='
bem 'https://google.com/search?as_sitesearch=bem.info&as_q='
bootsnipp 'https://bootsnipp.com/search?q='
+ bundlephobia 'https://bundlephobia.com/result?p='
caniuse 'https://caniuse.com/#search='
codepen 'https://codepen.io/search?q='
compassdoc 'http://compass-style.org/search?q='
cssflow 'http://www.cssflow.com/search?q='
dartlang 'https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:'
- emberjs 'https://emberjs.com/api/#stp=1&stq='
+ emberjs 'https://www.google.com/search?as_sitesearch=emberjs.com/&as_q='
+ flowtype 'https://google.com/search?as_sitesearch=flow.org/en/docs/&as_q='
fontello 'http://fontello.com/#search='
- html5please 'http://html5please.com/#'
+ github 'https://github.com/search?q='
+ html5please 'https://html5please.com/#'
+ jestjs 'https://www.google.com/search?as_sitesearch=jestjs.io&as_q='
jquery 'https://api.jquery.com/?s='
lodash 'https://devdocs.io/lodash/index#'
mdn 'https://developer.mozilla.org/search?q='
+ nodejs 'https://www.google.com/search?as_sitesearch=nodejs.org/en/docs/&as_q='
npmjs 'https://www.npmjs.com/search?q='
qunit 'https://api.qunitjs.com/?s='
reactjs 'https://google.com/search?as_sitesearch=facebook.github.io/react&as_q='
smacss 'https://google.com/search?as_sitesearch=smacss.com&as_q='
stackoverflow 'https://stackoverflow.com/search?q='
+ typescript 'https://google.com/search?as_sitesearch=www.typescriptlang.org/docs&as_q='
unheap 'http://www.unheap.com/?s='
+ vuejs 'https://www.google.com/search?as_sitesearch=vuejs.org&as_q='
)
# show help for command list
@@ -57,9 +71,9 @@ function frontend() {
print -P "%Uterm%u and what follows is what will be searched for in the %Ucontext%u website,"
print -P "and %Ucontext%u is one of the following:"
print -P ""
- print -P " angularjs, aurajs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow,"
- print -P " dartlang, emberjs, fontello, html5please, jquery, lodash, mdn, npmjs,"
- print -P " qunit, reactjs, smacss, stackoverflow, unheap"
+ print -P " angular, angularjs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow,"
+ print -P " dartlang, emberjs, fontello, flowtype, github, html5please, jestjs, jquery, lodash,"
+ print -P " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia"
print -P ""
print -P "For example: frontend npmjs mocha (or just: npmjs mocha)."
print -P ""
@@ -73,17 +87,17 @@ function frontend() {
echo ""
echo "Valid contexts are:"
echo ""
- echo " angularjs, aurajs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow, "
- echo " dartlang, emberjs, fontello, html5please, jquery, lodash, mdn, npmjs, "
- echo " qunit, reactjs, smacss, stackoverflow, unheap"
+ echo " angular, angularjs, bem, bootsnipp, caniuse, codepen, compassdoc, cssflow,"
+ echo " dartlang, emberjs, fontello, github, html5please, jest, jquery, lodash,"
+ echo " mdn, npmjs, nodejs, qunit, reactjs, smacss, stackoverflow, unheap, vuejs, bundlephobia"
echo ""
return 1
fi
# build search url:
- # join arguments passed with '+', then append to search context URL
+ # join arguments passed with '%20', then append to search context URL
# TODO substitute for proper urlencode method
- url="${urls[$1]}${(j:+:)@[2,-1]}"
+ url="${urls[$1]}${(j:%20:)@[2,-1]}"
echo "Opening $url ..."
diff --git a/plugins/git-extras/git-extras.plugin.zsh b/plugins/git-extras/git-extras.plugin.zsh
index ef6c35988..b86d7c5b6 100644
--- a/plugins/git-extras/git-extras.plugin.zsh
+++ b/plugins/git-extras/git-extras.plugin.zsh
@@ -454,9 +454,9 @@ zstyle ':completion:*:*:git:*' user-commands $existing_user_commands \
extras:'awesome git utilities' \
feature:'create/merge feature branch' \
force-clone:'overwrite local repositories with clone' \
- fork:'fork a repo on github' \
+ fork:'fork a repo on GitHub' \
fresh-branch:'create fresh branches' \
- gh-pages:'create the github pages branch' \
+ gh-pages:'create the GitHub pages branch' \
graft:'merge and destroy a given branch' \
guilt:'calculate change between two revisions' \
ignore-io:'get sample gitignore file' \
diff --git a/plugins/git-hubflow/git-hubflow.plugin.zsh b/plugins/git-hubflow/git-hubflow.plugin.zsh
index 05479f7e6..50d7b23ce 100644
--- a/plugins/git-hubflow/git-hubflow.plugin.zsh
+++ b/plugins/git-hubflow/git-hubflow.plugin.zsh
@@ -75,8 +75,8 @@ __git-hf-release ()
'finish:Finish a release branch.'
'list:List all your release branches. (Alias to `git hf release`)'
'cancel:Cancel release'
- 'push:Push release to github'
- 'pull:Pull release from github'
+ 'push:Push release to GitHub'
+ 'pull:Pull release from GitHub'
'track:Track release'
)
_describe -t commands 'git hf release' subcommands
@@ -133,8 +133,8 @@ __git-hf-hotfix ()
'list:List all your hotfix branches. (Alias to `git hf hotfix`)'
'publish:Publish the hotfix branch.'
'track:Track the hotfix branch.'
- 'pull:Pull the hotfix from github.'
- 'push:Push the hotfix to github.'
+ 'pull:Pull the hotfix from GitHub.'
+ 'push:Push the hotfix to GitHub.'
'cancel:Cancel the hotfix.'
)
_describe -t commands 'git hf hotfix' subcommands
@@ -195,8 +195,8 @@ __git-hf-feature ()
'diff:Diff'
'rebase:Rebase feature branch against develop'
'checkout:Checkout feature'
- 'pull:Pull feature branch from github'
- 'push:Push feature branch to github'
+ 'pull:Pull feature branch from GitHub'
+ 'push:Push feature branch to GitHub'
'cancel:Cancel feature'
)
_describe -t commands 'git hf feature' subcommands
diff --git a/plugins/git-prompt/README.md b/plugins/git-prompt/README.md
new file mode 100644
index 000000000..e3b2d623a
--- /dev/null
+++ b/plugins/git-prompt/README.md
@@ -0,0 +1,61 @@
+# git-prompt plugin
+
+A `zsh` prompt that displays information about the current git repository. In particular:
+the branch name, difference with remote branch, number of files staged or changed, etc.
+
+To use it, add `git-prompt` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... git-prompt)
+```
+
+See the [original repository](https://github.com/olivierverdier/zsh-git-prompt).
+
+## Examples
+
+The prompt may look like the following:
+
+- `(master↑3|✚1)`: on branch `master`, ahead of remote by 3 commits, 1 file changed but not staged
+- `(status|●2)`: on branch `status`, 2 files staged
+- `(master|✚7…)`: on branch `master`, 7 files changed, some files untracked
+- `(master|✖2✚3)`: on branch `master`, 2 conflicts, 3 files changed
+- `(experimental↓2↑3|✔)`: on branch `experimental`; your branch has diverged by 3 commits, remote by 2 commits; the repository is otherwise clean
+- `(:70c2952|✔)`: not on any branch; parent commit has hash `70c2952`; the repository is otherwise clean
+
+## Prompt Structure
+
+By default, the general appearance of the prompt is:
+
+```
+(<branch><branch tracking>|<local status>)
+```
+
+The symbols are as follows:
+
+### Local Status Symbols
+
+| Symbol | Meaning |
+|--------|--------------------------------|
+| ✔ | repository clean |
+| ●n | there are `n` staged files |
+| ✖n | there are `n` unmerged files |
+| ✚n | there are `n` unstaged files |
+| … | there are some untracked files |
+
+### Branch Tracking Symbols
+
+| Symbol | Meaning |
+|--------|---------------------------------------------------------------|
+| ↑n | ahead of remote by `n` commits |
+| ↓n | behind remote by `n` commits |
+| ↓m↑n | branches diverged: other by `m` commits, yours by `n` commits |
+
+## Customisation
+
+- Set the variable `ZSH_THEME_GIT_PROMPT_CACHE` to any value in order to enable caching.
+- You may also change a number of variables (whose name start with `ZSH_THEME_GIT_PROMPT_`)
+ to change the appearance of the prompt. Take a look at the bottom of the [plugin file](git-prompt.plugin.zsh)`
+ to see what variables are available.
+
+
+**Enjoy!**
diff --git a/plugins/git-prompt/git-prompt.plugin.zsh b/plugins/git-prompt/git-prompt.plugin.zsh
index 2776f297f..76ac2e62b 100644
--- a/plugins/git-prompt/git-prompt.plugin.zsh
+++ b/plugins/git-prompt/git-prompt.plugin.zsh
@@ -1,6 +1,3 @@
-# ZSH Git Prompt Plugin from:
-# https://github.com/olivierverdier/zsh-git-prompt
-
__GIT_PROMPT_DIR="${0:A:h}"
## Hook function definitions
diff --git a/plugins/git-prompt/gitstatus.py b/plugins/git-prompt/gitstatus.py
index a4d07cde6..390a50a6f 100644
--- a/plugins/git-prompt/gitstatus.py
+++ b/plugins/git-prompt/gitstatus.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
from __future__ import print_function
+import os
import sys
import re
import shlex
@@ -30,7 +31,7 @@ def get_tagname_or_hash():
# `git status --porcelain --branch` can collect all information
# branch, remote_branch, untracked, staged, changed, conflicts, ahead, behind
-po = Popen(['git', 'status', '--porcelain', '--branch'], stdout=PIPE, stderr=PIPE)
+po = Popen(['git', 'status', '--porcelain', '--branch'], env=dict(os.environ, LANG="C"), stdout=PIPE, stderr=PIPE)
stdout, sterr = po.communicate()
if po.returncode != 0:
sys.exit(0) # Not a git repository
diff --git a/plugins/git/README.md b/plugins/git/README.md
index 76da2a8ae..d66ad234d 100644
--- a/plugins/git/README.md
+++ b/plugins/git/README.md
@@ -1,10 +1,211 @@
-## git
+# git plugin
-**Maintainer:** [@ncanceill](https://github.com/ncanceill)
+The git plugin provides many [aliases](#aliases) and a few useful [functions](#functions).
-This plugin adds many useful aliases and functions.
+To use it, add `git` to the plugins array in your zshrc file:
-### Usage
+```zsh
+plugins=(... git)
+```
-See the [wiki](https://github.com/robbyrussell/oh-my-zsh/wiki/Plugin:git) for a list of aliases and functions provided by the plugin.
+## Aliases
+| Alias | Command |
+|:---------------------|:------------------------------------------------------------------------------------------------------------------------------|
+| g | git |
+| ga | git add |
+| gaa | git add --all |
+| gapa | git add --patch |
+| gau | git add --update |
+| gav | git add --verbose |
+| gap | git apply |
+| gb | git branch |
+| gba | git branch -a |
+| gbd | git branch -d |
+| gbda | git branch --no-color --merged \| command grep -vE "^(\*\|\s*(master\|develop\|dev)\s*$)" \| command xargs -n 1 git branch -d |
+| gbD | git branch -D |
+| gbl | git blame -b -w |
+| gbnm | git branch --no-merged |
+| gbr | git branch --remote |
+| gbs | git bisect |
+| gbsb | git bisect bad |
+| gbsg | git bisect good |
+| gbsr | git bisect reset |
+| gbss | git bisect start |
+| gc | git commit -v |
+| gc! | git commit -v --amend |
+| gcn! | git commit -v --no-edit --amend |
+| gca | git commit -v -a |
+| gca! | git commit -v -a --amend |
+| gcan! | git commit -v -a --no-edit --amend |
+| gcans! | git commit -v -a -s --no-edit --amend |
+| gcam | git commit -a -m |
+| gcsm | git commit -s -m |
+| gcb | git checkout -b |
+| gcf | git config --list |
+| gcl | git clone --recurse-submodules |
+| gclean | git clean -id |
+| gpristine | git reset --hard && git clean -dfx |
+| gcm | git checkout master |
+| gcd | git checkout develop |
+| gcmsg | git commit -m |
+| gco | git checkout |
+| gcount | git shortlog -sn |
+| gcp | git cherry-pick |
+| gcpa | git cherry-pick --abort |
+| gcpc | git cherry-pick --continue |
+| gcs | git commit -S |
+| gd | git diff |
+| gdca | git diff --cached |
+| gdcw | git diff --cached --word-diff |
+| gdct | git describe --tags $(git rev-list --tags --max-count=1) |
+| gds | git diff --staged |
+| gdt | git diff-tree --no-commit-id --name-only -r |
+| gdv | git diff -w $@ \| view - |
+| gdw | git diff --word-diff |
+| gf | git fetch |
+| gfa | git fetch --all --prune |
+| gfg | git ls-files \| grep |
+| gfo | git fetch origin |
+| gg | git gui citool |
+| gga | git gui citool --amend |
+| ggf | git push --force origin $(current_branch) |
+| ggfl | git push --force-with-lease origin $(current_branch) |
+| ggl | git pull origin $(current_branch) |
+| ggp | git push origin $(current_branch) |
+| ggpnp | ggl && ggp |
+| ggpull | git pull origin "$(git_current_branch)" |
+| ggpur | ggu |
+| ggpush | git push origin "$(git_current_branch)" |
+| ggsup | git branch --set-upstream-to=origin/$(git_current_branch) |
+| ggu | git pull --rebase origin $(current_branch) |
+| gpsup | git push --set-upstream origin $(git_current_branch) |
+| ghh | git help |
+| gignore | git update-index --assume-unchanged |
+| gignored | git ls-files -v \| grep "^[[:lower:]]" |
+| git-svn-dcommit-push | git svn dcommit && git push github master:svntrunk |
+| gk | gitk --all --branches |
+| gke | gitk --all $(git log -g --pretty=%h) |
+| gl | git pull |
+| glg | git log --stat |
+| glgp | git log --stat -p |
+| glgg | git log --graph |
+| glgga | git log --graph --decorate --all |
+| glgm | git log --graph --max-count=10 |
+| glo | git log --oneline --decorate |
+| glol | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' |
+| glols | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --stat |
+| glod | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' |
+| glods | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short |
+| glola | git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --all |
+| glog | git log --oneline --decorate --graph |
+| gloga | git log --oneline --decorate --graph --all |
+| glp | `_git_log_prettily` |
+| gm | git merge |
+| gmom | git merge origin/master |
+| gmt | git mergetool --no-prompt |
+| gmtvim | git mergetool --no-prompt --tool=vimdiff |
+| gmum | git merge upstream/master |
+| gma | git merge --abort |
+| gp | git push |
+| gpd | git push --dry-run |
+| gpf | git push --force-with-lease |
+| gpf! | git push --force |
+| gpoat | git push origin --all && git push origin --tags |
+| gpu | git push upstream |
+| gpv | git push -v |
+| gr | git remote |
+| gra | git remote add |
+| grb | git rebase |
+| grba | git rebase --abort |
+| grbc | git rebase --continue |
+| grbd | git rebase develop |
+| grbi | git rebase -i |
+| grbm | git rebase master |
+| grbs | git rebase --skip |
+| grh | git reset |
+| grhh | git reset --hard |
+| groh | git reset origin/$(git_current_branch) --hard |
+| grm | git rm |
+| grmc | git rm --cached |
+| grmv | git remote rename |
+| grrm | git remote remove |
+| grset | git remote set-url |
+| grt | cd "$(git rev-parse --show-toplevel \|\| echo .)" |
+| gru | git reset -- |
+| grup | git remote update |
+| grv | git remote -v |
+| gsb | git status -sb |
+| gsd | git svn dcommit |
+| gsh | git show |
+| gsi | git submodule init |
+| gsps | git show --pretty=short --show-signature |
+| gsr | git svn rebase |
+| gss | git status -s |
+| gst | git status |
+| gsta | git stash push |
+| gsta | git stash save |
+| gstaa | git stash apply |
+| gstc | git stash clear |
+| gstd | git stash drop |
+| gstl | git stash list |
+| gstp | git stash pop |
+| gsts | git stash show --text |
+| gstall | git stash --all |
+| gsu | git submodule update |
+| gts | git tag -s |
+| gtv | git tag \| sort -V |
+| gtl | gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl |
+| gunignore | git update-index --no-assume-unchanged |
+| gunwip | git log -n 1 \| grep -q -c "\-\-wip\-\-" && git reset HEAD~1 |
+| gup | git pull --rebase |
+| gupv | git pull --rebase -v |
+| gupa | git pull --rebase --autostash |
+| gupav | git pull --rebase --autostash -v |
+| glum | git pull upstream master |
+| gwch | git whatchanged -p --abbrev-commit --pretty=medium |
+| gwip | git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]" |
+
+### Deprecated
+
+These are aliases that have been removed, renamed, or otherwise modified in a way that may, or may not, receive further support.
+
+| Alias | Command | Modification |
+| :----- | :----------------------------------------------------------------------------------| --------------------------------------------------------------------------------------------------- |
+| gap | git add --patch | new alias `gapa` |
+| gcl | git config --list | new alias `gcf` |
+| gdc | git diff --cached | new alias `gdca` |
+| gdt | git difftool | no replacement |
+| ggpull | git pull origin $(current_branch) | new alias `ggl` (`ggpull` still exists for now though) |
+| ggpur | git pull --rebase origin $(current_branch) | new alias `ggu` (`ggpur` still exists for now though) |
+| ggpush | git push origin $(current_branch) | new alias `ggp` (`ggpush` still exists for now though) |
+| gk | gitk --all --branches | now aliased to `gitk --all --branches` |
+| glg | git log --stat --max-count = 10 | now aliased to `git log --stat --color` |
+| glgg | git log --graph --max-count = 10 | now aliased to `git log --graph --color` |
+| gwc | git whatchanged -p --abbrev-commit --pretty = medium | new alias `gwch` |
+
+## Functions
+
+### Current
+
+| Command | Description |
+|:-----------------------|:----------------------------------------|
+| current_branch | Return the name of the current branch |
+| git_current_user_name | Returns the `user.name` config value |
+| git_current_user_email | Returns the `user.email` config value |
+
+### Work in Progress (WIP)
+
+These features allow to pause a branch development and switch to another one (_"Work in Progress"_, or wip). When you want to go back to work, just unwip it.
+
+| Command | Description |
+|:-----------------|:------------------------------------------------|
+| work_in_progress | Echoes a warning if the current branch is a wip |
+| gwip | Commit wip branch |
+| gunwip | Uncommit wip branch |
+
+### Deprecated
+
+| Command | Description | Reason |
+|:-----------------------|:----------------------------------------|:----------------------------------------------------------------|
+| current_repository | Return the names of the current remotes | Didn't work properly. Use `git remote -v` instead (`grv` alias) |
diff --git a/plugins/git/git.plugin.zsh b/plugins/git/git.plugin.zsh
index 6fc9b078b..09998003a 100644
--- a/plugins/git/git.plugin.zsh
+++ b/plugins/git/git.plugin.zsh
@@ -1,7 +1,3 @@
-# Query/use custom command for `git`.
-zstyle -s ":vcs_info:git:*:-all-" "command" _omz_git_git_cmd
-: ${_omz_git_git_cmd:=git}
-
#
# Functions
#
@@ -13,19 +9,15 @@ zstyle -s ":vcs_info:git:*:-all-" "command" _omz_git_git_cmd
function current_branch() {
git_current_branch
}
-# The list of remotes
-function current_repository() {
- if ! $_omz_git_git_cmd rev-parse --is-inside-work-tree &> /dev/null; then
- return
- fi
- echo $($_omz_git_git_cmd remote -v | cut -d':' -f 2)
-}
+
# Pretty log messages
function _git_log_prettily(){
if ! [ -z $1 ]; then
git log --pretty=$1
fi
}
+compdef _git _git_log_prettily=git-log
+
# Warn if the current branch is a WIP
function work_in_progress() {
if $(git log -n 1 2>/dev/null | grep -q -c "\-\-wip\-\-"); then
@@ -73,14 +65,13 @@ alias gcsm='git commit -s -m'
alias gcb='git checkout -b'
alias gcf='git config --list'
alias gcl='git clone --recurse-submodules'
-alias gclean='git clean -fd'
+alias gclean='git clean -id'
alias gpristine='git reset --hard && git clean -dfx'
alias gcm='git checkout master'
alias gcd='git checkout develop'
alias gcmsg='git commit -m'
alias gco='git checkout'
alias gcount='git shortlog -sn'
-compdef _git gcount
alias gcp='git cherry-pick'
alias gcpa='git cherry-pick --abort'
alias gcpc='git cherry-pick --continue'
@@ -89,35 +80,35 @@ alias gcs='git commit -S'
alias gd='git diff'
alias gdca='git diff --cached'
alias gdcw='git diff --cached --word-diff'
-alias gdct='git describe --tags `git rev-list --tags --max-count=1`'
+alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
alias gds='git diff --staged'
alias gdt='git diff-tree --no-commit-id --name-only -r'
alias gdw='git diff --word-diff'
-gdv() { git diff -w "$@" | view - }
+function gdv() { git diff -w "$@" | view - }
compdef _git gdv=git-diff
alias gf='git fetch'
alias gfa='git fetch --all --prune'
alias gfo='git fetch origin'
-function gfg() { git ls-files | grep $@ }
-compdef _grep gfg
+alias gfg='git ls-files | grep'
alias gg='git gui citool'
alias gga='git gui citool --amend'
-ggf() {
+function ggf() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force origin "${b:=$1}"
}
-ggfl() {
+compdef _git ggf=git-checkout
+function ggfl() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force-with-lease origin "${b:=$1}"
}
-compdef _git ggf=git-checkout
+compdef _git ggfl=git-checkout
-ggl() {
+function ggl() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git pull origin "${*}"
else
@@ -127,7 +118,7 @@ ggl() {
}
compdef _git ggl=git-checkout
-ggp() {
+function ggp() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git push origin "${*}"
else
@@ -137,7 +128,7 @@ ggp() {
}
compdef _git ggp=git-checkout
-ggpnp() {
+function ggpnp() {
if [[ "$#" == 0 ]]; then
ggl && ggp
else
@@ -146,20 +137,15 @@ ggpnp() {
}
compdef _git ggpnp=git-checkout
-ggu() {
+function ggu() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git pull --rebase origin "${b:=$1}"
}
compdef _git ggu=git-checkout
alias ggpur='ggu'
-compdef _git ggpur=git-checkout
-
alias ggpull='git pull origin "$(git_current_branch)"'
-compdef _git ggpull=git-checkout
-
alias ggpush='git push origin "$(git_current_branch)"'
-compdef _git ggpush=git-checkout
alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
alias gpsup='git push --set-upstream origin $(git_current_branch)'
@@ -169,12 +155,9 @@ alias ghh='git help'
alias gignore='git update-index --assume-unchanged'
alias gignored='git ls-files -v | grep "^[[:lower:]]"'
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk'
-compdef _git git-svn-dcommit-push=git
alias gk='\gitk --all --branches'
-compdef _git gk='gitk'
alias gke='\gitk --all $(git log -g --pretty=%h)'
-compdef _git gke='gitk'
alias gl='git pull'
alias glg='git log --stat'
@@ -191,7 +174,6 @@ alias glola="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgr
alias glog='git log --oneline --decorate --graph'
alias gloga='git log --oneline --decorate --graph --all'
alias glp="_git_log_prettily"
-compdef _git glp=git-log
alias gm='git merge'
alias gmom='git merge origin/master'
@@ -205,7 +187,6 @@ alias gpd='git push --dry-run'
alias gpf='git push --force-with-lease'
alias gpf!='git push --force'
alias gpoat='git push origin --all && git push origin --tags'
-compdef _git gpoat=git-push
alias gpu='git push upstream'
alias gpv='git push -v'
@@ -239,7 +220,13 @@ alias gsps='git show --pretty=short --show-signature'
alias gsr='git svn rebase'
alias gss='git status -s'
alias gst='git status'
-alias gsta='git stash save'
+
+# use the default stash push on git 2.13 and newer
+autoload -Uz is-at-least
+is-at-least 2.13 "$(git --version 2>/dev/null | awk '{print $3}')" \
+ && alias gsta='git stash push' \
+ || alias gsta='git stash save'
+
alias gstaa='git stash apply'
alias gstc='git stash clear'
alias gstd='git stash drop'
@@ -251,6 +238,7 @@ alias gsu='git submodule update'
alias gts='git tag -s'
alias gtv='git tag | sort -V'
+alias gtl='gtl(){ git tag --sort=-v:refname -n -l ${1}* }; noglob gtl'
alias gunignore='git update-index --no-assume-unchanged'
alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
@@ -261,4 +249,4 @@ alias gupav='git pull --rebase --autostash -v'
alias glum='git pull upstream master'
alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
-alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip-- [skip ci]"'
+alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'
diff --git a/plugins/gitfast/README.md b/plugins/gitfast/README.md
index c3073709e..84e35d77c 100644
--- a/plugins/gitfast/README.md
+++ b/plugins/gitfast/README.md
@@ -10,129 +10,6 @@ plugins=(... gitfast)
## Aliases
-| Alias | Command |
-| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
-| g | `git` |
-| ga | `git add` |
-| gaa | `git add --all` |
-| gapa | `git add --patch` |
-| gau | `git add --update` |
-| gb | `git branch` |
-| gba | `git branch -a` |
-| gbd | `git branch -d` |
-| gbda | `git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d` |
-| gbl | `git blame -b -w` |
-| gbnm | `git branch --no-merged` |
-| gbr | `git branch --remote` |
-| gbs | `git bisect` |
-| gbsb | `git bisect bad` |
-| gbsg | `git bisect good` |
-| gbsr | `git bisect reset` |
-| gbss | `git bisect start` |
-| gc | `git commit -v` |
-| gc! | `git commit -v --amend` |
-| gca | `git commit -v -a` |
-| gca! | `git commit -v -a --amend` |
-| gcam | `git commit -a -m` |
-| gcan! | `git commit -v -a --no-edit --amend` |
-| gcans! | `git commit -v -a -s --no-edit --amend` |
-| gcb | `git checkout -b` |
-| gcd | `git checkout develop` |
-| gcf | `git config --list` |
-| gcl | `git clone --recursive` |
-| gclean | `git clean -fd` |
-| gcm | `git checkout master` |
-| gcmsg | `git commit -m` |
-| gcn! | `git commit -v --no-edit --amend` |
-| gco | `git checkout` |
-| gcount | `git shortlog -sn` |
-| gcp | `git cherry-pick` |
-| gcpa | `git cherry-pick --abort` |
-| gcpc | `git cherry-pick --continue` |
-| gcs | `git commit -S` |
-| gcsm | `git commit -s -m` |
-| gd | `git diff` |
-| gdca | `git diff --cached` |
-| gdct | `` git describe --tags `git rev-list --tags --max-count=1` `` |
-| gdt | `git diff-tree --no-commit-id --name-only -r` |
-| gdw | `git diff --word-diff` |
-| gf | `git fetch` |
-| gfa | `git fetch --all --prune` |
-| gfo | `git fetch origin` |
-| gg | `git gui citool` |
-| gga | `git gui citool --amend` |
-| ggpull | `git pull origin $(git_current_branch)` |
-| ggpur | `ggu` |
-| ggpush | `git push origin $(git_current_branch)` |
-| ggsup | `git branch --set-upstream-to=origin/$(git_current_branch)` |
-| ghh | `git help` |
-| gignore | `git update-index --assume-unchanged` |
-| gignored | `git ls-files -v | grep "^[[:lower:]]"` |
-| git-svn-dcommit-push | `git svn dcommit && git push github master:svntrunk` |
-| gk | `\gitk --all --branches` |
-| gke | `\gitk --all $(git log -g --pretty=%h)` |
-| gl | `git pull` |
-| glg | `git log --stat` |
-| glgg | `git log --graph` |
-| glgga | `git log --graph --decorate --all` |
-| glgm | `git log --graph --max-count=10` |
-| glgp | `git log --stat -p` |
-| glo | `git log --oneline --decorate` |
-| glog | `git log --oneline --decorate --graph` |
-| gloga | `git log --oneline --decorate --graph --all` |
-| glol | `git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit` |
-| glola | `git log --graph --pretty='\''%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\'' --abbrev-commit --all` |
-| glp | `_git_log_prettily` |
-| glum | `git pull upstream master` |
-| gm | `git merge` |
-| gmom | `git merge origin/master` |
-| gmt | `git mergetool --no-prompt` |
-| gmtvim | `git mergetool --no-prompt --tool=vimdiff` |
-| gmum | `git merge upstream/master` |
-| gp | `git push` |
-| gpd | `git push --dry-run` |
-| gpoat | `git push origin --all && git push origin --tags` |
-| gpristine | `git reset --hard && git clean -dfx` |
-| gpsup | `git push --set-upstream origin $(git_current_branch)` |
-| gpu | `git push upstream` |
-| gpv | `git push -v` |
-| gr | `git remote` |
-| gra | `git remote add` |
-| grb | `git rebase` |
-| grba | `git rebase --abort` |
-| grbc | `git rebase --continue` |
-| grbi | `git rebase -i` |
-| grbm | `git rebase master` |
-| grbs | `git rebase --skip` |
-| grh | `git reset HEAD` |
-| grhh | `git reset HEAD --hard` |
-| grmv | `git remote rename` |
-| grrm | `git remote remove` |
-| grset | `git remote set-url` |
-| grt | `cd $(git rev-parse --show-toplevel || echo ".")` |
-| gru | `git reset --` |
-| grup | `git remote update` |
-| grv | `git remote -v` |
-| gsb | `git status -sb` |
-| gsd | `git svn dcommit` |
-| gsi | `git submodule init` |
-| gsps | `git show --pretty=short --show-signature` |
-| gsr | `git svn rebase` |
-| gss | `git status -s` |
-| gst | `git status` |
-| gsta | `git stash save` |
-| gstaa | `git stash apply` |
-| gstc | `git stash clear` |
-| gstd | `git stash drop` |
-| gstl | `git stash list` |
-| gstp | `git stash pop` |
-| gsts | `git stash show --text` |
-| gsu | `git submodule update` |
-| gts | `git tag -s` |
-| gtv | `git tag | sort -V` |
-| gunignore | `git update-index --no-assume-unchanged` |
-| gunwip | `git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1` |
-| gup | `git pull --rebase` |
-| gupv | `git pull --rebase -v` |
-| gwch | `git whatchanged -p --abbrev-commit --pretty=medium` |
-| gwip | `git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify -m "--wip-- [skip ci]"` |
+An earlier version of the plugin also loaded the git plugin. If you want to keep those
+aliases enable the [git plugin](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/git)
+as well.
diff --git a/plugins/gitfast/_git b/plugins/gitfast/_git
index 6d1b4ecc7..78a6dbb3d 100644
--- a/plugins/gitfast/_git
+++ b/plugins/gitfast/_git
@@ -9,7 +9,7 @@
#
# If your script is somewhere else, you can configure it on your ~/.zshrc:
#
-# zstyle ':completion:*:*:git:*' script ~/.git-completion.sh
+# zstyle ':completion:*:*:git:*' script ~/.git-completion.zsh
#
# The recommended way to install this script is to copy to '~/.zsh/_git', and
# then add the following to your ~/.zshrc file:
@@ -67,6 +67,15 @@ __gitcomp ()
esac
}
+__gitcomp_direct ()
+{
+ emulate -L zsh
+
+ local IFS=$'\n'
+ compset -P '*[=:]'
+ compadd -Q -- ${=1} && _ret=0
+}
+
__gitcomp_nl ()
{
emulate -L zsh
diff --git a/plugins/gitfast/git-completion.bash b/plugins/gitfast/git-completion.bash
index 8ce6b5c5f..b6ff5dc08 100644
--- a/plugins/gitfast/git-completion.bash
+++ b/plugins/gitfast/git-completion.bash
@@ -28,27 +28,55 @@
# completion style. For example '!f() { : git commit ; ... }; f' will
# tell the completion to use commit completion. This also works with aliases
# of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '".
+#
+# You can set the following environment variables to influence the behavior of
+# the completion routines:
+#
+# GIT_COMPLETION_CHECKOUT_NO_GUESS
+#
+# When set to "1", do not include "DWIM" suggestions in git-checkout
+# completion (e.g., completing "foo" when "origin/foo" exists).
case "$COMP_WORDBREAKS" in
*:*) : great ;;
*) COMP_WORDBREAKS="$COMP_WORDBREAKS:"
esac
+# Discovers the path to the git repository taking any '--git-dir=<path>' and
+# '-C <path>' options into account and stores it in the $__git_repo_path
+# variable.
+__git_find_repo_path ()
+{
+ if [ -n "$__git_repo_path" ]; then
+ # we already know where it is
+ return
+ fi
+
+ if [ -n "${__git_C_args-}" ]; then
+ __git_repo_path="$(git "${__git_C_args[@]}" \
+ ${__git_dir:+--git-dir="$__git_dir"} \
+ rev-parse --absolute-git-dir 2>/dev/null)"
+ elif [ -n "${__git_dir-}" ]; then
+ test -d "$__git_dir" &&
+ __git_repo_path="$__git_dir"
+ elif [ -n "${GIT_DIR-}" ]; then
+ test -d "${GIT_DIR-}" &&
+ __git_repo_path="$GIT_DIR"
+ elif [ -d .git ]; then
+ __git_repo_path=.git
+ else
+ __git_repo_path="$(git rev-parse --git-dir 2>/dev/null)"
+ fi
+}
+
+# Deprecated: use __git_find_repo_path() and $__git_repo_path instead
# __gitdir accepts 0 or 1 arguments (i.e., location)
# returns location of .git repo
__gitdir ()
{
if [ -z "${1-}" ]; then
- if [ -n "${__git_dir-}" ]; then
- echo "$__git_dir"
- elif [ -n "${GIT_DIR-}" ]; then
- test -d "${GIT_DIR-}" || return 1
- echo "$GIT_DIR"
- elif [ -d .git ]; then
- echo .git
- else
- git rev-parse --git-dir 2>/dev/null
- fi
+ __git_find_repo_path || return 1
+ echo "$__git_repo_path"
elif [ -d "$1/.git" ]; then
echo "$1/.git"
else
@@ -56,6 +84,14 @@ __gitdir ()
fi
}
+# Runs git with all the options given as argument, respecting any
+# '--git-dir=<path>' and '-C <path>' options present on the command line
+__git ()
+{
+ git ${__git_C_args:+"${__git_C_args[@]}"} \
+ ${__git_dir:+--git-dir="$__git_dir"} "$@" 2>/dev/null
+}
+
# The following function is based on code from:
#
# bash_completion - programmable completion functions for bash 3.2+
@@ -75,8 +111,7 @@ __gitdir ()
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
# The latest version of this software can be obtained here:
#
@@ -185,6 +220,20 @@ _get_comp_words_by_ref ()
}
fi
+# Fills the COMPREPLY array with prefiltered words without any additional
+# processing.
+# Callers must take care of providing only words that match the current word
+# to be completed and adding any prefix and/or suffix (trailing space!), if
+# necessary.
+# 1: List of newline-separated matching completion words, complete with
+# prefix and suffix.
+__gitcomp_direct ()
+{
+ local IFS=$'\n'
+
+ COMPREPLY=($1)
+}
+
__gitcompappend ()
{
local x i=${#COMPREPLY[@]}
@@ -283,11 +332,11 @@ __gitcomp_file ()
__git_ls_files_helper ()
{
if [ "$2" == "--committable" ]; then
- git -C "$1" diff-index --name-only --relative HEAD
+ __git -C "$1" diff-index --name-only --relative HEAD
else
# NOTE: $2 is not quoted in order to support multiple options
- git -C "$1" ls-files --exclude-standard $2
- fi 2>/dev/null
+ __git -C "$1" ls-files --exclude-standard $2
+ fi
}
@@ -299,99 +348,195 @@ __git_ls_files_helper ()
# slash.
__git_index_files ()
{
- local dir="$(__gitdir)" root="${2-.}" file
+ local root="${2-.}" file
- if [ -d "$dir" ]; then
- __git_ls_files_helper "$root" "$1" |
- while read -r file; do
- case "$file" in
- ?*/*) echo "${file%%/*}" ;;
- *) echo "$file" ;;
- esac
- done | sort | uniq
- fi
+ __git_ls_files_helper "$root" "$1" |
+ while read -r file; do
+ case "$file" in
+ ?*/*) echo "${file%%/*}" ;;
+ *) echo "$file" ;;
+ esac
+ done | sort | uniq
}
+# Lists branches from the local repository.
+# 1: A prefix to be added to each listed branch (optional).
+# 2: List only branches matching this word (optional; list all branches if
+# unset or empty).
+# 3: A suffix to be appended to each listed branch (optional).
__git_heads ()
{
- local dir="$(__gitdir)"
- if [ -d "$dir" ]; then
- git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
- refs/heads
- return
- fi
+ local pfx="${1-}" cur_="${2-}" sfx="${3-}"
+
+ __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \
+ "refs/heads/$cur_*" "refs/heads/$cur_*/**"
}
+# Lists tags from the local repository.
+# Accepts the same positional parameters as __git_heads() above.
__git_tags ()
{
- local dir="$(__gitdir)"
- if [ -d "$dir" ]; then
- git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
- refs/tags
- return
- fi
+ local pfx="${1-}" cur_="${2-}" sfx="${3-}"
+
+ __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \
+ "refs/tags/$cur_*" "refs/tags/$cur_*/**"
}
-# __git_refs accepts 0, 1 (to pass to __gitdir), or 2 arguments
-# presence of 2nd argument means use the guess heuristic employed
-# by checkout for tracking branches
+# Lists refs from the local (by default) or from a remote repository.
+# It accepts 0, 1 or 2 arguments:
+# 1: The remote to list refs from (optional; ignored, if set but empty).
+# Can be the name of a configured remote, a path, or a URL.
+# 2: In addition to local refs, list unique branches from refs/remotes/ for
+# 'git checkout's tracking DWIMery (optional; ignored, if set but empty).
+# 3: A prefix to be added to each listed ref (optional).
+# 4: List only refs matching this word (optional; list all refs if unset or
+# empty).
+# 5: A suffix to be appended to each listed ref (optional; ignored, if set
+# but empty).
+#
+# Use __git_complete_refs() instead.
__git_refs ()
{
- local i hash dir="$(__gitdir "${1-}")" track="${2-}"
+ local i hash dir track="${2-}"
+ local list_refs_from=path remote="${1-}"
local format refs
- if [ -d "$dir" ]; then
- case "$cur" in
+ local pfx="${3-}" cur_="${4-$cur}" sfx="${5-}"
+ local match="${4-}"
+ local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers
+
+ __git_find_repo_path
+ dir="$__git_repo_path"
+
+ if [ -z "$remote" ]; then
+ if [ -z "$dir" ]; then
+ return
+ fi
+ else
+ if __git_is_configured_remote "$remote"; then
+ # configured remote takes precedence over a
+ # local directory with the same name
+ list_refs_from=remote
+ elif [ -d "$remote/.git" ]; then
+ dir="$remote/.git"
+ elif [ -d "$remote" ]; then
+ dir="$remote"
+ else
+ list_refs_from=url
+ fi
+ fi
+
+ if [ "$list_refs_from" = path ]; then
+ if [[ "$cur_" == ^* ]]; then
+ pfx="$pfx^"
+ fer_pfx="$fer_pfx^"
+ cur_=${cur_#^}
+ match=${match#^}
+ fi
+ case "$cur_" in
refs|refs/*)
format="refname"
- refs="${cur%/*}"
+ refs=("$match*" "$match*/**")
track=""
;;
*)
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD; do
- if [ -e "$dir/$i" ]; then echo $i; fi
+ case "$i" in
+ $match*)
+ if [ -e "$dir/$i" ]; then
+ echo "$pfx$i$sfx"
+ fi
+ ;;
+ esac
done
- format="refname:short"
- refs="refs/tags refs/heads refs/remotes"
+ format="refname:strip=2"
+ refs=("refs/tags/$match*" "refs/tags/$match*/**"
+ "refs/heads/$match*" "refs/heads/$match*/**"
+ "refs/remotes/$match*" "refs/remotes/$match*/**")
;;
esac
- git --git-dir="$dir" for-each-ref --format="%($format)" \
- $refs
+ __git_dir="$dir" __git for-each-ref --format="$fer_pfx%($format)$sfx" \
+ "${refs[@]}"
if [ -n "$track" ]; then
# employ the heuristic used by git checkout
# Try to find a remote branch that matches the completion word
# but only output if the branch name is unique
- local ref entry
- git --git-dir="$dir" for-each-ref --shell --format="ref=%(refname:short)" \
- "refs/remotes/" | \
- while read -r entry; do
- eval "$entry"
- ref="${ref#*/}"
- if [[ "$ref" == "$cur"* ]]; then
- echo "$ref"
- fi
- done | sort | uniq -u
+ __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \
+ --sort="refname:strip=3" \
+ "refs/remotes/*/$match*" "refs/remotes/*/$match*/**" | \
+ uniq -u
fi
return
fi
- case "$cur" in
+ case "$cur_" in
refs|refs/*)
- git ls-remote "$dir" "$cur*" 2>/dev/null | \
+ __git ls-remote "$remote" "$match*" | \
while read -r hash i; do
case "$i" in
*^{}) ;;
- *) echo "$i" ;;
+ *) echo "$pfx$i$sfx" ;;
esac
done
;;
*)
- echo "HEAD"
- git for-each-ref --format="%(refname:short)" -- \
- "refs/remotes/$dir/" 2>/dev/null | sed -e "s#^$dir/##"
+ if [ "$list_refs_from" = remote ]; then
+ case "HEAD" in
+ $match*) echo "${pfx}HEAD$sfx" ;;
+ esac
+ __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \
+ "refs/remotes/$remote/$match*" \
+ "refs/remotes/$remote/$match*/**"
+ else
+ local query_symref
+ case "HEAD" in
+ $match*) query_symref="HEAD" ;;
+ esac
+ __git ls-remote "$remote" $query_symref \
+ "refs/tags/$match*" "refs/heads/$match*" \
+ "refs/remotes/$match*" |
+ while read -r hash i; do
+ case "$i" in
+ *^{}) ;;
+ refs/*) echo "$pfx${i#refs/*/}$sfx" ;;
+ *) echo "$pfx$i$sfx" ;; # symbolic refs
+ esac
+ done
+ fi
;;
esac
}
+# Completes refs, short and long, local and remote, symbolic and pseudo.
+#
+# Usage: __git_complete_refs [<option>]...
+# --remote=<remote>: The remote to list refs from, can be the name of a
+# configured remote, a path, or a URL.
+# --track: List unique remote branches for 'git checkout's tracking DWIMery.
+# --pfx=<prefix>: A prefix to be added to each ref.
+# --cur=<word>: The current ref to be completed. Defaults to the current
+# word to be completed.
+# --sfx=<suffix>: A suffix to be appended to each ref instead of the default
+# space.
+__git_complete_refs ()
+{
+ local remote track pfx cur_="$cur" sfx=" "
+
+ while test $# != 0; do
+ case "$1" in
+ --remote=*) remote="${1##--remote=}" ;;
+ --track) track="yes" ;;
+ --pfx=*) pfx="${1##--pfx=}" ;;
+ --cur=*) cur_="${1##--cur=}" ;;
+ --sfx=*) sfx="${1##--sfx=}" ;;
+ *) return 1 ;;
+ esac
+ shift
+ done
+
+ __gitcomp_direct "$(__git_refs "$remote" "$track" "$pfx" "$cur_" "$sfx")"
+}
+
# __git_refs2 requires 1 argument (to pass to __git_refs)
+# Deprecated: use __git_complete_fetch_refspecs() instead.
__git_refs2 ()
{
local i
@@ -400,11 +545,29 @@ __git_refs2 ()
done
}
+# Completes refspecs for fetching from a remote repository.
+# 1: The remote repository.
+# 2: A prefix to be added to each listed refspec (optional).
+# 3: The ref to be completed as a refspec instead of the current word to be
+# completed (optional)
+# 4: A suffix to be appended to each listed refspec instead of the default
+# space (optional).
+__git_complete_fetch_refspecs ()
+{
+ local i remote="$1" pfx="${2-}" cur_="${3-$cur}" sfx="${4- }"
+
+ __gitcomp_direct "$(
+ for i in $(__git_refs "$remote" "" "" "$cur_") ; do
+ echo "$pfx$i:$i$sfx"
+ done
+ )"
+}
+
# __git_refs_remotes requires 1 argument (to pass to ls-remote)
__git_refs_remotes ()
{
local i hash
- git ls-remote "$1" 'refs/heads/*' 2>/dev/null | \
+ __git ls-remote "$1" 'refs/heads/*' | \
while read -r hash i; do
echo "$i:refs/remotes/$1/${i#refs/heads/}"
done
@@ -412,9 +575,21 @@ __git_refs_remotes ()
__git_remotes ()
{
- local d="$(__gitdir)"
- test -d "$d/remotes" && ls -1 "$d/remotes"
- git --git-dir="$d" remote
+ __git_find_repo_path
+ test -d "$__git_repo_path/remotes" && ls -1 "$__git_repo_path/remotes"
+ __git remote
+}
+
+# Returns true if $1 matches the name of a configured remote, false otherwise.
+__git_is_configured_remote ()
+{
+ local remote
+ for remote in $(__git_remotes); do
+ if [ "$remote" = "$1" ]; then
+ return 0
+ fi
+ done
+ return 1
}
__git_list_merge_strategies ()
@@ -468,7 +643,7 @@ __git_complete_revlist_file ()
*) pfx="$ref:$pfx" ;;
esac
- __gitcomp_nl "$(git --git-dir="$(__gitdir)" ls-tree "$ls" 2>/dev/null \
+ __gitcomp_nl "$(__git ls-tree "$ls" \
| sed '/^100... blob /{
s,^.* ,,
s,$, ,
@@ -487,15 +662,15 @@ __git_complete_revlist_file ()
*...*)
pfx="${cur_%...*}..."
cur_="${cur_#*...}"
- __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ __git_complete_refs --pfx="$pfx" --cur="$cur_"
;;
*..*)
pfx="${cur_%..*}.."
cur_="${cur_#*..}"
- __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ __git_complete_refs --pfx="$pfx" --cur="$cur_"
;;
*)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
esac
}
@@ -541,6 +716,7 @@ __git_complete_remote_or_refspec ()
i="${words[c]}"
case "$i" in
--mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;;
+ -d|--delete) [ "$cmd" = "push" ] && lhs=0 ;;
--all)
case "$cmd" in
push) no_complete_refspec=1 ;;
@@ -580,23 +756,23 @@ __git_complete_remote_or_refspec ()
case "$cmd" in
fetch)
if [ $lhs = 1 ]; then
- __gitcomp_nl "$(__git_refs2 "$remote")" "$pfx" "$cur_"
+ __git_complete_fetch_refspecs "$remote" "$pfx" "$cur_"
else
- __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ __git_complete_refs --pfx="$pfx" --cur="$cur_"
fi
;;
pull|remote)
if [ $lhs = 1 ]; then
- __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+ __git_complete_refs --remote="$remote" --pfx="$pfx" --cur="$cur_"
else
- __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ __git_complete_refs --pfx="$pfx" --cur="$cur_"
fi
;;
push)
if [ $lhs = 1 ]; then
- __gitcomp_nl "$(__git_refs)" "$pfx" "$cur_"
+ __git_complete_refs --pfx="$pfx" --cur="$cur_"
else
- __gitcomp_nl "$(__git_refs "$remote")" "$pfx" "$cur_"
+ __git_complete_refs --remote="$remote" --pfx="$pfx" --cur="$cur_"
fi
;;
esac
@@ -746,7 +922,7 @@ __git_compute_porcelain_commands ()
__git_get_config_variables ()
{
local section="$1" i IFS=$'\n'
- for i in $(git --git-dir="$(__gitdir)" config --name-only --get-regexp "^$section\..*" 2>/dev/null); do
+ for i in $(__git config --name-only --get-regexp "^$section\..*"); do
echo "${i#$section.}"
done
}
@@ -764,8 +940,7 @@ __git_aliases ()
# __git_aliased_command requires 1 argument
__git_aliased_command ()
{
- local word cmdline=$(git --git-dir="$(__gitdir)" \
- config --get "alias.$1")
+ local word cmdline=$(__git config --get "alias.$1")
for word in $cmdline; do
case "$word" in
\!gitk|gitk)
@@ -803,6 +978,50 @@ __git_find_on_cmdline ()
done
}
+# Echo the value of an option set on the command line or config
+#
+# $1: short option name
+# $2: long option name including =
+# $3: list of possible values
+# $4: config string (optional)
+#
+# example:
+# result="$(__git_get_option_value "-d" "--do-something=" \
+# "yes no" "core.doSomething")"
+#
+# result is then either empty (no option set) or "yes" or "no"
+#
+# __git_get_option_value requires 3 arguments
+__git_get_option_value ()
+{
+ local c short_opt long_opt val
+ local result= values config_key word
+
+ short_opt="$1"
+ long_opt="$2"
+ values="$3"
+ config_key="$4"
+
+ ((c = $cword - 1))
+ while [ $c -ge 0 ]; do
+ word="${words[c]}"
+ for val in $values; do
+ if [ "$short_opt$val" = "$word" ] ||
+ [ "$long_opt$val" = "$word" ]; then
+ result="$val"
+ break 2
+ fi
+ done
+ ((c--))
+ done
+
+ if [ -n "$config_key" ] && [ -z "$result" ]; then
+ result="$(__git config "$config_key")"
+ fi
+
+ echo "$result"
+}
+
__git_has_doubledash ()
{
local c=1
@@ -856,8 +1075,8 @@ __git_whitespacelist="nowarn warn error error-all fix"
_git_am ()
{
- local dir="$(__gitdir)"
- if [ -d "$dir"/rebase-apply ]; then
+ __git_find_repo_path
+ if [ -d "$__git_repo_path"/rebase-apply ]; then
__gitcomp "--skip --continue --resolved --abort"
return
fi
@@ -891,6 +1110,7 @@ _git_apply ()
--apply --no-add --exclude=
--ignore-whitespace --ignore-space-change
--whitespace= --inaccurate-eof --verbose
+ --recount --directory=
"
return
esac
@@ -902,13 +1122,17 @@ _git_add ()
--*)
__gitcomp "
--interactive --refresh --patch --update --dry-run
- --ignore-errors --intent-to-add
+ --ignore-errors --intent-to-add --force --edit --chmod=
"
return
esac
- # XXX should we check for --update and --all options ?
- __git_complete_index_file "--others --modified --directory --no-empty-directory"
+ local complete_opt="--others --modified --directory --no-empty-directory"
+ if test -n "$(__git_find_on_cmdline "-u --update")"
+ then
+ complete_opt="--modified"
+ fi
+ __git_complete_index_file "$complete_opt"
}
_git_archive ()
@@ -925,7 +1149,7 @@ _git_archive ()
--*)
__gitcomp "
--format= --list --verbose
- --prefix= --remote= --exec=
+ --prefix= --remote= --exec= --output
"
return
;;
@@ -940,7 +1164,8 @@ _git_bisect ()
local subcommands="start bad good skip reset visualize replay log run"
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
- if [ -f "$(__gitdir)"/BISECT_START ]; then
+ __git_find_repo_path
+ if [ -f "$__git_repo_path"/BISECT_START ]; then
__gitcomp "$subcommands"
else
__gitcomp "replay start"
@@ -950,7 +1175,7 @@ _git_bisect ()
case "$subcommand" in
bad|good|reset|skip|start)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
*)
;;
@@ -964,29 +1189,30 @@ _git_branch ()
while [ $c -lt $cword ]; do
i="${words[c]}"
case "$i" in
- -d|-m) only_local_ref="y" ;;
- -r) has_r="y" ;;
+ -d|--delete|-m|--move) only_local_ref="y" ;;
+ -r|--remotes) has_r="y" ;;
esac
((c++))
done
case "$cur" in
--set-upstream-to=*)
- __gitcomp_nl "$(__git_refs)" "" "${cur##--set-upstream-to=}"
+ __git_complete_refs --cur="${cur##--set-upstream-to=}"
;;
--*)
__gitcomp "
--color --no-color --verbose --abbrev= --no-abbrev
- --track --no-track --contains --merged --no-merged
+ --track --no-track --contains --no-contains --merged --no-merged
--set-upstream-to= --edit-description --list
- --unset-upstream
+ --unset-upstream --delete --move --copy --remotes
+ --column --no-column --sort= --points-at
"
;;
*)
if [ $only_local_ref = "y" -a $has_r = "n" ]; then
- __gitcomp_nl "$(__git_heads)"
+ __gitcomp_direct "$(__git_heads "" "$cur" " ")"
else
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
fi
;;
esac
@@ -1023,30 +1249,32 @@ _git_checkout ()
--*)
__gitcomp "
--quiet --ours --theirs --track --no-track --merge
- --conflict= --orphan --patch
+ --conflict= --orphan --patch --detach --ignore-skip-worktree-bits
+ --recurse-submodules --no-recurse-submodules
"
;;
*)
# check if --track, --no-track, or --no-guess was specified
# if so, disable DWIM mode
- local flags="--track --no-track --no-guess" track=1
- if [ -n "$(__git_find_on_cmdline "$flags")" ]; then
- track=''
+ local flags="--track --no-track --no-guess" track_opt="--track"
+ if [ "$GIT_COMPLETION_CHECKOUT_NO_GUESS" = "1" ] ||
+ [ -n "$(__git_find_on_cmdline "$flags")" ]; then
+ track_opt=''
fi
- __gitcomp_nl "$(__git_refs '' $track)"
+ __git_complete_refs $track_opt
;;
esac
}
_git_cherry ()
{
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_cherry_pick ()
{
- local dir="$(__gitdir)"
- if [ -f "$dir"/CHERRY_PICK_HEAD ]; then
+ __git_find_repo_path
+ if [ -f "$__git_repo_path"/CHERRY_PICK_HEAD ]; then
__gitcomp "--continue --quit --abort"
return
fi
@@ -1055,7 +1283,7 @@ _git_cherry_pick ()
__gitcomp "--edit --no-commit --signoff --strategy= --mainline"
;;
*)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
esac
}
@@ -1091,18 +1319,24 @@ _git_clone ()
--template=
--depth
--single-branch
+ --no-tags
--branch
+ --recurse-submodules
+ --no-single-branch
+ --shallow-submodules
"
return
;;
esac
}
+__git_untracked_file_modes="all no normal"
+
_git_commit ()
{
case "$prev" in
-c|-C)
- __gitcomp_nl "$(__git_refs)" "" "${cur}"
+ __git_complete_refs
return
;;
esac
@@ -1115,11 +1349,11 @@ _git_commit ()
;;
--reuse-message=*|--reedit-message=*|\
--fixup=*|--squash=*)
- __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+ __git_complete_refs --cur="${cur#*=}"
return
;;
--untracked-files=*)
- __gitcomp "all no normal" "" "${cur##--untracked-files=}"
+ __gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}"
return
;;
--*)
@@ -1131,11 +1365,12 @@ _git_commit ()
--reset-author --file= --message= --template=
--cleanup= --untracked-files --untracked-files=
--verbose --quiet --fixup= --squash=
+ --patch --short --date --allow-empty
"
return
esac
- if git rev-parse --verify --quiet HEAD >/dev/null; then
+ if __git rev-parse --verify --quiet HEAD >/dev/null; then
__git_complete_index_file "--committable"
else
# This is the first commit
@@ -1149,20 +1384,23 @@ _git_describe ()
--*)
__gitcomp "
--all --tags --contains --abbrev= --candidates=
- --exact-match --debug --long --match --always
+ --exact-match --debug --long --match --always --first-parent
+ --exclude --dirty --broken
"
return
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
__git_diff_algorithms="myers minimal patience histogram"
+__git_diff_submodule_formats="diff log short"
+
__git_diff_common_options="--stat --numstat --shortstat --summary
--patch-with-stat --name-only --name-status --color
--no-color --color-words --no-renames --check
--full-index --binary --abbrev --diff-filter=
- --find-copies-harder
+ --find-copies-harder --ignore-cr-at-eol
--text --ignore-space-at-eol --ignore-space-change
--ignore-all-space --ignore-blank-lines --exit-code
--quiet --ext-diff --no-ext-diff
@@ -1173,6 +1411,7 @@ __git_diff_common_options="--stat --numstat --shortstat --summary
--dirstat --dirstat= --dirstat-by-file
--dirstat-by-file= --cumulative
--diff-algorithm=
+ --submodule --submodule=
"
_git_diff ()
@@ -1184,6 +1423,10 @@ _git_diff ()
__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
return
;;
+ --submodule=*)
+ __gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
+ return
+ ;;
--*)
__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
--base --ours --theirs --no-index
@@ -1225,6 +1468,7 @@ __git_fetch_recurse_submodules="yes on-demand no"
__git_fetch_options="
--quiet --verbose --append --upload-pack --force --keep --depth=
--tags --no-tags --all --prune --dry-run --recurse-submodules=
+ --unshallow --update-shallow
"
_git_fetch ()
@@ -1274,7 +1518,7 @@ _git_fsck ()
--*)
__gitcomp "
--tags --root --unreachable --cache --no-reflogs --full
- --strict --verbose --lost-found
+ --strict --verbose --lost-found --name-objects
"
return
;;
@@ -1296,8 +1540,43 @@ _git_gitk ()
_gitk
}
-__git_match_ctag() {
- awk "/^${1//\//\\/}/ { print \$1 }" "$2"
+# Lists matching symbol names from a tag (as in ctags) file.
+# 1: List symbol names matching this word.
+# 2: The tag file to list symbol names from.
+# 3: A prefix to be added to each listed symbol name (optional).
+# 4: A suffix to be appended to each listed symbol name (optional).
+__git_match_ctag () {
+ awk -v pfx="${3-}" -v sfx="${4-}" "
+ /^${1//\//\\/}/ { print pfx \$1 sfx }
+ " "$2"
+}
+
+# Complete symbol names from a tag file.
+# Usage: __git_complete_symbol [<option>]...
+# --tags=<file>: The tag file to list symbol names from instead of the
+# default "tags".
+# --pfx=<prefix>: A prefix to be added to each symbol name.
+# --cur=<word>: The current symbol name to be completed. Defaults to
+# the current word to be completed.
+# --sfx=<suffix>: A suffix to be appended to each symbol name instead
+# of the default space.
+__git_complete_symbol () {
+ local tags=tags pfx="" cur_="${cur-}" sfx=" "
+
+ while test $# != 0; do
+ case "$1" in
+ --tags=*) tags="${1##--tags=}" ;;
+ --pfx=*) pfx="${1##--pfx=}" ;;
+ --cur=*) cur_="${1##--cur=}" ;;
+ --sfx=*) sfx="${1##--sfx=}" ;;
+ *) return 1 ;;
+ esac
+ shift
+ done
+
+ if test -r "$tags"; then
+ __gitcomp_direct "$(__git_match_ctag "$cur_" "$tags" "$pfx" "$sfx")"
+ fi
}
_git_grep ()
@@ -1318,6 +1597,8 @@ _git_grep ()
--max-depth
--count
--and --or --not --all-match
+ --break --heading --show-function --function-context
+ --untracked --no-index
"
return
;;
@@ -1325,29 +1606,26 @@ _git_grep ()
case "$cword,$prev" in
2,*|*,-*)
- if test -r tags; then
- __gitcomp_nl "$(__git_match_ctag "$cur" tags)"
- return
- fi
+ __git_complete_symbol && return
;;
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_help ()
{
case "$cur" in
--*)
- __gitcomp "--all --info --man --web"
+ __gitcomp "--all --guides --info --man --web"
return
;;
esac
__git_compute_all_commands
__gitcomp "$__git_all_commands $(__git_aliases)
attributes cli core-tutorial cvs-migration
- diffcore gitk glossary hooks ignore modules
- namespaces repository-layout tutorial tutorial-2
+ diffcore everyday gitk glossary hooks ignore modules
+ namespaces repository-layout revisions tutorial tutorial-2
workflows
"
}
@@ -1390,6 +1668,12 @@ _git_ls_files ()
_git_ls_remote ()
{
+ case "$cur" in
+ --*)
+ __gitcomp "--heads --tags --refs --get-url --symref"
+ return
+ ;;
+ esac
__gitcomp_nl "$(__git_remotes)"
}
@@ -1427,12 +1711,25 @@ __git_log_date_formats="relative iso8601 rfc2822 short local default raw"
_git_log ()
{
__git_has_doubledash && return
+ __git_find_repo_path
- local g="$(git rev-parse --git-dir 2>/dev/null)"
local merge=""
- if [ -f "$g/MERGE_HEAD" ]; then
+ if [ -f "$__git_repo_path/MERGE_HEAD" ]; then
merge="--merge"
fi
+ case "$prev,$cur" in
+ -L,:*:*)
+ return # fall back to Bash filename completion
+ ;;
+ -L,:*)
+ __git_complete_symbol --cur="${cur#:}" --sfx=":"
+ return
+ ;;
+ -G,*|-S,*)
+ __git_complete_symbol
+ return
+ ;;
+ esac
case "$cur" in
--pretty=*|--format=*)
__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
@@ -1447,6 +1744,14 @@ _git_log ()
__gitcomp "full short no" "" "${cur##--decorate=}"
return
;;
+ --diff-algorithm=*)
+ __gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
+ return
+ ;;
+ --submodule=*)
+ __gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
+ return
+ ;;
--*)
__gitcomp "
$__git_log_common_options
@@ -1458,6 +1763,7 @@ _git_log ()
--relative-date --date=
--pretty= --format= --oneline
--show-signature
+ --cherry-mark
--cherry-pick
--graph
--decorate --decorate=
@@ -1469,6 +1775,21 @@ _git_log ()
"
return
;;
+ -L:*:*)
+ return # fall back to Bash filename completion
+ ;;
+ -L:*)
+ __git_complete_symbol --cur="${cur#-L:}" --sfx=":"
+ return
+ ;;
+ -G*)
+ __git_complete_symbol --pfx="-G" --cur="${cur#-G}"
+ return
+ ;;
+ -S*)
+ __git_complete_symbol --pfx="-S" --cur="${cur#-S}"
+ return
+ ;;
esac
__git_complete_revlist
}
@@ -1488,10 +1809,10 @@ _git_merge ()
case "$cur" in
--*)
__gitcomp "$__git_merge_options
- --rerere-autoupdate --no-rerere-autoupdate --abort"
+ --rerere-autoupdate --no-rerere-autoupdate --abort --continue"
return
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_mergetool ()
@@ -1502,7 +1823,7 @@ _git_mergetool ()
return
;;
--*)
- __gitcomp "--tool="
+ __gitcomp "--tool= --prompt --no-prompt"
return
;;
esac
@@ -1516,7 +1837,7 @@ _git_merge_base ()
return
;;
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_mv ()
@@ -1554,7 +1875,7 @@ _git_notes ()
,*)
case "$prev" in
--ref)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
*)
__gitcomp "$subcommands --ref"
@@ -1563,7 +1884,7 @@ _git_notes ()
;;
add,--reuse-message=*|append,--reuse-message=*|\
add,--reedit-message=*|append,--reedit-message=*)
- __gitcomp_nl "$(__git_refs)" "" "${cur#*=}"
+ __git_complete_refs --cur="${cur#*=}"
;;
add,--*|append,--*)
__gitcomp '--file= --message= --reedit-message=
@@ -1582,7 +1903,7 @@ _git_notes ()
-m|-F)
;;
*)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
esac
;;
@@ -1601,6 +1922,7 @@ _git_pull ()
--*)
__gitcomp "
--rebase --no-rebase
+ --autostash --no-autostash
$__git_merge_options
$__git_fetch_options
"
@@ -1610,7 +1932,7 @@ _git_pull ()
__git_complete_remote_or_refspec
}
-__git_push_recurse_submodules="check on-demand"
+__git_push_recurse_submodules="check on-demand only"
__git_complete_force_with_lease ()
{
@@ -1620,10 +1942,10 @@ __git_complete_force_with_lease ()
--*=)
;;
*:*)
- __gitcomp_nl "$(__git_refs)" "" "${cur_#*:}"
+ __git_complete_refs --cur="${cur_#*:}"
;;
*)
- __gitcomp_nl "$(__git_refs)" "" "$cur_"
+ __git_complete_refs --cur="$cur_"
;;
esac
}
@@ -1668,12 +1990,13 @@ _git_push ()
_git_rebase ()
{
- local dir="$(__gitdir)"
- if [ -f "$dir"/rebase-merge/interactive ]; then
- __gitcomp "--continue --skip --abort --edit-todo"
+ __git_find_repo_path
+ if [ -f "$__git_repo_path"/rebase-merge/interactive ]; then
+ __gitcomp "--continue --skip --abort --quit --edit-todo"
return
- elif [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
- __gitcomp "--continue --skip --abort"
+ elif [ -d "$__git_repo_path"/rebase-apply ] || \
+ [ -d "$__git_repo_path"/rebase-merge ]; then
+ __gitcomp "--continue --skip --abort --quit"
return
fi
__git_complete_strategy && return
@@ -1698,7 +2021,7 @@ _git_rebase ()
return
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_reflog ()
@@ -1709,7 +2032,7 @@ _git_reflog ()
if [ -z "$subcommand" ]; then
__gitcomp "$subcommands"
else
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
fi
}
@@ -1720,9 +2043,7 @@ _git_send_email ()
{
case "$prev" in
--to|--cc|--bcc|--from)
- __gitcomp "
- $(git --git-dir="$(__gitdir)" send-email --dump-aliases 2>/dev/null)
- "
+ __gitcomp "$(__git send-email --dump-aliases)"
return
;;
esac
@@ -1752,9 +2073,7 @@ _git_send_email ()
return
;;
--to=*|--cc=*|--bcc=*|--from=*)
- __gitcomp "
- $(git --git-dir="$(__gitdir)" send-email --dump-aliases 2>/dev/null)
- " "" "${cur#--*=}"
+ __gitcomp "$(__git send-email --dump-aliases)" "" "${cur#--*=}"
return
;;
--*)
@@ -1779,6 +2098,56 @@ _git_stage ()
_git_add
}
+_git_status ()
+{
+ local complete_opt
+ local untracked_state
+
+ case "$cur" in
+ --ignore-submodules=*)
+ __gitcomp "none untracked dirty all" "" "${cur##--ignore-submodules=}"
+ return
+ ;;
+ --untracked-files=*)
+ __gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}"
+ return
+ ;;
+ --column=*)
+ __gitcomp "
+ always never auto column row plain dense nodense
+ " "" "${cur##--column=}"
+ return
+ ;;
+ --*)
+ __gitcomp "
+ --short --branch --porcelain --long --verbose
+ --untracked-files= --ignore-submodules= --ignored
+ --column= --no-column
+ "
+ return
+ ;;
+ esac
+
+ untracked_state="$(__git_get_option_value "-u" "--untracked-files=" \
+ "$__git_untracked_file_modes" "status.showUntrackedFiles")"
+
+ case "$untracked_state" in
+ no)
+ # --ignored option does not matter
+ complete_opt=
+ ;;
+ all|normal|*)
+ complete_opt="--cached --directory --no-empty-directory --others"
+
+ if [ -n "$(__git_find_on_cmdline "--ignored")" ]; then
+ complete_opt="$complete_opt --ignored --exclude=*"
+ fi
+ ;;
+ esac
+
+ __git_complete_index_file "$complete_opt"
+}
+
__git_config_get_set_variables ()
{
local prevword word config_file= c=$cword
@@ -1798,7 +2167,7 @@ __git_config_get_set_variables ()
c=$((--c))
done
- git --git-dir="$(__gitdir)" config $config_file --name-only --list 2>/dev/null
+ __git config $config_file --name-only --list
}
_git_config ()
@@ -1809,7 +2178,7 @@ _git_config ()
return
;;
branch.*.merge)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
return
;;
branch.*.rebase)
@@ -1833,9 +2202,8 @@ _git_config ()
remote.*.push)
local remote="${prev#remote.}"
remote="${remote%.push}"
- __gitcomp_nl "$(git --git-dir="$(__gitdir)" \
- for-each-ref --format='%(refname):%(refname)' \
- refs/heads)"
+ __gitcomp_nl "$(__git for-each-ref \
+ --format='%(refname):%(refname)' refs/heads)"
return
;;
pull.twohead|pull.octopus)
@@ -1914,7 +2282,7 @@ _git_config ()
;;
branch.*)
local pfx="${cur%.*}." cur_="${cur#*.}"
- __gitcomp_nl "$(__git_heads)" "$pfx" "$cur_" "."
+ __gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")"
__gitcomp_nl_append $'autosetupmerge\nautosetuprebase\n' "$pfx" "$cur_"
return
;;
@@ -1969,14 +2337,24 @@ _git_config ()
esac
__gitcomp "
add.ignoreErrors
+ advice.amWorkDir
advice.commitBeforeMerge
advice.detachedHead
advice.implicitIdentity
- advice.pushNonFastForward
+ advice.pushAlreadyExists
+ advice.pushFetchFirst
+ advice.pushNeedsForce
+ advice.pushNonFFCurrent
+ advice.pushNonFFMatching
+ advice.pushUpdateRejected
advice.resolveConflict
+ advice.rmHints
advice.statusHints
+ advice.statusUoption
+ advice.ignoredHook
alias.
am.keepcr
+ am.threeWay
apply.ignorewhitespace
apply.whitespace
branch.autosetupmerge
@@ -2021,19 +2399,26 @@ _git_config ()
color.status.added
color.status.changed
color.status.header
+ color.status.localBranch
color.status.nobranch
+ color.status.remoteBranch
color.status.unmerged
color.status.untracked
color.status.updated
color.ui
+ commit.cleanup
+ commit.gpgSign
commit.status
commit.template
+ commit.verbose
core.abbrev
core.askpass
core.attributesfile
core.autocrlf
core.bare
core.bigFileThreshold
+ core.checkStat
+ core.commentChar
core.compression
core.createObject
core.deltaBaseCacheLimit
@@ -2043,6 +2428,8 @@ _git_config ()
core.fileMode
core.fsyncobjectfiles
core.gitProxy
+ core.hideDotFiles
+ core.hooksPath
core.ignoreStat
core.ignorecase
core.logAllRefUpdates
@@ -2050,20 +2437,30 @@ _git_config ()
core.notesRef
core.packedGitLimit
core.packedGitWindowSize
+ core.packedRefsTimeout
core.pager
+ core.precomposeUnicode
core.preferSymlinkRefs
core.preloadindex
+ core.protectHFS
+ core.protectNTFS
core.quotepath
core.repositoryFormatVersion
core.safecrlf
core.sharedRepository
core.sparseCheckout
+ core.splitIndex
+ core.sshCommand
core.symlinks
core.trustctime
core.untrackedCache
core.warnAmbiguousRefs
core.whitespace
core.worktree
+ credential.helper
+ credential.useHttpPath
+ credential.username
+ credentialCache.ignoreSIGHUP
diff.autorefreshindex
diff.external
diff.ignoreSubmodules
@@ -2084,6 +2481,7 @@ _git_config ()
format.attach
format.cc
format.coverLetter
+ format.from
format.headers
format.numbered
format.pretty
@@ -2094,15 +2492,19 @@ _git_config ()
format.thread
format.to
gc.
+ gc.aggressiveDepth
gc.aggressiveWindow
gc.auto
+ gc.autoDetach
gc.autopacklimit
+ gc.logExpiry
gc.packrefs
gc.pruneexpire
gc.reflogexpire
gc.reflogexpireunreachable
gc.rerereresolved
gc.rerereunresolved
+ gc.worktreePruneExpire
gitcvs.allbinary
gitcvs.commitmsgannotation
gitcvs.dbTableNamePrefix
@@ -2240,7 +2642,10 @@ _git_config ()
sendemail.suppressfrom
sendemail.thread
sendemail.to
+ sendemail.tocmd
sendemail.validate
+ sendemail.smtpbatchsize
+ sendemail.smtprelogindelay
showbranch.default
status.relativePaths
status.showUntrackedFiles
@@ -2259,31 +2664,79 @@ _git_config ()
_git_remote ()
{
- local subcommands="add rename remove set-head set-branches set-url show prune update"
+ local subcommands="
+ add rename remove set-head set-branches
+ get-url set-url show prune update
+ "
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
- __gitcomp "$subcommands"
+ case "$cur" in
+ --*)
+ __gitcomp "--verbose"
+ ;;
+ *)
+ __gitcomp "$subcommands"
+ ;;
+ esac
return
fi
- case "$subcommand" in
- rename|remove|set-url|show|prune)
- __gitcomp_nl "$(__git_remotes)"
+ case "$subcommand,$cur" in
+ add,--*)
+ __gitcomp "--track --master --fetch --tags --no-tags --mirror="
+ ;;
+ add,*)
+ ;;
+ set-head,--*)
+ __gitcomp "--auto --delete"
+ ;;
+ set-branches,--*)
+ __gitcomp "--add"
;;
- set-head|set-branches)
+ set-head,*|set-branches,*)
__git_complete_remote_or_refspec
;;
- update)
+ update,--*)
+ __gitcomp "--prune"
+ ;;
+ update,*)
__gitcomp "$(__git_get_config_variables "remotes")"
;;
+ set-url,--*)
+ __gitcomp "--push --add --delete"
+ ;;
+ get-url,--*)
+ __gitcomp "--push --all"
+ ;;
+ prune,--*)
+ __gitcomp "--dry-run"
+ ;;
*)
+ __gitcomp_nl "$(__git_remotes)"
;;
esac
}
_git_replace ()
{
- __gitcomp_nl "$(__git_refs)"
+ case "$cur" in
+ --*)
+ __gitcomp "--edit --graft --format= --list --delete"
+ return
+ ;;
+ esac
+ __git_complete_refs
+}
+
+_git_rerere ()
+{
+ local subcommands="clear forget diff remaining status gc"
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if test -z "$subcommand"
+ then
+ __gitcomp "$subcommands"
+ return
+ fi
}
_git_reset ()
@@ -2292,27 +2745,30 @@ _git_reset ()
case "$cur" in
--*)
- __gitcomp "--merge --mixed --hard --soft --patch"
+ __gitcomp "--merge --mixed --hard --soft --patch --keep"
return
;;
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_revert ()
{
- local dir="$(__gitdir)"
- if [ -f "$dir"/REVERT_HEAD ]; then
+ __git_find_repo_path
+ if [ -f "$__git_repo_path"/REVERT_HEAD ]; then
__gitcomp "--continue --quit --abort"
return
fi
case "$cur" in
--*)
- __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
+ __gitcomp "
+ --edit --mainline --no-edit --no-commit --signoff
+ --strategy= --strategy-option=
+ "
return
;;
esac
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
}
_git_rm ()
@@ -2336,7 +2792,7 @@ _git_shortlog ()
__gitcomp "
$__git_log_common_options
$__git_log_shortlog_options
- --numbered --summary
+ --numbered --summary --email
"
return
;;
@@ -2358,6 +2814,10 @@ _git_show ()
__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
return
;;
+ --submodule=*)
+ __gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
+ return
+ ;;
--*)
__gitcomp "--pretty= --format= --abbrev-commit --oneline
--show-signature
@@ -2388,7 +2848,7 @@ _git_show_branch ()
_git_stash ()
{
local save_opts='--all --keep-index --no-keep-index --quiet --patch --include-untracked'
- local subcommands='save list show apply clear drop pop create branch'
+ local subcommands='push save list show apply clear drop pop create branch'
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
case "$cur" in
@@ -2403,6 +2863,9 @@ _git_stash ()
esac
else
case "$subcommand,$cur" in
+ push,--*)
+ __gitcomp "$save_opts --message"
+ ;;
save,--*)
__gitcomp "$save_opts"
;;
@@ -2416,14 +2879,14 @@ _git_stash ()
;;
branch,*)
if [ $cword -eq 3 ]; then
- __gitcomp_nl "$(__git_refs)";
+ __git_complete_refs
else
- __gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
+ __gitcomp_nl "$(__git stash list \
| sed -n -e 's/:.*//p')"
fi
;;
show,*|apply,*|drop,*|pop,*)
- __gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
+ __gitcomp_nl "$(__git stash list \
| sed -n -e 's/:.*//p')"
;;
*)
@@ -2437,10 +2900,11 @@ _git_submodule ()
__git_has_doubledash && return
local subcommands="add status init deinit update summary foreach sync"
- if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
case "$cur" in
--*)
- __gitcomp "--quiet --cached"
+ __gitcomp "--quiet"
;;
*)
__gitcomp "$subcommands"
@@ -2448,6 +2912,33 @@ _git_submodule ()
esac
return
fi
+
+ case "$subcommand,$cur" in
+ add,--*)
+ __gitcomp "--branch --force --name --reference --depth"
+ ;;
+ status,--*)
+ __gitcomp "--cached --recursive"
+ ;;
+ deinit,--*)
+ __gitcomp "--force --all"
+ ;;
+ update,--*)
+ __gitcomp "
+ --init --remote --no-fetch
+ --recommend-shallow --no-recommend-shallow
+ --force --rebase --merge --reference --depth --recursive --jobs
+ "
+ ;;
+ summary,--*)
+ __gitcomp "--cached --files --summary-limit"
+ ;;
+ foreach,--*|sync,--*)
+ __gitcomp "--recursive"
+ ;;
+ *)
+ ;;
+ esac
}
_git_svn ()
@@ -2468,14 +2959,14 @@ _git_svn ()
--no-metadata --use-svm-props --use-svnsync-props
--log-window-size= --no-checkout --quiet
--repack-flags --use-log-author --localtime
+ --add-author-from
--ignore-paths= --include-paths= $remote_opts
"
local init_opts="
--template= --shared= --trunk= --tags=
--branches= --stdlayout --minimize-url
--no-metadata --use-svm-props --use-svnsync-props
- --rewrite-root= --prefix= --use-log-author
- --add-author-from $remote_opts
+ --rewrite-root= --prefix= $remote_opts
"
local cmt_opts="
--edit --rmdir --find-copies-harder --copy-similarity=
@@ -2555,7 +3046,7 @@ _git_tag ()
i="${words[c]}"
case "$i" in
-d|-v)
- __gitcomp_nl "$(__git_tags)"
+ __gitcomp_direct "$(__git_tags "" "$cur" " ")"
return
;;
-f)
@@ -2570,11 +3061,11 @@ _git_tag ()
;;
-*|tag)
if [ $f = 1 ]; then
- __gitcomp_nl "$(__git_tags)"
+ __gitcomp_direct "$(__git_tags "" "$cur" " ")"
fi
;;
*)
- __gitcomp_nl "$(__git_refs)"
+ __git_complete_refs
;;
esac
@@ -2582,8 +3073,8 @@ _git_tag ()
--*)
__gitcomp "
--list --delete --verify --annotate --message --file
- --sign --cleanup --local-user --force --column --sort
- --contains --points-at
+ --sign --cleanup --local-user --force --column --sort=
+ --contains --no-contains --points-at --merged --no-merged --create-reflog
"
;;
esac
@@ -2594,9 +3085,36 @@ _git_whatchanged ()
_git_log
}
+_git_worktree ()
+{
+ local subcommands="add list lock prune unlock"
+ local subcommand="$(__git_find_on_cmdline "$subcommands")"
+ if [ -z "$subcommand" ]; then
+ __gitcomp "$subcommands"
+ else
+ case "$subcommand,$cur" in
+ add,--*)
+ __gitcomp "--detach"
+ ;;
+ list,--*)
+ __gitcomp "--porcelain"
+ ;;
+ lock,--*)
+ __gitcomp "--reason"
+ ;;
+ prune,--*)
+ __gitcomp "--dry-run --expire --verbose"
+ ;;
+ *)
+ ;;
+ esac
+ fi
+}
+
__git_main ()
{
- local i c=1 command __git_dir
+ local i c=1 command __git_dir __git_repo_path
+ local __git_C_args C_args_count=0
while [ $c -lt $cword ]; do
i="${words[c]}"
@@ -2606,6 +3124,10 @@ __git_main ()
--bare) __git_dir="." ;;
--help) command="help"; break ;;
-c|--work-tree|--namespace) ((c++)) ;;
+ -C) __git_C_args[C_args_count++]=-C
+ ((c++))
+ __git_C_args[C_args_count++]="${words[c]}"
+ ;;
-*) ;;
*) command="$i"; break ;;
esac
@@ -2613,6 +3135,17 @@ __git_main ()
done
if [ -z "$command" ]; then
+ case "$prev" in
+ --git-dir|-C|--work-tree)
+ # these need a path argument, let's fall back to
+ # Bash filename completion
+ return
+ ;;
+ -c|--namespace)
+ # we don't support completing these options' arguments
+ return
+ ;;
+ esac
case "$cur" in
--*) __gitcomp "
--paginate
@@ -2638,13 +3171,13 @@ __git_main ()
fi
local completion_func="_git_${command//-/_}"
- declare -f $completion_func >/dev/null && $completion_func && return
+ declare -f $completion_func >/dev/null 2>/dev/null && $completion_func && return
local expansion=$(__git_aliased_command "$command")
if [ -n "$expansion" ]; then
words[1]=$expansion
completion_func="_git_${expansion//-/_}"
- declare -f $completion_func >/dev/null && $completion_func
+ declare -f $completion_func >/dev/null 2>/dev/null && $completion_func
fi
}
@@ -2652,9 +3185,11 @@ __gitk_main ()
{
__git_has_doubledash && return
- local g="$(__gitdir)"
+ local __git_repo_path
+ __git_find_repo_path
+
local merge=""
- if [ -f "$g/MERGE_HEAD" ]; then
+ if [ -f "$__git_repo_path/MERGE_HEAD" ]; then
merge="--merge"
fi
case "$cur" in
@@ -2701,6 +3236,15 @@ if [[ -n ${ZSH_VERSION-} ]]; then
esac
}
+ __gitcomp_direct ()
+ {
+ emulate -L zsh
+
+ local IFS=$'\n'
+ compset -P '*[=:]'
+ compadd -Q -- ${=1} && _ret=0
+ }
+
__gitcomp_nl ()
{
emulate -L zsh
diff --git a/plugins/gitfast/git-prompt.sh b/plugins/gitfast/git-prompt.sh
index 0da14eee9..fd2b049db 100644
--- a/plugins/gitfast/git-prompt.sh
+++ b/plugins/gitfast/git-prompt.sh
@@ -82,6 +82,7 @@
# contains relative to newer annotated tag (v1.6.3.2~35)
# branch relative to newer tag or branch (master~4)
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
+# tag relative to any older tag (v1.6.3.1-13-gdd42c2f)
# default exactly matching tag
#
# If you would like a colored hint about the current dirty state, set
@@ -277,11 +278,12 @@ __git_ps1_colorize_gitstring ()
r="$c_clear$r"
}
+# Helper function to read the first line of a file into a variable.
+# __git_eread requires 2 arguments, the file path and the name of the
+# variable, in that order.
__git_eread ()
{
- local f="$1"
- shift
- test -r "$f" && read "$@" <"$f"
+ test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
}
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
@@ -355,8 +357,8 @@ __git_ps1 ()
# incorrect.)
#
local ps1_expanded=yes
- [ -z "$ZSH_VERSION" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
- [ -z "$BASH_VERSION" ] || shopt -q promptvars || ps1_expanded=no
+ [ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
+ [ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
local repo_info rev_parse_exit_code
repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
@@ -368,7 +370,7 @@ __git_ps1 ()
return $exit
fi
- local short_sha
+ local short_sha=""
if [ "$rev_parse_exit_code" = "0" ]; then
short_sha="${repo_info##*$'\n'}"
repo_info="${repo_info%$'\n'*}"
@@ -443,6 +445,8 @@ __git_ps1 ()
git describe --contains HEAD ;;
(branch)
git describe --contains --all HEAD ;;
+ (tag)
+ git describe --tags HEAD ;;
(describe)
git describe HEAD ;;
(* | default)
diff --git a/plugins/gitfast/gitfast.plugin.zsh b/plugins/gitfast/gitfast.plugin.zsh
index dba1b1315..7b6b67e92 100644
--- a/plugins/gitfast/gitfast.plugin.zsh
+++ b/plugins/gitfast/gitfast.plugin.zsh
@@ -1,6 +1,4 @@
-dir=$(dirname $0)
-source $dir/../git/git.plugin.zsh
-source $dir/git-prompt.sh
+source "${0:A:h}/git-prompt.sh"
function git_prompt_info() {
dirty="$(parse_git_dirty)"
diff --git a/plugins/gitfast/update b/plugins/gitfast/update
new file mode 100755
index 000000000..05054245f
--- /dev/null
+++ b/plugins/gitfast/update
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+url="https://git.kernel.org/pub/scm/git/git.git/plain/contrib/completion"
+version="2.16.0"
+
+curl -s -o _git "${url}/git-completion.zsh?h=v${version}" &&
+curl -s -o git-completion.bash "${url}/git-completion.bash?h=v${version}" &&
+curl -s -o git-prompt.sh "${url}/git-prompt.sh?h=v${version}" &&
+git apply updates.patch
diff --git a/plugins/gitfast/updates.patch b/plugins/gitfast/updates.patch
new file mode 100644
index 000000000..28a31f859
--- /dev/null
+++ b/plugins/gitfast/updates.patch
@@ -0,0 +1,56 @@
+diff --git b/plugins/gitfast/_git a/plugins/gitfast/_git
+index e2554130..a2e3bef5 100644
+--- b/plugins/gitfast/_git
++++ a/plugins/gitfast/_git
+@@ -30,7 +30,7 @@ if [ -z "$script" ]; then
+ local -a locations
+ local e
+ locations=(
+- $(dirname ${funcsourcetrace[1]%:*})/git-completion.bash
++ "$(dirname ${funcsourcetrace[1]%:*})/git-completion.bash"
+ '/etc/bash_completion.d/git' # fedora, old debian
+ '/usr/share/bash-completion/completions/git' # arch, ubuntu, new debian
+ '/usr/share/bash-completion/git' # gentoo
+@@ -214,8 +214,10 @@ _git ()
+
+ if (( $+functions[__${service}_zsh_main] )); then
+ __${service}_zsh_main
+- else
++ elif (( $+functions[__${service}_main] )); then
+ emulate ksh -c __${service}_main
++ elif (( $+functions[_${service}] )); then
++ emulate ksh -c _${service}
+ fi
+
+ let _ret && _default && _ret=0
+diff --git b/plugins/gitfast/git-completion.bash a/plugins/gitfast/git-completion.bash
+index 9c8f7380..14012cab 100644
+--- b/plugins/gitfast/git-completion.bash
++++ a/plugins/gitfast/git-completion.bash
+@@ -2915,6 +2915,6 @@ __git_complete gitk __gitk_main
+ # when the user has tab-completed the executable name and consequently
+ # included the '.exe' suffix.
+ #
+-if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
++if [[ "$OSTYPE" = cygwin* ]]; then
+ __git_complete git.exe __git_main
+ fi
+diff --git b/plugins/gitfast/git-prompt.sh a/plugins/gitfast/git-prompt.sh
+index 97eacd78..c1de34eb 100644
+--- b/plugins/gitfast/git-prompt.sh
++++ a/plugins/gitfast/git-prompt.sh
+@@ -502,9 +502,11 @@ __git_ps1 ()
+
+ local z="${GIT_PS1_STATESEPARATOR-" "}"
+
+- # NO color option unless in PROMPT_COMMAND mode
+- if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
+- __git_ps1_colorize_gitstring
++ # NO color option unless in PROMPT_COMMAND mode or it's Zsh
++ if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
++ if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
++ __git_ps1_colorize_gitstring
++ fi
+ fi
+
+ b=${b##refs/heads/}
diff --git a/plugins/github/_hub b/plugins/github/_hub
index 1833a9c09..209a3df9e 100644
--- a/plugins/github/_hub
+++ b/plugins/github/_hub
@@ -58,6 +58,7 @@ __hub_setup_zsh_fns () {
- set1 \
'-m[message]' \
'-F[file]' \
+ '--no-edit[use first commit message for pull request title/description]' \
'-a[user]' \
'-M[milestone]' \
'-l[labels]' \
@@ -84,11 +85,15 @@ __hub_setup_zsh_fns () {
hub_commands=(
alias:'show shell instructions for wrapping git'
pull-request:'open a pull request on GitHub'
+ pr:'list or checkout a GitHub pull request'
+ issue:'list or create a GitHub issue'
+ release:'list or create a GitHub release'
fork:'fork origin repo on GitHub'
create:'create new repo on GitHub for the current project'
+ delete:'delete a GitHub repo'
browse:'browse the project on GitHub'
compare:'open GitHub compare view'
- ci-status:'lookup commit in GitHub Status API'
+ ci-status:'show status of GitHub checks for a commit'
sync:'update local branches from upstream'
)
_describe -t hub-commands 'hub command' hub_commands && ret=0
@@ -111,8 +116,12 @@ __hub_setup_bash_fns () {
cat <<-EOF
alias
pull-request
+pr
+issue
+release
fork
create
+delete
browse
compare
ci-status
diff --git a/plugins/gradle/gradle.plugin.zsh b/plugins/gradle/gradle.plugin.zsh
index 8df62c2e2..8d578e27b 100644
--- a/plugins/gradle/gradle.plugin.zsh
+++ b/plugins/gradle/gradle.plugin.zsh
@@ -156,7 +156,7 @@ _gradle_parse_and_extract_tasks () {
# Discover the gradle tasks by running "gradle tasks --all"
############################################################################
_gradle_tasks () {
- if [[ -f build.gradle || -f build.gradle.kts ]]; then
+ if [[ -f build.gradle || -f build.gradle.kts || -f settings.gradle || -f settings.gradle.kts ]]; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
_gradle_parse_and_extract_tasks "$(gradle tasks --all)" > .gradletasknamecache
@@ -166,7 +166,7 @@ _gradle_tasks () {
}
_gradlew_tasks () {
- if [[ -f build.gradle || -f build.gradle.kts ]]; then
+ if [[ -f build.gradle || -f build.gradle.kts || -f settings.gradle || -f settings.gradle.kts ]]; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
_gradle_parse_and_extract_tasks "$(./gradlew tasks --all)" > .gradletasknamecache
diff --git a/plugins/gulp/gulp.plugin.zsh b/plugins/gulp/gulp.plugin.zsh
index 2b3105135..6234302c5 100644
--- a/plugins/gulp/gulp.plugin.zsh
+++ b/plugins/gulp/gulp.plugin.zsh
@@ -11,7 +11,7 @@
#
# André König
-# Github: https://github.com/akoenig
+# GitHub: https://github.com/akoenig
# Twitter: https://twitter.com/caiifr
#
@@ -19,11 +19,11 @@
# Grabs all available tasks from the `gulpfile.js`
# in the current directory.
#
-function $$gulp_completion {
+function _gulp_completion {
compls=$(gulp --tasks-simple 2>/dev/null)
completions=(${=compls})
compadd -- $completions
}
-compdef $$gulp_completion gulp
+compdef _gulp_completion gulp
diff --git a/plugins/httpie/README.md b/plugins/httpie/README.md
index 56aa6a8ca..f22d3a64e 100644
--- a/plugins/httpie/README.md
+++ b/plugins/httpie/README.md
@@ -1,6 +1,15 @@
-## HTTPie
-**Maintainer:** [lululau](https://github.com/lululau)
+# HTTPie plugin
+
+This plugin adds completion for [HTTPie](https://httpie.org), a command line HTTP
+client, a friendlier cURL replacement.
+
+To use it, add `httpie` to the plugins array in your zshrc file:
-This plugin adds completion for HTTPie, which is a command line HTTP client, a user-friendly cURL replacement.
+```zsh
+plugins=(... httpie)
+```
-[HTTPie Homepage](https://httpie.org)
+It uses completion from [zsh-completions](https://github.com/zsh-users/zsh-completions).
+
+
+**Maintainer:** [lululau](https://github.com/lululau)
diff --git a/plugins/httpie/_httpie b/plugins/httpie/_httpie
new file mode 100644
index 000000000..4d702ef60
--- /dev/null
+++ b/plugins/httpie/_httpie
@@ -0,0 +1,181 @@
+#compdef http
+# ------------------------------------------------------------------------------
+# Copyright (c) 2015 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 httpie 0.7.2 (http://httpie.org)
+#
+# ------------------------------------------------------------------------------
+# Authors
+# -------
+#
+# * Akira Maeda <https://github.com/glidenote>
+# * Valodim <https://github.com/Valodim>
+# * Claus Klingberg <https://github.com/cjk>
+#
+# ------------------------------------------------------------------------------
+# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
+# vim: ft=zsh sw=2 ts=2 et
+# ------------------------------------------------------------------------------
+
+_httpie_params () {
+
+ local ret=1 expl
+
+ # or a url
+ if (( CURRENT <= NORMARG+1 )) && [[ $words[NORMARG] != *:* ]] ; then
+ _httpie_urls && ret=0
+
+ # regular param, if we already have a url
+ elif (( CURRENT > NORMARG )); then
+
+ # if the suffix is precisely : this is shorthand for a header
+ if [[ -prefix ':' ]]; then
+ PREFIX=
+ SUFFIX=:
+ fi
+
+ # if we are in front of a : (possibly due to the PREFIX move before)
+ if [[ -suffix ':' ]]; then
+
+ # this is rather buggy with normal tab behavior :\
+ compstate[insert]=menu
+ _wanted http_header expl 'HTTP Header' \
+ compadd -s ':' -S '' -- Content-Type Cookie && return 0
+ fi
+
+ # ignore all prefix stuff
+ compset -P '(#b)([^:@=]#)'
+ local name=$match[1]
+
+ if compset -P '='; then
+ _message "$name data field value"
+ elif compset -P '@'; then
+ _files
+ elif compset -P ':=@'; then
+ _files
+ elif compset -P ':='; then
+ _message "$name raw json data"
+ elif compset -P '=='; then
+ _message "$name url parameter value"
+ elif compset -P ':'; then
+ _message "$name header content"
+ else
+ typeset -a ops
+ ops=(
+ '=:data field'
+ '\::header'
+ '==:request parameter'
+ '@:data file field'
+ '\:=:raw json field'
+ '\:=@:raw json field file path'
+ )
+ _describe -t httpparams "parameter types" ops -Q -S ''
+ fi
+
+ ret=0
+
+ fi
+
+ # first arg may be a request method
+ (( CURRENT == NORMARG )) &&
+ _wanted http_method expl 'Request Method' \
+ compadd GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH LINK UNLINK && ret=0
+
+ return $ret
+
+}
+
+_httpie_urls() {
+
+ local ret=1
+
+ if ! [[ -prefix [-+.a-z0-9]#:// ]]; then
+ local expl
+ compset -S '[^:/]*' && compstate[to_end]=''
+ _wanted url-schemas expl 'URL schema' compadd -S '' http:// https:// && ret=0
+ else
+ _urls && ret=0
+ fi
+
+ return $ret
+
+}
+
+_httpie_printflags () {
+
+ local ret=1
+
+ # not sure why this is necessary, but it will complete "-pH" style without it
+ [[ $IPREFIX == "-p" ]] && IPREFIX+=" "
+
+ compset -P '(#b)([a-zA-Z]#)'
+
+ local -a flags
+ [[ $match[1] != *H* ]] && flags+=( "H:request headers" )
+ [[ $match[1] != *B* ]] && flags+=( "B:request body" )
+ [[ $match[1] != *h* ]] && flags+=( "h:response headers" )
+ [[ $match[1] != *b* ]] && flags+=( "b:response body" )
+
+ _describe -t printflags "print flags" flags -S '' && ret=0
+
+ return $ret
+
+}
+
+integer NORMARG
+
+_arguments -n -C -s \
+ '(-j --json -f)'{-j,--json}'[Data items from the command line are serialized as a JSON object.]' \
+ '(-f --form -j)'{-f,--form}'[Data items from the command line are serialized as form fields.]' \
+ '--pretty=[Controls output processing.]:output format:(all colors format none)' \
+ '(-s --style)'{-s,--style}'=[Output coloring style]:STYLE:(autumn borland bw colorful default emacs friendly fruity manni monokai murphy native pastie perldoc ttr solarized tango trac vim vs)' \
+ '(-p --print)'{-p,--print}'=[String specifying what the output should contain]:print flags:_httpie_printflags' \
+ '(-v --verbose)'{-v,--verbose}'[Print the whole request as well as the response.]' \
+ '(-p -h --headers)'{-h,--headers}'[Print only the response headers.]' \
+ '(-p -b --body)'{-b,--body}'[Print only the response body.]' \
+ '(-S --stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f`.]' \
+ '(-o --output)'{-o,--output}'=[Save output to FILE.]:output file:_files' \
+ '(-d --download)'{-d,--download}'=[Do not print the response body to stdout.]' \
+ '(-c --continue)'{-c,--continue}'[Resume an interrupted download.]' \
+ '(--session-read-only)--session=[Create, or reuse and update a session.]:session name (or path)' \
+ '(--session)--session-read-only=[Create or read a session without updating it form the request/response exchange.]:session name (or path)' \
+ '(-a --auth)'{-a,--auth}'=[If only the username is provided (-a username)]:USER\:PASS' \
+ '--auth-type=[The authentication mechanism to be used. Defaults to "basic".]:AUTH-TYPE:(basic digest)' \
+ '--proxy=[String mapping protocol to the URL of the proxy.]:PROXY' \
+ '--follow[Allow full redirects.]' \
+ "--verify=[Enable or disable verification of ssl certificates.]:verify certificate:(yes no)" \
+ '--allow-redirects[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new ``Location``)]' \
+ '--timeout=[Float describes the timeout of the request (Use socket.setdefaulttimeout() as fallback).]:timeout (seconds)' \
+ '--check-status[This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \
+ '--ignore-stdin[Do not attempt to read stdin.]' \
+ '(- *)--help[show help message.]' \
+ "(- *)--version[show program's version number and exit.]" \
+ '--traceback[Prints exception traceback should one occur.]' \
+ '--debug[Prints exception traceback should one occur and other information useful for debugging HTTPie itself.]' \
+ '*:args:_httpie_params' && return 0
diff --git a/plugins/httpie/httpie.plugin.zsh b/plugins/httpie/httpie.plugin.zsh
deleted file mode 100644
index 68ead6c67..000000000
--- a/plugins/httpie/httpie.plugin.zsh
+++ /dev/null
@@ -1,33 +0,0 @@
-function _httpie_completion() {
- _arguments -C \
- '(- 1 *)--version[display version information]' \
- '(-j|--json)'{-j,--json}'[(default) Data items from the command line are serialized as a JSON object]' \
- '(-f|--form)'{-f,--form}'[Data items from the command line are serialized as form fields]' \
- '(--pretty)--pretty[<all,colors,format,none> Controls output processing]:options' \
- '(-s|--style)'{-s,--style}'[Output coloring style]' \
- '(-p|--print)'{-p,--print}'[String specifying what the output should contain: H(request headers), B(request body), h(response headers), b(response body)]' \
- '(-v|--verbose)'{-v,--verbose}'[Print the whole request as well as the response. Shortcut for --print=HBbh.]' \
- '(-h|--headers)'{-h,--headers}'[Print only the response headers. Shortcut for --print=h]' \
- '(-b|--body)'{-b,--body}'[Print only the response body. Shortcut for --print=b]' \
- '(-S|--stream)'{-S,--stream}'[Always stream the output by line, i.e., behave like `tail -f'"'"']' \
- '(-o|--output)'{-o,--output}'[Save output to FILE]:file:_files' \
- '(-d|--download)'{-d,--download}'[Do not print the response body to stdout. Rather, download it and store it in a file. The filename is guessed unless specified with --output filename. This action is similar to the default behaviour of wget.]' \
- '(-c|--continue)'{-c,--continue}'[Resume an interrupted download. Note that the --output option needs to be specified as well.]' \
- '(--session)--session[Create, or reuse and update a session. Within a session, custom headers, auth credential, as well as any cookies sent by the server persist between requests]:file:_files' \
- '(--session-read-only)--session-read-only[Create or read a session without updating it form the request/response exchange]:file:_files' \
- '(-a|--auth)'{-a,--auth}'[<USER:PASS> If only the username is provided (-a username), HTTPie will prompt for the password]' \
- '(--auth-type)--auth-type[<basic, digest> The authentication mechanism to be used. Defaults to "basic".]' \
- '(--proxy)--proxy[<PROTOCOL:PROXY_URL> String mapping protocol to the URL of the proxy]' \
- '(--follow)--follow[Set this flag if full redirects are allowed (e.g. re-POST-ing of data at new Location).]' \
- '(--verify)--verify[<VERIFY> Set to "no" to skip checking the host'"'"'s SSL certificate. You can also pass the path to a CA_BUNDLE file for private certs. You can also set the REQUESTS_CA_BUNDLE environment variable. Defaults to "yes".]' \
- '(--timeout)--timeout[<SECONDS> The connection timeout of the request in seconds. The default value is 30 seconds]' \
- '(--check-status)--check-status[By default, HTTPie exits with 0 when no network or other fatal errors occur. This flag instructs HTTPie to also check the HTTP status code and exit with an error if the status indicates one.]' \
- '(--ignore-stdin)--ignore-stdin[Do not attempt to read stdin]' \
- '(--help)--help[Show this help message and exit]' \
- '(--traceback)--traceback[Prints exception traceback should one occur]' \
- '(--debug)--debug[Prints exception traceback should one occur, and also other information that is useful for debugging HTTPie itself and for reporting bugs]' \
- '1: :->cmds' \
- '*: :->args' && ret=0
-}
-
-compdef _httpie_completion http \ No newline at end of file
diff --git a/plugins/iwhois/README.md b/plugins/iwhois/README.md
deleted file mode 100644
index 1626b8524..000000000
--- a/plugins/iwhois/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# iwhois
-
-Provides a whois command with a more accurate and up-to-date list of whois servers
-using CNAMES, via [whois.geek.nz](https://github.com/iwantmyname/whois.geek.nz).
-
-To use it, add iwhois to the plugins array of your zshrc file:
-```
-plugins=(... iwhois)
-```
-
-### Usage
-
-The plugin defines the function `iwhois` that takes a domain name as an argument:
-
-```
-$ iwhois github.com
- Domain Name: GITHUB.COM
- Registry Domain ID: 1264983250_DOMAIN_COM-VRSN
- Registrar WHOIS Server: whois.markmonitor.com
- Registrar URL: http://www.markmonitor.com
- Updated Date: 2017-06-26T16:02:39Z
- Creation Date: 2007-10-09T18:20:50Z
- ...
-```
diff --git a/plugins/iwhois/iwhois.plugin.zsh b/plugins/iwhois/iwhois.plugin.zsh
deleted file mode 100644
index 22a75eec1..000000000
--- a/plugins/iwhois/iwhois.plugin.zsh
+++ /dev/null
@@ -1,5 +0,0 @@
-function iwhois() {
- resolver="whois.geek.nz"
- tld=`echo ${@: -1} | awk -F "." '{print $NF}'`
- whois -h ${tld}.${resolver} "$@" ;
-}
diff --git a/plugins/jira/README.md b/plugins/jira/README.md
index a934ae68c..091dccb97 100644
--- a/plugins/jira/README.md
+++ b/plugins/jira/README.md
@@ -21,6 +21,7 @@ jira new # opens a new issue
jira dashboard # opens your JIRA dashboard
jira reported [username] # queries for issues reported by a user
jira assigned [username] # queries for issues assigned to a user
+jira myissues # queries for you own issues
jira branch # opens an existing issue matching the current branch name
jira ABC-123 # opens an existing issue
jira ABC-123 m # opens an existing issue for adding a comment
diff --git a/plugins/jira/jira.plugin.zsh b/plugins/jira/jira.plugin.zsh
index 052481a60..e706948e9 100644
--- a/plugins/jira/jira.plugin.zsh
+++ b/plugins/jira/jira.plugin.zsh
@@ -43,7 +43,10 @@ function jira() {
echo "Opening new issue"
open_command "${jira_url}/secure/CreateIssue!default.jspa"
elif [[ "$action" == "assigned" || "$action" == "reported" ]]; then
- _jira_query $@
+ _jira_query ${@:-$action}
+ elif [[ "$action" == "myissues" ]]; then
+ echo "Opening my issues"
+ open_command "${jira_url}/issues/?filter=-1"
elif [[ "$action" == "dashboard" ]]; then
echo "Opening dashboard"
if [[ "$JIRA_RAPID_BOARD" == "true" ]]; then
diff --git a/plugins/kube-ps1/README.md b/plugins/kube-ps1/README.md
index fcb73cd2d..19dac42e9 100644
--- a/plugins/kube-ps1/README.md
+++ b/plugins/kube-ps1/README.md
@@ -45,20 +45,37 @@ want to load.
vim $HOME/.zshrc
```
-Add kube-ps1 to the list of enabled plugins:
+Add kube-ps1 to the list of enabled plugins and enable it on the prompt:
```shell
plugins=(
git
kube-ps1
)
+
+PROMPT=$PROMPT'$(kube_ps1) '
+```
+
+Note: the `PROMPT` example above was tested with the theme `robbyrussell`
+
+## Enabling / Disabling on the current shell
+
+Sometimes the kubernetes information can be anoying, you can easily
+switch it on and off with the following commands:
+
+```shell
+kubeon
+```
+
+```shell
+kubeoff
```
## Colors
Blue was used as the prefix to match the Kubernetes color as closely as
possible. Red was chosen as the cluster name to stand out, and cyan
-for the namespace. These can of course be changed.
+for the namespace. Check the customization section for changing them.
## Customization
@@ -75,7 +92,12 @@ The default settings can be overridden in ~/.zshrc
| `KUBE_PS1_SEPERATOR` | `\|` | Separator between symbol and cluster name |
| `KUBE_PS1_DIVIDER` | `:` | Separator between cluster and namespace |
| `KUBE_PS1_SUFFIX` | `)` | Prompt closing character |
+| `KUBE_PS1_COLOR_SYMBOL` | `"%F{blue}"` | Custom color for the symbol |
+| `KUBE_PS1_COLOR_CONTEXT` | `"%F{red}"` | Custom color for the context |
+| `KUBE_PS1_COLOR_NS` | `"%F{cyan}"` | Custom color for the namespace |
+| `KUBE_PS1_ENABLED` | `true` | Set to false to start disabled on any new shell, `kubeon`/`kubeoff` will flip this value on the current shell |
## Contributors
-Jared Yanovich
+- Jared Yanovich
+- Pedro Moranga \ No newline at end of file
diff --git a/plugins/kube-ps1/kube-ps1.plugin.zsh b/plugins/kube-ps1/kube-ps1.plugin.zsh
index df7277a26..3cb21284a 100644
--- a/plugins/kube-ps1/kube-ps1.plugin.zsh
+++ b/plugins/kube-ps1/kube-ps1.plugin.zsh
@@ -39,6 +39,11 @@ KUBE_PS1_DIVIDER="${KUBE_PS1_DIVIDER-:}"
KUBE_PS1_PREFIX="${KUBE_PS1_PREFIX-(}"
KUBE_PS1_SUFFIX="${KUBE_PS1_SUFFIX-)}"
KUBE_PS1_LAST_TIME=0
+KUBE_PS1_ENABLED=true
+
+KUBE_PS1_COLOR_SYMBOL="%{$fg[blue]%}"
+KUBE_PS1_COLOR_CONTEXT="%{$fg[red]%}"
+KUBE_PS1_COLOR_NS="%{$fg[cyan]%}"
_kube_ps1_binary_check() {
command -v "$1" >/dev/null
@@ -127,21 +132,28 @@ _kube_ps1_get_context_ns() {
fi
}
+# function to disable the prompt on the current shell
+kubeon(){
+ KUBE_PS1_ENABLED=true
+}
+
+# function to disable the prompt on the current shell
+kubeoff(){
+ KUBE_PS1_ENABLED=false
+}
+
# Build our prompt
kube_ps1 () {
- local reset_color="%f"
- local blue="%F{blue}"
- local red="%F{red}"
- local cyan="%F{cyan}"
+ local reset_color="%{$reset_color%}"
+ [[ ${KUBE_PS1_ENABLED} != 'true' ]] && return
KUBE_PS1="${reset_color}$KUBE_PS1_PREFIX"
- KUBE_PS1+="${blue}$(_kube_ps1_symbol)"
+ KUBE_PS1+="${KUBE_PS1_COLOR_SYMBOL}$(_kube_ps1_symbol)"
KUBE_PS1+="${reset_color}$KUBE_PS1_SEPERATOR"
- KUBE_PS1+="${red}$KUBE_PS1_CONTEXT${reset_color}"
+ KUBE_PS1+="${KUBE_PS1_COLOR_CONTEXT}$KUBE_PS1_CONTEXT${reset_color}"
KUBE_PS1+="$KUBE_PS1_DIVIDER"
- KUBE_PS1+="${cyan}$KUBE_PS1_NAMESPACE${reset_color}"
+ KUBE_PS1+="${KUBE_PS1_COLOR_NS}$KUBE_PS1_NAMESPACE${reset_color}"
KUBE_PS1+="$KUBE_PS1_SUFFIX"
echo "${KUBE_PS1}"
-
}
diff --git a/plugins/kubectl/README.md b/plugins/kubectl/README.md
index 3343f0195..0514d8f3f 100644
--- a/plugins/kubectl/README.md
+++ b/plugins/kubectl/README.md
@@ -22,6 +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
| | | **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 |
diff --git a/plugins/kubectl/kubectl.plugin.zsh b/plugins/kubectl/kubectl.plugin.zsh
index ab7a1a0a4..cf42beaea 100644
--- a/plugins/kubectl/kubectl.plugin.zsh
+++ b/plugins/kubectl/kubectl.plugin.zsh
@@ -28,6 +28,9 @@ alias kcsc='kubectl config set-context'
alias kcdc='kubectl config delete-context'
alias kccc='kubectl config current-context'
+# List all contexts
+alias kcgc='kubectl config get-contexts'
+
# General aliases
alias kdel='kubectl delete'
alias kdelf='kubectl delete -f'
diff --git a/plugins/ng/ng.plugin.zsh b/plugins/ng/ng.plugin.zsh
index b802bf617..44102e2a6 100644
--- a/plugins/ng/ng.plugin.zsh
+++ b/plugins/ng/ng.plugin.zsh
@@ -1,4 +1,3 @@
-
ng_opts='addon asset-sizes b build completion d destroy doc e2e g generate get github-pages:deploy gh-pages:deploy h help i init install lint make-this-awesome new s serve server set t test update v version -h --help'
_ng_completion () {
@@ -73,9 +72,7 @@ _ng_completion () {
;;
esac
- setopt shwordsplit
- reply=($opts)
- unset shwordsplit
+ reply=(${=opts})
}
compctl -K _ng_completion ng
diff --git a/plugins/nvm/nvm.plugin.zsh b/plugins/nvm/nvm.plugin.zsh
index 9dde3a266..4bab8e9d7 100644
--- a/plugins/nvm/nvm.plugin.zsh
+++ b/plugins/nvm/nvm.plugin.zsh
@@ -1,5 +1,8 @@
# Set NVM_DIR if it isn't already defined
[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm"
-# Load nvm if it exists
-[[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
+# Try to load nvm only if command not already available
+if ! type "nvm" &> /dev/null; then
+ # Load nvm if it exists
+ [[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
+fi
diff --git a/plugins/osx/README.md b/plugins/osx/README.md
index 3559dee02..4595ee319 100644
--- a/plugins/osx/README.md
+++ b/plugins/osx/README.md
@@ -18,7 +18,7 @@ This application makes use of the following third party scripts:
[shpotify](https://github.com/hnarayanan/shpotify)
-Copyright (c) 2012–2017 [Harish Narayanan](https://harishnarayanan.org/).
+Copyright (c) 2012–2019 [Harish Narayanan](https://harishnarayanan.org/).
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/plugins/osx/osx.plugin.zsh b/plugins/osx/osx.plugin.zsh
index a1c73a184..eb3c4fb7a 100644
--- a/plugins/osx/osx.plugin.zsh
+++ b/plugins/osx/osx.plugin.zsh
@@ -51,6 +51,17 @@ EOF
end tell
end tell
EOF
+ elif [[ "$the_app" == 'Hyper' ]]; then
+ osascript >/dev/null <<EOF
+ tell application "System Events"
+ tell process "Hyper" to keystroke "t" using command down
+ end tell
+ delay 1
+ tell application "System Events"
+ keystroke "${command}"
+ key code 36 #(presses enter)
+ end tell
+EOF
else
echo "tab: unsupported terminal app: $the_app"
@@ -91,6 +102,19 @@ EOF
end tell
end tell
EOF
+
+ elif [[ "$the_app" == 'Hyper' ]]; then
+ osascript >/dev/null <<EOF
+ tell application "System Events"
+ tell process "Hyper"
+ tell menu item "Split Vertically" of menu "Shell" of menu bar 1
+ click
+ end tell
+ end tell
+ delay 1
+ keystroke "${command} \n"
+ end tell
+EOF
else
echo "$0: unsupported terminal app: $the_app" >&2
@@ -132,6 +156,19 @@ EOF
end tell
EOF
+ elif [[ "$the_app" == 'Hyper' ]]; then
+ osascript >/dev/null <<EOF
+ tell application "System Events"
+ tell process "Hyper"
+ tell menu item "Split Horizontally" of menu "Shell" of menu bar 1
+ click
+ end tell
+ end tell
+ delay 1
+ keystroke "${command} \n"
+ end tell
+EOF
+
else
echo "$0: unsupported terminal app: $the_app" >&2
false
@@ -199,7 +236,19 @@ function itunes() {
opt="$opt track"
;;
vol)
- opt="set sound volume to $1" #$1 Due to the shift
+ local new_volume volume=$(osascript -e 'tell application "iTunes" to get sound volume')
+ if [[ $# -eq 0 ]]; then
+ echo "Current volume is ${volume}."
+ return 0
+ fi
+ case $1 in
+ up) new_volume=$((volume + 10 < 100 ? volume + 10 : 100)) ;;
+ down) new_volume=$((volume - 10 > 0 ? volume - 10 : 0)) ;;
+ <0-100>) new_volume=$1 ;;
+ *) echo "'$1' is not valid. Expected <0-100>, up or down."
+ return 1 ;;
+ esac
+ opt="set sound volume to ${new_volume}"
;;
playlist)
# Inspired by: https://gist.github.com/nakajijapan/ac8b45371064ae98ea7f
@@ -262,7 +311,7 @@ EOF
echo "\tmute|unmute\tcontrol volume set"
echo "\tnext|previous\tplay next or previous track"
echo "\tshuf|shuffle [on|off|toggle]\tSet shuffled playback. Default: toggle. Note: toggle doesn't support the MiniPlayer."
- echo "\tvol\tSet the volume, takes an argument from 0 to 100"
+ echo "\tvol [0-100|up|down]\tGet or set the volume. 0 to 100 sets the volume. 'up' / 'down' increases / decreases by 10 points. No argument displays current volume."
echo "\tplaying|status\tShow what song is currently playing in iTunes."
echo "\tplaylist [playlist name]\t Play specific playlist"
echo "\thelp\tshow this message and exit"
diff --git a/plugins/osx/spotify b/plugins/osx/spotify
index b4215dbe7..39f8e0437 100644
--- a/plugins/osx/spotify
+++ b/plugins/osx/spotify
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
function spotify() {
-# Copyright (c) 2012--2018 Harish Narayanan <mail@harishnarayanan.org>
+# Copyright (c) 2012--2019 Harish Narayanan <mail@harishnarayanan.org>
#
# Contains numerous helpful contributions from Jorge Colindres, Thomas
# Pritchard, iLan Epstein, Gabriele Bonetti, Sean Heller, Eric Martin
@@ -70,7 +70,7 @@ showHelp () {
echo;
echo " next # Skips to the next song in a playlist.";
echo " prev # Returns to the previous song in a playlist.";
- echo " replay # Replays the current track from the begining.";
+ echo " replay # Replays the current track from the beginning.";
echo " pos <time> # Jumps to a time (in secs) in the current song.";
echo " pause # Pauses (or resumes) Spotify playback.";
echo " stop # Stops playback.";
@@ -82,6 +82,9 @@ showHelp () {
echo " vol [show] # Shows the current Spotify volume.";
echo;
echo " status # Shows the current player status.";
+ echo " status artist # Shows the currently playing artist.";
+ echo " status album # Shows the currently playing album.";
+ echo " status track # Shows the currently playing track.";
echo;
echo " share # Displays the current song's Spotify URL and URI."
echo " share url # Displays the current song's Spotify URL and copies it to the clipboard."
@@ -99,12 +102,21 @@ cecho(){
echo $bold$green"$1"$reset;
}
+showArtist() {
+ echo `osascript -e 'tell application "Spotify" to artist of current track as string'`;
+}
+
+showAlbum() {
+ echo `osascript -e 'tell application "Spotify" to album of current track as string'`;
+}
+
+showTrack() {
+ echo `osascript -e 'tell application "Spotify" to name of current track as string'`;
+}
+
showStatus () {
state=`osascript -e 'tell application "Spotify" to player state as string'`;
cecho "Spotify is currently $state.";
- artist=`osascript -e 'tell application "Spotify" to artist of current track as string'`;
- album=`osascript -e 'tell application "Spotify" to album of current track as string'`;
- track=`osascript -e 'tell application "Spotify" to name of current track as string'`;
duration=`osascript -e 'tell application "Spotify"
set durSec to (duration of current track / 1000) as text
set tM to (round (durSec / 60) rounding down) as text
@@ -128,7 +140,7 @@ showStatus () {
end tell
return nowAt'`;
- echo -e $reset"Artist: $artist\nAlbum: $album\nTrack: $track \nPosition: $position / $duration";
+ echo -e $reset"Artist: $(showArtist)\nAlbum: $(showAlbum)\nTrack: $(showTrack) \nPosition: $position / $duration";
}
if [ $# = 0 ]; then
@@ -223,18 +235,18 @@ while [ $# -gt 0 ]; do
results=$( \
curl -s -G $SPOTIFY_SEARCH_API --data-urlencode "q=$Q" -d "type=playlist&limit=10&offset=0" -H "Accept: application/json" -H "Authorization: Bearer ${SPOTIFY_ACCESS_TOKEN}" \
- | grep -E -o "spotify:user:[a-zA-Z0-9_]+:playlist:[a-zA-Z0-9]+" -m 10 \
+ | grep -E -o "spotify:playlist:[a-zA-Z0-9]+" -m 10 \
)
count=$( \
- echo "$results" | grep -c "spotify:user" \
+ echo "$results" | grep -c "spotify:playlist" \
)
if [ "$count" -gt 0 ]; then
random=$(( $RANDOM % $count));
SPOTIFY_PLAY_URI=$( \
- echo "$results" | awk -v random="$random" '/spotify:user:[a-zA-Z0-9]+:playlist:[a-zA-Z0-9]+/{i++}i==random{print; exit}' \
+ echo "$results" | awk -v random="$random" '/spotify:playlist:[a-zA-Z0-9]+/{i++}i==random{print; exit}' \
)
fi;;
@@ -295,7 +307,7 @@ while [ $# -gt 0 ]; do
"quit" ) cecho "Quitting Spotify.";
osascript -e 'tell application "Spotify" to quit';
- exit 1 ;;
+ exit 0 ;;
"next" ) cecho "Going to next track." ;
osascript -e 'tell application "Spotify" to next track';
@@ -346,7 +358,7 @@ while [ $# -gt 0 ]; do
echo " vol down # Decreases the volume by 10%.";
echo " vol [amount] # Sets the volume to an amount between 0 and 100.";
echo " vol # Shows the current Spotify volume.";
- break
+ exit 1;
fi
osascript -e "tell application \"Spotify\" to set sound volume to $newvol";
@@ -365,7 +377,25 @@ while [ $# -gt 0 ]; do
break ;;
"status" )
- showStatus;
+ if [ $# != 1 ]; then
+ # There are additional arguments, a status subcommand
+ case $2 in
+ "artist" )
+ showArtist;
+ break ;;
+
+ "album" )
+ showAlbum;
+ break ;;
+
+ "track" )
+ showTrack;
+ break ;;
+ esac
+ else
+ # status is the only param
+ showStatus;
+ fi
break ;;
"info" )
@@ -428,16 +458,20 @@ while [ $# -gt 0 ]; do
cecho "Spotify URI: $uri";
echo -n $uri | pbcopy
fi
- break;;
+ break ;;
"pos" )
cecho "Adjusting Spotify play position."
osascript -e "tell application \"Spotify\" to set player position to $2";
- break;;
+ break ;;
- "help" | * )
+ "help" )
showHelp;
break ;;
+ * )
+ showHelp;
+ exit 1;
+
esac
done
}
diff --git a/plugins/per-directory-history/README.md b/plugins/per-directory-history/README.md
index ea445d329..69854aa38 100644
--- a/plugins/per-directory-history/README.md
+++ b/plugins/per-directory-history/README.md
@@ -1,55 +1,48 @@
-[Per-Directory-History][6]
-=========================
+per-directory-history plugin
+----------------------------
-Per directory history for zsh, as well as global history, and the
-ability to toggle between them with ^G.
+This plugin adds per-directory history for zsh, as well as a global history,
+and the ability to toggle between them with a keyboard shortcut. This is a
+bundle of the [official plugin by @jimhester][5].
-This is a implementation of per directory history for zsh, some
-implementations of which exist in bash[1][],[2][]. It also implements
-a per-directory-history-toggle-history function to change from using the
-directory history to using the global history. In both cases the history is
-always saved to both the global history and the directory history, so the
-toggle state will not effect the saved histories. Being able to switch
-between global and directory histories on the fly is a novel feature as far
-as I am aware.
+To use it, add `per-directory-history` to the plugins array in your zshrc file:
-This is a standalone repository for the script, however it is also included in
-[oh-my-zsh][4] as a plugin.
+```zsh
+plugins=(... per-directory-history)
+```
-----------------------------------------------------------------------------
-Usage
-----------------------------------------------------------------------------
+This is an implementation of per-directory history for zsh, some implementations
+of which exist in bash[1][],[2][]. It also implements a toggle-history function
+to change from using the directory history to using the global history. In both
+cases the history is always saved to both the global history and the directory
+history, so the toggle state will not effect the saved histories. Being able to
+switch between global and directory histories on the fly is a novel feature.
-1. Load this script into your interactive ZSH session:
+## Usage
- % source zsh-per-directory-history.zsh
+The default mode is per directory history, interact with your history as normal.
-2. The default mode if per directory history, interact with your history as normal.
+Press ^G (the <kbd>Control</kbd> and <kbd>G</kbd> keys simultaneously) to toggle
+between local and global histories. If you would prefer a different shortcut to
+toggle set the `PER_DIRECTORY_HISTORY_TOGGLE` environment variable.
-3. Press ^G (the Control and G keys simultaneously) to toggle between local
- and global histories. If you would prefer a different shortcut to toggle
- set the PER_DIRECTORY_HISTORY_TOGGLE environment variable.
+## Configuration
--------------------------------------------------------------------------------
-Configuration
--------------------------------------------------------------------------------
+* `HISTORY_BASE` is a global variable that defines the base directory in which the
+ directory histories are stored (default `$HOME/.directory_history`).
+* `per-directory-history-toggle-history` is the function to toggle between local
+ and global histories.
+* `PER_DIRECTORY_HISTORY_TOGGLE` is the key binding used to run the toggle-history
+ function above (default `^G`)
-* HISTORY_BASE a global variable that defines the base directory in which the
- directory histories are stored
-* per-directory-history-toggle-history is the function to toggle the history
-
--------------------------------------------------------------------------------
-History
--------------------------------------------------------------------------------
+## History
The idea/inspiration for a per directory history is from [Stewart MacArthur][1]
-and [Dieter][2], the implementation idea is from [Bart Schaefer][3]. The
-implementation is by [Jim Hester][5] in September 2012.
+and [Dieter][2], the implementation idea is from [Bart Schaefer][3]. The
+implementation is by [Jim Hester][4] in September 2012.
[1]: http://www.compbiome.com/2010/07/bash-per-directory-bash-history.html
[2]: http://dieter.plaetinck.be/per_directory_bash
[3]: https://www.zsh.org/mla/users/1997/msg00226.html
-[4]: https://github.com/robbyrussell/oh-my-zsh
-[5]: http://jimhester.com
-[6]: https://github.com/jimhester/per-directory-history
-
+[4]: https://jimhester.com
+[5]: https://github.com/jimhester/per-directory-history
diff --git a/plugins/pip/pip.plugin.zsh b/plugins/pip/pip.plugin.zsh
index d7236b02a..aaae90185 100644
--- a/plugins/pip/pip.plugin.zsh
+++ b/plugins/pip/pip.plugin.zsh
@@ -10,7 +10,7 @@
# "zsh-pip-clear-cache".
ZSH_PIP_CACHE_FILE=~/.pip/zsh-cache
-ZSH_PIP_INDEXES=(https://pypi.python.org/simple/)
+ZSH_PIP_INDEXES=(https://pypi.org/simple/)
zsh-pip-clear-cache() {
rm $ZSH_PIP_CACHE_FILE
@@ -29,9 +29,10 @@ zsh-pip-cache-packages() {
if [[ ! -f $ZSH_PIP_CACHE_FILE ]]; then
echo -n "(...caching package index...)"
tmp_cache=/tmp/zsh_tmp_cache
+ touch $tmp_cache
for index in $ZSH_PIP_INDEXES ; do
# well... I've already got two problems
- curl $index 2>/dev/null | \
+ curl -L $index 2>/dev/null | \
zsh-pip-clean-packages \
>> $tmp_cache
done
diff --git a/plugins/pipenv/README.md b/plugins/pipenv/README.md
new file mode 100644
index 000000000..ab1c1e442
--- /dev/null
+++ b/plugins/pipenv/README.md
@@ -0,0 +1,28 @@
+# Pipenv
+
+## Installation
+In your `.zshrc` file, add `pipenv` to the plugins section
+
+```
+plugins=(... pipenv ...)
+```
+
+## Features
+This plugin provides some features to simplify the use of Pipenv while working on ZSH.
+- Adds completion for pipenv
+- Auto activates and deactivates pipenv shell
+- Adds short aliases for common pipenv commands
+ - `pch` is aliased to `pipenv check`
+ - `pcl` is aliased to `pipenv clean`
+ - `pgr` is aliased to `pipenv graph`
+ - `pi` is aliased to `pipenv install`
+ - `pidev` is aliased to `pipenv install --dev`
+ - `pl` is aliased to `pipenv lock`
+ - `po` is aliased to `pipenv open`
+ - `prun` is aliased to `pipenv run`
+ - `psh` is aliased to `pipenv shell`
+ - `psy` is aliased to `pipenv sync`
+ - `pu` is aliased to `pipenv uninstall`
+ - `pwh` is aliased to `pipenv --where`
+ - `pvenv` is aliased to `pipenv --venv`
+ - `ppy` is aliased to `pipenv --py`
diff --git a/plugins/pipenv/pipenv.plugin.zsh b/plugins/pipenv/pipenv.plugin.zsh
new file mode 100644
index 000000000..0a5dc56a4
--- /dev/null
+++ b/plugins/pipenv/pipenv.plugin.zsh
@@ -0,0 +1,42 @@
+# Pipenv completion
+_pipenv() {
+ eval $(env COMMANDLINE="${words[1,$CURRENT]}" _PIPENV_COMPLETE=complete-zsh pipenv)
+}
+compdef _pipenv pipenv
+
+# Automatic pipenv shell activation/deactivation
+_togglePipenvShell() {
+ # deactivate shell if Pipfile doesn't exist and not in a subdir
+ if [[ ! -a "$PWD/Pipfile" ]]; then
+ if [[ "$PIPENV_ACTIVE" == 1 ]]; then
+ if [[ "$PWD" != "$pipfile_dir"* ]]; then
+ exit
+ fi
+ fi
+ fi
+
+ # activate the shell if Pipfile exists
+ if [[ "$PIPENV_ACTIVE" != 1 ]]; then
+ if [[ -a "$PWD/Pipfile" ]]; then
+ export pipfile_dir="$PWD"
+ pipenv shell
+ fi
+ fi
+}
+chpwd_functions+=(_togglePipenvShell)
+
+# Aliases
+alias pch="pipenv check"
+alias pcl="pipenv clean"
+alias pgr="pipenv graph"
+alias pi="pipenv install"
+alias pidev="pipenv install --dev"
+alias pl="pipenv lock"
+alias po="pipenv open"
+alias prun="pipenv run"
+alias psh="pipenv shell"
+alias psy="pipenv sync"
+alias pu="pipenv uninstall"
+alias pwh="pipenv --where"
+alias pvenv="pipenv --venv"
+alias ppy="pipenv --py"
diff --git a/plugins/please/README.md b/plugins/please/README.md
new file mode 100644
index 000000000..89bfbf105
--- /dev/null
+++ b/plugins/please/README.md
@@ -0,0 +1,26 @@
+# please plugin
+
+[Please](https://please.build) is a cross-language build system with an emphasis on
+high performance, extensibility and reproduceability. It supports a number of popular
+languages and can automate nearly any aspect of your build process.
+
+This plugin adds autocomplete and major aliases for `plz`, the command line tool for
+Please.
+
+To use it, add `please` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... please)
+```
+
+## Aliases
+
+| Alias | Command |
+|-------|-------------|
+| `pb` | `plz build` |
+| `pt` | `plz test` |
+| `pw` | `plz watch` |
+
+## Maintainer
+
+[@thought-machine](https://github.com/thought-machine)
diff --git a/plugins/please/please.plugin.zsh b/plugins/please/please.plugin.zsh
new file mode 100644
index 000000000..0f58307ab
--- /dev/null
+++ b/plugins/please/please.plugin.zsh
@@ -0,0 +1,7 @@
+if (( $+commands[plz] )); then
+ source <(plz --completion_script)
+fi
+
+alias pb='plz build'
+alias pt='plz test'
+alias pw='plz watch'
diff --git a/plugins/pyenv/pyenv.plugin.zsh b/plugins/pyenv/pyenv.plugin.zsh
index dbc7da472..40e58b5c2 100644
--- a/plugins/pyenv/pyenv.plugin.zsh
+++ b/plugins/pyenv/pyenv.plugin.zsh
@@ -4,7 +4,7 @@
FOUND_PYENV=$+commands[pyenv]
if [[ $FOUND_PYENV -ne 1 ]]; then
- pyenvdirs=("$HOME/.pyenv" "/usr/local/pyenv" "/opt/pyenv")
+ pyenvdirs=("$HOME/.pyenv" "/usr/local/pyenv" "/opt/pyenv" "/usr/local/opt/pyenv")
for dir in $pyenvdirs; do
if [[ -d $dir/bin ]]; then
export PATH="$PATH:$dir/bin"
@@ -38,4 +38,4 @@ else
}
fi
-unset FOUND_PYENV dir
+unset FOUND_PYENV pyenvdirs dir
diff --git a/plugins/rails/README.md b/plugins/rails/README.md
new file mode 100644
index 000000000..51742b2a3
--- /dev/null
+++ b/plugins/rails/README.md
@@ -0,0 +1,83 @@
+# 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.
+
+To use it, add `rails` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... rails)
+```
+
+## List of Aliases
+
+### 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 |
+| `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 |
+
+### Rake aliases
+
+| 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 |
+| `rr` | `rake routes` | List all defined routes |
+| `rrg` | `rake routes | grep` | List and filter the defined routes |
+| `rt` | `rake test` | Run Rails tests |
+| `rmd` | `rake middleware` | Interact with Rails middlewares |
+| `rsts` | `rake stats` | Print code statistics |
+
+### 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 |
+
+### 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 |
+
+These are global aliases. Use in combination with a command or just run them
+separately. For example: `RED rake db:migrate` will migrate the production db.
+
+### Legacy stuff
+
+| Alias | Command |
+|---------|------------------------------------|
+| `sstat` | `thin --stats "/thin/stats" start` |
+| `sg` | `ruby script/generate` |
+| `sd` | `ruby script/destroy` |
+| `sp` | `ruby script/plugin` |
+| `sr` | `ruby script/runner` |
+| `ssp` | `ruby script/spec` |
+| `sc` | `ruby script/console` |
+| `sd` | `ruby script/server --debugger` |
+
diff --git a/plugins/rails/rails.plugin.zsh b/plugins/rails/rails.plugin.zsh
index eb3f30360..a8ec79db2 100644
--- a/plugins/rails/rails.plugin.zsh
+++ b/plugins/rails/rails.plugin.zsh
@@ -43,7 +43,7 @@ alias rc='rails console'
alias rcs='rails console --sandbox'
alias rd='rails destroy'
alias rdb='rails dbconsole'
-alias rg='rails generate'
+alias rgen='rails generate'
alias rgm='rails generate migration'
alias rp='rails plugin'
alias ru='rails runner'
diff --git a/plugins/rbenv/rbenv.plugin.zsh b/plugins/rbenv/rbenv.plugin.zsh
index 7430e9625..ed46d355b 100644
--- a/plugins/rbenv/rbenv.plugin.zsh
+++ b/plugins/rbenv/rbenv.plugin.zsh
@@ -1,60 +1,65 @@
-_homebrew-installed() {
- type brew &> /dev/null
-}
-
-FOUND_RBENV=0
-rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" "/usr/local/opt/rbenv")
-if _homebrew-installed && rbenv_homebrew_path=$(brew --prefix rbenv 2>/dev/null); then
- rbenvdirs=($rbenv_homebrew_path "${rbenvdirs[@]}")
- unset rbenv_homebrew_path
- if [[ $RBENV_ROOT = '' ]]; then
- RBENV_ROOT="$HOME/.rbenv"
- fi
+# This plugin loads rbenv into the current shell and provides prompt info via
+# the 'rbenv_prompt_info' function.
+
+FOUND_RBENV=$+commands[rbenv]
+
+if [[ $FOUND_RBENV -ne 1 ]]; then
+ rbenvdirs=("$HOME/.rbenv" "/usr/local/rbenv" "/opt/rbenv" "/usr/local/opt/rbenv")
+ for dir in $rbenvdirs; do
+ if [[ -d $dir/bin ]]; then
+ export PATH="$dir/bin:$PATH"
+ FOUND_RBENV=1
+ break
+ fi
+ done
fi
-for rbenvdir in "${rbenvdirs[@]}" ; do
- if [ -d $rbenvdir/bin -a $FOUND_RBENV -eq 0 ] ; then
- FOUND_RBENV=1
- if [[ $RBENV_ROOT = '' ]]; then
- RBENV_ROOT=$rbenvdir
+if [[ $FOUND_RBENV -ne 1 ]]; then
+ if (( $+commands[brew] )) && dir=$(brew --prefix rbenv 2>/dev/null); then
+ if [[ -d $dir/bin ]]; then
+ export PATH="$dir/bin:$PATH"
+ FOUND_RBENV=1
+ fi
fi
- export RBENV_ROOT
- export PATH=${rbenvdir}/bin:$PATH
+fi
+
+if [[ $FOUND_RBENV -eq 1 ]]; then
eval "$(rbenv init --no-rehash - zsh)"
alias rubies="rbenv versions"
alias gemsets="rbenv gemset list"
function current_ruby() {
- echo "$(rbenv version-name)"
+ echo "$(rbenv version-name)"
}
function current_gemset() {
- echo "$(rbenv gemset active 2&>/dev/null | sed -e ":a" -e '$ s/\n/+/gp;N;b a' | head -n1)"
+ echo "$(rbenv gemset active 2&>/dev/null | sed -e ":a" -e '$ s/\n/+/gp;N;b a' | head -n1)"
}
- function gems {
- local rbenv_path=$(rbenv prefix)
- gem list $@ | sed -E \
- -e "s/\([0-9a-z, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \
- -e "s|$(echo $rbenv_path)|$fg[magenta]\$rbenv_path$reset_color|g" \
- -e "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
- -e "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
+ function gems() {
+ local rbenv_path=$(rbenv prefix)
+ gem list $@ | sed -E \
+ -e "s/\([0-9a-z, \.]+( .+)?\)/$fg[blue]&$reset_color/g" \
+ -e "s|$(echo $rbenv_path)|$fg[magenta]\$rbenv_path$reset_color|g" \
+ -e "s/$current_ruby@global/$fg[yellow]&$reset_color/g" \
+ -e "s/$current_ruby$current_gemset$/$fg[green]&$reset_color/g"
}
function rbenv_prompt_info() {
- if [[ -n $(current_gemset) ]] ; then
- echo "$(current_ruby)@$(current_gemset)"
- else
- echo "$(current_ruby)"
- fi
+ if [[ -n $(current_gemset) ]] ; then
+ echo "$(current_ruby)@$(current_gemset)"
+ else
+ echo "$(current_ruby)"
+ fi
}
- fi
-done
-unset rbenvdir
-
-if [ $FOUND_RBENV -eq 0 ] ; then
- alias rubies='ruby -v'
- function gemsets() { echo 'not supported' }
- function rbenv_prompt_info() { echo "system: $(ruby -v | cut -f-2 -d ' ')" }
+else
+ alias rubies="ruby -v"
+ function gemsets() { echo "not supported" }
+ function current_ruby() { echo "not supported" }
+ function current_gemset() { echo "not supported" }
+ function gems() { echo "not supported" }
+ function rbenv_prompt_info() { echo "system: $(ruby -v | cut -f-2 -d ' ')" }
fi
+
+unset FOUND_RBENV rbenvdirs dir
diff --git a/plugins/react-native/README.md b/plugins/react-native/README.md
index 0cfaa36b4..dc0207184 100644
--- a/plugins/react-native/README.md
+++ b/plugins/react-native/README.md
@@ -16,40 +16,58 @@ plugins=(... react-native)
| **rn** | `react-native` |
| **rns** | `react-native start` |
| **rnlink** | `react-native link` |
-| _App testing_ |
+| _Logging_ | |
+| **rnland** | `react-native log-android` |
+| **rnlios** | `react-native log-ios` |
+| _App Testing_ | |
| **rnand** | `react-native run-android` |
| **rnios** | `react-native run-ios` |
+| _iPhone_ | |
| **rnios4s** | `react-native run-ios --simulator "iPhone 4s"` |
| **rnios5** | `react-native run-ios --simulator "iPhone 5"` |
| **rnios5s** | `react-native run-ios --simulator "iPhone 5s"` |
| **rnios6** | `react-native run-ios --simulator "iPhone 6"` |
| **rnios6s** | `react-native run-ios --simulator "iPhone 6s"` |
-| **rnios7** | `react-native run-ios --simulator "iPhone7"` |
+| **rnios6p** | `react-native run-ios --simulator "iPhone 6 Plus"` |
+| **rnios6sp** | `react-native run-ios --simulator "iPhone 6s Plus"` |
+| **rnios7** | `react-native run-ios --simulator "iPhone 7"` |
| **rnios7p** | `react-native run-ios --simulator "iPhone 7 Plus"` |
| **rnios8** | `react-native run-ios --simulator "iPhone 8"` |
| **rnios8p** | `react-native run-ios --simulator "iPhone 8 Plus"` |
| **rniosse** | `react-native run-ios --simulator "iPhone SE"` |
| **rniosx** | `react-native run-ios --simulator "iPhone X"` |
-| **rniosxs** | `react-native run-ios --simulator "iPhone XS"` |
-| **rniosxsm** | `react-native run-ios --simulator "iPhone XS Max"` |
-| **rniosxr** | `react-native run-ios --simulator "iPhone XR"` |
-| _iPads_ | |
+| **rniosxs** | `react-native run-ios --simulator "iPhone Xs"` |
+| **rniosxsm** | `react-native run-ios --simulator "iPhone Xs Max"` |
+| **rniosxr** | `react-native run-ios --simulator "iPhone Xʀ"` |
+| _iPad_ | |
| **rnipad2** | `react-native run-ios --simulator "iPad 2"` |
+| **rnipad5** | `react-native run-ios --simulator "iPad (5th generation)"` |
+| **rnipad6** | `react-native run-ios --simulator "iPad (6th generation)"` |
| **rnipadr** | `react-native run-ios --simulator "iPad Retina"` |
-| **rnipada** | 'react-native run-ios --simulator "iPad Air"' |
-| **rnipada2** | 'react-native run-ios --simulator "iPad Air 2"' |
-| **rnipad5** | 'react-native run-ios --simulator "iPad (5th generation)"' |
-| **rnipad9** | 'react-native run-ios --simulator "iPad Pro (9.7-inch)"' |
-| **rnipad12** | 'react-native run-ios --simulator "iPad Pro (12.9-inch)"' |
-| **rnipad122** | 'react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"' |
-| **rnipad10** | 'react-native run-ios --simulator "iPad Pro (10.5-inch)"' |
-| **rnipad6** | 'react-native run-ios --simulator "iPad Pro (6th generation)"' |
-| **rnipad11** | 'react-native run-ios --simulator "iPad Pro (11-inch)"' |
-| **rnipad123** | 'react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"' |
-| _Apple TVs_ | |
+| **rnipada** | `react-native run-ios --simulator "iPad Air"` |
+| **rnipada2** | `react-native run-ios --simulator "iPad Air 2"` |
+| **rnipada3** | `react-native run-ios --simulator "iPad Air (3rd generation)"` |
+| **rnipadm2** | `react-native run-ios --simulator "iPad mini 2"` |
+| **rnipadm3** | `react-native run-ios --simulator "iPad mini 3"` |
+| **rnipadm4** | `react-native run-ios --simulator "iPad mini 4"` |
+| **rnipadm5** | `react-native run-ios --simulator "iPad mini (5th generation)"` |
+| **rnipadp9** | `react-native run-ios --simulator "iPad Pro (9.7-inch)"` |
+| **rnipadp12** | `react-native run-ios --simulator "iPad Pro (12.9-inch)"` |
+| **rnipadp122** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"` |
+| **rnipadp10** | `react-native run-ios --simulator "iPad Pro (10.5-inch)"` |
+| **rnipad11** | `react-native run-ios --simulator "iPad Pro (11-inch)"` |
+| **rnipad123** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"` |
+| _Apple TV_ | |
| **rnatv** | `react-native run-ios --simulator "Apple TV"` |
| **rnatv4k** | `react-native run-ios --simulator "Apple TV 4K"` |
| **rnatv4k1080**| `react-native run-ios --simulator "Apple TV 4K (at 1080p)"` |
-| _Logging_ |
-| **rnland** | `react-native log-android` |
-| **rnlios** | `react-native log-ios` |
+| **rnipad123** | `react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"` |
+| _Apple Watch_ | |
+| **rnaw38** | `react-native run-ios --simulator "Apple Watch - 38mm"` |
+| **rnaw42** | `react-native run-ios --simulator "Apple Watch - 42mm"` |
+| **rnaws238** | `react-native run-ios --simulator "Apple Watch Series 2 - 38mm"` |
+| **rnaws242** | `react-native run-ios --simulator "Apple Watch Series 2 - 42mm"` |
+| **rnaws338** | `react-native run-ios --simulator "Apple Watch Series 3 - 38mm"` |
+| **rnaws342** | `react-native run-ios --simulator "Apple Watch Series 3 - 42mm"` |
+| **rnaws440** | `react-native run-ios --simulator "Apple Watch Series 4 - 40mm"` |
+| **rnaws444** | `react-native run-ios --simulator "Apple Watch Series 4 - 44mm"` |
diff --git a/plugins/react-native/react-native.plugin.zsh b/plugins/react-native/react-native.plugin.zsh
index a4092a694..f7695d15f 100644
--- a/plugins/react-native/react-native.plugin.zsh
+++ b/plugins/react-native/react-native.plugin.zsh
@@ -1,40 +1,60 @@
+# React Native
alias rn='react-native'
alias rns='react-native start'
alias rnlink='react-native link'
-
+alias rnland='react-native log-android'
+alias rnlios='react-native log-ios'
alias rnand='react-native run-android'
alias rnios='react-native run-ios'
+
+# iPhone
alias rnios4s='react-native run-ios --simulator "iPhone 4s"'
alias rnios5='react-native run-ios --simulator "iPhone 5"'
alias rnios5s='react-native run-ios --simulator "iPhone 5s"'
alias rnios6='react-native run-ios --simulator "iPhone 6"'
+alias rnios6p='react-native run-ios --simulator "iPhone 6 Plus"'
alias rnios6s='react-native run-ios --simulator "iPhone 6s"'
+alias rnios6sp='react-native run-ios --simulator "iPhone 6s Plus"'
alias rnios7='react-native run-ios --simulator "iPhone 7"'
alias rnios7p='react-native run-ios --simulator "iPhone 7 Plus"'
alias rnios8='react-native run-ios --simulator "iPhone 8"'
alias rnios8p='react-native run-ios --simulator "iPhone 8 Plus"'
alias rniosse='react-native run-ios --simulator "iPhone SE"'
alias rniosx='react-native run-ios --simulator "iPhone X"'
-alias rniosxs='react-native run-ios --simulator "iPhone XS"'
-alias rniosxsm='react-native run-ios --simulator "iPhone XS Max"'
-alias rniosxr='react-native run-ios --simulator "iPhone XR"'
+alias rniosxs='react-native run-ios --simulator "iPhone Xs"'
+alias rniosxsm='react-native run-ios --simulator "iPhone Xs Max"'
+alias rniosxr='react-native run-ios --simulator "iPhone Xʀ"'
+# iPad
alias rnipad2='react-native run-ios --simulator "iPad 2"'
+alias rnipad5='react-native run-ios --simulator "iPad (5th generation)"'
+alias rnipad6='react-native run-ios --simulator "iPad (6th generation)"'
alias rnipadr='react-native run-ios --simulator "iPad Retina"'
alias rnipada='react-native run-ios --simulator "iPad Air"'
alias rnipada2='react-native run-ios --simulator "iPad Air 2"'
-alias rnipad5='react-native run-ios --simulator "iPad (5th generation)"'
-alias rnipad9='react-native run-ios --simulator "iPad Pro (9.7-inch)"'
-alias rnipad12='react-native run-ios --simulator "iPad Pro (12.9-inch)"'
-alias rnipad122='react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"'
-alias rnipad10='react-native run-ios --simulator "iPad Pro (10.5-inch)"'
-alias rnipad6='react-native run-ios --simulator "iPad Pro (6th generation)"'
+alias rnipada3='react-native run-ios --simulator "iPad Air (3rd generation)"'
+alias rnipadm2='react-native run-ios --simulator "iPad mini 2"'
+alias rnipadm3='react-native run-ios --simulator "iPad mini 3"'
+alias rnipadm4='react-native run-ios --simulator "iPad mini 4"'
+alias rnipadm5='react-native run-ios --simulator "iPad mini (5th generation)"'
+alias rnipadp9='react-native run-ios --simulator "iPad Pro (9.7-inch)"'
+alias rnipadp12='react-native run-ios --simulator "iPad Pro (12.9-inch)"'
+alias rnipadp122='react-native run-ios --simulator "iPad Pro (12.9-inch) (2nd generation)"'
+alias rnipadp10='react-native run-ios --simulator "iPad Pro (10.5-inch)"'
alias rnipad11='react-native run-ios --simulator "iPad Pro (11-inch)"'
alias rnipad123='react-native run-ios --simulator "iPad Pro (12.9-inch) (3rd generation)"'
+# Apple TV
alias rnatv='react-native run-ios --simulator "Apple TV"'
alias rnatv4k='react-native run-ios --simulator "Apple TV 4K"'
alias rnatv4k1080='react-native run-ios --simulator "Apple TV 4K (at 1080p)"'
-alias rnland='react-native log-android'
-alias rnlios='react-native log-ios'
+# Apple Watch
+alias rnaw38='react-native run-ios --simulator "Apple Watch - 38mm"'
+alias rnaw42='react-native run-ios --simulator "Apple Watch - 42mm"'
+alias rnaws238='react-native run-ios --simulator "Apple Watch Series 2 - 38mm"'
+alias rnaws242='react-native run-ios --simulator "Apple Watch Series 2 - 42mm"'
+alias rnaws338='react-native run-ios --simulator "Apple Watch Series 3 - 38mm"'
+alias rnaws342='react-native run-ios --simulator "Apple Watch Series 3 - 42mm"'
+alias rnaws440='react-native run-ios --simulator "Apple Watch Series 4 - 40mm"'
+alias rnaws444='react-native run-ios --simulator "Apple Watch Series 4 - 44mm"'
diff --git a/plugins/sdk/README.md b/plugins/sdk/README.md
new file mode 100644
index 000000000..b237f3b4c
--- /dev/null
+++ b/plugins/sdk/README.md
@@ -0,0 +1,8 @@
+# sdk
+
+Plugin for SDKMAN, a tool for managing parallel versions of multiple Software Development Kits on most Unix based systems.
+Provides autocompletion for all known commands.
+
+## Requirements
+
+ * [SDKMAN](http://sdkman.io/)
diff --git a/plugins/sdk/sdk.plugin.zsh b/plugins/sdk/sdk.plugin.zsh
new file mode 100644
index 000000000..d00459b16
--- /dev/null
+++ b/plugins/sdk/sdk.plugin.zsh
@@ -0,0 +1,82 @@
+### SDKMAN Autocomplete for Oh My Zsh
+
+# This is the output from sdkman. All the these options are supported at the
+# moment.
+
+# Usage: sdk <command> [candidate] [version]
+# sdk offline <enable|disable>
+#
+# commands:
+# install or i <candidate> [version]
+# uninstall or rm <candidate> <version>
+# list or ls [candidate]
+# use or u <candidate> [version]
+# default or d <candidate> [version]
+# current or c [candidate]
+# upgrade or ug [candidate]
+# version or v
+# broadcast or b
+# help or h
+# offline [enable|disable]
+# selfupdate [force]
+# update
+# flush <candidates|broadcast|archives|temp>
+#
+# candidate : the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
+# use list command for comprehensive list of candidates
+# eg: $ sdk list
+#
+# version : where optional, defaults to latest stable if not provided
+# eg: $ sdk install groovy
+
+local _sdk_commands=(
+ install i
+ uninstall rm
+ list ls
+ use u
+ default d
+ current c
+ upgrade ug
+ version v
+ broadcast b
+ help h
+ offline
+ selfupdate
+ update
+ flush
+)
+
+_listInstalledVersions() {
+ __sdkman_build_version_csv $1 | sed -e "s/,/ /g"
+}
+
+_listInstallableVersions() {
+ __sdkman_list_versions $1 | grep "^ " | sed -e "s/\* /*/g" | \
+ sed -e "s/>//g" | xargs -n 1 echo | grep -v "^*"
+}
+
+_listAllVersion() {
+ __sdkman_list_versions $1 | grep "^ " | sed -e "s/\*/ /g" | sed -e "s/>//g"
+}
+
+_sdk () {
+ case $CURRENT in
+ 2) compadd -- $_sdk_commands ;;
+ 3) case "$words[2]" in
+ i|install|rm|uninstall|ls|list|u|use|d|default|c|current|ug|upgrade)
+ compadd -- $SDKMAN_CANDIDATES ;;
+ offline) compadd -- enable disable ;;
+ selfupdate) compadd -- force ;;
+ flush) compadd -- candidates broadcast archives temp ;;
+ esac
+ ;;
+ 4) case "$words[2]" in
+ rm|uninstall|d|default) compadd -- $(_listInstalledVersions $words[3]) ;;
+ i|install) compadd -- $(_listInstallableVersions $words[3]) ;;
+ u|use) compadd -- $(_listAllVersion $words[3]) ;;
+ esac
+ ;;
+ esac
+}
+
+compdef _sdk sdk
diff --git a/plugins/sfdx/README.md b/plugins/sfdx/README.md
new file mode 100644
index 000000000..259c17fbe
--- /dev/null
+++ b/plugins/sfdx/README.md
@@ -0,0 +1,11 @@
+# sfdx plugin
+
+This plugin provides autocompletion for the [Salesforce DX](https://developer.salesforce.com/tools/sfdxcli) CLI.
+
+To use it, add `sfdx` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... sfdx)
+```
+
+Original repository: https://github.com/wadewegner/salesforce-cli-zsh-completion
diff --git a/plugins/sfdx/_sfdx b/plugins/sfdx/_sfdx
new file mode 100644
index 000000000..42ee55970
--- /dev/null
+++ b/plugins/sfdx/_sfdx
@@ -0,0 +1,1110 @@
+#compdef sfdx
+
+# DESCRIPTION: Zsh completion script for the Salesforce CLI
+# AUTHOR: Wade Wegner (@WadeWegner)
+# REPO: https://github.com/wadewegner/salesforce-cli-zsh-completion
+# LICENSE: https://github.com/wadewegner/salesforce-cli-zsh-completion/blob/master/LICENSE
+
+local -a _1st_arguments
+
+_1st_arguments=(
+ "force\:alias\:list":"list username aliases for the Salesforce CLI"
+ "force\:alias\:set":"set username aliases for the Salesforce CLI"
+ "force\:apex\:class\:create":"create an Apex class"
+ "force\:apex\:execute":"execute anonymous Apex code"
+ "force\:apex\:log\:get":"fetch a debug log"
+ "force\:apex\:log\:list":"list debug logs"
+ "force\:apex\:log\:tail":"start debug logging and display logs"
+ "force\:apex\:test\:report":"display test results"
+ "force\:apex\:test\:run":"invoke Apex tests"
+ "force\:apex\:trigger\:create":"create an Apex trigger"
+ "force\:auth\:jwt\:grant":"authorize an org using the JWT flow"
+ "force\:auth\:logout":"log out from authorized orgs"
+ "force\:auth\:sfdxurl\:store":"authorize an org using an SFDX auth URL"
+ "force\:auth\:web\:login":"authorize an org using the web login flow"
+ "force\:config\:get":"get config var values for given names"
+ "force\:config\:list":"list config vars for the Salesforce CLI"
+ "force\:config\:set":"set config vars for the Salesforce CLI"
+ "force\:data\:bulk\:delete":"bulk delete records from a csv file"
+ "force\:data\:bulk\:status":"view the status of a bulk data load job or batch"
+ "force\:data\:bulk\:upsert":"bulk upsert records from a CSV file"
+ "force\:data\:record\:create":"create a record"
+ "force\:data\:record\:delete":"delete a record"
+ "force\:data\:record\:get":"view a record"
+ "force\:data\:record\:update":"update a record"
+ "force\:data\:soql\:query":"execute a SOQL query"
+ "force\:data\:tree\:export":"export data from an org into sObject tree format for force:data:tree:import consumption"
+ "force\:data\:tree\:import":"import data into an org using SObject Tree Save API"
+ "force\:doc\:commands\:display":"display help for force commands"
+ "force\:doc\:commands\:list":"list the force commands"
+ "force\:lightning\:app\:create":"create a Lightning app"
+ "force\:lightning\:component\:create":"create a bundle for an Aura component or a Lightning web component"
+ "force\:lightning\:event\:create":"create a Lightning event"
+ "force\:lightning\:interface\:create":"create a Lightning interface"
+ "force\:lightning\:lint":"analyse (lint) Lightning component code"
+ "force\:lightning\:test\:create":"create a Lightning test"
+ "force\:lightning\:test\:install":"install Lightning Testing Service unmanaged package in your org"
+ "force\:lightning\:test\:run":"invoke Aura component tests"
+ "force\:limits\:api\:display":"display current org’s limits"
+ "force\:mdapi\:convert":"convert metadata from the Metadata API format into the source format"
+ "force\:mdapi\:deploy":"deploy metadata to an org using Metadata API"
+ "force\:mdapi\:deploy\:cancel":"cancel a metadata deployment"
+ "force\:mdapi\:deploy\:report":"check the status of a metadata deployment"
+ "force\:mdapi\:retrieve":"retrieve metadata from an org using Metadata API"
+ "force\:mdapi\:retrieve\:report":"check the status of a metadata retrieval"
+ "force\:org\:create":"create a scratch org"
+ "force\:org\:delete":"mark a scratch org for deletion"
+ "force\:org\:display":"get org description"
+ "force\:org\:list":"list all orgs you’ve created or authenticated to"
+ "force\:org\:open":"open an org in your browser"
+ "force\:org\:shape\:create":"create a snapshot of org edition, features, and licenses"
+ "force\:org\:shape\:delete":"delete all org shapes for a target org"
+ "force\:org\:shape\:list":"list all org shapes you’ve created"
+ "force\:org\:snapshot\:create":"snapshot a scratch org"
+ "force\:org\:snapshot\:delete":"delete a scratch org snapshot"
+ "force\:org\:snapshot\:get":"get details about a scratch org snapshot"
+ "force\:org\:snapshot\:list":"list scratch org snapshots"
+ "force\:package1\:version\:create":"create a first-generation package version in the release org"
+ "force\:package1\:version\:create\:get":"retrieve the status of a package version creation request"
+ "force\:package1\:version\:display":"display details about a first-generation package version"
+ "force\:package1\:version\:list":"list package versions for the specified first-generation package or for the org"
+ "force\:package\:create":"create a package"
+ "force\:package\:hammertest\:list":"list the statuses of running and completed hammer tests"
+ "force\:package\:hammertest\:report":"display the status or results of a hammer test"
+ "force\:package\:hammertest\:run":"run ISV Hammer"
+ "force\:package\:install":"install a package in the target org"
+ "force\:package\:install\:report":"retrieve the status of a package installation request"
+ "force\:package\:installed\:list":"list the org’s installed packages"
+ "force\:package\:list":"list all packages in the Dev Hub org"
+ "force\:package\:uninstall":"uninstall a second-generation package from the target org"
+ "force\:package\:uninstall\:report":"retrieve status of package uninstall request"
+ "force\:package\:update":"update package details"
+ "force\:package\:version\:create":"create a package version"
+ "force\:package\:version\:create\:list":"list package version creation requests"
+ "force\:package\:version\:create\:report":"retrieve details about a package version creation request"
+ "force\:package\:version\:list":"list all package versions in the Dev Hub org"
+ "force\:package\:version\:promote":"promote a package version to released"
+ "force\:package\:version\:report":"retrieve details about a package version in the Dev Hub org"
+ "force\:package\:version\:update":"update a package version"
+ "force\:project\:create":"create a new SFDX project"
+ "force\:project\:upgrade":"update project config files to the latest format"
+ "force\:schema\:sobject\:describe":"describe an object"
+ "force\:schema\:sobject\:list":"list all objects of a specified category"
+ "force\:source\:convert":"convert source into Metadata API format"
+ "force\:source\:delete":"delete source from your project and from a non-source-tracked org"
+ "force\:source\:deploy":"deploy source to a non-source-tracked org"
+ "force\:source\:open":"edit a Lightning Page with Lightning App Builder"
+ "force\:source\:pull":"pull source from the scratch org to the project"
+ "force\:source\:push":"push source to a scratch org from the project"
+ "force\:source\:retrieve":"retrieve source from a non-source-tracked org"
+ "force\:source\:status":"list local changes and/or changes in a scratch org"
+ "force\:user\:create":"create a user for a scratch org"
+ "force\:user\:display":"displays information about a user of a scratch org"
+ "force\:user\:list":"lists all users of a scratch org"
+ "force\:user\:password\:generate":"generate a password for scratch org users"
+ "force\:user\:permset\:assign":"assign a permission set to one or more users of an org"
+ "force\:visualforce\:component\:create":"create a Visualforce component"
+ "force\:visualforce\:page\:create":"create a Visualforce page"
+)
+
+_arguments '*:: :->command'
+
+if (( CURRENT == 1 )); then
+ _describe -t commands "sfdx command" _1st_arguments
+ return
+fi
+
+local -a _command_args
+case "$words[1]" in
+ force:limits:api:display)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:app:create)
+ _command_args=(
+ '(-n|--appname)'{-n,--appname}'[name of the generated Lightning app]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningApp*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:bulk:delete)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you’re deleting]' \
+ '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file containing the ids of the records to delete]:file:_files' \
+ '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:bulk:status)
+ _command_args=(
+ '(-i|--jobid)'{-i,--jobid}'[the ID of the job you want to view or of the job whose batch you want to view]' \
+ '(-b|--batchid)'{-b,--batchid}'[the ID of the batch whose status you want to view]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:bulk:upsert)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the sObject type of the records you want to upsert]' \
+ '(-f|--csvfile)'{-f,--csvfile}'[the path to the CSV file that defines the records to upsert]:file:_files' \
+ '(-i|--externalid)'{-i,--externalid}'[the column name of the external ID]' \
+ '(-w|--wait)'{-w,--wait}'[the number of minutes to wait for the command to complete before displaying the results]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:class:create)
+ _command_args=(
+ '(-n|--classname)'{-n,--classname}'[name of the generated Apex class]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultApexClass*,ApexException,ApexUnitTest,InboundEmailService)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:doc:commands:display)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:doc:commands:list)
+ _command_args=(
+ '(-u|--usage)'{-u,--usage}'[list only docopt usage strings]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:visualforce:component:create)
+ _command_args=(
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFComponent*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-n|--componentname)'{-n,--componentname}'[name of the generated Visualforce component]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(-l|--label)'{-l,--label}'[Visualforce component label]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:component:create)
+ _command_args=(
+ '(-n|--componentname)'{-n,--componentname}'[name of the generated Lightning component]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningCmp*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(--type)--type[type of the Lightning component (aura*,lwc)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:convert)
+ _command_args=(
+ '(-r|--rootdir)'{-r,--rootdir}'[the root directory containing the Metadata API–formatted metadata]:file:_files' \
+ '(-d|--outputdir)'{-d,--outputdir}'[the output directory to store the source–formatted files]:file:_files' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:convert)
+ _command_args=(
+ '(-r|--rootdir)'{-r,--rootdir}'[a source directory other than the default package to convert]:file:_files' \
+ '(-d|--outputdir)'{-d,--outputdir}'[output directory to store the Metadata API–formatted files in]:file:_files' \
+ '(-n|--packagename)'{-n,--packagename}'[name of the package to associate with the metadata-formatted files]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:create)
+ _command_args=(
+ '(-f|--definitionfile)'{-f,--definitionfile}'[path to a scratch org definition file]:file:_files' \
+ '(-j|--definitionjson)'{-j,--definitionjson}'[scratch org definition in json format ]' \
+ '(-n|--nonamespace)'{-n,--nonamespace}'[creates the scratch org with no namespace]' \
+ '(-c|--noancestors)'{-c,--noancestors}'[do not include second-generation package ancestors in the scratch org]' \
+ '(-i|--clientid)'{-i,--clientid}'[connected app consumer key]' \
+ '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the created org as the default username]' \
+ '(-a|--setalias)'{-a,--setalias}'[set an alias for for the created scratch org]' \
+ '(-e|--env)'{-e,--env}'[environment where the scratch org is created: \[sandbox*,virtual,prototype\] (sandbox*,virtual,prototype)]' \
+ '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \
+ '(-d|--durationdays)'{-d,--durationdays}'[duration of the scratch org (in days) (default:7, min:1, max:30)]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:create)
+ _command_args=(
+ '(-n|--name)'{-n,--name}'[package name]' \
+ '(-t|--packagetype)'{-t,--packagetype}'[package type (Managed,Unlocked)]' \
+ '(-d|--description)'{-d,--description}'[package description]' \
+ '(-e|--nonamespace)'{-e,--nonamespace}'[creates the package with no namespace; available only for unlocked packages.]' \
+ '(-r|--path)'{-r,--path}'[path to directory that contains the contents of the package]:file:_files' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:user:create)
+ _command_args=(
+ '(-f|--definitionfile)'{-f,--definitionfile}'[file path to a user definition]:file:_files' \
+ '(-a|--setalias)'{-a,--setalias}'[set an alias for the created username to reference within the CLI]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:project:create)
+ _command_args=(
+ '(-n|--projectname)'{-n,--projectname}'[name of the generated project]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (Defaultsfdx-project.json*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-l|--loginurl)'{-l,--loginurl}'[Salesforce instance login URL (https://login.salesforce.com*)]' \
+ '(--sourceapiversion)--sourceapiversion[source API version number (45.0*)]' \
+ '(-s|--namespace)'{-s,--namespace}'[project associated namespace]' \
+ '(-p|--defaultpackagedir)'{-p,--defaultpackagedir}'[default package directory name (force-app*)]' \
+ '(-x|--manifest)'{-x,--manifest}'[generate a manifest (package.xml) for change-set-based development]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:delete)
+ _command_args=(
+ '(-p|--noprompt)'{-p,--noprompt}'[no prompt to confirm deletion]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:delete)
+ _command_args=(
+ '(-r|--noprompt)'{-r,--noprompt}'[do not prompt for delete confirmation]' \
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-p|--sourcepath)'{-p,--sourcepath}'[comma-separated list of paths to the local metadata to delete]:file:_files' \
+ '(-m|--metadata)'{-m,--metadata}'[comma-separated list of names of metadata components to delete]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:deploy)
+ _command_args=(
+ '(-c|--checkonly)'{-c,--checkonly}'[validate deploy but don’t save to the org (default:false)]' \
+ '(-d|--deploydir)'{-d,--deploydir}'[root of directory tree of files to deploy]:file:_files' \
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \
+ '(-i|--jobid)'{-i,--jobid}'[(deprecated) job ID of the deployment you want to check; defaults to your most recent CLI deployment if not specified]' \
+ '(-l|--testlevel)'{-l,--testlevel}'[deployment testing level (NoTestRun,RunSpecifiedTests,RunLocalTests,RunAllTestsInOrg)]' \
+ '(-r|--runtests)'{-r,--runtests}'[tests to run if --testlevel RunSpecifiedTests]' \
+ '(-e|--rollbackonerror)'{-e,--rollbackonerror}'[(deprecated) roll back deployment for any failure (default:true)]' \
+ '(-o|--ignoreerrors)'{-o,--ignoreerrors}'[ignore any errors and do not roll back deployment (default:false)]' \
+ '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[whether a warning will allow a deployment to complete successfully (default:false)]' \
+ '(-q|--validateddeployrequestid)'{-q,--validateddeployrequestid}'[request ID of the validated deployment to run a Quick Deploy]' \
+ '(-f|--zipfile)'{-f,--zipfile}'[path to .zip file of metadata to deploy]:file:_files' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[verbose output of deploy results]' \
+ )
+ ;;
+ force:source:deploy)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-m|--metadata)'{-m,--metadata}'[comma-separated list of metadata component names]' \
+ '(-p|--sourcepath)'{-p,--sourcepath}'[comma-separated list of paths to the local source files to deploy]:file:_files' \
+ '(-x|--manifest)'{-x,--manifest}'[file path for manifest (package.xml) of components to deploy]:file:_files' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:deploy:cancel)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-i|--jobid)'{-i,--jobid}'[job ID of the deployment you want to cancel; defaults to your most recent CLI deployment if not specified]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:deploy:report)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 0)]' \
+ '(-i|--jobid)'{-i,--jobid}'[job ID of the deployment you want to check; defaults to your most recent CLI deployment if not specified]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[verbose output of deploy results]' \
+ )
+ ;;
+ force:org:display)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[emit additional command output to stdout]' \
+ )
+ ;;
+ force:user:display)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:event:create)
+ _command_args=(
+ '(-n|--eventname)'{-n,--eventname}'[name of the generated Lightning event]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningEvt*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:execute)
+ _command_args=(
+ '(-f|--apexcodefile)'{-f,--apexcodefile}'[path to a local file containing Apex code]:file:_files' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:config:get)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[emit additional command output to stdout]' \
+ )
+ ;;
+ force:package:hammertest:list)
+ _command_args=(
+ '(-i|--packageversionid)'{-i,--packageversionid}'[ID of the package version to list results for]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:hammertest:report)
+ _command_args=(
+ '(-i|--requestid)'{-i,--requestid}'[ID of the hammer request to report on]' \
+ '(-s|--summary)'{-s,--summary}'[report only a results summary (hide Apex test failures)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:hammertest:run)
+ _command_args=(
+ '(-i|--packageversionid)'{-i,--packageversionid}'[ID of the package version to test]' \
+ '(-s|--subscriberorg)'{-s,--subscriberorg}'[comma-separated list of subscriber orgs IDs]' \
+ '(-f|--subscriberfile)'{-f,--subscriberfile}'[file with list of subscriber orgs IDs, one per line]' \
+ '(-d|--scheduledrundatetime)'{-d,--scheduledrundatetime}'[earliest date/time to run the test]' \
+ '(-p|--preview)'{-p,--preview}'[run the package hammer test in the Salesforce preview version]' \
+ '(-t|--apextests)'{-t,--apextests}'[run the apex tests in the subscriber org]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:install)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status]' \
+ '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \
+ '(-b|--publishwait)'{-b,--publishwait}'[number of minutes to wait for subscriber package version ID to become available in the target org ]' \
+ '(-r|--noprompt)'{-r,--noprompt}'[allow Remote Site Settings and Content Security Policy websites to send or receive data without confirmation]' \
+ '(-p|--package)'{-p,--package}'[ID (starts with 04t) or alias of the package version to install]' \
+ '(-s|--securitytype)'{-s,--securitytype}'[security access type for the installed package (AllUsers,AdminsOnly)]' \
+ '(-t|--upgradetype)'{-t,--upgradetype}'[the upgrade type for the package installation (Mixed*,DeprecateOnly)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:install:report)
+ _command_args=(
+ '(-i|--requestid)'{-i,--requestid}'[ID of the package install request you want to check]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:installed:list)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:interface:create)
+ _command_args=(
+ '(-n|--interfacename)'{-n,--interfacename}'[name of the generated Lightning interface]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningIntf*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:auth:jwt:grant)
+ _command_args=(
+ '(-u|--username)'{-u,--username}'[authentication username]' \
+ '(-f|--jwtkeyfile)'{-f,--jwtkeyfile}'[path to a file containing the private key]:file:_files' \
+ '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \
+ '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \
+ '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \
+ '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \
+ '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for auth confirmation in demo mode]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:lint)
+ _command_args=(
+ '(--ignore)--ignore[pattern used to ignore some folders]' \
+ '(--files)--files[pattern used to include specific files]' \
+ '(--json)--json[format output as JSON]' \
+ '(--config)--config[path to a custom ESLint configuration file]' \
+ '(--verbose)--verbose[report warnings in addition to errors]' \
+ '(--exit)--exit[exit with error code 1 if there are lint issues]' \
+ )
+ ;;
+ force:alias:list)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:config:list)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:list)
+ _command_args=(
+ '(--all)--all[include expired, deleted, and unknown-status scratch orgs]' \
+ '(--clean)--clean[remove all local org authorizations for non-active orgs]' \
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[list more information about each org]' \
+ )
+ ;;
+ force:package:list)
+ _command_args=(
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[display extended package detail]' \
+ )
+ ;;
+ force:user:list)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:log:get)
+ _command_args=(
+ '(-c|--color)'{-c,--color}'[colorize noteworthy log lines]' \
+ '(-i|--logid)'{-i,--logid}'[ID of the log to display]' \
+ '(-n|--number)'{-n,--number}'[number of most recent logs to display (min:1, max:25)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:log:list)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:log:tail)
+ _command_args=(
+ '(-c|--color)'{-c,--color}'[colorize noteworthy log lines]' \
+ '(-d|--debuglevel)'{-d,--debuglevel}'[debug level for trace flag]' \
+ '(-s|--skiptraceflag)'{-s,--skiptraceflag}'[skip trace flag setup]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:auth:logout)
+ _command_args=(
+ '(-a|--all)'{-a,--all}'[include all authenticated orgs]' \
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:open)
+ _command_args=(
+ '(-p|--path)'{-p,--path}'[navigation URL path]' \
+ '(-r|--urlonly)'{-r,--urlonly}'[display navigation URL, but don’t launch browser]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:open)
+ _command_args=(
+ '(-f|--sourcefile)'{-f,--sourcefile}'[file to edit]:file:_files' \
+ '(-r|--urlonly)'{-r,--urlonly}'[generate a navigation URL; don’t launch the editor]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:visualforce:page:create)
+ _command_args=(
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultVFPage*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-n|--pagename)'{-n,--pagename}'[name of the generated Visualforce page]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(-l|--label)'{-l,--label}'[Visualforce page label]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:user:password:generate)
+ _command_args=(
+ '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames for which to generate passwords]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:user:permset:assign)
+ _command_args=(
+ '(-n|--permsetname)'{-n,--permsetname}'[the name of the permission set to assign]' \
+ '(-o|--onbehalfof)'{-o,--onbehalfof}'[comma-separated list of usernames or aliases to assign the permission set to]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:pull)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to the project]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:push)
+ _command_args=(
+ '(-f|--forceoverwrite)'{-f,--forceoverwrite}'[ignore conflict warnings and overwrite changes to scratch org]' \
+ '(-g|--ignorewarnings)'{-g,--ignorewarnings}'[deploy changes even if warnings are generated]' \
+ '(-r|--replacetokens)'{-r,--replacetokens}'[replace tokens in source files prior to deployment]' \
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:record:create)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re creating]' \
+ '(-v|--values)'{-v,--values}'[the <fieldName>=<value> pairs you’re creating]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[create the record with tooling api]' \
+ '(--perflog)--perflog[get API performance data.]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:record:delete)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re deleting]' \
+ '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re deleting]' \
+ '(-w|--where)'{-w,--where}'[a list of <fieldName>=<value> pairs to search for]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[delete the record with Tooling API]' \
+ '(--perflog)--perflog[get API performance data.]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:record:get)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re retrieving]' \
+ '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re retrieving]' \
+ '(-w|--where)'{-w,--where}'[a list of <fieldName>=<value> pairs to search for]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[retrieve the record with Tooling API]' \
+ '(--perflog)--perflog[get API performance data.]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:record:update)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the type of the record you’re updating]' \
+ '(-i|--sobjectid)'{-i,--sobjectid}'[the ID of the record you’re updating]' \
+ '(-w|--where)'{-w,--where}'[a list of <fieldName>=<value> pairs to search for]' \
+ '(-v|--values)'{-v,--values}'[the <fieldName>=<value> pairs you’re updating]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[update the record with Tooling API]' \
+ '(--perflog)--perflog[get API performance data.]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:retrieve)
+ _command_args=(
+ '(-a|--apiversion)'{-a,--apiversion}'[target API version for the retrieve (default 45.0)]' \
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \
+ '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \
+ '(-k|--unpackaged)'{-k,--unpackaged}'[file path of manifest of components to retrieve]:file:_files' \
+ '(-d|--sourcedir)'{-d,--sourcedir}'[source dir to use instead of default manifest sfdx-project.xml]:file:_files' \
+ '(-p|--packagenames)'{-p,--packagenames}'[a comma-separated list of packages to retrieve]' \
+ '(-s|--singlepackage)'{-s,--singlepackage}'[a single-package retrieve (default: false)]' \
+ '(-i|--jobid)'{-i,--jobid}'[(deprecated) job ID of the retrieve you want to check; defaults to your most recent CLI retrieval if not specified]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[verbose output of retrieve result]' \
+ )
+ ;;
+ force:source:retrieve)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: 33) (default:33, min:1)]' \
+ '(-x|--manifest)'{-x,--manifest}'[file path for manifest (package.xml) of components to retrieve]:file:_files' \
+ '(-m|--metadata)'{-m,--metadata}'[comma-separated list of metadata component names]' \
+ '(-p|--sourcepath)'{-p,--sourcepath}'[comma-separated list of source file paths to retrieve]:file:_files' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:mdapi:retrieve:report)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[wait time for command to finish in minutes (default: -1 (no limit))]' \
+ '(-r|--retrievetargetdir)'{-r,--retrievetargetdir}'[directory root for the retrieved files]:file:_files' \
+ '(-i|--jobid)'{-i,--jobid}'[job ID of the retrieve you want to check; defaults to your most recent CLI retrieval if not specified]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[verbose output of retrieve result]' \
+ )
+ ;;
+ force:alias:set)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:config:set)
+ _command_args=(
+ '(-g|--global)'{-g,--global}'[set config var globally (to be used from any directory)]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:auth:sfdxurl:store)
+ _command_args=(
+ '(-f|--sfdxurlfile)'{-f,--sfdxurlfile}'[path to a file containing the sfdx url]:file:_files' \
+ '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \
+ '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \
+ '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for auth confirmation in demo mode]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:shape:create)
+ _command_args=(
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:shape:delete)
+ _command_args=(
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for confirmation]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username for the target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:shape:list)
+ _command_args=(
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[list more information about each org shape]' \
+ )
+ ;;
+ force:org:snapshot:create)
+ _command_args=(
+ '(-o|--sourceorg)'{-o,--sourceorg}'[ID or locally authenticated username or alias of scratch org to snapshot]' \
+ '(-n|--snapshotname)'{-n,--snapshotname}'[unique name of snapshot]' \
+ '(-d|--description)'{-d,--description}'[description of snapshot]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:snapshot:delete)
+ _command_args=(
+ '(-s|--snapshot)'{-s,--snapshot}'[name or ID of snapshot to delete]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:snapshot:get)
+ _command_args=(
+ '(-s|--snapshot)'{-s,--snapshot}'[name or ID of snapshot to retrieve]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:org:snapshot:list)
+ _command_args=(
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:schema:sobject:describe)
+ _command_args=(
+ '(-s|--sobjecttype)'{-s,--sobjecttype}'[the API name of the object to describe]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[execute with Tooling API]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:schema:sobject:list)
+ _command_args=(
+ '(-c|--sobjecttypecategory)'{-c,--sobjecttypecategory}'[the type of objects to list (all|custom|standard)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:soql:query)
+ _command_args=(
+ '(-q|--query)'{-q,--query}'[SOQL query to execute]' \
+ '(-t|--usetoolingapi)'{-t,--usetoolingapi}'[execute query with Tooling API]' \
+ '(-r|--resultformat)'{-r,--resultformat}'[query result format emitted to stdout; --json flag overrides this parameter (human*,csv,json)]' \
+ '(--perflog)--perflog[get API performance data.]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:source:status)
+ _command_args=(
+ '(-a|--all)'{-a,--all}'[list all the changes that have been made]' \
+ '(-l|--local)'{-l,--local}'[list the changes that have been made locally]' \
+ '(-r|--remote)'{-r,--remote}'[list the changes that have been made in the scratch org]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:test:create)
+ _command_args=(
+ '(-n|--testname)'{-n,--testname}'[name of the generated Lightning test]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (DefaultLightningTest*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:lightning:test:install)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[number of minutes to wait for installation status (default:2)]' \
+ '(-r|--releaseversion)'{-r,--releaseversion}'[release version of Lightning Testing Service (default:latest)]' \
+ '(-t|--packagetype)'{-t,--packagetype}'[type of unmanaged package. 'full' option contains both jasmine and mocha, plus examples (full*,jasmine,mocha)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:test:report)
+ _command_args=(
+ '(-i|--testrunid)'{-i,--testrunid}'[ID of test run]' \
+ '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \
+ '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \
+ '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[display Apex test processing details]' \
+ )
+ ;;
+ force:apex:test:run)
+ _command_args=(
+ '(-n|--classnames)'{-n,--classnames}'[comma-separated list of Apex test class names to run]' \
+ '(-s|--suitenames)'{-s,--suitenames}'[comma-separated list of Apex test suite names to run]' \
+ '(-t|--tests)'{-t,--tests}'[comma-separated list of Apex test class names or IDs and, if applicable, test methods to run]' \
+ '(-c|--codecoverage)'{-c,--codecoverage}'[retrieve code coverage results]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[directory to store test run files]:file:_files' \
+ '(-l|--testlevel)'{-l,--testlevel}'[testlevel enum value (RunLocalTests,RunAllTestsInOrg,RunSpecifiedTests)]' \
+ '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \
+ '(-w|--wait)'{-w,--wait}'[the streaming client socket timeout (in minutes) (default:6, min:2)]' \
+ '(--precompilewait)--precompilewait[how long to wait (in minutes) for Apex pre-compilation (default:3, min:3)]' \
+ '(-y|--synchronous)'{-y,--synchronous}'[run tests from a single class synchronously]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[display Apex test processing details]' \
+ )
+ ;;
+ force:lightning:test:run)
+ _command_args=(
+ '(-a|--appname)'{-a,--appname}'[name of your Lightning test application]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[directory path to store test run artifacts: for example, log files and test results]:file:_files' \
+ '(-r|--resultformat)'{-r,--resultformat}'[test result format emitted to stdout; --json flag overrides this parameter (human*,tap,junit,json)]' \
+ '(-f|--configfile)'{-f,--configfile}'[path to config file for the test]:file:_files' \
+ '(-o|--leavebrowseropen)'{-o,--leavebrowseropen}'[leave browser open]' \
+ '(-t|--timeout)'{-t,--timeout}'[time (ms) to wait for results element in dom (default:60000)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:tree:export)
+ _command_args=(
+ '(-q|--query)'{-q,--query}'[soql query, or filepath of file containing a soql query, to retrieve records]' \
+ '(-p|--plan)'{-p,--plan}'[generate mulitple sobject tree files and a plan definition file for aggregated import]' \
+ '(-x|--prefix)'{-x,--prefix}'[prefix of generated files]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[directory to store files]:file:_files' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:data:tree:import)
+ _command_args=(
+ '(-f|--sobjecttreefiles)'{-f,--sobjecttreefiles}'[comma-delimited, ordered paths of json files containing collection of record trees to insert]:file:_files' \
+ '(-p|--plan)'{-p,--plan}'[path to plan to insert multiple data files that have master-detail relationships]:file:_files' \
+ '(-c|--contenttype)'{-c,--contenttype}'[if data file extension is not .json, provide content type (applies to all files)]' \
+ '(--confighelp)--confighelp[display schema information for the --plan configuration file to stdout; if you use this option, all other options except --json are ignored]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:apex:trigger:create)
+ _command_args=(
+ '(-n|--triggername)'{-n,--triggername}'[name of the generated Apex trigger]' \
+ '(-t|--template)'{-t,--template}'[template to use for file creation (ApexTrigger*)]' \
+ '(-d|--outputdir)'{-d,--outputdir}'[folder for saving the created files]' \
+ '(-r|--reflect)'{-r,--reflect}'[switch to return flag detailed information]' \
+ '(-a|--apiversion)'{-a,--apiversion}'[API version number (45.0*,44.0)]' \
+ '(-s|--sobject)'{-s,--sobject}'[sObject to create a trigger on (SOBJECT*)]' \
+ '(-e|--triggerevents)'{-e,--triggerevents}'[events that fire the trigger (before insert*,before update,before delete,after insert,after update,after delete,after undelete)]' \
+ '(--json)--json[JSON output]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:uninstall)
+ _command_args=(
+ '(-w|--wait)'{-w,--wait}'[number of minutes to wait for uninstall status]' \
+ '(-p|--package)'{-p,--package}'[ID (starts with 04t) or alias of the package version to uninstall]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:uninstall:report)
+ _command_args=(
+ '(-i|--requestid)'{-i,--requestid}'[ID of the package uninstall request you want to check]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:update)
+ _command_args=(
+ '(-p|--package)'{-p,--package}'[ID (starts with 0Ho) or alias of the package to update]' \
+ '(-n|--name)'{-n,--name}'[new package name]' \
+ '(-d|--description)'{-d,--description}'[new package description]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:project:upgrade)
+ _command_args=(
+ '(-f|--forceupgrade)'{-f,--forceupgrade}'[run all upgrades even if project has already been upgraded]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:create)
+ _command_args=(
+ '(-p|--package)'{-p,--package}'[ID (starts with 0Ho) or alias of the package to create a version of]' \
+ '(-d|--path)'{-d,--path}'[path to directory that contains the contents of the package]:file:_files' \
+ '(-f|--definitionfile)'{-f,--definitionfile}'[path to a definition file similar to scratch org definition file that contains the list of features and org preferences that the metadata of the package version depends on]:file:_files' \
+ '(-b|--branch)'{-b,--branch}'[the package version’s branch]' \
+ '(-t|--tag)'{-t,--tag}'[the package version’s tag]' \
+ '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (either --installationkey or --installationkeybypass is required)]' \
+ '(-x|--installationkeybypass)'{-x,--installationkeybypass}'[bypass the installation key requirement (either --installationkey or --installationkeybypass is required)]' \
+ '(-r|--preserve)'{-r,--preserve}'[temp files are preserved that would otherwise be deleted]' \
+ '(-j|--validateschema)'{-j,--validateschema}'[sfdx-project.json is validated against JSON schema]' \
+ '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default:0)]' \
+ '(-s|--buildinstance)'{-s,--buildinstance}'[the instance where the package version will be created——for example, NA50]' \
+ '(-o|--sourceorg)'{-o,--sourceorg}'[the source org ID used to copy the org shape for the build org]' \
+ '(-a|--versionname)'{-a,--versionname}'[the name of the package version to be created]' \
+ '(-n|--versionnumber)'{-n,--versionnumber}'[the version number of the package version to be created]' \
+ '(-e|--versiondescription)'{-e,--versiondescription}'[the description of the package version to be created]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package1:version:create)
+ _command_args=(
+ '(-i|--packageid)'{-i,--packageid}'[ID of the metadata package (starts with 033) of which you’re creating a new version]' \
+ '(-n|--name)'{-n,--name}'[package version name]' \
+ '(-d|--description)'{-d,--description}'[package version description]' \
+ '(-v|--version)'{-v,--version}'[package version in major.minor format, for example, 3.2]' \
+ '(-m|--managedreleased)'{-m,--managedreleased}'[create a managed package version]' \
+ '(-r|--releasenotesurl)'{-r,--releasenotesurl}'[release notes URL]' \
+ '(-p|--postinstallurl)'{-p,--postinstallurl}'[post install URL]' \
+ '(-k|--installationkey)'{-k,--installationkey}'[installation key for key-protected package (default: null)]' \
+ '(-w|--wait)'{-w,--wait}'[minutes to wait for the package version to be created (default: 2 minutes)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package1:version:create:get)
+ _command_args=(
+ '(-i|--requestid)'{-i,--requestid}'[PackageUploadRequest ID]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:create:list)
+ _command_args=(
+ '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \
+ '(-s|--status)'{-s,--status}'[filter the list by version creation request status (Queued,InProgress,Success,Error)]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:create:report)
+ _command_args=(
+ '(-i|--packagecreaterequestid)'{-i,--packagecreaterequestid}'[package version creation request ID (starts with 08c)]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package1:version:display)
+ _command_args=(
+ '(-i|--packageversionid)'{-i,--packageversionid}'[metadata package version ID (starts with 04t)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:list)
+ _command_args=(
+ '(-c|--createdlastdays)'{-c,--createdlastdays}'[created in the last specified number of days (starting at 00:00:00 of first day to now; 0 for today)]' \
+ '(-m|--modifiedlastdays)'{-m,--modifiedlastdays}'[list items modified in the specified last number of days (starting at 00:00:00 of first day to now; 0 for today)]' \
+ '(-p|--packages)'{-p,--packages}'[filter results on specified comma-delimited packages (aliases or 0Ho IDs)]' \
+ '(-r|--released)'{-r,--released}'[display released versions only]' \
+ '(-o|--orderby)'{-o,--orderby}'[order by the specified package version fields]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--concise)--concise[display limited package version details]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[display extended package version details]' \
+ )
+ ;;
+ force:package1:version:list)
+ _command_args=(
+ '(-i|--packageid)'{-i,--packageid}'[metadata package ID (starts with 033)]' \
+ '(-u|--targetusername)'{-u,--targetusername}'[username or alias for the target org; overrides default target org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:promote)
+ _command_args=(
+ '(-p|--package)'{-p,--package}'[ID (starts with 04t) or alias of the package version to promote]' \
+ '(-n|--noprompt)'{-n,--noprompt}'[no prompt to confirm setting the package version as released]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:package:version:report)
+ _command_args=(
+ '(-p|--package)'{-p,--package}'[ID (starts with 04t) or alias of the package to retrieve details for]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ '(--verbose)--verbose[displays extended package version details]' \
+ )
+ ;;
+ force:package:version:update)
+ _command_args=(
+ '(-p|--package)'{-p,--package}'[ID (starts with 04t) or alias of the package to update a version of]' \
+ '(-a|--versionname)'{-a,--versionname}'[new package version name]' \
+ '(-e|--versiondescription)'{-e,--versiondescription}'[new package version description]' \
+ '(-b|--branch)'{-b,--branch}'[new package version branch]' \
+ '(-t|--tag)'{-t,--tag}'[new package version tag]' \
+ '(-k|--installationkey)'{-k,--installationkey}'[new installation key for key-protected package (default: null)]' \
+ '(-v|--targetdevhubusername)'{-v,--targetdevhubusername}'[username or alias for the dev hub org; overrides default dev hub org]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ force:auth:web:login)
+ _command_args=(
+ '(-i|--clientid)'{-i,--clientid}'[OAuth client ID (sometimes called the consumer key)]' \
+ '(-r|--instanceurl)'{-r,--instanceurl}'[the login URL of the instance the org lives on]' \
+ '(-d|--setdefaultdevhubusername)'{-d,--setdefaultdevhubusername}'[set the authenticated org as the default dev hub org for scratch org creation]' \
+ '(-s|--setdefaultusername)'{-s,--setdefaultusername}'[set the authenticated org as the default username that all commands run against]' \
+ '(-a|--setalias)'{-a,--setalias}'[set an alias for the authenticated org]' \
+ '(--disablemasking)--disablemasking[disable masking of user input (for use with problematic terminals)]' \
+ '(-p|--noprompt)'{-p,--noprompt}'[do not prompt for auth confirmation in demo mode]' \
+ '(--json)--json[format output as json]' \
+ '(--loglevel)--loglevel[logging level for this command invocation (error*,trace,debug,info,warn,fatal)]' \
+ )
+ ;;
+ esac
+
+_arguments \
+ $_command_args \
+ && return 0
diff --git a/plugins/ssh-agent/ssh-agent.plugin.zsh b/plugins/ssh-agent/ssh-agent.plugin.zsh
index a7a4ee33a..9471ff49c 100644
--- a/plugins/ssh-agent/ssh-agent.plugin.zsh
+++ b/plugins/ssh-agent/ssh-agent.plugin.zsh
@@ -5,7 +5,7 @@ function _start_agent() {
zstyle -s :omz:plugins:ssh-agent lifetime lifetime
# start ssh-agent and setup environment
- echo starting ssh-agent...
+ echo Starting ssh-agent...
ssh-agent -s ${lifetime:+-t} ${lifetime} | sed 's/^echo/#echo/' >! $_ssh_env_cache
chmod 600 $_ssh_env_cache
. $_ssh_env_cache > /dev/null
diff --git a/plugins/sublime/README.md b/plugins/sublime/README.md
index 2ad629fad..22999241f 100644
--- a/plugins/sublime/README.md
+++ b/plugins/sublime/README.md
@@ -1,25 +1,37 @@
-## sublime
+# sublime
-Plugin for Sublime Text, a cross platform text and code editor, available for Linux, Mac OS X, and Windows.
+Plugin for [Sublime Text](https://www.sublimetext.com/), a cross platform text and code editor,
+available for Linux, macOS, and Windows.
-### Requirements
+To use the plugin, add `sublime` to the plugins array of your zshrc file:
- * [Sublime Text](https://www.sublimetext.com/)
+```zsh
+plugins=(... sublime)
+```
-### Usage
+Sublime Text has to be installed to use the plugin.
- * If `st` command is called without an argument, launch Sublime Text
+## Usage
- * If `st` is passed a directory, `cd` to it and open it in Sublime Text
+The plugin defines several aliases, such as:
- * If `st` is passed a file, open it in Sublime Text
+- `st`: opens Sublime Text. If passed a file or directory, Sublime Text will open it.
- * If `stt` command is called, it is equivalent to `st .`, opening the current folder in Sublime Text
+- `stt`: open Sublime Text on the current directory.
- * If `sst` command is called, it is like `sudo st`, opening the file or folder in Sublime Text. Useful for editing system protected files.
+- `sst`: if `sudo` is available, `sst` will open Sublime Text with root permissions, so that
+ you can modify any file or directory that you pass it. Useful to edit system files.
- * If `stp` command is called, it find a `.sublime-project` file by traversing up the directory structure. If there is no `.sublime-project` file, but if the current folder is a Git repo, opens up the root directory of the repo. If the current folder is not a Git repo, then opens up the current directory.
+There are also a few functions available:
- * If `stn` command is called without an argument, create a stub `.sublime-project` file in the current working directory if one does not already exist
+- `find_project` (or `stp` alias): if called, the function will search for a `.sublime-project` file
+ on the current directory or its parents, until it finds none.
- * If `stn` is passed a directory, create a stub `.sublime-project` file in it
+ If there is no `.sublime-project` file but the current folder is in a Git repository, it will open
+ Sublime Text on the root directory of the repository.
+
+ If there is no Git repository, it will then open Sublime Text on the current directory.
+
+- `create_project` (or `stn` alias): if called without an argument, create a stub `.sublime-project`
+ file in the current working directory, if one does not already exist. If passed a directory, create
+ a stub `.sublime-project` file in it.
diff --git a/plugins/sublime/sublime.plugin.zsh b/plugins/sublime/sublime.plugin.zsh
index 485028d9f..3a82d6c7f 100644
--- a/plugins/sublime/sublime.plugin.zsh
+++ b/plugins/sublime/sublime.plugin.zsh
@@ -1,121 +1,118 @@
-# Sublime Text Aliases
+# Sublime Text aliases
-() {
+alias st=subl
+alias stt='subl .'
-if [[ "$OSTYPE" == linux* ]]; then
- local _sublime_linux_paths
- _sublime_linux_paths=(
+# Define sst only if sudo exists
+(( $+commands[sudo] )) && alias sst='sudo subl'
+
+alias stp=find_project
+alias stn=create_project
+
+
+# Search for the Sublime Text command if not found
+(( $+commands[subl] )) || {
+ declare -a _sublime_paths
+
+ if [[ "$OSTYPE" == linux* ]]; then
+ if [[ "$(uname -r)" = *Microsoft* ]]; then
+ _sublime_paths=(
+ "$(wslpath -u 'C:\Program Files\Sublime Text 3\subl.exe')"
+ "$(wslpath -u 'C:\Program Files\Sublime Text 2\subl.exe')"
+ )
+ else
+ _sublime_paths=(
"$HOME/bin/sublime_text"
"/opt/sublime_text/sublime_text"
"/opt/sublime_text_3/sublime_text"
"/usr/bin/sublime_text"
"/usr/local/bin/sublime_text"
"/usr/bin/subl"
- "/opt/sublime_text_3/sublime_text"
"/usr/bin/subl3"
+ )
+ fi
+ elif [[ "$OSTYPE" = darwin* ]]; then
+ _sublime_paths=(
+ "/usr/local/bin/subl"
+ "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
+ "/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
+ "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
+ "$HOME/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
+ "$HOME/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
+ "$HOME/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
)
- for _sublime_path in $_sublime_linux_paths; do
- if [[ -a $_sublime_path ]]; then
- st_run() { $_sublime_path $@ >/dev/null 2>&1 &| }
- st_run_sudo() {sudo $_sublime_path $@ >/dev/null 2>&1}
- alias sst=st_run_sudo
- alias st=st_run
- break
- fi
- done
-elif [[ "$OSTYPE" = darwin* ]]; then
- local _sublime_darwin_paths
- _sublime_darwin_paths=(
- "/usr/local/bin/subl"
- "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
- "/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
- "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
- "$HOME/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
- "$HOME/Applications/Sublime Text 3.app/Contents/SharedSupport/bin/subl"
- "$HOME/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"
+ elif [[ "$OSTYPE" = cygwin ]]; then
+ _sublime_paths=(
+ "$(cygpath "$ProgramW6432/Sublime Text 2")/subl.exe"
+ "$(cygpath "$ProgramW6432/Sublime Text 3")/subl.exe"
)
- for _sublime_path in $_sublime_darwin_paths; do
- if [[ -a $_sublime_path ]]; then
- subl () { "$_sublime_path" $* }
- alias st=subl
- break
- fi
- done
-elif [[ "$OSTYPE" = 'cygwin' ]]; then
- local _sublime_cygwin_paths
- _sublime_cygwin_paths=(
- "$(cygpath $ProgramW6432/Sublime\ Text\ 2)/sublime_text.exe"
- "$(cygpath $ProgramW6432/Sublime\ Text\ 3)/sublime_text.exe"
+ elif [[ "$OSTYPE" = msys ]]; then
+ _sublime_paths=(
+ "/c/Program Files/Sublime Text 2/subl.exe"
+ "/c/Program Files/Sublime Text 3/subl.exe"
)
- for _sublime_path in $_sublime_cygwin_paths; do
- if [[ -a $_sublime_path ]]; then
- subl () { "$_sublime_path" $* }
- alias st=subl
- break
- fi
- done
-fi
+ fi
-}
+ for _sublime_path in $_sublime_paths; do
+ if [[ -a $_sublime_path ]]; then
+ alias subl="'$_sublime_path'"
+ (( $+commands[sudo] )) && alias sst="sudo '$_sublime_path'"
+ break
+ fi
+ done
-alias stt='st .'
+ unset _sublime_paths _sublime_path
+}
-find_project()
-{
- local PROJECT_ROOT="${PWD}"
- local FINAL_DEST="."
+function find_project() {
+ local PROJECT_ROOT="${PWD}"
+ local FINAL_DEST="."
- while [[ $PROJECT_ROOT != "/" && ! -d "$PROJECT_ROOT/.git" ]]; do
- PROJECT_ROOT=$(dirname $PROJECT_ROOT)
- done
+ while [[ $PROJECT_ROOT != "/" && ! -d "$PROJECT_ROOT/.git" ]]; do
+ PROJECT_ROOT=$(dirname $PROJECT_ROOT)
+ done
- if [[ $PROJECT_ROOT != "/" ]]; then
- local PROJECT_NAME="${PROJECT_ROOT##*/}"
+ if [[ $PROJECT_ROOT != "/" ]]; then
+ local PROJECT_NAME="${PROJECT_ROOT##*/}"
- local SUBL_DIR=$PROJECT_ROOT
- while [[ $SUBL_DIR != "/" && ! -f "$SUBL_DIR/$PROJECT_NAME.sublime-project" ]]; do
- SUBL_DIR=$(dirname $SUBL_DIR)
- done
+ local SUBL_DIR=$PROJECT_ROOT
+ while [[ $SUBL_DIR != "/" && ! -f "$SUBL_DIR/$PROJECT_NAME.sublime-project" ]]; do
+ SUBL_DIR=$(dirname $SUBL_DIR)
+ done
- if [[ $SUBL_DIR != "/" ]]; then
- FINAL_DEST="$SUBL_DIR/$PROJECT_NAME.sublime-project"
- else
- FINAL_DEST=$PROJECT_ROOT
- fi
+ if [[ $SUBL_DIR != "/" ]]; then
+ FINAL_DEST="$SUBL_DIR/$PROJECT_NAME.sublime-project"
+ else
+ FINAL_DEST=$PROJECT_ROOT
fi
+ fi
- st $FINAL_DEST
+ subl $FINAL_DEST
}
function create_project() {
-
- local _target=$1
-
- if [[ "${_target}" == "" ]]; then
- _target=$(pwd);
- elif [[ ! -d ${_target} ]]; then
- echo "${_target} is not a valid directory"
- return 1
- fi
-
- local _sublime_project_file=$_target/$(basename $_target).sublime-project
-
- if [[ ! -f $_sublime_project_file ]]; then
-
- touch $_sublime_project_file
-
- echo -e "{" >> $_sublime_project_file
- echo -e "\t\"folders\":" >> $_sublime_project_file
- echo -e "\t\t[{" >> $_sublime_project_file
- echo -e "\t\t\t\"path\": \".\"," >> $_sublime_project_file
- echo -e "\t\t\t\"file_exclude_patterns\": []" >> $_sublime_project_file
- echo -e "\t\t}]" >> $_sublime_project_file
- echo -e "}" >> $_sublime_project_file
-
- echo -e "New Sublime Text project created:\n\t${_sublime_project_file}"
-
- fi
+ local _target=$1
+
+ if [[ "${_target}" == "" ]]; then
+ _target=$(pwd);
+ elif [[ ! -d ${_target} ]]; then
+ echo "${_target} is not a valid directory"
+ return 1
+ fi
+
+ local _sublime_project_file=$_target/$(basename $_target).sublime-project
+
+ if [[ ! -f $_sublime_project_file ]]; then
+ touch $_sublime_project_file
+
+ echo -e "{" >> $_sublime_project_file
+ echo -e "\t\"folders\":" >> $_sublime_project_file
+ echo -e "\t\t[{" >> $_sublime_project_file
+ echo -e "\t\t\t\"path\": \".\"," >> $_sublime_project_file
+ echo -e "\t\t\t\"file_exclude_patterns\": []" >> $_sublime_project_file
+ echo -e "\t\t}]" >> $_sublime_project_file
+ echo -e "}" >> $_sublime_project_file
+
+ echo -e "New Sublime Text project created:\n\t${_sublime_project_file}"
+ fi
}
-
-alias stp=find_project
-alias stn=create_project
diff --git a/plugins/svn-fast-info/svn-fast-info.plugin.zsh b/plugins/svn-fast-info/svn-fast-info.plugin.zsh
index 9ea7f641d..fe5265315 100644
--- a/plugins/svn-fast-info/svn-fast-info.plugin.zsh
+++ b/plugins/svn-fast-info/svn-fast-info.plugin.zsh
@@ -16,30 +16,30 @@ function svn_prompt_info() {
if [[ -n $repo_need_upgrade ]]; then
printf '%s%s%s%s%s%s%s\n' \
- $ZSH_PROMPT_BASE_COLOR \
- $ZSH_THEME_SVN_PROMPT_PREFIX \
- $ZSH_PROMPT_BASE_COLOR \
- $repo_need_upgrade \
- $ZSH_PROMPT_BASE_COLOR \
- $ZSH_THEME_SVN_PROMPT_SUFFIX \
- $ZSH_PROMPT_BASE_COLOR
+ "$ZSH_PROMPT_BASE_COLOR" \
+ "$ZSH_THEME_SVN_PROMPT_PREFIX" \
+ "$ZSH_PROMPT_BASE_COLOR" \
+ "$repo_need_upgrade" \
+ "$ZSH_PROMPT_BASE_COLOR" \
+ "$ZSH_THEME_SVN_PROMPT_SUFFIX" \
+ "$ZSH_PROMPT_BASE_COLOR"
else
- printf '%s%s%s %s%s:%s%s%s%s%s' \
- $ZSH_PROMPT_BASE_COLOR \
- $ZSH_THEME_SVN_PROMPT_PREFIX \
+ printf '%s%s%s%s %s%s%s:%s%s%s%s' \
+ "$ZSH_PROMPT_BASE_COLOR" \
+ "$ZSH_THEME_SVN_PROMPT_PREFIX" \
\
"$(svn_status_info $info)" \
- $ZSH_PROMPT_BASE_COLOR \
+ "$ZSH_PROMPT_BASE_COLOR" \
\
- $ZSH_THEME_BRANCH_NAME_COLOR \
- $(svn_current_branch_name $info) \
- $ZSH_PROMPT_BASE_COLOR \
+ "$ZSH_THEME_BRANCH_NAME_COLOR" \
+ "$(svn_current_branch_name $info)" \
+ "$ZSH_PROMPT_BASE_COLOR" \
\
- $(svn_current_revision $info) \
- $ZSH_PROMPT_BASE_COLOR \
+ "$(svn_current_revision $info)" \
+ "$ZSH_PROMPT_BASE_COLOR" \
\
- $ZSH_THEME_SVN_PROMPT_SUFFIX \
- $ZSH_PROMPT_BASE_COLOR
+ "$ZSH_THEME_SVN_PROMPT_SUFFIX" \
+ "$ZSH_PROMPT_BASE_COLOR"
fi
}
@@ -63,11 +63,12 @@ function svn_current_revision() {
function svn_status_info() {
local svn_status_string="$ZSH_THEME_SVN_PROMPT_CLEAN"
local svn_status="$(svn status 2> /dev/null)";
- if command grep -E '^\s*A' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_ADDITIONS:-+}"; fi
- if command grep -E '^\s*D' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_DELETIONS:-✖}"; fi
- if command grep -E '^\s*M' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_MODIFICATIONS:-✎}"; fi
- if command grep -E '^\s*[R~]' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_REPLACEMENTS:-∿}"; fi
- if command grep -E '^\s*\?' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_UNTRACKED:-?}"; fi
- if command grep -E '^\s*[CI!L]' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string ${ZSH_THEME_SVN_PROMPT_DIRTY:-'!'}"; fi
+ if command grep -E '^\s*A' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_ADDITIONS:-+}"; fi
+ if command grep -E '^\s*D' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_DELETIONS:-✖}"; fi
+ if command grep -E '^\s*M' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_MODIFICATIONS:-✎}"; fi
+ if command grep -E '^\s*[R~]' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_REPLACEMENTS:-∿}"; fi
+ if command grep -E '^\s*\?' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_UNTRACKED:-?}"; fi
+ if command grep -E '^\s*[CI!L]' &> /dev/null <<< $svn_status; then svn_status_string="$svn_status_string${ZSH_THEME_SVN_PROMPT_DIRTY:-!}"; fi
echo $svn_status_string
}
+
diff --git a/plugins/swiftpm/README.md b/plugins/swiftpm/README.md
index 07ca25651..291458511 100644
--- a/plugins/swiftpm/README.md
+++ b/plugins/swiftpm/README.md
@@ -2,7 +2,7 @@
## Description
-This plugin provides a few utilities that make you faster on your daily work with the [Swift Package Manager](https://github.com/apple/swift-package-manager).
+This plugin provides a few utilities that make you faster on your daily work with the [Swift Package Manager](https://github.com/apple/swift-package-manager), as well as autocompletion for Swift 5.0.
To start using it, add the `swiftpm` plugin to your `plugins` array in `~/.zshrc`:
diff --git a/plugins/swiftpm/_swift b/plugins/swiftpm/_swift
index bed6e13a7..1366b4d9c 100644
--- a/plugins/swiftpm/_swift
+++ b/plugins/swiftpm/_swift
@@ -72,16 +72,23 @@ _swift_build() {
"--build-path[Specify build/cache directory ]:Specify build/cache directory :_files"
"(--chdir -C)"{--chdir,-C}"[]: :_files"
"--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files"
- "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+ "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
"--disable-prefetching[]"
"--skip-update[Skip updating dependencies from their remote during a resolution]"
"--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+ "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
"--version[]"
"--destination[]: :_files"
"(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
"--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
"--static-swift-stdlib[Link Swift stdlib statically]"
- "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+ "--enable-llbuild-library[Enable building with the llbuild library]"
+ "--force-resolved-versions[]"
+ "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+ "--enable-index-store[Enable indexing-while-building feature]"
+ "--disable-index-store[Disable indexing-while-building feature]"
+ "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+ "--enable-parseable-module-interfaces[]"
"--build-tests[Build both source and test targets]"
"--product[Build the specified product]:Build the specified product: "
"--target[Build the specified target]:Build the specified target: "
@@ -108,17 +115,26 @@ _swift_run() {
"--build-path[Specify build/cache directory ]:Specify build/cache directory :_files"
"(--chdir -C)"{--chdir,-C}"[]: :_files"
"--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files"
- "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+ "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
"--disable-prefetching[]"
"--skip-update[Skip updating dependencies from their remote during a resolution]"
"--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+ "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
"--version[]"
"--destination[]: :_files"
"(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
"--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
"--static-swift-stdlib[Link Swift stdlib statically]"
- "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+ "--enable-llbuild-library[Enable building with the llbuild library]"
+ "--force-resolved-versions[]"
+ "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+ "--enable-index-store[Enable indexing-while-building feature]"
+ "--disable-index-store[Disable indexing-while-building feature]"
+ "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+ "--enable-parseable-module-interfaces[]"
"--skip-build[Skip building the executable product]"
+ "--build-tests[Build both source and test targets]"
+ "--repl[Launch Swift REPL for the package]"
)
_arguments $arguments && return
}
@@ -140,16 +156,23 @@ _swift_package() {
"--build-path[Specify build/cache directory ]:Specify build/cache directory :_files"
"(--chdir -C)"{--chdir,-C}"[]: :_files"
"--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files"
- "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+ "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
"--disable-prefetching[]"
"--skip-update[Skip updating dependencies from their remote during a resolution]"
"--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+ "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
"--version[]"
"--destination[]: :_files"
"(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
"--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
"--static-swift-stdlib[Link Swift stdlib statically]"
- "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+ "--enable-llbuild-library[Enable building with the llbuild library]"
+ "--force-resolved-versions[]"
+ "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+ "--enable-index-store[Enable indexing-while-building feature]"
+ "--disable-index-store[Disable indexing-while-building feature]"
+ "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+ "--enable-parseable-module-interfaces[]"
'(-): :->command'
'(-)*:: :->arg'
)
@@ -158,91 +181,124 @@ _swift_package() {
(command)
local modes
modes=(
- 'edit:Put a package in editable mode'
- 'clean:Delete build artifacts'
- 'init:Initialize a new package'
- 'dump-package:Print parsed Package.swift as JSON'
+ 'update:Update package dependencies'
'describe:Describe the current package'
+ 'resolve:Resolve package dependencies'
+ 'tools-version:Manipulate tools version of the current package'
'unedit:Remove a package from editable mode'
- 'update:Update package dependencies'
+ 'show-dependencies:Print the resolved dependency graph'
+ 'fetch:'
+ 'dump-package:Print parsed Package.swift as JSON'
+ 'edit:Put a package in editable mode'
+ 'config:Manipulate configuration of the package'
'completion-tool:Completion tool (for shell completions)'
- 'tools-version:Manipulate tools version of the current package'
- 'reset:Reset the complete cache/build directory'
- 'resolve:Resolve package dependencies'
+ 'clean:Delete build artifacts'
'generate-xcodeproj:Generates an Xcode project'
- 'fetch:'
- 'show-dependencies:Print the resolved dependency graph'
+ 'reset:Reset the complete cache/build directory'
+ 'init:Initialize a new package'
)
_describe "mode" modes
;;
(arg)
case ${words[1]} in
- (edit)
- _swift_package_edit
- ;;
- (clean)
- _swift_package_clean
- ;;
- (init)
- _swift_package_init
- ;;
- (dump-package)
- _swift_package_dump-package
+ (update)
+ _swift_package_update
;;
(describe)
_swift_package_describe
;;
+ (resolve)
+ _swift_package_resolve
+ ;;
+ (tools-version)
+ _swift_package_tools-version
+ ;;
(unedit)
_swift_package_unedit
;;
- (update)
- _swift_package_update
+ (show-dependencies)
+ _swift_package_show-dependencies
;;
- (completion-tool)
- _swift_package_completion-tool
+ (fetch)
+ _swift_package_fetch
;;
- (tools-version)
- _swift_package_tools-version
+ (dump-package)
+ _swift_package_dump-package
;;
- (reset)
- _swift_package_reset
+ (edit)
+ _swift_package_edit
;;
- (resolve)
- _swift_package_resolve
+ (config)
+ _swift_package_config
+ ;;
+ (completion-tool)
+ _swift_package_completion-tool
+ ;;
+ (clean)
+ _swift_package_clean
;;
(generate-xcodeproj)
_swift_package_generate-xcodeproj
;;
- (fetch)
- _swift_package_fetch
+ (reset)
+ _swift_package_reset
;;
- (show-dependencies)
- _swift_package_show-dependencies
+ (init)
+ _swift_package_init
;;
esac
;;
esac
}
-_swift_package_edit() {
+_swift_package_update() {
arguments=(
- ":The name of the package to edit:_swift_dependency"
- "--revision[The revision to edit]:The revision to edit: "
- "--branch[The branch to create]:The branch to create: "
- "--path[Create or use the checkout at this path]:Create or use the checkout at this path:_files"
)
_arguments $arguments && return
}
-_swift_package_clean() {
+_swift_package_describe() {
arguments=(
+ "--type[json|text]: :{_values '' 'text[describe using text format]' 'json[describe using JSON format]'}"
)
_arguments $arguments && return
}
-_swift_package_init() {
+_swift_package_resolve() {
+ arguments=(
+ ":The name of the package to resolve:_swift_dependency"
+ "--version[The version to resolve at]:The version to resolve at: "
+ "--branch[The branch to resolve at]:The branch to resolve at: "
+ "--revision[The revision to resolve at]:The revision to resolve at: "
+ )
+ _arguments $arguments && return
+}
+
+_swift_package_tools-version() {
+ arguments=(
+ "--set[Set tools version of package to the given value]:Set tools version of package to the given value: "
+ "--set-current[Set tools version of package to the current tools version in use]"
+ )
+ _arguments $arguments && return
+}
+
+_swift_package_unedit() {
+ arguments=(
+ ":The name of the package to unedit:_swift_dependency"
+ "--force[Unedit the package even if it has uncommited and unpushed changes.]"
+ )
+ _arguments $arguments && return
+}
+
+_swift_package_show-dependencies() {
+ arguments=(
+ "--format[text|dot|json|flatlist]: :{_values '' 'text[list dependencies using text format]' 'dot[list dependencies using dot format]' 'json[list dependencies using JSON format]'}"
+ )
+ _arguments $arguments && return
+}
+
+_swift_package_fetch() {
arguments=(
- "--type[empty|library|executable|system-module]: :{_values '' 'empty[generates an empty project]' 'library[generates project for a dynamic library]' 'executable[generates a project for a cli executable]' 'system-module[generates a project for a system module]'}"
)
_arguments $arguments && return
}
@@ -253,54 +309,80 @@ _swift_package_dump-package() {
_arguments $arguments && return
}
-_swift_package_describe() {
+_swift_package_edit() {
arguments=(
- "--type[json|text]: :{_values '' 'text[describe using text format]' 'json[describe using JSON format]'}"
+ ":The name of the package to edit:_swift_dependency"
+ "--revision[The revision to edit]:The revision to edit: "
+ "--branch[The branch to create]:The branch to create: "
+ "--path[Create or use the checkout at this path]:Create or use the checkout at this path:_files"
)
_arguments $arguments && return
}
-_swift_package_unedit() {
+_swift_package_config() {
arguments=(
- ":The name of the package to unedit:_swift_dependency"
- "--force[Unedit the package even if it has uncommited and unpushed changes.]"
+ '(-): :->command'
+ '(-)*:: :->arg'
)
_arguments $arguments && return
+ case $state in
+ (command)
+ local modes
+ modes=(
+ 'unset-mirror:Remove an existing mirror'
+ 'set-mirror:Set a mirror for a dependency'
+ 'get-mirror:Print mirror configuration for the given package dependency'
+ )
+ _describe "mode" modes
+ ;;
+ (arg)
+ case ${words[1]} in
+ (unset-mirror)
+ _swift_package_config_unset-mirror
+ ;;
+ (set-mirror)
+ _swift_package_config_set-mirror
+ ;;
+ (get-mirror)
+ _swift_package_config_get-mirror
+ ;;
+ esac
+ ;;
+ esac
}
-_swift_package_update() {
+_swift_package_config_unset-mirror() {
arguments=(
+ "--package-url[The package dependency url]:The package dependency url: "
+ "--mirror-url[The mirror url]:The mirror url: "
)
_arguments $arguments && return
}
-_swift_package_completion-tool() {
+_swift_package_config_set-mirror() {
arguments=(
- ": :{_values '' 'generate-bash-script[generate Bash completion script]' 'generate-zsh-script[generate Bash completion script]' 'list-dependencies[list all dependencies' names]' 'list-executables[list all executables' names]'}"
+ "--package-url[The package dependency url]:The package dependency url: "
+ "--mirror-url[The mirror url]:The mirror url: "
)
_arguments $arguments && return
}
-_swift_package_tools-version() {
+_swift_package_config_get-mirror() {
arguments=(
- "--set[Set tools version of package to the given value]:Set tools version of package to the given value: "
- "--set-current[Set tools version of package to the current tools version in use]"
+ "--package-url[The package dependency url]:The package dependency url: "
)
_arguments $arguments && return
}
-_swift_package_reset() {
+_swift_package_completion-tool() {
arguments=(
+ ": :{_values '' 'generate-bash-script[generate Bash completion script]' 'generate-zsh-script[generate Bash completion script]' 'list-dependencies[list all dependencies' names]' 'list-executables[list all executables' names]'}"
)
_arguments $arguments && return
}
-_swift_package_resolve() {
+_swift_package_clean() {
arguments=(
- ":The name of the package to resolve:_swift_dependency"
- "--version[The version to resolve at]:The version to resolve at: "
- "--branch[The branch to resolve at]:The branch to resolve at: "
- "--revision[The revision to resolve at]:The revision to resolve at: "
)
_arguments $arguments && return
}
@@ -312,19 +394,21 @@ _swift_package_generate-xcodeproj() {
"--output[Path where the Xcode project should be generated]:Path where the Xcode project should be generated:_files"
"--legacy-scheme-generator[Use the legacy scheme generator]"
"--watch[Watch for changes to the Package manifest to regenerate the Xcode project]"
+ "--skip-extra-files[Do not add file references for extra files to the generated Xcode project]"
)
_arguments $arguments && return
}
-_swift_package_fetch() {
+_swift_package_reset() {
arguments=(
)
_arguments $arguments && return
}
-_swift_package_show-dependencies() {
+_swift_package_init() {
arguments=(
- "--format[text|dot|json|flatlist]: :{_values '' 'text[list dependencies using text format]' 'dot[list dependencies using dot format]' 'json[list dependencies using JSON format]'}"
+ "--type[empty|library|executable|system-module]: :{_values '' 'empty[generates an empty project]' 'library[generates project for a dynamic library]' 'executable[generates a project for a cli executable]' 'system-module[generates a project for a system module]'}"
+ "--name[Provide custom package name]:Provide custom package name: "
)
_arguments $arguments && return
}
@@ -346,23 +430,32 @@ _swift_test() {
"--build-path[Specify build/cache directory ]:Specify build/cache directory :_files"
"(--chdir -C)"{--chdir,-C}"[]: :_files"
"--package-path[Change working directory before any other operation]:Change working directory before any other operation:_files"
- "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]'}"
+ "--sanitize[Turn on runtime checks for erroneous behavior]: :{_values '' 'address[enable Address sanitizer]' 'thread[enable Thread sanitizer]' 'undefined[enable Undefined Behavior sanitizer]'}"
"--disable-prefetching[]"
"--skip-update[Skip updating dependencies from their remote during a resolution]"
"--disable-sandbox[Disable using the sandbox when executing subprocesses]"
+ "--disable-package-manifest-caching[Disable caching Package.swift manifests]"
"--version[]"
"--destination[]: :_files"
"(--verbose -v)"{--verbose,-v}"[Increase verbosity of informational output]"
"--no-static-swift-stdlib[Do not link Swift stdlib statically \[default\]]"
"--static-swift-stdlib[Link Swift stdlib statically]"
- "--enable-build-manifest-caching[Enable llbuild manifest caching \[Experimental\]]"
+ "--enable-llbuild-library[Enable building with the llbuild library]"
+ "--force-resolved-versions[]"
+ "--disable-automatic-resolution[Disable automatic resolution if Package.resolved file is out-of-date]"
+ "--enable-index-store[Enable indexing-while-building feature]"
+ "--disable-index-store[Disable indexing-while-building feature]"
+ "--enable-pubgrub-resolver[\[Experimental\] Enable the new Pubgrub dependency resolver]"
+ "--enable-parseable-module-interfaces[]"
"--skip-build[Skip building the test target]"
"(--list-tests -l)"{--list-tests,-l}"[Lists test methods in specifier format]"
"--generate-linuxmain[Generate LinuxMain.swift entries for the package]"
"--parallel[Run the tests in parallel.]"
+ "--num-workers[Number of tests to execute in parallel.]:Number of tests to execute in parallel.: "
"(--specifier -s)"{--specifier,-s}"[]: : "
"--xunit-output[]: :_files"
"--filter[Run test cases matching regular expression, Format: <test-target>.<test-case> or <test-target>.<test-case>/<test>]:Run test cases matching regular expression, Format: <test-target>.<test-case> or <test-target>.<test-case>/<test>: "
+ "--enable-code-coverage[Test with code coverage enabled]"
)
_arguments $arguments && return
}
diff --git a/plugins/tmuxinator/_tmuxinator b/plugins/tmuxinator/_tmuxinator
index 37032f8d8..9ae25ac38 100644
--- a/plugins/tmuxinator/_tmuxinator
+++ b/plugins/tmuxinator/_tmuxinator
@@ -1,3 +1,6 @@
+#compdef tmuxinator mux
+#autoload
+
_tmuxinator() {
local commands projects
commands=(${(f)"$(tmuxinator commands zsh)"})
@@ -17,5 +20,4 @@ _tmuxinator() {
return
}
-compdef _tmuxinator tmuxinator mux
-alias mux="tmuxinator"
+compdef _tmuxinator tmuxinator
diff --git a/plugins/torrent/README.md b/plugins/torrent/README.md
new file mode 100644
index 000000000..079aafcb0
--- /dev/null
+++ b/plugins/torrent/README.md
@@ -0,0 +1,13 @@
+# torrent
+
+This plugin creates a Torrent file based on a [MagnetURI](https://en.wikipedia.org/wiki/Magnet_URI_scheme).
+
+To use it, add `torrent` to the plugins array in your zshrc file.
+
+```zsh
+plugins=(... torrent)
+```
+
+## Plugin commands
+
+* `magnet_to_torrent <MagnetURI>`: creates Torrent file.
diff --git a/plugins/vault/README.md b/plugins/vault/README.md
index 5cdbb16f0..69051d2b2 100644
--- a/plugins/vault/README.md
+++ b/plugins/vault/README.md
@@ -1,18 +1,15 @@
-## Vault (https://www.vaultproject.io) autocomplete plugin
+# Vault plugin
-- Adds autocomplete options for all vault commands.
+Note: this plugin is deprecated. Use the [official autocompletion](https://www.vaultproject.io/docs/commands/index.html#autocompletion) instead.
-####Show help for all commands
-![General Help](https://i.imgur.com/yv5Db1r.png "Help for all commands")
+-------
+Adds autocomplete options for all [vault](https://www.vaultproject.io) commands.
-####Create new Vault token
-![Create token](https://i.imgur.com/xMegNgh.png "Create token")
-
-
-####Enable audit backends
-![Audit backends](https://i.imgur.com/fKLeiSF.png "Audit backends")
-
+To use it, add `vault` to the plugins array in your zshrc file:
+```zsh
+plugins=(... vault)
+```
Crafted with <3 by Valentin Bud ([@valentinbud](https://twitter.com/valentinbud))
diff --git a/plugins/vi-mode/vi-mode.plugin.zsh b/plugins/vi-mode/vi-mode.plugin.zsh
index 93964594b..c91ba05ba 100644
--- a/plugins/vi-mode/vi-mode.plugin.zsh
+++ b/plugins/vi-mode/vi-mode.plugin.zsh
@@ -1,22 +1,31 @@
# Updates editor information when the keymap changes.
function zle-keymap-select() {
+ # update keymap variable for the prompt
+ VI_KEYMAP=$KEYMAP
+
zle reset-prompt
zle -R
}
-# Ensure that the prompt is redrawn when the terminal size changes.
-TRAPWINCH() {
- zle && { zle -R; zle reset-prompt }
+zle -N zle-keymap-select
+
+function vi-accept-line() {
+ VI_KEYMAP=main
+ zle accept-line
}
-zle -N zle-keymap-select
-zle -N edit-command-line
+zle -N vi-accept-line
bindkey -v
+# use custom accept-line widget to update $VI_KEYMAP
+bindkey -M vicmd '^J' vi-accept-line
+bindkey -M vicmd '^M' vi-accept-line
+
# allow v to edit the command line (standard behaviour)
autoload -Uz edit-command-line
+zle -N edit-command-line
bindkey -M vicmd 'v' edit-command-line
# allow ctrl-p, ctrl-n for navigate history (standard behaviour)
@@ -28,8 +37,9 @@ bindkey '^?' backward-delete-char
bindkey '^h' backward-delete-char
bindkey '^w' backward-kill-word
-# allow ctrl-r to perform backward search in history
+# allow ctrl-r and ctrl-s to search the history
bindkey '^r' history-incremental-search-backward
+bindkey '^s' history-incremental-search-forward
# allow ctrl-a and ctrl-e to move to beginning/end of line
bindkey '^a' beginning-of-line
@@ -41,7 +51,7 @@ if [[ "$MODE_INDICATOR" == "" ]]; then
fi
function vi_mode_prompt_info() {
- echo "${${KEYMAP/vicmd/$MODE_INDICATOR}/(main|viins)/}"
+ echo "${${VI_KEYMAP/vicmd/$MODE_INDICATOR}/(main|viins)/}"
}
# define right prompt, if it wasn't defined by a theme
diff --git a/plugins/vscode/README.md b/plugins/vscode/README.md
index 8ee45525a..74b5a45aa 100644
--- a/plugins/vscode/README.md
+++ b/plugins/vscode/README.md
@@ -8,6 +8,21 @@ To start using it, add the `vscode` plugin to your `plugins` array in `~/.zshrc`
plugins=(... vscode)
```
+If you are using [Visual Studio Code Insiders](https://code.visualstudio.com/insiders/),
+add the following line in the oh-my-zsh settings section (between the `ZSH_THEME` and
+the `plugins=()` line). This will make the plugin use the Insiders version instead.
+
+```zsh
+ZSH_THEME=...
+
+# Add this line to use code-insiders instead of code
+VSCODE=code-insiders
+
+plugins=(... vscode)
+
+source $ZSH/oh-my-zsh.sh
+```
+
## Common aliases
| Alias | Command | Description |
diff --git a/plugins/vscode/vscode.plugin.zsh b/plugins/vscode/vscode.plugin.zsh
index 902c23ecf..4c15df2b0 100644
--- a/plugins/vscode/vscode.plugin.zsh
+++ b/plugins/vscode/vscode.plugin.zsh
@@ -1,19 +1,22 @@
# VScode zsh plugin
# author: https://github.com/MarsiBarsi
-alias vsc='code .'
-alias vsca='code --add'
-alias vscd='code --diff'
-alias vscg='code --goto'
-alias vscn='code --new-window'
-alias vscr='code --reuse-window'
-alias vscw='code --wait'
-alias vscu='code --user-data-dir'
+# Use main Visual Studio Code version by default
+: ${VSCODE:=code}
-alias vsced='code --extensions-dir'
-alias vscie='code --install-extension'
-alias vscue='code --uninstall-extension'
+alias vsc="$VSCODE ."
+alias vsca="$VSCODE --add"
+alias vscd="$VSCODE --diff"
+alias vscg="$VSCODE --goto"
+alias vscn="$VSCODE --new-window"
+alias vscr="$VSCODE --reuse-window"
+alias vscw="$VSCODE --wait"
+alias vscu="$VSCODE --user-data-dir"
-alias vscv='code --verbose'
-alias vscl='code --log'
-alias vscde='code --disable-extensions'
+alias vsced="$VSCODE --extensions-dir"
+alias vscie="$VSCODE --install-extension"
+alias vscue="$VSCODE --uninstall-extension"
+
+alias vscv="$VSCODE --verbose"
+alias vscl="$VSCODE --log"
+alias vscde="$VSCODE --disable-extensions"
diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template
index abd2c8812..3cc5ad46c 100644
--- a/templates/zshrc.zsh-template
+++ b/templates/zshrc.zsh-template
@@ -26,9 +26,15 @@ ZSH_THEME="robbyrussell"
# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"
+# Uncomment the following line to automatically update without prompting.
+# DISABLE_UPDATE_PROMPT="true"
+
# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13
+# Uncomment the following line if pasting URLs and other text is messed up.
+# DISABLE_MAGIC_FUNCTIONS=true
+
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
@@ -83,9 +89,6 @@ source $ZSH/oh-my-zsh.sh
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
-# ssh
-# export SSH_KEY_PATH="~/.ssh/rsa_id"
-
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
diff --git a/themes/3den.zsh-theme b/themes/3den.zsh-theme
index 1d2c7db7f..ae3a88659 100644
--- a/themes/3den.zsh-theme
+++ b/themes/3den.zsh-theme
@@ -1,4 +1,4 @@
-PROMPT=$'%{$fg[white]%}$(~/.rvm/bin/rvm-prompt) %{$fg_bold[cyan]%}%~%{$reset_color%}$(git_prompt_info) %{$fg[cyan]%}%D{[%I:%M:%S]}\
+PROMPT=$'%{$fg[white]%}$(ruby_prompt_info) %{$fg_bold[cyan]%}%~%{$reset_color%}$(git_prompt_info) %{$fg[cyan]%}%D{[%I:%M:%S]}\
%{$fg_bold[green]%}%n$%{$reset_color%} '
ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg[white]%}("
diff --git a/themes/agnoster.zsh-theme b/themes/agnoster.zsh-theme
index 3c30a9e11..518a14a37 100644
--- a/themes/agnoster.zsh-theme
+++ b/themes/agnoster.zsh-theme
@@ -152,7 +152,6 @@ prompt_bzr() {
if [[ $status_all -gt 0 ]] ; then
prompt_segment yellow black
echo -n "bzr@"$revision
-
else
prompt_segment green black
echo -n "bzr@"$revision
diff --git a/themes/alanpeabody.zsh-theme b/themes/alanpeabody.zsh-theme
index 4a1b1b386..1de90e57b 100644
--- a/themes/alanpeabody.zsh-theme
+++ b/themes/alanpeabody.zsh-theme
@@ -1,17 +1,10 @@
local user='%{$fg[magenta]%}%n@%{$fg[magenta]%}%m%{$reset_color%}'
local pwd='%{$fg[blue]%}%~%{$reset_color%}'
-local rvm=''
-if which rvm-prompt &> /dev/null; then
- rvm='%{$fg[green]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
-else
- if which rbenv &> /dev/null; then
- rvm='%{$fg[green]%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
- fi
-fi
local return_code='%(?..%{$fg[red]%}%? ↵%{$reset_color%})'
local git_branch='$(git_prompt_status)%{$reset_color%}$(git_prompt_info)%{$reset_color%}'
+ZSH_THEME_RVM_PROMPT_OPTIONS="i v g"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[green]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY=""
@@ -24,5 +17,8 @@ ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[magenta]%} ➜"
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[yellow]%} ═"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[cyan]%} ✭"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[green]%}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"
+
PROMPT="${user} ${pwd}$ "
-RPROMPT="${return_code} ${git_branch} ${rvm}"
+RPROMPT="${return_code} ${git_branch} \$(ruby_prompt_info)"
diff --git a/themes/amuse.zsh-theme b/themes/amuse.zsh-theme
index d3f15ace5..3f7ec0bc5 100644
--- a/themes/amuse.zsh-theme
+++ b/themes/amuse.zsh-theme
@@ -1,17 +1,5 @@
# vim:ft=zsh ts=2 sw=2 sts=2
-rvm_current() {
- rvm current 2>/dev/null
-}
-
-rbenv_version() {
- rbenv version 2>/dev/null | awk '{print $1}'
-}
-
-PROMPT='
-%{$fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ⌚ %{$fg_bold[red]%}%*%{$reset_color%}
-$ '
-
# Must use Powerline font, for \uE0A0 to render.
ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[magenta]%}\uE0A0 "
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
@@ -19,11 +7,12 @@ ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}!"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[green]%}?"
ZSH_THEME_GIT_PROMPT_CLEAN=""
-if [ -e ~/.rvm/bin/rvm-prompt ]; then
- RPROMPT='%{$fg_bold[red]%}‹$(rvm_current)›%{$reset_color%}'
-else
- if which rbenv &> /dev/null; then
- RPROMPT='%{$fg_bold[red]%}$(rbenv_version)%{$reset_color%}'
- fi
-fi
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg_bold[red]%}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"
+
+PROMPT='
+%{$fg_bold[green]%}%~%{$reset_color%}$(git_prompt_info) ⌚ %{$fg_bold[red]%}%*%{$reset_color%}
+$ '
+
+RPROMPT='$(ruby_prompt_info)'
diff --git a/themes/bira.zsh-theme b/themes/bira.zsh-theme
index 675483996..d00f72f5d 100644
--- a/themes/bira.zsh-theme
+++ b/themes/bira.zsh-theme
@@ -1,30 +1,32 @@
# ZSH Theme - Preview: https://gyazo.com/8becc8a7ed5ab54a0262a470555c3eed.png
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
-
if [[ $UID -eq 0 ]]; then
- local user_host='%{$terminfo[bold]$fg[red]%}%n@%m%{$reset_color%}'
+ local user_host='%{$terminfo[bold]$fg[red]%}%n@%m %{$reset_color%}'
local user_symbol='#'
else
- local user_host='%{$terminfo[bold]$fg[green]%}%n@%m%{$reset_color%}'
+ local user_host='%{$terminfo[bold]$fg[green]%}%n@%m %{$reset_color%}'
local user_symbol='$'
fi
-local current_dir='%{$terminfo[bold]$fg[blue]%}%~%{$reset_color%}'
-local rvm_ruby=''
-if which rvm-prompt &> /dev/null; then
- rvm_ruby='%{$fg[red]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
-else
- if which rbenv &> /dev/null; then
- rvm_ruby='%{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
- fi
-fi
-local git_branch='$(git_prompt_info)%{$reset_color%}'
+local current_dir='%{$terminfo[bold]$fg[blue]%}%~ %{$reset_color%}'
+local git_branch='$(git_prompt_info)'
+local rvm_ruby='$(ruby_prompt_info)'
+local venv_prompt='$(virtualenv_prompt_info)'
-PROMPT="╭─${user_host} ${current_dir} ${rvm_ruby} ${git_branch}
+ZSH_THEME_RVM_PROMPT_OPTIONS="i v g"
+
+PROMPT="╭─${venv_prompt}${user_host}${current_dir}${rvm_ruby}${git_branch}
╰─%B${user_symbol}%b "
-RPS1="%B${return_code}%b"
+RPROMPT="%B${return_code}%b"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="› %{$reset_color%}"
+
+ZSH_THEME_VIRTUAL_ENV_PROMPT_PREFIX="%{$fg[green]%}‹"
+ZSH_THEME_VIRTUAL_ENV_PROMPT_SUFFIX="› %{$reset_color%}"
+ZSH_THEME_VIRTUALENV_PREFIX=$ZSH_THEME_VIRTUAL_ENV_PROMPT_PREFIX
+ZSH_THEME_VIRTUALENV_SUFFIX=$ZSH_THEME_VIRTUAL_ENV_PROMPT_SUFFIX
diff --git a/themes/crunch.zsh-theme b/themes/crunch.zsh-theme
index 2fc066381..8278661ab 100644
--- a/themes/crunch.zsh-theme
+++ b/themes/crunch.zsh-theme
@@ -29,13 +29,9 @@ ZSH_THEME_GIT_PROMPT_DIRTY=" $CRUNCH_GIT_DIRTY_COLOR✗"
# Our elements:
CRUNCH_TIME_="$CRUNCH_BRACKET_COLOR{$CRUNCH_TIME_COLOR%T$CRUNCH_BRACKET_COLOR}%{$reset_color%}"
-if [ -e ~/.rvm/bin/rvm-prompt ]; then
- CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(~/.rvm/bin/rvm-prompt i v g)#ruby-}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
-else
- if which rbenv &> /dev/null; then
- CRUNCH_RVM_="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR\${\$(rbenv version | sed -e 's/ (set.*$//' -e 's/^ruby-//')}$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
- fi
-fi
+ZSH_THEME_RUBY_PROMPT_PREFIX="$CRUNCH_BRACKET_COLOR"["$CRUNCH_RVM_COLOR"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="$CRUNCH_BRACKET_COLOR"]"%{$reset_color%}"
+CRUNCH_RVM_='$(ruby_prompt_info)'
CRUNCH_DIR_="$CRUNCH_DIR_COLOR%~\$(git_prompt_info) "
CRUNCH_PROMPT="$CRUNCH_BRACKET_COLOR➭ "
diff --git a/themes/dallas.zsh-theme b/themes/dallas.zsh-theme
index e9e86177b..d6c417fc3 100644
--- a/themes/dallas.zsh-theme
+++ b/themes/dallas.zsh-theme
@@ -2,14 +2,6 @@
# Grab the current date (%D) and time (%T) wrapped in {}: {%D %T}
DALLAS_CURRENT_TIME_="%{$fg[white]%}{%{$fg[yellow]%}%D %T%{$fg[white]%}}%{$reset_color%}"
-# Grab the current version of ruby in use (via RVM): [ruby-1.8.7]
-if [ -e ~/.rvm/bin/rvm-prompt ]; then
- DALLAS_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[magenta]%}\$(~/.rvm/bin/rvm-prompt i v)%{$fg[white]%}]%{$reset_color%}"
-else
- if which rbenv &> /dev/null; then
- DALLAS_CURRENT_RUBY_="%{$fg[white]%}[%{$fg[magenta]%}\$(rbenv version | sed -e 's/ (set.*$//')%{$fg[white]%}]%{$reset_color%}"
- fi
-fi
# Grab the current machine name: muscato
DALLAS_CURRENT_MACH_="%{$fg[green]%}%m%{$fg[white]%}:%{$reset_color%}"
# Grab the current filepath, use shortcuts: ~/Desktop
@@ -28,5 +20,8 @@ ZSH_THEME_GIT_PROMPT_CLEAN=""
# Add 3 cyan ✗s if this branch is diiirrrty! Dirty branch!
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[cyan]%}✗✗✗"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[white]%}[%{$fg[magenta]%}"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="%{$fg[white]%}]%{$reset_color%}"
+
# Put it all together!
-PROMPT="$DALLAS_CURRENT_TIME_$DALLAS_CURRENT_RUBY_$DALLAS_CURRENT_MACH_$DALLAS_CURRENT_LOCA_ $DALLAS_CURRENT_USER_$DALLAS_PROMPT_CHAR_ "
+PROMPT="$DALLAS_CURRENT_TIME_\$(ruby_prompt_info)$DALLAS_CURRENT_MACH_$DALLAS_CURRENT_LOCA_ $DALLAS_CURRENT_USER_$DALLAS_PROMPT_CHAR_ "
diff --git a/themes/fino-time.zsh-theme b/themes/fino-time.zsh-theme
index 9caebc69e..5679e9f37 100644
--- a/themes/fino-time.zsh-theme
+++ b/themes/fino-time.zsh-theme
@@ -25,11 +25,7 @@ function box_name {
}
-rvm_ruby=''
-if type rvm-prompt &>/dev/null; then
- rvm_ruby='using%{$FG[243]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
-fi
-
+local rvm_ruby='using%{$FG[243]%}$(ruby_prompt_info)'
local git_info='$(git_prompt_info)'
@@ -40,3 +36,5 @@ ZSH_THEME_GIT_PROMPT_PREFIX=" %{$FG[239]%}on%{$reset_color%} %{$fg[255]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$FG[202]%}✘✘✘"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$FG[040]%}✔"
+ZSH_THEME_RUBY_PROMPT_PREFIX="‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"
diff --git a/themes/fino.zsh-theme b/themes/fino.zsh-theme
index 28d6cc2ec..1d8bb30e1 100644
--- a/themes/fino.zsh-theme
+++ b/themes/fino.zsh-theme
@@ -20,15 +20,7 @@ function box_name {
[ -f ~/.box-name ] && cat ~/.box-name || echo ${SHORT_HOST:-$HOST}
}
-local ruby_env=''
-if which rvm-prompt &> /dev/null; then
- ruby_env='using%{$FG[243]%} ‹$(rvm-prompt i v g)›%{$reset_color%}'
-else
- if which rbenv &> /dev/null; then
- ruby_env='using%{$FG[243]%} ‹$(rbenv version-name)›%{$reset_color%}'
- fi
-fi
-
+local ruby_env='using%{$FG[243]%} $(ruby_prompt_info)'
local git_info='$(git_prompt_info)'
local prompt_char='$(prompt_char)'
@@ -40,3 +32,5 @@ ZSH_THEME_GIT_PROMPT_PREFIX=" %{$FG[239]%}on%{$reset_color%} %{$fg[255]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$FG[202]%}✘✘✘"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$FG[040]%}✔"
+ZSH_THEME_RUBY_PROMPT_PREFIX="‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"
diff --git a/themes/fishy.zsh-theme b/themes/fishy.zsh-theme
index 83bd455b5..00a60f45b 100644
--- a/themes/fishy.zsh-theme
+++ b/themes/fishy.zsh-theme
@@ -14,7 +14,7 @@ PROMPT='%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>)
PROMPT2='%{$fg[red]%}\ %{$reset_color%}'
local return_status="%{$fg_bold[red]%}%(?..%?)%{$reset_color%}"
-RPROMPT='${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'
+RPROMPT="${RPROMPT}"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'
ZSH_THEME_GIT_PROMPT_PREFIX=" "
ZSH_THEME_GIT_PROMPT_SUFFIX=""
diff --git a/themes/frontcube.zsh-theme b/themes/frontcube.zsh-theme
index 539e744f8..f9488d0ac 100644
--- a/themes/frontcube.zsh-theme
+++ b/themes/frontcube.zsh-theme
@@ -1,12 +1,13 @@
-local rvm="%{$fg[green]%}[$(rvm-prompt i v g)]%{$reset_color%}"
PROMPT='
%{$fg_bold[gray]%}%~%{$fg_bold[blue]%}%{$fg_bold[blue]%} % %{$reset_color%}
%{$fg[green]%}➞ %{$reset_color%'
-RPROMPT='$(git_prompt_info) ${rvm}'
+RPROMPT='$(git_prompt_info) $(ruby_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}[git:"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[red]%}✖ %{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}] %{$fg[green]%}✔%{$reset_color%}"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[green]%}["
+ZSH_THEME_RUBY_PROMPT_SUFFIX="]%{$reset_color%}"
diff --git a/themes/gallois.zsh-theme b/themes/gallois.zsh-theme
index 515325e38..e6c2d8142 100644
--- a/themes/gallois.zsh-theme
+++ b/themes/gallois.zsh-theme
@@ -14,8 +14,8 @@ git_custom_status() {
}
# RVM component of prompt
-ZSH_THEME_RVM_PROMPT_PREFIX="%{$fg[red]%}["
-ZSH_THEME_RVM_PROMPT_SUFFIX="]%{$reset_color%}"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}["
+ZSH_THEME_RUBY_PROMPT_SUFFIX="]%{$reset_color%}"
# Combine it all into a final right-side prompt
RPS1='$(git_custom_status)$(ruby_prompt_info) $EPS1'
diff --git a/themes/gnzh.zsh-theme b/themes/gnzh.zsh-theme
index c763ef3c6..1e6c4e93b 100644
--- a/themes/gnzh.zsh-theme
+++ b/themes/gnzh.zsh-theme
@@ -29,21 +29,15 @@ local return_code="%(?..%F{red}%? ↵%f)"
local user_host="${PR_USER}%F{cyan}@${PR_HOST}"
local current_dir="%B%F{blue}%~%f%b"
-local rvm_ruby=''
-if ${HOME}/.rvm/bin/rvm-prompt &> /dev/null; then # detect user-local rvm installation
- rvm_ruby='%F{red}‹$(${HOME}/.rvm/bin/rvm-prompt i v g s)›%f'
-elif which rvm-prompt &> /dev/null; then # detect system-wide rvm installation
- rvm_ruby='%F{red}‹$(rvm-prompt i v g s)›%f'
-elif which rbenv &> /dev/null; then # detect Simple Ruby Version Management
- rvm_ruby='%F{red}‹$(rbenv version | sed -e "s/ (set.*$//")›%f'
-fi
local git_branch='$(git_prompt_info)'
-PROMPT="╭─${user_host} ${current_dir} ${rvm_ruby} ${git_branch}
+PROMPT="╭─${user_host} ${current_dir} \$(ruby_prompt_info) ${git_branch}
╰─$PR_PROMPT "
RPROMPT="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%F{yellow}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %f"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%F{red}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%f"
}
diff --git a/themes/itchy.zsh-theme b/themes/itchy.zsh-theme
index e1f2d56e2..41a42e88c 100644
--- a/themes/itchy.zsh-theme
+++ b/themes/itchy.zsh-theme
@@ -7,10 +7,12 @@ local pwd="%{$fg[yellow]%}%~%{$reset_color%}"
PROMPT='${user}${host} ${pwd}
${smiley} '
-RPROMPT='$(rvm-prompt || rbenv version) %{$fg[white]%}$(git_prompt_info)%{$reset_color%}'
+RPROMPT='$(ruby_prompt_info) %{$fg[white]%}$(git_prompt_info)%{$reset_color%}'
ZSH_THEME_GIT_PROMPT_PREFIX=""
ZSH_THEME_GIT_PROMPT_SUFFIX=""
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%} ✗%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[green]%} ✔%{$reset_color%}"
+ZSH_THEME_RUBY_PROMPT_PREFIX=""
+ZSH_THEME_RUBY_PROMPT_SUFFIX=""
diff --git a/themes/jaischeema.zsh-theme b/themes/jaischeema.zsh-theme
index da1dd1e5d..50d2bc4a5 100644
--- a/themes/jaischeema.zsh-theme
+++ b/themes/jaischeema.zsh-theme
@@ -1,16 +1,12 @@
# jaischeema.zsh-theme
PROMPT='%{$fg_bold[magenta]%}%m%{$reset_color%} at %{$fg_bold[green]%}%~%{$reset_color%} %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}%{$fg[red]%}❯%{$reset_color%} '
+RPROMPT='$(ruby_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="±(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}) "
-if which rbenv &> /dev/null; then
- RPROMPT='%{$fg[red]%}$(rbenv version | sed -e "s/ (set.*$//")%{$reset_color%}'
-else
- if which rvm-prompt &> /dev/null; then
- RPROMPT='%{$fg[red]%}$(rvm-prompt)%{$reset_color%}'
- fi
-fi
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="%{$reset_color%}"
diff --git a/themes/macovsky-ruby.zsh-theme b/themes/macovsky-ruby.zsh-theme
index abda6232c..d3ee200a9 100644..120000
--- a/themes/macovsky-ruby.zsh-theme
+++ b/themes/macovsky-ruby.zsh-theme
@@ -1,15 +1 @@
-# ZSH Theme - Preview: https://i.gyazo.com/8becc8a7ed5ab54a0262a470555c3eed.png
-local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
-
-if [ -e ~/.rvm/bin/rvm-prompt ]; then
- PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
-else
- if which rbenv &> /dev/null; then
- PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
- fi
-fi
-
-RPS1="${return_code}"
-
-ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
-ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
+macovsky.zsh-theme \ No newline at end of file
diff --git a/themes/macovsky.zsh-theme b/themes/macovsky.zsh-theme
index d3f7d16b4..f527e5861 100644
--- a/themes/macovsky.zsh-theme
+++ b/themes/macovsky.zsh-theme
@@ -1,14 +1,12 @@
# ZSH Theme - Preview: https://i.gyazo.com/8becc8a7ed5ab54a0262a470555c3eed.png
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
-if [ -e ~/.rvm/bin/rvm-prompt ]; then
- PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(~/.rvm/bin/rvm-prompt i v)› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
-else
- if which rbenv &> /dev/null; then
- PROMPT='%{$fg[green]%}%~%{$reset_color%} %{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")› %{$reset_color%} $(git_prompt_info)%{$reset_color%}%B$%b '
- fi
-fi
-RPS1="${return_code}"
+PROMPT='%{$fg[green]%}%~%{$reset_color%} $(ruby_prompt_info) $(git_prompt_info)%{$reset_color%}%B$%b '
+RPROMPT="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
+
+
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="› %{$reset_color%}"
diff --git a/themes/mira.zsh-theme b/themes/mira.zsh-theme
index e6c952998..a7c60359c 100644
--- a/themes/mira.zsh-theme
+++ b/themes/mira.zsh-theme
@@ -4,22 +4,13 @@ local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
local user_host='%{$terminfo[bold]$fg[green]%}%n@%m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[blue]%} %~%{$reset_color%}'
-local rvm_ruby=''
-if which rvm-prompt &> /dev/null; then
- rvm_ruby='%{$fg[red]%}‹$(rvm-prompt i v g)›%{$reset_color%}'
-else
- if which rbenv &> /dev/null; then
- rvm_ruby='%{$fg[red]%}‹$(rbenv version | sed -e "s/ (set.*$//")›%{$reset_color%}'
- fi
-fi
+local nvm_node='%{$fg[green]%}‹node-$(nvm_prompt_info)›%{$reset_color%}'
-local nvm_node=''
-nvm_node='%{$fg[green]%}‹node-$(nvm_prompt_info)›%{$reset_color%}'
+local jenv_java='%{$fg[blue]%}‹$(jenv_prompt_info)›%{$reset_color%}'
-local jenv_java=''
-jenv_java='%{$fg[blue]%}‹$(jenv_prompt_info)›%{$reset_color%}'
+local git_branch='$(git_prompt_info)'
-local git_branch='$(git_prompt_info)%{$reset_color%}'
+local rvm_ruby='$(ruby_prompt_info)'
PROMPT="╭─${user_host} ${current_dir} ${nvm_node} ${rvm_ruby} ${jenv_java} ${git_branch}
╰─%B$%b "
@@ -27,3 +18,6 @@ RPS1="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}("
ZSH_THEME_GIT_PROMPT_SUFFIX=") %{$reset_color%}"
+
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[red]%}‹"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="›%{$reset_color%}"
diff --git a/themes/pure.zsh-theme b/themes/pure.zsh-theme
deleted file mode 100644
index 98c1312af..000000000
--- a/themes/pure.zsh-theme
+++ /dev/null
@@ -1,10 +0,0 @@
-print -P '%F{yellow}'Oh My Zsh pure theme:
-cat <<-EOF
-
- The pure theme has been renamed as 'refined' as per the original author's
- request. Change your ZSH_THEME to 'refined' to avoid seeing this warning.
-
-EOF
-print -P '%f'
-
-source ${0:h:A}/refined.zsh-theme
diff --git a/themes/refined.zsh-theme b/themes/refined.zsh-theme
index 0e5681cc7..2a4188c9d 100644
--- a/themes/refined.zsh-theme
+++ b/themes/refined.zsh-theme
@@ -72,6 +72,7 @@ preexec() {
precmd() {
vcs_info # Get version control info before we start outputting stuff
print -P "\n$(repo_information) %F{yellow}$(cmd_exec_time)%f"
+ unset cmd_timestamp #Reset cmd exec time.
}
# Define prompts
diff --git a/themes/simonoff.zsh-theme b/themes/simonoff.zsh-theme
index 63ce4261b..ef91c5ee3 100644
--- a/themes/simonoff.zsh-theme
+++ b/themes/simonoff.zsh-theme
@@ -23,7 +23,7 @@ function precmd {
local promptsize=${#${(%):---(%n@%M:%l)---()}}
local pwdsize=${#${(%):-%~}}
local gitbranch="$(git_prompt_info)"
- local rvmprompt="$(rvm_prompt_info)"
+ local rvmprompt="$(ruby_prompt_info)"
local gitbranchsize=${#${gitbranch:-''}}
local rvmpromptsize=${#${rvmprompt:-''}}
@@ -90,8 +90,8 @@ setprompt () {
ZSH_THEME_GIT_PROMPT_SUFFIX="]"
###
# Modify RVM prompt
- ZSH_THEME_RVM_PROMPT_PREFIX=" ["
- ZSH_THEME_RVM_PROMPT_SUFFIX="]"
+ ZSH_THEME_RUBY_PROMPT_PREFIX=" ["
+ ZSH_THEME_RUBY_PROMPT_SUFFIX="]"
###
diff --git a/themes/suvash.zsh-theme b/themes/suvash.zsh-theme
index 1680973df..850476cdf 100644
--- a/themes/suvash.zsh-theme
+++ b/themes/suvash.zsh-theme
@@ -8,20 +8,7 @@ function virtualenv_info {
[[ -n "$VIRTUAL_ENV" ]] && echo '('${VIRTUAL_ENV:t}') '
}
-function ruby_prompt {
- if (( $+commands[rvm-prompt] )); then
- print -n $ZSH_THEME_RUBY_PROMPT_PREFIX
- print -n $(~/.rvm/bin/rvm-prompt)
- print -n $ZSH_THEME_RUBY_PROMPT_SUFFIX
- elif (( $+commands[rbenv] )); then
- print -n $ZSH_THEME_RUBY_PROMPT_PREFIX
- print -n $(rbenv version | sed -e "s/ (set.*$//")
- print -n $ZSH_THEME_RUBY_PROMPT_SUFFIX
- fi
- return 0
-}
-
-PROMPT='%F{magenta}%n%f at %F{yellow}%m%f in %B%F{green}%~%f%b$(git_prompt_info)$(ruby_prompt)
+PROMPT='%F{magenta}%n%f at %F{yellow}%m%f in %B%F{green}%~%f%b$(git_prompt_info)$(ruby_prompt_info)
$(virtualenv_info) $(prompt_char) '
ZSH_THEME_GIT_PROMPT_PREFIX=' on %F{magenta}'
diff --git a/themes/wedisagree.zsh-theme b/themes/wedisagree.zsh-theme
index 9bdbce40d..07006ecd9 100644
--- a/themes/wedisagree.zsh-theme
+++ b/themes/wedisagree.zsh-theme
@@ -28,7 +28,7 @@ PROMPT='%{$fg[magenta]%}[%c] %{$reset_color%}'
RPROMPT='${time} %{$fg[magenta]%}$(git_prompt_info)%{$reset_color%}$(git_prompt_status)%{$reset_color%}$(git_prompt_ahead)%{$reset_color%}'
# Add this at the start of RPROMPT to include rvm info showing ruby-version@gemset-name
-# %{$fg[yellow]%}$(~/.rvm/bin/rvm-prompt)%{$reset_color%}
+# $(ruby_prompt_info)
# local time, color coded by last return code
time_enabled="%(?.%{$fg[green]%}.%{$fg[red]%})%*%{$reset_color%}"
@@ -48,6 +48,9 @@ ZSH_THEME_GIT_PROMPT_RENAMED="%{$fg[blue]%} ➜" # ⓡ ⑄
ZSH_THEME_GIT_PROMPT_UNMERGED="%{$fg[magenta]%} ♒" # ⓤ ⑊
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[blue]%} 𝝙"
+ZSH_THEME_RUBY_PROMPT_PREFIX="%{$fg[yellow]%}"
+ZSH_THEME_RUBY_PROMPT_SUFFIX="%{$reset_color%}"
+
# More symbols to choose from:
# ☀ ✹ ☄ ♆ ♀ ♁ ♐ ♇ ♈ ♉ ♚ ♛ ♜ ♝ ♞ ♟ ♠ ♣ ⚢ ⚲ ⚳ ⚴ ⚥ ⚤ ⚦ ⚒ ⚑ ⚐ ♺ ♻ ♼ ☰ ☱ ☲ ☳ ☴ ☵ ☶ ☷
# ✡ ✔ ✖ ✚ ✱ ✤ ✦ ❤ ➜ ➟ ➼ ✂ ✎ ✐ ⨀ ⨁ ⨂ ⨍ ⨎ ⨏ ⨷ ⩚ ⩛ ⩡ ⩱ ⩲ ⩵ ⩶ ⨠
diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh
index 05b31e8d4..c8dedcf77 100644
--- a/tools/check_for_upgrade.sh
+++ b/tools/check_for_upgrade.sh
@@ -34,7 +34,9 @@ if mkdir "$ZSH/log/update.lock" 2>/dev/null; then
. ${ZSH_CACHE_DIR}/.zsh-update
if [[ -z "$LAST_EPOCH" ]]; then
- _update_zsh_update && return 0
+ _update_zsh_update
+ rmdir $ZSH/log/update.lock # TODO: fix later
+ return 0
fi
epoch_diff=$(($(_current_epoch) - $LAST_EPOCH))
diff --git a/tools/install.sh b/tools/install.sh
index e2b33f640..17b70bfea 100755
--- a/tools/install.sh
+++ b/tools/install.sh
@@ -1,114 +1,269 @@
+#!/bin/sh
+#
+# This script should be run via curl:
+# sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+# or wget:
+# sh -c "$(wget -qO- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+#
+# As an alternative, you can first download the install script and run it afterwards:
+# wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh
+# sh install.sh
+#
+# You can tweak the install behavior by setting variables when running the script. For
+# example, to change the path to the Oh My Zsh repository:
+# ZSH=~/.zsh sh install.sh
+#
+# Respects the following environment variables:
+# ZSH - path to the Oh My Zsh repository folder (default: $HOME/.oh-my-zsh)
+# REPO - name of the GitHub repo to install from (default: robbyrussell/oh-my-zsh)
+# REMOTE - full remote URL of the git repo to install (default: GitHub via HTTPS)
+# BRANCH - branch to check out immediately after install (default: master)
+#
+# Other options:
+# CHSH - 'no' means the installer will not change the default shell (default: yes)
+# RUNZSH - 'no' means the installer will not run zsh after the install (default: yes)
+#
+# You can also pass some arguments to the install script to set some these options:
+# --skip-chsh: has the same behavior as setting CHSH to 'no'
+# --unattended: sets both CHSH and RUNZSH to 'no'
+# For example:
+# sh install.sh --unattended
+#
+set -e
+
+# Default settings
+ZSH=${ZSH:-~/.oh-my-zsh}
+REPO=${REPO:-robbyrussell/oh-my-zsh}
+REMOTE=${REMOTE:-https://github.com/${REPO}.git}
+BRANCH=${BRANCH:-master}
+
+# Other options
+CHSH=${CHSH:-yes}
+RUNZSH=${RUNZSH:-yes}
+
+
+command_exists() {
+ command -v "$@" >/dev/null 2>&1
+}
+
+error() {
+ echo ${RED}"Error: $@"${RESET} >&2
+}
+
+setup_color() {
+ # Only use colors if connected to a terminal
+ if [ -t 1 ]; then
+ RED=$(printf '\033[31m')
+ GREEN=$(printf '\033[32m')
+ YELLOW=$(printf '\033[33m')
+ BLUE=$(printf '\033[34m')
+ BOLD=$(printf '\033[1m')
+ RESET=$(printf '\033[m')
+ else
+ RED=""
+ GREEN=""
+ YELLOW=""
+ BLUE=""
+ BOLD=""
+ RESET=""
+ fi
+}
+
+setup_ohmyzsh() {
+ # Prevent the cloned repository from having insecure permissions. Failing to do
+ # so causes compinit() calls to fail with "command not found: compdef" errors
+ # for users with insecure umasks (e.g., "002", allowing group writability). Note
+ # that this will be ignored under Cygwin by default, as Windows ACLs take
+ # precedence over umasks except for filesystems mounted with option "noacl".
+ umask g-w,o-w
+
+ echo "${BLUE}Cloning Oh My Zsh...${RESET}"
+
+ command_exists git || {
+ error "git is not installed"
+ exit 1
+ }
+
+ if [ "$OSTYPE" = cygwin ] && git --version | grep -q msysgit; then
+ error "Windows/MSYS Git is not supported on Cygwin"
+ error "Make sure the Cygwin git package is installed and is first on the \$PATH"
+ exit 1
+ fi
+
+ git clone --depth=1 --branch "$BRANCH" "$REMOTE" "$ZSH" || {
+ error "git clone of oh-my-zsh repo failed"
+ exit 1
+ }
+
+ echo
+}
+
+setup_zshrc() {
+ # Keep most recent old .zshrc at .zshrc.pre-oh-my-zsh, and older ones
+ # with datestamp of installation that moved them aside, so we never actually
+ # destroy a user's original zshrc
+ echo "${BLUE}Looking for an existing zsh config...${RESET}"
+
+ # Must use this exact name so uninstall.sh can find it
+ OLD_ZSHRC=~/.zshrc.pre-oh-my-zsh
+ if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
+ if [ -e "$OLD_ZSHRC" ]; then
+ OLD_OLD_ZSHRC="${OLD_ZSHRC}-$(date +%Y-%m-%d_%H-%M-%S)"
+ if [ -e "$OLD_OLD_ZSHRC" ]; then
+ error "$OLD_OLD_ZSHRC exists. Can't back up ${OLD_ZSHRC}"
+ error "re-run the installer again in a couple of seconds"
+ exit 1
+ fi
+ mv "$OLD_ZSHRC" "${OLD_OLD_ZSHRC}"
+
+ echo "${YELLOW}Found old ~/.zshrc.pre-oh-my-zsh." \
+ "${GREEN}Backing up to ${OLD_OLD_ZSHRC}${RESET}"
+ fi
+ echo "${YELLOW}Found ~/.zshrc.${RESET} ${GREEN}Backing up to ${OLD_ZSHRC}${RESET}"
+ mv ~/.zshrc "$OLD_ZSHRC"
+ fi
+
+ echo "${GREEN}Using the Oh My Zsh template file and adding it to ~/.zshrc.${RESET}"
+
+ cp "$ZSH/templates/zshrc.zsh-template" ~/.zshrc
+ sed "/^export ZSH=/ c\\
+export ZSH=\"$ZSH\"
+" ~/.zshrc > ~/.zshrc-omztemp
+ mv -f ~/.zshrc-omztemp ~/.zshrc
+
+ echo
+}
+
+setup_shell() {
+ # Skip setup if the user wants or stdin is closed (not running interactively).
+ if [ $CHSH = no ]; then
+ return
+ fi
+
+ # If this user's login shell is already "zsh", do not attempt to switch.
+ if [ "$(basename "$SHELL")" = "zsh" ]; then
+ return
+ fi
+
+ # If this platform doesn't provide a "chsh" command, bail out.
+ if ! command_exists chsh; then
+ cat <<-EOF
+ I can't change your shell automatically because this system does not have chsh.
+ ${BLUE}Please manually change your default shell to zsh${RESET}
+ EOF
+ return
+ fi
+
+ echo "${BLUE}Time to change your default shell to zsh:${RESET}"
+
+ # Prompt for user choice on changing the default login shell
+ printf "${YELLOW}Do you want to change your default shell to zsh? [Y/n]${RESET} "
+ read opt
+ case $opt in
+ y*|Y*|"") echo "Changing the shell..." ;;
+ n*|N*) echo "Shell change skipped."; return ;;
+ *) echo "Invalid choice. Shell change skipped."; return ;;
+ esac
+
+ # Test for the right location of the "shells" file
+ if [ -f /etc/shells ]; then
+ shells_file=/etc/shells
+ elif [ -f /usr/share/defaults/etc/shells ]; then # Solus OS
+ shells_file=/usr/share/defaults/etc/shells
+ else
+ error "could not find /etc/shells file. Change your default shell manually."
+ return
+ fi
+
+ # Get the path to the right zsh binary
+ # 1. Use the most preceding one based on $PATH, then check that it's in the shells file
+ # 2. If that fails, get a zsh path from the shells file, then check it actually exists
+ if ! zsh=$(which zsh) || ! grep -qx "$zsh" "$shells_file"; then
+ if ! zsh=$(grep '^/.*/zsh$' "$shells_file" | tail -1) || [ ! -f "$zsh" ]; then
+ error "no zsh binary found or not present in '$shells_file'"
+ error "change your default shell manually."
+ return
+ fi
+ fi
+
+ # We're going to change the default shell, so back up the current one
+ if [ -n $SHELL ]; then
+ echo $SHELL > ~/.shell.pre-oh-my-zsh
+ else
+ grep "^$USER:" /etc/passwd | awk -F: '{print $7}' > ~/.shell.pre-oh-my-zsh
+ fi
+
+ # Actually change the default shell to zsh
+ if ! chsh -s "$zsh"; then
+ error "chsh command unsuccessful. Change your default shell manually."
+ else
+ export SHELL="$zsh"
+ echo "${GREEN}Shell successfully changed to '$zsh'.${RESET}"
+ fi
+
+ echo
+}
+
main() {
- # Use colors, but only if connected to a terminal, and that terminal
- # supports them.
- if which tput >/dev/null 2>&1; then
- ncolors=$(tput colors)
- fi
- if [ -t 1 ] && [ -n "$ncolors" ] && [ "$ncolors" -ge 8 ]; then
- RED="$(tput setaf 1)"
- GREEN="$(tput setaf 2)"
- YELLOW="$(tput setaf 3)"
- BLUE="$(tput setaf 4)"
- BOLD="$(tput bold)"
- NORMAL="$(tput sgr0)"
- else
- RED=""
- GREEN=""
- YELLOW=""
- BLUE=""
- BOLD=""
- NORMAL=""
- fi
-
- # Only enable exit-on-error after the non-critical colorization stuff,
- # which may fail on systems lacking tput or terminfo
- set -e
-
- if ! command -v zsh >/dev/null 2>&1; then
- printf "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!\n"
- exit
- fi
-
- if [ ! -n "$ZSH" ]; then
- ZSH=~/.oh-my-zsh
- fi
-
- if [ -d "$ZSH" ]; then
- printf "${YELLOW}You already have Oh My Zsh installed.${NORMAL}\n"
- printf "You'll need to remove $ZSH if you want to re-install.\n"
- exit
- fi
-
- # Prevent the cloned repository from having insecure permissions. Failing to do
- # so causes compinit() calls to fail with "command not found: compdef" errors
- # for users with insecure umasks (e.g., "002", allowing group writability). Note
- # that this will be ignored under Cygwin by default, as Windows ACLs take
- # precedence over umasks except for filesystems mounted with option "noacl".
- umask g-w,o-w
-
- printf "${BLUE}Cloning Oh My Zsh...${NORMAL}\n"
- command -v git >/dev/null 2>&1 || {
- echo "Error: git is not installed"
- exit 1
- }
- # The Windows (MSYS) Git is not compatible with normal use on cygwin
- if [ "$OSTYPE" = cygwin ]; then
- if git --version | grep msysgit > /dev/null; then
- echo "Error: Windows/MSYS Git is not supported on Cygwin"
- echo "Error: Make sure the Cygwin git package is installed and is first on the path"
- exit 1
- fi
- fi
- env git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git "$ZSH" || {
- printf "Error: git clone of oh-my-zsh repo failed\n"
- exit 1
- }
-
-
- printf "${BLUE}Looking for an existing zsh config...${NORMAL}\n"
- if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
- printf "${YELLOW}Found ~/.zshrc.${NORMAL} ${GREEN}Backing up to ~/.zshrc.pre-oh-my-zsh${NORMAL}\n";
- mv ~/.zshrc ~/.zshrc.pre-oh-my-zsh;
- fi
-
- printf "${BLUE}Using the Oh My Zsh template file and adding it to ~/.zshrc${NORMAL}\n"
- cp "$ZSH"/templates/zshrc.zsh-template ~/.zshrc
- sed "/^export ZSH=/ c\\
- export ZSH=\"$ZSH\"
- " ~/.zshrc > ~/.zshrc-omztemp
- mv -f ~/.zshrc-omztemp ~/.zshrc
-
- # If this user's login shell is not already "zsh", attempt to switch.
- TEST_CURRENT_SHELL=$(basename "$SHELL")
- if [ "$TEST_CURRENT_SHELL" != "zsh" ]; then
- # If this platform provides a "chsh" command (not Cygwin), do it, man!
- if hash chsh >/dev/null 2>&1; then
- printf "${BLUE}Time to change your default shell to zsh!${NORMAL}\n"
- chsh -s $(grep /zsh$ /etc/shells | tail -1)
- # Else, suggest the user do so manually.
- else
- printf "I can't change your shell automatically because this system does not have chsh.\n"
- printf "${BLUE}Please manually change your default shell to zsh!${NORMAL}\n"
- fi
- fi
-
- printf "${GREEN}"
- echo ' __ __ '
- echo ' ____ / /_ ____ ___ __ __ ____ _____/ /_ '
- echo ' / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \ '
- echo '/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / / '
- echo '\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/ '
- echo ' /____/ ....is now installed!'
- echo ''
- echo ''
- echo 'Please look over the ~/.zshrc file to select plugins, themes, and options.'
- echo ''
- echo 'p.s. Follow us at https://twitter.com/ohmyzsh.'
- echo ''
- echo 'p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh.'
- echo ''
- printf "${NORMAL}"
- env zsh -l
+ # Run as unattended if stdin is closed
+ if [ ! -t 0 ]; then
+ RUNZSH=no
+ CHSH=no
+ fi
+
+ # Parse arguments
+ while [ $# -gt 0 ]; do
+ case $1 in
+ --unattended) RUNZSH=no; CHSH=no ;;
+ --skip-chsh) CHSH=no ;;
+ esac
+ shift
+ done
+
+ setup_color
+
+ if ! command_exists zsh; then
+ echo "${YELLOW}Zsh is not installed.${RESET} Please install zsh first."
+ exit 1
+ fi
+
+ if [ -d "$ZSH" ]; then
+ cat <<-EOF
+ ${YELLOW}You already have Oh My Zsh installed.${RESET}
+ You'll need to remove '$ZSH' if you want to reinstall.
+ EOF
+ exit 1
+ fi
+
+ setup_ohmyzsh
+ setup_zshrc
+ setup_shell
+
+ printf "$GREEN"
+ cat <<-'EOF'
+ __ __
+ ____ / /_ ____ ___ __ __ ____ _____/ /_
+ / __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \
+ / /_/ / / / / / / / / / / /_/ / / /_(__ ) / / /
+ \____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/
+ /____/ ....is now installed!
+
+
+ Please look over the ~/.zshrc file to select plugins, themes, and options.
+
+ p.s. Follow us on https://twitter.com/ohmyzsh
+
+ p.p.s. Get stickers, shirts, and coffee mugs at https://shop.planetargon.com/collections/oh-my-zsh
+
+ EOF
+ printf "$RESET"
+
+ if [ $RUNZSH = no ]; then
+ echo "${YELLOW}Run zsh to try it out.${RESET}"
+ exit
+ fi
+
+ exec zsh -l
}
-main
+main "$@"
diff --git a/tools/uninstall.sh b/tools/uninstall.sh
index bf2244be8..da31a6a14 100644
--- a/tools/uninstall.sh
+++ b/tools/uninstall.sh
@@ -10,25 +10,35 @@ if [ -d ~/.oh-my-zsh ]; then
fi
echo "Looking for original zsh config..."
-if [ -f ~/.zshrc.pre-oh-my-zsh ] || [ -h ~/.zshrc.pre-oh-my-zsh ]; then
- echo "Found ~/.zshrc.pre-oh-my-zsh -- Restoring to ~/.zshrc";
+ZSHRC_ORIG=~/.zshrc.pre-oh-my-zsh
+if [ -e "$ZSHRC_ORIG" ]; then
+ echo "Found $ZSHRC_ORIG -- Restoring to ~/.zshrc"
- if [ -f ~/.zshrc ] || [ -h ~/.zshrc ]; then
- ZSHRC_SAVE=".zshrc.omz-uninstalled-$(date +%Y%m%d%H%M%S)";
- echo "Found ~/.zshrc -- Renaming to ~/${ZSHRC_SAVE}";
- mv ~/.zshrc ~/"${ZSHRC_SAVE}";
+ if [ -e ~/.zshrc ]; then
+ ZSHRC_SAVE=~/.zshrc.omz-uninstalled-$(date +%Y-%m-%d_%H-%M-%S)
+ echo "Found ~/.zshrc -- Renaming to ${ZSHRC_SAVE}"
+ mv ~/.zshrc "${ZSHRC_SAVE}"
fi
- mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc;
+ mv "$ZSHRC_ORIG" ~/.zshrc
- echo "Your original zsh config was restored. Please restart your session."
-else
- if hash chsh >/dev/null 2>&1; then
- echo "Switching back to bash"
- chsh -s /bin/bash
+ echo "Your original zsh config was restored."
+fi
+
+if hash chsh >/dev/null 2>&1; then
+ if [ -f ~/.shell.pre-oh-my-zsh ]; then
+ old_shell=$(cat ~/.shell.pre-oh-my-zsh)
+ else
+ old_shell=/bin/bash
+ fi
+ echo "Switching your shell back to '$old_shell':"
+ if chsh -s "$old_shell"; then
+ rm -f ~/.shell.pre-oh-my-zsh
else
- echo "You can edit /etc/passwd to switch your default shell back to bash"
+ echo "Could not change default shell. Change it manually by running chsh"
+ echo "or editing the /etc/passwd file."
fi
fi
echo "Thanks for trying out Oh My Zsh. It's been uninstalled."
+echo "Don't forget to restart your terminal!"