commit
fda5afaebc
12 changed files with 807 additions and 7 deletions
@ -0,0 +1,19 @@ |
||||
## Docker autocomplete plugin |
||||
|
||||
- Adds autocomplete options for all docker commands. |
||||
- Will also show containerIDs and Image names where applicable |
||||
|
||||
####Shows help for all commands |
||||
 |
||||
|
||||
|
||||
####Shows your downloaded images where applicable |
||||
 |
||||
|
||||
|
||||
####Shows your running containers where applicable |
||||
 |
||||
|
||||
|
||||
|
||||
Maintainer : Ahmed Azaan ([@aeonazaan](https://twitter.com/aeonazaan)) |
||||
@ -0,0 +1,290 @@ |
||||
#compdef docker |
||||
|
||||
# Docker autocompletion for oh-my-zsh |
||||
# Requires: Docker installed |
||||
# Author : Azaan (@aeonazaan) |
||||
|
||||
|
||||
# ----- Helper functions |
||||
# Output a selectable list of all running docker containers |
||||
__docker_containers() { |
||||
declare -a cont_cmd |
||||
cont_cmd=($(docker ps | awk 'NR>1{print $1":[CON("$1")"$2"("$3")]"}')) |
||||
_describe 'containers' cont_cmd |
||||
} |
||||
|
||||
# output a selectable list of all docker images |
||||
__docker_images() { |
||||
declare -a img_cmd |
||||
img_cmd=($(docker images | awk 'NR>1{print $1}')) |
||||
_describe 'images' img_cmd |
||||
} |
||||
|
||||
# ----- Commands |
||||
# Seperate function for each command, makes extension easier later |
||||
# --------------------------- |
||||
__attach() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__build() { |
||||
_arguments \ |
||||
'-q=false[Suppress verbose build output]' \ |
||||
'-t="[fuck to be applied to the resulting image in case of success]' \ |
||||
'*:files:_files' |
||||
} |
||||
|
||||
__commit() { |
||||
_arguments \ |
||||
'-author="[Author]' \ |
||||
'-m="[Commit message]' \ |
||||
'-run="[Config automatically applied when the image is run.\n]' |
||||
__docker_containers |
||||
} |
||||
|
||||
__diff() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__export() { |
||||
__docker_containers |
||||
} |
||||
|
||||
|
||||
__history() { |
||||
__docker_images |
||||
} |
||||
|
||||
__images() { |
||||
_arguments \ |
||||
'-a[show all images]' \ |
||||
'-notrunc[dont truncate output]' \ |
||||
'-q[only show numeric IDs]' \ |
||||
'-viz[output graph in graphviz format]' |
||||
__docker_images |
||||
} |
||||
|
||||
__import() { |
||||
_arguments '*:files:_files' |
||||
} |
||||
|
||||
__info() { |
||||
# no arguments |
||||
} |
||||
|
||||
__insert() { |
||||
__docker_images |
||||
_arguments '*:files:_files' |
||||
} |
||||
|
||||
__inspect() { |
||||
__docker_images |
||||
__docker_containers |
||||
} |
||||
|
||||
__kill() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__login() { |
||||
_arguments \ |
||||
'-e="[email]' \ |
||||
'-p="[password]' \ |
||||
'-u="[username]' \ |
||||
} |
||||
|
||||
__logs() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__port() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__top() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__ps() { |
||||
_arguments \ |
||||
'-a[Show all containers. Only running containers are shown by default.]' \ |
||||
'-beforeId="[Show only container created before Id, include non-running ones.]' \ |
||||
'-l[Show only the latest created container, include non-running ones.]' \ |
||||
'-n=[Show n last created containers, include non-running ones.]' \ |
||||
'-notrurrrrnc[Dont truncate output]' \ |
||||
'-q[Only display numeric IDs]' \ |
||||
'-s[Display sizes]' \ |
||||
'-sinceId="[Show only containers created since Id, include non-running ones.]' |
||||
} |
||||
|
||||
__pull() { |
||||
_arguments '-t="[Download tagged image in repository]' |
||||
} |
||||
|
||||
__push() { |
||||
|
||||
} |
||||
|
||||
__restart() { |
||||
_arguments '-t=[number of seconds to try to stop before killing]' |
||||
__docker_containers |
||||
} |
||||
|
||||
__rm() { |
||||
_arguments '-v[Remove the volumes associated to the container]' |
||||
__docker_containers |
||||
} |
||||
|
||||
__rmi() { |
||||
__docker_images |
||||
} |
||||
|
||||
__run() { |
||||
_arguments \ |
||||
'-a=[Attach to stdin, stdout or stderr.]' \ |
||||
'-c=[CPU shares (relative weight)]' \ |
||||
'-d[Detached mode: leave the container running in the background]' \ |
||||
'-dns=[Set custom dns servers]' \ |
||||
'-e=[Set environment variables]' \ |
||||
'-entrypoint="[Overwrite the default entrypoint of the image]' \ |
||||
'-h="[Container host name]' \ |
||||
'-i[Keep stdin open even if not attached]' \ |
||||
'-m=[Memory limit (in bytes)]' \ |
||||
'-p=[Expose a containers port to the host (use docker port to see the actual mapping)]' \ |
||||
'-t[Allocate a pseudo-tty]' \ |
||||
'-u="[Username or UID]' \ |
||||
'-v=[Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)]' \ |
||||
'-volumes-from="[Mount volumes from the specified container]' |
||||
__docker_images |
||||
} |
||||
|
||||
__search() { |
||||
_arguments '-notrunc[Dont truncate output]' |
||||
} |
||||
|
||||
__start() { |
||||
__docker_containers |
||||
} |
||||
|
||||
__stop() { |
||||
_arguments '-t=[number of seconds to try to stop before killing]' |
||||
__docker_containers |
||||
} |
||||
|
||||
__tag() { |
||||
_arguments '-f[Force]' |
||||
__docker_images |
||||
} |
||||
|
||||
__version() { |
||||
|
||||
} |
||||
|
||||
__wait() { |
||||
__docker_containers |
||||
} |
||||
|
||||
# end commands --------- |
||||
# ---------------------- |
||||
|
||||
local -a _1st_arguments |
||||
_1st_arguments=( |
||||
"attach":"Attach to a running container" |
||||
"build":"Build a container from a Dockerfile" |
||||
"commit":"Create a new image from a container's changes" |
||||
"diff":"Inspect changes on a container's filesystem" |
||||
"export":"Stream the contents of a container as a tar archive" |
||||
"history":"Show the history of an image" |
||||
"images":"List images" |
||||
"import":"Create a new filesystem image from the contents of a tarball" |
||||
"info":"Display system-wide information" |
||||
"insert":"Insert a file in an image" |
||||
"inspect":"Return low-level information on a container" |
||||
"kill":"Kill a running container" |
||||
"login":"Register or Login to the docker registry server" |
||||
"logs":"Fetch the logs of a container" |
||||
"port":"Lookup the public-facing port which is NAT-ed to PRIVATE_PORT" |
||||
"top":"Lookup the running processes of a container" |
||||
"ps":"List containers" |
||||
"pull":"Pull an image or a repository from the docker registry server" |
||||
"push":"Push an image or a repository to the docker registry server" |
||||
"restart":"Restart a running container" |
||||
"rm":"Remove one or more containers" |
||||
"rmi":"Remove one or more images" |
||||
"run":"Run a command in a new container" |
||||
"search":"Search for an image in the docker index" |
||||
"start":"Start a stopped container" |
||||
"stop":"Stop a running container" |
||||
"tag":"Tag an image into a repository" |
||||
"version":"Show the docker version information" |
||||
"wait":"Block until a container stops, then print its exit code" |
||||
) |
||||
|
||||
_arguments '*:: :->command' |
||||
|
||||
if (( CURRENT == 1 )); then |
||||
_describe -t commands "docker command" _1st_arguments |
||||
return |
||||
fi |
||||
|
||||
local -a _command_args |
||||
case "$words[1]" in |
||||
attach) |
||||
__docker_containers ;; |
||||
build) |
||||
__build ;; |
||||
commit) |
||||
__commit ;; |
||||
diff) |
||||
__diff ;; |
||||
export) |
||||
__export ;; |
||||
history) |
||||
__history ;; |
||||
images) |
||||
__images ;; |
||||
import) |
||||
__import ;; |
||||
info) |
||||
__info ;; |
||||
insert) |
||||
__insert ;; |
||||
inspect) |
||||
__inspect ;; |
||||
kill) |
||||
__kill ;; |
||||
login) |
||||
__login ;; |
||||
logs) |
||||
__logs ;; |
||||
port) |
||||
__port ;; |
||||
top) |
||||
__top ;; |
||||
ps) |
||||
__ps ;; |
||||
pull) |
||||
__pull ;; |
||||
push) |
||||
__push ;; |
||||
restart) |
||||
__restart ;; |
||||
rm) |
||||
__rm ;; |
||||
rmi) |
||||
__rmi ;; |
||||
run) |
||||
__run ;; |
||||
search) |
||||
__search ;; |
||||
start) |
||||
__start ;; |
||||
stop) |
||||
__stop ;; |
||||
tag) |
||||
__tag ;; |
||||
version) |
||||
__version ;; |
||||
wait) |
||||
__wait ;; |
||||
esac |
||||
@ -0,0 +1,18 @@ |
||||
function knife_ssh() { |
||||
grep -q $1 ~/.knife_comp~ 2> /dev/null || rm -f ~/.knife_comp~; |
||||
ssh $(knife node show $1 | awk '/IP:/{print $2}') |
||||
} |
||||
|
||||
_knife_ssh() { |
||||
if hash knife 2>/dev/null; then |
||||
if [[ ! -f ~/.knife_comp~ ]]; then |
||||
echo "\nGenerating ~/.knife_comp~..." >/dev/stderr |
||||
knife node list > ~/.knife_comp~ |
||||
fi |
||||
compadd $(<~/.knife_comp~) |
||||
else |
||||
echo "Could not find knife" > /dev/stderr; |
||||
fi |
||||
} |
||||
|
||||
compdef _knife_ssh knife_ssh |
||||
@ -0,0 +1,63 @@ |
||||
#compdef mix |
||||
#autoload |
||||
|
||||
# Elixir mix zsh completion |
||||
|
||||
local -a _1st_arguments |
||||
_1st_arguments=( |
||||
'archive:Archive this project into a .ez file' |
||||
'clean:Clean generated application files' |
||||
'compile:Compile source files' |
||||
'deps:List dependencies and their status' |
||||
"deps.clean:Remove dependencies' files" |
||||
'deps.compile:Compile dependencies' |
||||
'deps.get:Get all out of date dependencies' |
||||
'deps.unlock:Unlock the given dependencies' |
||||
'deps.update:Update dependencies' |
||||
'do:Executes the commands separated by comma' |
||||
'escriptize:Generates an escript for the project' |
||||
'help:Print help information for tasks' |
||||
'local:List local tasks' |
||||
'local.install:Install a task or an archive locally' |
||||
'local.rebar:Install rebar locally' |
||||
'local.uninstall:Uninstall local tasks or archives' |
||||
'new:Creates a new Elixir project' |
||||
'run:Run the given file or expression' |
||||
"test:Run a project's tests" |
||||
'--help:Describe available tasks' |
||||
'--version:Prints the Elixir version information' |
||||
) |
||||
|
||||
__task_list () |
||||
{ |
||||
local expl |
||||
declare -a tasks |
||||
|
||||
tasks=(archive clean compile deps deps.clean deps.compile deps.get deps.unlock deps.update do escriptize help local local.install local.rebar local.uninstall new run test) |
||||
|
||||
_wanted tasks expl 'help' compadd $tasks |
||||
} |
||||
|
||||
local expl |
||||
|
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "mix subcommand" _1st_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
case $line[1] in |
||||
(help) |
||||
_arguments ':feature:__task_list' |
||||
esac |
||||
;; |
||||
esac |
||||
|
||||
@ -0,0 +1,381 @@ |
||||
#compdef pod |
||||
#autoload |
||||
|
||||
# ----------------------------------------------------------------------------- |
||||
# FILE: _pod |
||||
# DESCRIPTION: Cocoapods autocomplete plugin for Oh-My-Zsh |
||||
# http://cocoapods.org |
||||
# AUTHOR: Alexandre Joly (alexandre.joly@mekanics.ch) |
||||
# GITHUB: https://github.com/mekanics |
||||
# TWITTER: @jolyAlexandre |
||||
# VERSION: 0.0.1 |
||||
# LICENSE: MIT |
||||
# ----------------------------------------------------------------------------- |
||||
|
||||
local -a _1st_arguments |
||||
_1st_arguments=( |
||||
'help:Show help for the given command.' |
||||
'install:Install project dependencies' |
||||
'ipc:Inter-process communication' |
||||
'list:List pods' |
||||
'outdated:Show outdated project dependencies' |
||||
'podfile-info:Shows information on installed Pods' |
||||
'push:Push new specifications to a spec-repo' |
||||
'repo:Manage spec-repositories' |
||||
'search:Searches for pods' |
||||
'setup:Setup the CocoaPods environment' |
||||
'spec:Manage pod specs' |
||||
'update:Update outdated project dependencies' |
||||
) |
||||
|
||||
local -a _repo_arguments |
||||
_repo_arguments=( |
||||
'add:Add a spec repo' |
||||
'lint:Validates all specs in a repo' |
||||
'update:Update a spec repo' |
||||
) |
||||
|
||||
local -a _spec_arguments |
||||
_spec_arguments=( |
||||
'cat:Prints a spec file' |
||||
'create:Create spec file stub' |
||||
'edit:Edit a spec file' |
||||
'lint:Validates a spec file' |
||||
'which:Prints the path of the given spec' |
||||
) |
||||
|
||||
local -a _ipc_arguments |
||||
_ipc_arguments=( |
||||
'list:Lists the specifications know to CocoaPods' |
||||
'podfile:Converts a Podfile to YAML' |
||||
'repl:The repl listens to commands on standard input' |
||||
'spec:Converts a podspec to YAML' |
||||
'update-search-index:Updates the search index' |
||||
) |
||||
|
||||
local -a _list_arguments |
||||
_list_arguments=( |
||||
'new:Lists pods introduced in the master spec-repo since the last check' |
||||
) |
||||
|
||||
local -a _inherited_options |
||||
_inherited_options=( |
||||
'(--silent)--silent[Show nothing]' \ |
||||
'(--version)--version[Show the version of CocoaPods]' \ |
||||
'(--no-color)--no-color[Show output without color]' \ |
||||
'(--verbose)--verbose[Show more debugging information]' \ |
||||
'(--help)--help[Show help banner of specified command]' |
||||
) |
||||
|
||||
local -a _install_options |
||||
_install_options=( |
||||
'(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn` intact after downloading]' \ |
||||
'(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \ |
||||
'(--no-repo-update)--no-repo-update[Skip running `pod repo update` before install]' |
||||
) |
||||
|
||||
local -a _update_options |
||||
_update_options=( |
||||
'(--no-clean)--no-clean[Leave SCM dirs like `.git` and `.svn intact after downloading]' \ |
||||
'(--no-integrate)--no-integrate[Skip integration of the Pods libraries in the Xcode project(s)]' \ |
||||
'(--no-repo-update)--no-repo-update[Skip running `pod repo update before install]' |
||||
) |
||||
|
||||
local -a _outdated_options |
||||
_outdated_options=( |
||||
'(--no-repo-update)--no-repo-update[Skip running `pod repo update` before install]' |
||||
) |
||||
|
||||
local -a _search_options |
||||
_search_options=( |
||||
'(--full)--full[Search by name, summary, and description]' \ |
||||
'(--stats)--stats[Show additional stats (like GitHub watchers and forks)]' \ |
||||
'(--ios)--ios[Restricts the search to Pods supported on iOS]' \ |
||||
'(--osx)--osx[Restricts the search to Pods supported on OS X]' |
||||
) |
||||
|
||||
local -a _list_options |
||||
_list_options=( |
||||
'(--update)--update[Run `pod repo update` before listing]' |
||||
) |
||||
|
||||
local -a _podfile_info_options |
||||
_podfile_info_options=( |
||||
'(--all)--all[Show information about all Pods with dependencies that are used in a project]' \ |
||||
'(--md)--md[Output information in Markdown format]' \ |
||||
'*:script or directory:_files' |
||||
) |
||||
|
||||
local -a _push_options |
||||
_push_options=( |
||||
'(--allow-warnings)--allow-warnings[Allows pushing even if there are warnings]' \ |
||||
'(--local-only)--local-only[Does not perform the step of pushing REPO to its remote]' \ |
||||
'*:script or directory:_files' |
||||
) |
||||
|
||||
local -a _repo_lint_options |
||||
_repo_lint_options=( |
||||
'(--only-errors)--only-errors[Lint presents only the errors]' |
||||
) |
||||
|
||||
local -a _setup_options |
||||
_setup_options=( |
||||
'(--push)--push[Use this option to enable push access once granted]' |
||||
) |
||||
|
||||
local -a _spec_lint_options |
||||
_spec_lint_options=( |
||||
'(--quick)--quick[Lint skips checks that would require to download and build the spec]' \ |
||||
'(--only-errors)--only-errors[Lint validates even if warnings are present]' \ |
||||
'(--no-clean)--no-clean[Lint leaves the build directory intact for inspection]' \ |
||||
'*:script or directory:_files' |
||||
) |
||||
|
||||
local -a _spec_cat_options |
||||
_spec_cat_options=( |
||||
'(--show-all)--show-all[Pick from all versions of the given podspec]' |
||||
) |
||||
|
||||
local -a _spec_which_options |
||||
_spec_which_options=( |
||||
'(--show-all)--show-all[Print all versions of the given podspec]' |
||||
) |
||||
|
||||
local -a _spec_edit_options |
||||
_spec_edit_options=( |
||||
'(--show-all)--show-all[Pick which spec to edit from all available versions of the given podspec]' |
||||
) |
||||
|
||||
|
||||
__first_command_list () |
||||
{ |
||||
local expl |
||||
declare -a tasks |
||||
|
||||
tasks=(install ipc list outdated podfile-info push repo search setup spec update) |
||||
|
||||
_wanted tasks expl 'help' compadd $tasks |
||||
} |
||||
|
||||
__repo_list() { |
||||
_wanted application expl 'repo' compadd $(command ls -1 ~/.cocoapods 2>/dev/null | sed -e 's/ /\\ /g') |
||||
} |
||||
|
||||
__pod-repo() { |
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "pod repo" _repo_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
case $line[1] in |
||||
(lint) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_repo_lint_options \ |
||||
':feature:__repo_list' |
||||
;; |
||||
|
||||
(update) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
':feature:__repo_list' |
||||
;; |
||||
|
||||
(add) |
||||
_arguments \ |
||||
$_inherited_options |
||||
esac |
||||
;; |
||||
esac |
||||
} |
||||
|
||||
__pod-spec() { |
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "pod spec" _spec_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
case $line[1] in |
||||
(create) |
||||
_arguments \ |
||||
$_inherited_options |
||||
;; |
||||
|
||||
(lint) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_spec_lint_options |
||||
;; |
||||
|
||||
(cat) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_spec_cat_options |
||||
;; |
||||
|
||||
(which) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_spec_which_options |
||||
;; |
||||
|
||||
(edit) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_spec_edit_options |
||||
;; |
||||
esac |
||||
return |
||||
;; |
||||
esac |
||||
} |
||||
|
||||
__pod-ipc() { |
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "pod ipc" _ipc_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
_arguments -C \ |
||||
$_inherited_options |
||||
return |
||||
;; |
||||
esac |
||||
} |
||||
|
||||
__pod-list() { |
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
$_inherited_options \ |
||||
$_list_options \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "pod list" _list_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
_arguments -C \ |
||||
$_inherited_options \ |
||||
$_list_options |
||||
return |
||||
;; |
||||
esac |
||||
} |
||||
|
||||
local curcontext="$curcontext" state line |
||||
typeset -A opt_args |
||||
|
||||
_arguments -C \ |
||||
$_inherited_options \ |
||||
':command:->command' \ |
||||
'*::options:->options' |
||||
|
||||
case $state in |
||||
(command) |
||||
_describe -t commands "pod" _1st_arguments |
||||
return |
||||
;; |
||||
|
||||
(options) |
||||
case $line[1] in |
||||
(help) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
':help:__first_command_list' |
||||
;; |
||||
|
||||
(push) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_push_options \ |
||||
':repo:__repo_list' |
||||
;; |
||||
|
||||
(repo) |
||||
__pod-repo |
||||
;; |
||||
|
||||
(spec) |
||||
__pod-spec |
||||
;; |
||||
|
||||
(ipc) |
||||
__pod-ipc |
||||
;; |
||||
|
||||
(list) |
||||
__pod-list |
||||
;; |
||||
|
||||
(install) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_install_options |
||||
;; |
||||
|
||||
(update) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_update_options |
||||
;; |
||||
|
||||
(outdated) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_outdated_options |
||||
;; |
||||
|
||||
(search) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_search_options |
||||
;; |
||||
|
||||
(podfile-info) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_podfile_info_options |
||||
;; |
||||
|
||||
(setup) |
||||
_arguments \ |
||||
$_inherited_options \ |
||||
$_setup_options |
||||
;; |
||||
|
||||
esac |
||||
;; |
||||
esac |
||||
Loading…
Reference in new issue