From b40b4515e32ed798a02c76aa8c9e7e189bec2e4b Mon Sep 17 00:00:00 2001 From: EoF Date: Fri, 13 May 2022 22:49:55 +0500 Subject: [PATCH] Update 13.05.2022 --- install.sh | 2 +- zsh/.github/FUNDING.yml | 2 +- zsh/.github/actions/spelling/README.md | 15 - zsh/.github/actions/spelling/advice.md | 25 - zsh/.github/actions/spelling/allow.txt | 0 zsh/.github/actions/spelling/excludes.txt | 41 - zsh/.github/actions/spelling/expect.txt | 4494 ----------------- zsh/.github/actions/spelling/patterns.txt | 73 - zsh/.github/actions/spelling/reject.txt | 7 - zsh/.github/workflows/main.yml | 4 + zsh/.github/workflows/project.yml | 8 +- zsh/CONTRIBUTING.md | 8 +- zsh/LICENSE.txt | 2 +- zsh/README.md | 69 +- zsh/lib/cli.zsh | 50 +- zsh/lib/termsupport.zsh | 2 +- zsh/lib/vcs_info.zsh | 53 + zsh/oh-my-zsh.sh | 78 +- zsh/plugins/1password/1password.plugin.zsh | 51 +- zsh/plugins/1password/README.md | 11 +- zsh/plugins/1password/_opswd | 19 + zsh/plugins/1password/opswd | 78 + zsh/plugins/aliases/aliases.plugin.zsh | 4 +- zsh/plugins/aliases/cheatsheet.py | 2 +- zsh/plugins/autoenv/autoenv.plugin.zsh | 1 + zsh/plugins/aws/aws.plugin.zsh | 2 +- zsh/plugins/bazel/README.md | 17 +- zsh/plugins/boot2docker/README.md | 6 - zsh/plugins/boot2docker/_boot2docker | 73 - zsh/plugins/cargo/cargo.plugin.zsh | 8 - zsh/plugins/charm/README.md | 9 + zsh/plugins/charm/charm.plugin.zsh | 14 + zsh/plugins/coffee/_coffee | 12 +- zsh/plugins/copydir/README.md | 9 +- zsh/plugins/copydir/copydir.plugin.zsh | 8 +- zsh/plugins/copypath/README.md | 15 + zsh/plugins/copypath/copypath.plugin.zsh | 15 + zsh/plugins/dash/dash.plugin.zsh | 132 +- zsh/plugins/deno/deno.plugin.zsh | 13 - zsh/plugins/django/README.md | 12 - zsh/plugins/django/django.plugin.zsh | 407 -- zsh/plugins/docker/README.md | 43 +- zsh/plugins/docker/docker.plugin.zsh | 39 + zsh/plugins/dotenv/dotenv.plugin.zsh | 5 +- zsh/plugins/fd/README.md | 4 - zsh/plugins/fd/_fd | 9 +- zsh/plugins/fnm/fnm.plugin.zsh | 13 - .../frontend-search.plugin.zsh | 3 +- zsh/plugins/fzf/README.md | 2 +- zsh/plugins/fzf/fzf.plugin.zsh | 33 +- zsh/plugins/gh/gh.plugin.zsh | 13 - zsh/plugins/git-prompt/README.md | 2 +- zsh/plugins/git-prompt/git-prompt.plugin.zsh | 2 +- zsh/plugins/git-prompt/gitstatus.py | 2 +- zsh/plugins/gitfast/_git | 46 +- zsh/plugins/gitfast/git-completion.bash | 1007 ++-- zsh/plugins/gitfast/git-prompt.sh | 7 +- zsh/plugins/gitfast/update | 2 +- zsh/plugins/gnu-utils/gnu-utils.plugin.zsh | 3 + zsh/plugins/gpg-agent/gpg-agent.plugin.zsh | 2 +- zsh/plugins/helm/helm.plugin.zsh | 13 +- zsh/plugins/httpie/README.md | 6 - zsh/plugins/httpie/httpie.plugin.zsh | 7 - zsh/plugins/jsontools/jsontools.plugin.zsh | 12 +- zsh/plugins/juju/README.md | 43 +- zsh/plugins/juju/juju.plugin.zsh | 57 +- zsh/plugins/kubectl/README.md | 13 +- zsh/plugins/kubectl/kubectl.plugin.zsh | 25 +- zsh/plugins/kubectx/kubectx.plugin.zsh | 4 +- zsh/plugins/multipass/README.md | 22 + zsh/plugins/multipass/_multipass | 73 + zsh/plugins/multipass/multipass.plugin.zsh | 7 + zsh/plugins/nvm/nvm.plugin.zsh | 10 +- zsh/plugins/pyenv/pyenv.plugin.zsh | 2 +- zsh/plugins/python/README.md | 2 +- zsh/plugins/python/python.plugin.zsh | 6 +- zsh/plugins/rails/README.md | 122 +- zsh/plugins/rails/_rails | 672 ++- zsh/plugins/rails/rails.plugin.zsh | 84 +- zsh/plugins/rbw/README.md | 10 + zsh/plugins/rbw/rbw.plugin.zsh | 36 +- zsh/plugins/ripgrep/README.md | 4 - zsh/plugins/ripgrep/_ripgrep | 4 +- zsh/plugins/rust/rust.plugin.zsh | 5 - zsh/plugins/rustup/rustup.plugin.zsh | 8 - zsh/plugins/rvm/README.md | 1 + zsh/plugins/rvm/rvm.plugin.zsh | 1 + zsh/plugins/shell-proxy/.editorconfig | 3 + zsh/plugins/shell-proxy/ssh-proxy.py | 23 +- zsh/plugins/sprunge/README.md | 8 +- zsh/plugins/sprunge/sprunge.plugin.zsh | 4 - zsh/plugins/svn-fast-info/README.md | 4 +- .../systemadmin/systemadmin.plugin.zsh | 46 +- zsh/plugins/terraform/README.md | 1 + zsh/plugins/terraform/terraform.plugin.zsh | 1 + zsh/plugins/tmux/README.md | 20 +- zsh/plugins/tmux/tmux.plugin.zsh | 20 +- zsh/plugins/toolbox/README.md | 19 + zsh/plugins/toolbox/kubectx.plugin.zsh | 3 + zsh/plugins/vi-mode/vi-mode.plugin.zsh | 2 +- .../virtualenvwrapper.plugin.zsh | 8 +- zsh/plugins/volta/volta.plugin.zsh | 5 - zsh/plugins/web-search/web-search.plugin.zsh | 2 +- zsh/plugins/yarn/README.md | 9 + zsh/plugins/yarn/yarn.plugin.zsh | 18 +- zsh/plugins/zsh-navigation-tools/README.md | 2 +- zsh/plugins/zsh_reload/README.md | 3 - zsh/plugins/zsh_reload/zsh_reload.plugin.zsh | 7 - zsh/themes/apple.zsh-theme | 18 +- zsh/themes/bureau.zsh-theme | 55 +- zsh/themes/emotty.zsh-theme | 10 + zsh/themes/frisk.zsh-theme | 2 +- zsh/themes/gentoo.zsh-theme | 4 +- zsh/themes/jnrowe.zsh-theme | 1 - zsh/themes/kolo.zsh-theme | 18 +- zsh/themes/linuxonly.zsh-theme | 1 - zsh/themes/michelebologna.zsh-theme | 38 +- zsh/themes/rkj-repos.zsh-theme | 2 +- zsh/themes/trapd00r.zsh-theme | 1 - zsh/themes/ys.zsh-theme | 2 +- zsh/themes/zhann.zsh-theme | 18 +- zsh/tools/changelog.sh | 34 +- zsh/tools/check_for_upgrade.sh | 91 +- zsh/tools/install.sh | 43 +- zsh/tools/upgrade.sh | 4 + zsh/zshrc => zshrc | 0 126 files changed, 2457 insertions(+), 6430 deletions(-) delete mode 100644 zsh/.github/actions/spelling/README.md delete mode 100644 zsh/.github/actions/spelling/advice.md delete mode 100644 zsh/.github/actions/spelling/allow.txt delete mode 100644 zsh/.github/actions/spelling/excludes.txt delete mode 100644 zsh/.github/actions/spelling/expect.txt delete mode 100644 zsh/.github/actions/spelling/patterns.txt delete mode 100644 zsh/.github/actions/spelling/reject.txt create mode 100644 zsh/lib/vcs_info.zsh create mode 100644 zsh/plugins/1password/_opswd create mode 100644 zsh/plugins/1password/opswd delete mode 100644 zsh/plugins/boot2docker/README.md delete mode 100644 zsh/plugins/boot2docker/_boot2docker create mode 100644 zsh/plugins/charm/README.md create mode 100644 zsh/plugins/charm/charm.plugin.zsh create mode 100644 zsh/plugins/copypath/README.md create mode 100644 zsh/plugins/copypath/copypath.plugin.zsh delete mode 100644 zsh/plugins/django/README.md delete mode 100644 zsh/plugins/django/django.plugin.zsh create mode 100644 zsh/plugins/docker/docker.plugin.zsh delete mode 100644 zsh/plugins/httpie/httpie.plugin.zsh create mode 100644 zsh/plugins/multipass/README.md create mode 100644 zsh/plugins/multipass/_multipass create mode 100644 zsh/plugins/multipass/multipass.plugin.zsh create mode 100644 zsh/plugins/shell-proxy/.editorconfig create mode 100644 zsh/plugins/toolbox/README.md create mode 100644 zsh/plugins/toolbox/kubectx.plugin.zsh delete mode 100644 zsh/plugins/zsh_reload/README.md delete mode 100644 zsh/plugins/zsh_reload/zsh_reload.plugin.zsh rename zsh/zshrc => zshrc (100%) diff --git a/install.sh b/install.sh index b1c95ae..e082e0f 100755 --- a/install.sh +++ b/install.sh @@ -23,7 +23,7 @@ cp -f "$HOME/.vimrc" "$HOME/.vimrc.bak" 2>/dev/null || true # Create symlinks ln -sf .dots/tmux/tmux.conf "$HOME"/.tmux.conf -ln -sf .dots/zsh/zshrc "$HOME"/.zshrc +ln -sf .dots/zshrc "$HOME"/.zshrc ln -sf .dots/vim/vimrc "$HOME"/.vimrc printf "OK: Completed\n" diff --git a/zsh/.github/FUNDING.yml b/zsh/.github/FUNDING.yml index 484a8cf..6c86ac4 100644 --- a/zsh/.github/FUNDING.yml +++ b/zsh/.github/FUNDING.yml @@ -1,2 +1,2 @@ -github: [ohmyzsh, robbyrussell, mcornella, larson-carter] +github: [ohmyzsh, robbyrussell, mcornella, larson-carter, carlosala] open_collective: ohmyzsh diff --git a/zsh/.github/actions/spelling/README.md b/zsh/.github/actions/spelling/README.md deleted file mode 100644 index dcd237b..0000000 --- a/zsh/.github/actions/spelling/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# check-spelling/check-spelling configuration - -File | Purpose | Format | Info --|-|-|- -[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) -[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) -[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) -[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) -[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) -[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) -[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) -[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) - -Note: you can replace any of these files with a directory by the same name (minus the suffix) -and then include multiple files inside that directory (with that suffix) to merge multiple files together. diff --git a/zsh/.github/actions/spelling/advice.md b/zsh/.github/actions/spelling/advice.md deleted file mode 100644 index c83423a..0000000 --- a/zsh/.github/actions/spelling/advice.md +++ /dev/null @@ -1,25 +0,0 @@ - -
If the flagged items do not appear to be text - -If items relate to a ... -* well-formed pattern. - - If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it, - try adding it to the `patterns.txt` file. - - Patterns are Perl 5 Regular Expressions - you can [test]( -https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. - - Note that patterns can't match multiline strings. - -* binary file. - - Please add a file path to the `excludes.txt` file matching the containing file. - - File paths are Perl 5 Regular Expressions - you can [test]( -https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. - - `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( -../tree/HEAD/README.md) (on whichever branch you're using). - -
diff --git a/zsh/.github/actions/spelling/allow.txt b/zsh/.github/actions/spelling/allow.txt deleted file mode 100644 index e69de29..0000000 diff --git a/zsh/.github/actions/spelling/excludes.txt b/zsh/.github/actions/spelling/excludes.txt deleted file mode 100644 index f1cfeef..0000000 --- a/zsh/.github/actions/spelling/excludes.txt +++ /dev/null @@ -1,41 +0,0 @@ -# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes -(?:^|/)(?i)COPYRIGHT -(?:^|/)(?i)LICEN[CS]E -(?:^|/)package(?:-lock|)\.json$ -(?:^|/)vendor/ -ignore$ -\.avi$ -\.ico$ -\.jpe?g$ -\.lock$ -\.map$ -\.min\.. -\.mod$ -\.mp[34]$ -\.png$ -\.wav$ -^\.github/ -^\Qplugins/archlinux/archlinux.plugin.zsh\E$ -^\Qplugins/cp/cp.plugin.zsh\E$ -^\Qplugins/extract/_extract\E$ -^\Qplugins/genpass/genpass.plugin.zsh\E$ -^\Qplugins/gitignore/gitignore.plugin.zsh\E$ -^\Qplugins/gnu-utils/gnu-utils.plugin.zsh\E$ -^\Qplugins/hitchhiker/fortunes/hitchhiker\E$ -^\Qplugins/jhbuild/jhbuild.plugin.zsh\E$ -^\Qplugins/jhbuild/README.md\E$ -^\Qplugins/jruby/jruby.plugin.zsh\E$ -^\Qplugins/kubectl/kubectl.plugin.zsh\E$ -^\Qplugins/lol/lol.plugin.zsh\E$ -^\Qplugins/mosh/mosh.plugin.zsh\E$ -^\Qplugins/npx/npx.plugin.zsh\E$ -^\Qplugins/powder/_powder\E$ -^\Qplugins/suse/suse.plugin.zsh\E$ -^\Qplugins/thor/_thor\E$ -^\Qplugins/universalarchive/_universalarchive\E$ -^\Qplugins/vagrant/vagrant.plugin.zsh\E$ -^\Qplugins/wp-cli/README.md\E$ -^\Qplugins/wp-cli/wp-cli.plugin.zsh\E$ -^\Qthemes/clean.zsh-theme\E$ -^\Qthemes/philips.zsh-theme\E$ -^\Qthemes/tonotdo.zsh-theme\E$ diff --git a/zsh/.github/actions/spelling/expect.txt b/zsh/.github/actions/spelling/expect.txt deleted file mode 100644 index 5c5a04f..0000000 --- a/zsh/.github/actions/spelling/expect.txt +++ /dev/null @@ -1,4494 +0,0 @@ -AAAAC -aac -aar -abcdefghjkmnpqrstvwxyz -ABRT -absorbgitdirs -abspath -abtvfr -acceptorthreads -accessip -ACDIM -acking -ackmate -ackup -ACLs -acon -aconf -acp -acpi -acpitool -acr -acroread -acs -acsc -acsp -acss -actionformats -Adamantium -adb -adbd -adben -addgroups -addhistory -addon -addprincipals -addrport -addrs -addusergroups -addwin -adelcampo -adg -ADK -adminalias -adminport -Admins -adoc -adu -aeiouy -afh -afind -afmagic -afs -afu -agb -agc -agd -agentpath -agi -agignore -agli -aglu -agnoster -agp -agrimaldi -ags -agu -agud -agug -aguu -AHg -ainv -aip -Airbender -ajp -ajs -Akinori -akoenig -alacritty -albers -alberto -alertmanager -alex -alexandre -aliasfiletype -aliaspassword -allexport -alloc -allocstatus -allownoncomponentcallers -allpkgs -alnum -ALRM -altchar -Altoid -alwayz -amanda -amazonaws -amazonec -ambyj -amd -amqp -AMRD -anche -andi -andrewrdwyer -angularjs -anley -anlp -annots -anonymize -anotherfolder -ansible -antrun -anycommand -apexcodefile -apextests -api -apidocs -apiversion -apjanke -apk -apklib -aplaybook -appid -applica -applist -appname -apps -appup -aps -apull -arachnophobia -araxis -ARCHFLAGS -archimport -archlinux -arci -arcizan -ard -ardc -ardnu -ardnupc -ardp -ardpc -ARGC -args -argset -argslist -argu -argv -ARGZERO -arh -arinit -arl -arli -arpa -arquillian -artifactory -asadmin -asc -asciicast -asciidoc -asciidoctor -asciinema -asdeps -asdf -askpass -asm -asmo -asrc -assem -associatewiththread -ASTs -asyncreplication -atlassian -attr -ATTRIBUTENAME -aufs -auin -auinsd -auloc -auls -aulst -aumir -auown -auownloc -auownls -aur -aure -aurem -aurep -aurinsd -aurph -aurrep -authmethods -authorizationdb -authpriv -authrealmname -authz -autoapplyenabled -autoclean -autocomplete -autocompleted -autocompletion -AUTOCONNECT -autocrlf -autodetermine -autodie -autoenv -autohadboverride -autoipd -autojump -autoload -autolock -autolocking -autopep -AUTOQUIT -autoreload -autoreloading -autoremove -autorun -autoscale -autoscaling -autoselect -autoshortened -autosquash -autostart -autostash -autoupdate -auupd -auupg -availabilityenabled -avh -avi -AVIT -avivrosenberg -avneet -avz -avzu -aws -awscli -awslogs -babakks -backend -backendconfig -backtick -backupconfig -backupdir -backupfile -backuptheme -bactrian -baidu -bamshuf -bamtobed -bamtofastq -Barsi -Basecamp -basedir -basedn -basefile -baseurl -basevmdk -bashcompinit -bashdefault -bashrc -batchid -baz -bazel -bazelbuild -bbd -bbdiff -bbedit -BBM -bbpb -bcc -bcdfghjklmnpqrstvwxz -bck -bcn -bcubc -bcubo -beaglidx -becc -bedcov -BEDGRAPH -BEDPE -bedpetobam -bedtobam -bedtools -Belarus -bem -benchmarker -benchmem -benchtime -bento -benwilcock -berks -Bertinelli -bgnotify -bgrewriteeaof -bgsave -binarynights -bindaddress -binded -bindir -bindkey -binpack -binstub -bintray -bip -bira -bisd -bitboxer -bitbucket -bitswap -bitwarden -blkio -blockprofile -blockprofilerate -blod -blog -blogger -blogspot -blpop -bluebox -Bluetooth -bobwilliams -bodycc -Bonetti -bookmarked -booknames -bootclasspath -bootscript -bootsnipp -borland -borrowck -Boudreau -Boushh -Bouvet -BPtmux -bpython -bqr -brainstormr -Brainville -branchformat -branchname -branchrefs -brewp -brewsp -briancarper -bringz -Broadcom -Brodersen -brpop -brpoplpush -btannous -btih -btn -btrestart -btrfs -btw -bubc -bubu -buf -buffersizebytes -buflines -bugfix -bugfixes -bugreport -bugsnag -Buildfile -buildinstance -buildnumber -buildpackage -buildpacks -buildscript -builtins -bundlephobia -bunzip -Burkina -Busybox -bwaht -Bxegedabagacad -bypjyp -bytebuffertype -bytecode -bytewise -byznis -bzip -bzr -cabextract -CACERT -cacertfile -cacheinfo -cachename -caiifr -Cakefile -cakephp -callvim -calmd -calways -caname -caniuse -cano -capath -Capfile -capify -capistrano -capistranorb -capit -CARETCOLOR -caserta -Caskroom -catimg -catserver -catspeak -cbr -ccat -cccmd -ccflags -ccl -ccomp -ccp -cdargs -cdcmd -cdo -CDPATH -cdu -cdx -cdylib -cecho -cehlrtx -celerybeat -celeryev -celerymon -celeryproject -Celso -celsomiranda -certfile -certname -certs -cfa -cfap -cfbpk -cfbs -cfc -cfdel -cfdm -cfdor -cfds -cfe -cfev -cfg -cfgfile -cfhu -cfl -cflg -cflr -cfp -cfpc -cfpm -cfr -cfsc -cfsh -cfsp -cfsrt -cfsrtall -cfstg -cfstp -cfstpall -cft -cfup -cfus -cget -cgi -cgit -cgr -cgrm -cgroup -cgroupns -cgu -changelog -changepassword -changeset -charmap -charset -chaselinks -chcid -chdir -cheatsheet -checkin -checkinit -checkonly -checkports -checkstyle -cheeseshops -Chesal -chiark -childlogdir -chlrtx -chmod -chown -chpwd -chroot -chruby -chrubydirs -chsh -chucknorris -chucknorrisfacts -Chucktatorship -Chucktober -chunker -cidfile -cidr -CIDs -cidv -ciici -cim -cirw -citool -civis -cjk -clamav -classfile -classloaders -classloading -classmap -classname -classpath -CLDR -cleardump -cless -CLICOLOR -clientauthenabled -clientid -clipcmd -clipcopy -clippaste -Clipperton -clj -Clojure -closelim -cloudfoundry -cloudproviders -CLOUDSDK -clrz -clustertype -cmdargs -cmdline -cmds -Cmp -CMR -cms -cmt -cnorm -cobertura -cocoapods -codebase -codeclimate -codecompare -codecoverage -codegen -codepen -coderwall -CODESET -codium -coffeescript -colemak -Colindres -collectstatic -colorbool -colorcoded -colorcoding -colorify -colorized -colorls -colorpair -colorset -colorspec -colourised -Colouriser -colsearch -COMMANDLINE -commandlinefu -committerdate -Comoros -compadd -comparguments -compassdoc -compaudit -compbiome -compcall -compctl -compdef -compdescribe -compdump -compfiles -compfix -compgen -compgroups -compilemessages -compinit -compl -completemarks -completionsdir -complist -componentname -compopt -compquote -COMPREPLY -COMPRESSSPARSESTATE -compset -compstate -comptags -comptry -compvalues -CONDA -CONFG -config -configfile -confighelp -configmap -configstoretype -connectiondefinition -connectionpoolid -conssec -Consts -contacto -containerd -contenttype -contextinitialization -contextroot -contoroll -contreras -controlargs -conventionalcommits -COOKBOOKNAME -cookbookversion -coproc -copybuffer -copydir -copyfile -copypaste -copypasteable -cordova -coreutil -cors -cowsay -cowthink -cpan -cpanm -cpanminus -cpantesters -cpio -cpp -cprint -cprof -cpuprofile -cpuset -cpv -createcachetable -createdlastdays -createsuperuser -createtables -creationretryattempts -creationretryinterval -cription -crlf -crm -crockford -cron -cronjob -crt -cseuckr -cseucpkdfmtjapanese -csh -csibm -csiso -csisolatin -cskoi -csksc -css -cssflow -cssh -csshiftjis -csu -csv -csvfile -ctag -ctl -ctlseqs -ctx -ctype -culater -Cunha -curcontext -curdir -curhistsize -curkeyword -curpath -currentartist -currentdir -currenttrack -cursored -curtheme -Customisation -CUTBUFFER -cvccvc -cvf -cvhs -cvjf -cvs -cvsexportcommit -cvsimport -cvsserver -cvvis -cvzf -cwd -cword -cxx -cya -cycledleft -cycledright -cygpath -cygstart -cygwin -cygwyn -czf -daemonize -daemonized -daemonizing -daemonset -dalias -dango -danielcsgomes -darcs -dartdoc -dartlang -dashdoc -DATABAGNAME -datafieldenc -datasift -datasourceclassname -datastore -datestamp -datetime -daylerees -dbbolton -dbconsole -dbfile -dbhome -dbhost -dbport -dbshell -dbsize -dburl -dbus -dbuser -dbvendor -dbvendorname -dccmd -dcdn -dce -dck -dcl -dclf -dco -dcom -dcommit -dcps -dcpull -dcr -dcrestart -dcrm -dcstart -dcstop -dcup -dcupb -dcupd -ddg -ddl -deadwyler -debian -debman -debuginfo -debuglevel -decr -decrby -DECSCUSR -defaultleasettl -defaultpackagedir -Defaultsfdx -defaultvs -defaultwebmodule -definitionfile -definitionjson -deinit -deinstall -delwin -denable -deno -dependencyfile -deploydir -deployers -deploymentplan -deps -depthfrom -dequote -dequoted -deref -derek -descr -dest -DESTDIR -destroot -desttype -devcenter -devdocs -devfolder -devicehost -devicemapper -deviceport -devlog -devops -devpath -dfa -dffx -dflt -dfmt -dfs -dhcp -dhcpd -dhcpip -dht -dhtrc -dhtt -diagdump -didexit -diffcore -diffmerge -diffs -diffsettings -difftool -digitalocean -diiirrrty -dijcaf -dircolors -dircycle -direnv -dirhistory -dirname -dirpath -dirpersist -dirs -dirstack -DIRSTACKSIZE -dirstat -dirver -disablemasking -disksize -diskutil -displayconfiguration -displayname -distcache -distcheck -distclean -distro -dists -django -djangojs -djangoproject -djangopypi -djview -djvu -dli -dlist -dls -dman -dmatching -dmesg -dmg -dna -dnf -dnfc -dnfgi -dnfgl -dnfgr -dnfi -dnfl -dnfli -dnfmc -dnfp -dnfr -dnfu -dng -dnote -dns -dnsmasq -dnsrr -doap -docck -dockerd -dockerdaemon -dockerenv -Dockerfile -dockerport -dockersearch -docopt -docset -docstring -doctl -doctorjellyface -dogenpunk -doitclient -domaindir -domainname -domainproperties -domterm -Donenfeld -dongweiming -donotwant -dopts -dotall -dotenv -dotest -dotfile -dotnet -doubledash -doublequotes -dowant -dpkg -drca -drcb -drcg -drcj -drcm -drcml -drcr -drct -drcv -drdmp -dren -dreurmail -drf -drfi -drfr -drfra -drfu -Driessen -drif -dris -driverclassname -drn -drnew -droid -dropandcreatetables -dropindexes -droplr -dropreplace -droptables -drpm -drpu -drst -drup -drush -drushrc -drv -drvd -drvg -drw -dsa -dselect -dsl -dssh -dst -dsupport -Dtest -dtrace -dts -duckduckgo -duf -dumpconfig -dumpdata -dumpfiles -duplessis -durationdays -durrheimer -dutchcoders -dvd -dvi -dwim -dwr -dylib -eal -eastermonday -eauth -ebuild -ecd -ecdsa -echotc -echoti -ecma -ecmerge -ecosia -ecto -editorcmd -edu -eecms -eed -eeval -efforted -efile -eframe -egrep -ein -Eisentraut -ejb -ekzsh -Eley -ELGNRCIS -elidable -elif -elim -elisp -elllen -elot -emacs -emacsclient -emacsfun -emacswiki -emails -emberjs -Emelianenko -emoji -emotty -enablesnoop -enacs -endswith -ent -entrypoint -enum -envsubst -envvar -enwom -eocw -EOH -eol -eoq -eow -eoww -eoy -EPOCHREALTIME -epochseconds -eprof -eread -erl -errlog -Errored -esac -escripts -essembeh -etcd -ethanschoonover -ets -etwlogs -euc -EUID -EULAs -eunit -evals -evalstatus -evan -eventlet -eventname -Evernote -Evt -exe -executables -execv -exfxcxdxbxbxbxbxbxbxbx -exfxcxdxbxegedabagacad -existentials -exitcode -exoscale -expandvars -expaning -expireat -expl -explaintypes -explicitouter -expn -expr -exps -exs -extcmd -extdirs -extendedglob -externalid -extmethods -fabfile -facebook -factoryclass -faidx -failconnection -failfast -failurefatal -fakeroot -faqs -fargs -Faroe -fasd -FASTA -fastcgi -fastfile -fastprint -FASTQ -favlist -fbterm -fcap -Fcart -fcgi -Fcrt -fcss -fdfind -fdlimit -feditor -fedoraproject -felipe -felixr -ffls -ffp -ffrm -ffsync -fghijk -fgrep -Fiala -fieldlist -Filemode -filepath -filesize -filestore -filesystem -filetype -filevaultmaster -FILLBAR -filtername -findpeer -findprovs -finetune -firefox -firewalld -firewalls -firstline -fishshell -fitzpatrick -fixmate -fixme -fixperms -FIXTERM -fizsh -fjs -flagstat -flatlist -flattach -flc -fldoc -flget -flickr -flowgraph -flowtype -flr -fluentd -flup -flushall -flushdb -flv -fnd -fnm -fns -Fnv -Folgers -fontello -foodcritic -foqtam -forall -forceoverwrite -forceupgrade -foreach -forrest -fortunecity -forw -fosmid -fotqoh -fpath -fprof -fqn -framep -frecency -frecent -freebsd -freenode -freqs -fri -Friesel -fromaddress -frontend -frontmost -fsc -fscache -fsck -fsl -fsmonitor -FSsh -fstgpy -ftp -fts -fucnul -func -funcsourcetrace -functrace -funtoo -Futuna -futuret -fwl -fwp -fwr -fwrp -fzf -fzfdirs -gaa -gallifrey -gamc -Gamera -gamscp -gapt -gasconfig -Gatorade -gatsbyjs -gav -gba -gbd -gbda -gbk -gbl -gbnm -gbr -gbs -gbsb -gbsg -gbsr -gca -gcam -gcan -gcasm -gcb -gcc -gccd -gccgo -gccgoflags -gcf -gcflags -gch -gcl -gclean -gcloud -gcm -gcmsg -gcn -gco -gcor -gcount -gcp -gcpa -gcpc -gcplogs -gcr -gcs -gcsm -gcssm -gdc -gdca -gdct -gdcw -gdd -gdm -gdnolock -gdt -gdup -gdv -gdw -geca -gecb -gecho -geclup -gecr -geeknote -gegi -geh -gei -geiall -gelcyv -gelf -geli -gemb -gemfile -gemoji -gemp -gemset -gemspec -gemy -generatekey -generatermistubs -genomecov -genpass -genpaths -genzshcomp -geoe -geoff -geoffgarside -getattr -getbit -getcomposer -getdir -geteip -getenv -getfasta -getgb -getip -getline -getln -getopt -getrange -getset -gettext -geun -gevent -Geza -gezalore -gfa -gfg -gfl -gflf -gflff -gflfp -gflfpll -gflh -gflhf -gflhp -gfli -gflr -gflrf -gflrp -gfo -gga -ggf -ggfl -ggl -ggp -ggpnp -ggpull -ggpur -ggpush -ggsup -ggu -ghci -ghf -ghff -ghfh -ghfr -ghfu -ghh -ghostrevery -gignore -gignored -gimmeh -giobi -gistcomment -gitbranch -gitbranchsize -gitcomp -gitcompadd -gitcompappend -gitcompletion -gitdir -gitex -gitfast -gitflow -github -gitignore -gitinfo -gitk -gitmodules -gitpod -GITSS -gitstatus -gitstring -gitweb -givero -gke -gkrellmd -glfsi -glfsls -glfsmi -glfst -glg -glgg -glgga -glgm -glgp -glidenote -glo -globalias -globals -globbing -globsubst -glods -glog -gloga -glol -glola -glp -gls -gma -gmail -gmom -gmtl -gmtlvim -gmum -Gneat -Gniazdowski -gnore -gnupg -goc -godoc -Godzilla -gof -gofa -gofmt -goga -Gohr -golang -gom -GOMAXPROCS -Gomes -Gonz -goodreads -google -googlecode -gop -gopath -gopb -GOROOT -goroutine -gota -gpf -gpg -gpgconf -gplfs -GPLv -gpoat -gpr -gpristine -gpsup -gpu -gpus -gpv -gradle -gradlew -graphviz -grb -grba -grbc -grbd -grbi -grbm -grbo -grbom -grc -greenend -greer -grename -grep -grepping -grev -grh -grhh -GRIMALDI -grk -Grlm -grm -grmc -grml -grmv -groh -grok -Grosenbach -groupby -groupinstall -grouplist -groupremove -groupsmap -growlnotify -grrm -grset -grss -grst -grt -gru -gruntfile -grup -grv -gsb -gsd -gsemet -gsh -gsi -gsps -gsr -gss -gst -gsta -gstaa -gstall -gstc -gstd -gstl -gstp -gstu -gsu -gsub -gsw -gswc -gswd -gswm -gtb -gtfo -gtl -gts -gtv -gua -Guake -Guerci -gui -guidovansteen -guitool -gulpfile -gulpjs -gunignore -gunwip -gunzip -gupa -gupav -gupv -gvim -gvimdiff -gwc -gwch -gwip -gwt -Gxfxcxdxbxegedabagacad -gxvx -gyazo -Gyver -gzip -Hackage -Hacktoberfest -hackzor -hacluster -hadouken -hai -haldaemon -Halis -Hamelink -hammertest -hanami -hanamirb -har -hardcoded -hardlinks -hardstatus -harishnarayanan -hashh -Hashicorp -haskell -haskellstack -Hasklig -hawaga -hax -HBAR -hbm -Hcode -hda -hdc -hdd -hdel -hdp -hdrs -hdtp -hdv -hea -healthcheck -healthcheckerinterval -healthcheckertimeout -healthcheckerurl -heduled -heg -Helens -helpmojo -heroku -hexdocs -hexdump -hexists -hga -hgb -hgba -hgbk -hgc -hgca -hgchangeset -hgco -hgd -hged -hget -hgetall -hgi -hgic -hgl -hglg -hglgp -hglr -hgm -hgo -hgoc -hgp -hgrc -hgrep -hgs -hgsl -hgun -hhatto -hhh -hidefiles -highlighter -hincrby -HISTCMD -HISTFILE -HISTNO -historywords -histsize -histsubstrsrch -hitokoto -hkeys -hkscs -hlen -hmget -hmset -Hocevar -hocho -hoeg -Homeboy -homepage -hostip -hostname -hostpath -hotfix -hotfixes -hotlist -hotpink -howto -howtorun -hpodder -href -hrg -hscolour -hscroll -hset -hsetnx -hsi -hsp -hsqldb -htm -html -htmlsingle -htop -htslib -HTT -http -httpd -httpie -httplisteners -httpparams -httpsrouting -httpstatus -hubflow -hukkan -humza -huyy -hvals -hyperlink -hypermedia -hyperv -hypervisor -iam -ian -ianchesal -ibest -icanhas -icanhazip -icba -icbi -icc -icode -icpaa -icpai -icpra -icpri -icra -icri -icrosoft -icrsa -icrsi -idlekeytimeoutseconds -idletimeout -idmv -idx -idxstats -ietf -ifargs -ifconfig -iflist -iglob -ignoredescriptoritem -ignoreerrors -ignorenonexistent -ignorewarnings -igv -ihasbucket -iiop -iiopport -ilikenwf -ilkka -ima -imageshack -imap -imatch -imatches -img -imgur -iminurbase -imnp -imonit -impl -implicits -importpath -inbox -incrby -indexopts -inet -infocmp -ini -initsql -inkytonik -inl -inliner -inlining -inplace -inprogress -Inproper -inputenc -inr -insecureskipverify -insns -inspectdb -inspr -instagram -Installable -installationkey -installationkeybypass -installdeps -installdir -installsuffix -instancealias -instanceport -instanceurl -instaweb -instrs -integ -Intellij -interactivecomments -interdiff -interfacename -interoperability -interp -Intf -inur -invicem -iojs -iokit -ionescu -ionicframework -iops -ioreg -ipa -ipaddr -ipam -ipamdriver -ipapp -ipc -ipcidr -ipe -ipfs -ipld -ipns -IPREFIX -ipsw -iptables -ipv -ipython -irb -irc -IRTY -isconnectvalidatereq -isdefaultprovider -isdeleted -isearch -isfile -isisolationguaranteed -isodate -isodatesec -isolationlevel -isredeploy -istio -ISUFFIX -isundeploy -iterm -itertools -itunes -ivan -Ivoire -ixfuk -izakaya -ize -jacc -jaccard -jaddr -jaischeema -jakefile -jakejs -Janke -japvyz -jarfile -JARIN -jarsigner -javabootclasspath -javac -javadoc -javaextdirs -javamail -javap -javascript -javax -jbm -jboss -jcon -jdbc -jdc -jdcds -jde -jdeps -JDK -jdkinternals -jdl -jdlr -jdm -jdmds -jdwp -jeb -jecdyq -ject -Jedis -jeffmhubbard -jenv -jenvdir -jepgad -jerryling -jestjs -jex -jexec -jfrog -jgitflow -jgpagent -jid -jimhester -jimweirich -jira -jis -jisse -jkc -jkenabled -JLine -jlist -jmc -jmsdbpassword -jmsdest -jmx -jndi -jndilookupname -jnrowe -jobid -jobspec -jobstates -jobtexts -jof -johnhamelink -joly -jonas -jonmosco -jorge -journald -jpeg -jpg -jpo -jprofile -jql -jquery -jra -jraw -jrel -jreld -jrm -jrmds -jrmrel -jrmsas -jrp -jrs -jrspec -jruby -jsa -jsh -jshc -jshm -json -jsonfunc -jsonpath -jsontool -jsp -jspa -jssl -jst -jstj -jsu -jsw -jukie -junegunn -junex -junit -junkbust -JUNKFOOD -Juraj -jvenant -jvm -jvmargs -jvmoptions -jwt -jwtkeyfile -jxr -kajrod -kalsi -kapeli -kapow -kate -Kaving -kbd -kca -kcbt -kccc -kcdc -kcgc -kclean -kcn -kcp -kcsc -kcub -kcuc -kcud -kcuf -kcuu -kdch -kdcj -kdcm -kdd -kde -kdel -kdelcj -kdelcm -kdeld -kdelf -kdeli -kdelno -kdelns -kdelp -kdelpvc -kdelsa -kdelsec -kdelss -kdi -kdialog -kdiff -kdm -kdno -kdns -kdp -kdpvc -kds -kdsa -kdsec -Keanu -kecj -kecm -keds -keepfailedstubs -keepreposdir -keepstate -kei -kepvc -kerndeb -kes -keti -kevinkirkup -kexec -kextload -kextunload -keybindings -keycap -keychain -keyfile -keygen -keymap -keymetrics -keypair -keyring -keyshares -keysize -keyspace -keythreshold -KEYTIMEOUT -keytooloptions -keywordisfresh -keywordmsg -keywordquickly -kga -kgaa -kgcj -kgcm -kgd -kgdsw -kgdw -kgdwide -kgi -kgno -kgns -kgp -kgpl -kgpn -kgpvc -kgpvcw -kgpw -kgpwide -kgrs -kgs -kgsec -kgssw -kgsswide -kgsw -kgswide -Khas -khome -killall -killit -Kindergarteners -Kitts -kiwiirc -kiwish -kjx -klf -Klingberg -knative -kni -knifecmd -knifesubcmd -knp -knu -koenig -Kombat -kompare -konsole -kotlin -kotlintest -kpf -kphoen -kpkg -kpp -kres -krh -Krivitsky -krsd -krsss -kru -ksc -ksd -ksh -ksharrays -kshautoload -kshglob -kshoptionprint -ksshaskpass -ksss -kthxbai -kts -kube -kubeconfig -kubectl -kubectx -kubens -kubeoff -kubeon -kubernetes -kungfoo -Kurapati -kwargs -kypkvcw -Kyrgyzstan -Lacheze -lambdalift -lando -langinfo -laravel -lart -lastcategory -lastcmd -lastfull -lastrun -lastsave -launchctl -lazyconnectionassociation -lazyconnectionenlistment -lazyvals -lbenableallapplications -lbenableallinstances -lbenabled -lblue -lbname -lbpolicy -lbpolicymodule -lbtargets -lbuf -LBUFFER -lbweight -lcmd -ldap -ldflags -ldot -leakreclaim -leaktimeout -leavebrowseropen -lein -leiningen -lemy -len -Lengyel -leonhartx -LESSCLOSE -lesskey -LESSKEYIN -LESSOPEN -letcat -leter -lexduv -lexer -lfs -lho -lhs -libc -libedit -libexec -libnotify -libp -libreadline -libsecret -lifecycle -lighthouseapp -limegreen -lindex -linearizer -linewords -linkcheck -linkname -linsert -linux -linuxcommando -linuxcontainers -linuxmain -liquibase -listeneraddress -listenerport -livecheck -liveserver -llc -LLCORNER -llen -llr -llvm -lmnop -lname -loadconfig -loaddata -loadorder -localhost -localonly -localoptions -localtime -localtraps -lockdown -lockfile -lodash -logcat -logdriver -logentries -logfile -logid -loginurl -loglevel -logname -logreportederrors -logrotate -logtype -lol -lowerip -lpop -lpr -lpush -lpushx -lrange -lrbu -LRCORNER -lrem -lrh -lrp -lrt -lrunzip -lrz -lrzip -lrzuntar -lsa -lsb -lscolors -lset -lsof -lstheme -lstrip -lto -ltrim -lubs -lucentbeing -lvi -lways -lwc -lwd -lxc -lxd -lzcat -lzip -lzma -lzo -lzop -LZW -Maarten -macos -macports -macromates -Maeda -Magento -magerun -magicequalsubst -magick -mailhost -mailinfo -mailmap -mailnull -mailrc -mailsplit -mailuser -mainporcelain -maintail -maintainership -makecache -MAKEFLAGS -makemessages -makemigrations -makewindows -managedreleased -managepy -manni -manpage -manpath -mapcar -mapfile -mappedpassword -mappedusername -markname -markpath -maskfasta -maskray -masq -massimiliano -matchconnections -mathfunc -Mattern -Matth -matthewratzloff -matthr -maxbytes -maxchildren -maxconnectionscount -maxconnectionusagecount -maxdepth -maxleasettl -maxpoolsize -maxqueuesize -maxrank -maxrate -maxrequests -maxspare -maxtasksperchild -maxthreadpoolsize -maxwait -Mayen -Mayra -mbean -mbegin -mbologna -mbox -mboxrd -mbp -mca -mcl -mcm -mco -mcornella -mct -mdapi -mdb -mde -mdi -mdn -mds -meanlife -mediawiki -megazord -meh -Mek -mekanics -memprofile -memprofilerate -memq -menuselect -MENUSIZE -mergetool -mergewebxml -merkledag -Mery -messagebus -messagestoretype -metacpan -metadata -metricscollector -mfa -mfaerevaag -mfs -mget -miam -michelebologna -microk -microsoft -middleware -midsommar -midsommarafton -mikeh -millis -mindepth -minfds -minidisc -minikube -minlogprob -minprocs -minspare -minthreadpoolsize -mirko -mirrorlist -mixin -mkcd -mkdir -mkdirs -mktag -mktemp -mktree -mkv -mkvirtualenv -mla -mldonkey -Mleb -MLH -mli -mlo -mlog -mlp -mls -mlterm -MMA -mmap -mmin -mng -mnt -moar -modded -modifiedlastdays -modulename -Moldova -mongocli -mongodb -monit -monitorable -monokai -Morote -Mosco -mosh -mostfrequent -MOTD -mountpoint -mov -moyai -mozilla -mpa -mpeg -mpileup -mpkg -mplayer -mplex -mpr -mputniorz -mqhost -mqpassword -mqport -mquser -mre -mrp -mset -msetnx -msgnum -msgs -msh -msil -msp -mst -msvs -msw -msys -msysgit -mtime -mtu -Mudkipz -multiaddresses -multibase -multicastaddress -multicastport -multicov -multihashes -multiinter -multiline -multios -multiset -mumpub -munication -MURI -muscato -mutex -muxer -mvim -mvn -mvnag -mvnboot -mvnc -mvncd -mvnce -mvnci -mvncie -mvncini -mvncist -mvncisto -mvncom -mvncp -mvnct -mvncv -mvncvst -mvnd -mvndocs -mvndt -mvne -mvnfmt -mvnjetty -mvnp -mvnqdev -mvnsrc -mvnt -mvntc -mvnw -Mvt -Myanmar -myapp -myargs -myd -mydeb -myers -myfile -myfirstnamemylastname -mygit -myissues -mymark -myns -myprop -mypy -myrole -myserver -mysql -mysqladmin -mysqlrestart -mysqlstart -mysqlstatus -mysqlstop -mytime -myuser -myvalue -myvirtualenv -myzsh -nables -nagios -naliases -nameddirs -namespace -namesys -nanoant -nanoc -Narayanan -Naruto -nativelibrarypath -ncd -ncipe -NCOLOR -ncpu -ncs -ncv -ndjson -NDUw -NEm -nenv -neovim -netbsd -netdump -netloc -netmask -netstat -networkdriver -networklisteners -neuralsandwich -newcons -newpl -newvol -nextgenthemes -nfsnobody -nfunctions -nginx -ngnix -ngth -nhelp -nhistory -nhughes -nicoulaj -Nicoulaud -nixos -nkeywords -nkill -nle -nlinux -nlist -nmap -nmatches -Nmh -Nms -Nmw -noacl -noancestors -noargs -noautonamedirs -noautopushd -noblock -nobootcp -nobreak -nocache -nochunk -nocleanup -nocolor -nocopy -nocorrect -nodaemon -nodedir -nodefaultpolicy -nodegroup -nodehost -nodeid -nodejs -nodense -nodestatus -noexec -noexpand -noglob -noheading -nohelpers -nohup -noinput -nojline -noksh -nomadproject -nomnom -nomz -nonamespace -nondistributable -nongnu -NONINFRINGEMENT -nonomatch -NONSELECTABLE -nontransactionalconnections -nopassword -noposixbuiltins -noprofile -noprompt -nopromptsubst -noptions -nopushdminus -norc -noreload -NORMARG -NORRIS -noshortloops -noshwordsplit -nospace -nosplash -nostatic -nostatus -nostream -notactive -notailcalls -notest -nothreading -notifu -notnull -nounit -noverbose -nowai -nowarn -noword -noyes -NPAGE -npanelize -npm -npmd -npmg -npmi -npmjs -npmrc -npmst -npmt -npr -nproc -npu -npx -nroff -nscd -nsu -nthemes -ntlp -ntp -ntu -nubxa -nuc -nuget -numstat -nvcsformats -nvie -nvimdiff -nvm -nvmrc -Oakv -oanward -oathtool -OAuth -objectname -objectsize -objecttype -obsrun -obtw -octocat -octozen -oden -ofd -ogg -ogm -ohmyz -ohmyzsh -oid -oldp -oldpatmat -OLDPWD -OMITSPARSESTATE -OMMIT -omz -omztemp -onbehalfof -oneline -onlyrepos -onoz -ooanward -oom -openbsd -opendiff -openr -openshift -opensource -openssh -openstack -opensuse -openvpn -openw -OPTARG -optimisations -OPTIND -orderby -orgdir -orgs -oris -ority -orm -ornicar -orss -osascript -osname -osscan -ostype -osver -osx -oth -otp -otpcode -Ouellet -oug -outfh -outfile -outfilebase -outfilename -outlog -outputdir -outputtedto -Outputters -pacac -pacaur -pacdisowned -pacfiles -pacfileupg -pacin -pacinsd -packagecreaterequestid -packageid -packagekitd -packagename -packageobjects -packagephobia -packagetype -packageversionid -paclist -pacloc -pacls -paclsorphans -pacman -pacmanallkeys -pacmansignkeys -pacmir -pacoc -pacown -pacre -pacrem -pacrep -pacrmorphans -pacupd -pacupg -pacweb -pagage -pagename -painsd -pairtobed -pairtopair -paloc -palst -pamc -pame -pamf -pamfa -pamir -pamj -paml -pamm -pamn -pamp -pampp -pamr -pamt -panelize -paorph -paperclips -paqf -paqft -paql -paqr -paqt -paqw -paralint -params -parem -parep -PARGON -parhaat -paroc -parseable -parseopt -parwok -passivepopup -passphrase -passthrough -passthru -passwd -passwordstore -pastebin -pasu -patchformat -pathspec -patmat -patshead -paupd -paupg -pausedservices -pavic -paypal -paypalobjects -pbcopy -pbi -pbl -pbo -pbpaste -pbs -pbu -pcap -pch -pchk -pcl -pcmode -pcpu -PCR -pcre -pdf -PDoc -peb -peepcode -peerid -pem -percol -perflog -perl -perlbrew -perldoc -permset -permsetname -petere -peterhoeg -Pfenniger -pfs -pgp -pgpkeys -pgr -pgrep -pgs -phab -phing -phome -php -phx -pid -pidev -pidfile -pidof -pigz -pipenv -pipestatus -pipfile -pipir -piplist -pipreq -pipunall -pipupall -Pitcairn -pjdb -pjo -PKGBUILD -pkgfile -plaetinck -planetargon -playlists -playpause -ple -pleted -plist -Plug'n -plugin -pluginsdir -plz -pmat -pmd -pmin -pmset -png -pnp -podfile -podspec -policyconfigfactoryclass -policyproviderclass -polipo -polkitd -poo -poolname -poolresize -Poorter -popd -Popen -porcheron -portbase -portdir -Portfile -portlist -portname -posix -possen -posteo -posterasure -postgres -postinstallurl -posva -powd -powed -Powerline -poweroff -powershell -powify -powit -PPAGE -ppap -ppid -ppy -precache -precaire -precmd -precompilejsp -precompilewait -predef -preexec -prefetching -prefiltered -prefork -preload -premajor -preminor -prepatch -prepends -prepopulate -prettylist -previewer -prevword -pri -princ -principalsmap -printenv -printf -printflags -printprompt -privhist -privoxy -procfs -procs -prodlog -progfile -projectname -PROMPTCOLOR -PROMPTPREFIX -promptsize -promptsubst -promptvars -propget -proplist -protobuf -providertype -prun -pscpu -pseudoword -psgrep -psh -psmem -psprint -pstadler -pstree -psu -psubscribe -psy -psykorebase -pthree -ptot -ptree -pubgrub -publishwait -pubsub -puni -punsubscribe -puo -pushd -pushdefault -pushdf -pushdignoredups -pushdminus -pushdsilent -pushln -pushremote -pushurl -Putniorz -pvc -pvenv -pvm -pwd -PWDCASECORRECT -PWDLEN -pwdsize -pwdx -pwgen -pwh -pwned -pxd -pxy -pybundles -pyc -pycache -pyclean -pyenv -pyenvdirs -pyfind -pygmentize -pygments -pygrep -pylint -pypa -pypi -pytb -pytest -pythonhosted -pythonpath -pythonrc -PYTHONSTARTUP -PYTHONUSERBASE -pyuserpaths -Qdt -qiqmiq -qkey -qlmanage -qpwd -Qql -Qqo -qqq -qqwtzgejwgqve -Qtdq -quarkus -quicklisp -quickstart -quiltimport -qunit -qunitjs -quotationspage -quotedir -quu -quux -qwant -qwerty -qxtm -qyjti -rabin -rackspace -rackup -radvd -raek -Rakefile -raname -randomkey -rangepos -rar -ratijas -rawurldecode -rawurlencode -rbenv -rbenvdirs -rbfu -RBUFFER -rbw -rcfile -Rchive -rcs -rdargument -rdb -rdc -rdd -rdependents -rdeps -rdm -rdmd -rdmr -rdmtc -rdmu -rdoc -rdp -rdr -rds -rdsl -rdtc -rdtp -reactjs -readline -readlink -readme -readonly -readthedocs -readtimeoutmillis -Reagle -realcmd -reauthor -rebased -rebases -rebasing -receivepack -reddit -redirectport -redis -rediscli -redistrubute -redzone -reencode -reexec -refactor -refchecks -reflogs -refmap -refname -refspec -regex -regexes -regexn -regexp -reheader -reintializes -Reitsma -rej -reldates -reldist -releasenotesurl -releaseversion -relid -reloadinterval -reloadpost -reltool -remco -remoteonly -remotetestdir -removegroups -removeprincipals -removeusergroups -renamenx -rephorm -replacetokens -repow -reprovider -requestauthrecipient -requestauthsource -requestid -rerere -resetstat -resolv -resolvemsg -responseauthrecipient -responseauthsource -responsetimeout -restartpost -restype -resultformat -retcode -retlog -retrievefile -retrievetargetdir -returncode -RETVAL -revdeps -revlist -rfa -rfakeroot -rfap -rfbu -rfc -RFh -rfind -rgm -rhash -rinass -rinf -ripgrep -riseup -RIXIUS -rlc -Rli -rlib -Rlvi -rmacs -rmcup -rmd -rmdir -rmdsstore -rmdup -rmi -rmkx -rnand -rnatv -rnaw -rnios -rniosse -rniosx -rniosxr -rniosxsm -rnipad -rnipada -rnipadm -rnipadp -rnipadr -rnland -rnlink -rnlios -rns -robby -robbyrussell -ROLENAME -rollbackonerror -rootdir -rosrc -roswell -ROSWELLPATH -roundhoused -routecookie -rpath -rpc -rpcuser -rpmpackage -rpms -rpo -rpop -rpoplpush -rprompt -rpush -rpushx -rra -rrg -rsa -rsb -rsd -rset -rsh -rsp -rspec -rsrra -rst -rsto -rstrip -rsync -rtfm -rtkit -rtorrent -rts -rubocop -rubygems -rubyonrails -rubyprompt -rubypromptsize -rubyversion -Rudkin -rulz -runfcgi -runningservers -runningservices -runpy -runserver -runtests -runtfile -runtimes -RUNZSH -Ruslan -ruslanspivak -rustc -rustup -Rvi -rvm -rvmprompt -rvmpromptsize -rxvt -saas -sadd -salesforce -samtools -sandboxed -SAVEHIST -savelogin -savemasterpassword -sba -sbc -sbcc -sbcln -sbco -sbcp -sbcq -sbd -sbdc -sbdi -sbgi -sbin -sbp -sbpl -sbr -sbrake -sbrm -sbt -sbu -sbx -scalac -scaladoc -scalatest -scaleway -scandeps -scard -scd -scdalias -scdaliases -scdhistory -scdignore -scgi -sched -scheduledrundatetime -Schlatow -scm -scmpublish -scorpius -scottkidder -scp -screencast -screenshot -SCTP -scu -scutil -scw -scwsearch -sdiff -sdiffstore -sdist -sdk -sdkman -Sdl -sdurrheimer -Seagal -searchterm -seccomp -securityenabled -securitymap -securitytype -segfault -selectables -selectionkeyhandler -selectiveanf -selectivecps -selectorpolltimeoutmillis -selfupdate -selinux -semver -sendemail -sendperiod -serialfile -serialno -serverlist -servername -serverurl -serviceproperties -serviceuser -servlet -setab -setaf -setalias -setapp -setbit -setdefaultdevhubusername -setdefaulttimeout -setdefaultusername -setenv -setex -setnx -setopt -setprompt -setrange -sfcl -sfcontainer -sfcw -sfdc -sfdev -sfdx -sfdxcli -sfdxurl -sfdxurlfile -sfffe -sfgb -sfgc -sfgcom -sfge -sfn -sfprod -sfroute -SFSB -sfsr -sfsu -sftp -sfx -sgem -sgr -sgrep -sgtatham -shasum -sheerun -shellcheck -shellinit -shellperson -SHELLPROXY -shitload -SHLVL -shm -Shohei -shopt -shortlist -shortlog -shortname -shortstat -SHOWCOLORHINTS -showcurrentpatch -showdeprecated -SHOWDIRTYSTATE -showfiles -showformat -showmigrations -showpkg -SHOWSTASHSTATE -showsubclasses -SHOWUNTRACKEDFILES -showupstream -shpotify -shuf -shunit -Shyamshankar -sid -sidekiq -sideload -SIGINT -SIGKILL -sigs -SIMBL -Sindre -sindresorhus -singlechar -singlepackage -Sint -sinterstore -sirech -sismember -sitecookbooks -sitesearch -sjis -skintone -skiptraceflag -skitch -slaveof -slicehost -sln -slogin -slp -smacs -smartlist -smartsync -smcup -smembers -smerge -smkx -Smood -smove -smt -smtp -Smurf -snapshotname -snowboarder -sobject -sobjectid -sobjecttreefiles -sobjecttype -sobjecttypecategory -socio -socw -softlayer -solaris -som -soq -soql -Sorhus -sorin -sortconip -sortcons -sortnr -sortr -sourceapiversion -sourced -sourcedir -sourcefile -sourceforge -sourceorg -sourcepath -sourcetype -sourcing -soww -soyc -spacewander -spam -spd -spearce -speartail -spf -spi -Spivak -splitbrain -splitlines -splunk -spock -spop -spork -spotify -springframework -sprintf -sprunge -spu -spx -sql -sqlall -sqlc -sqlclear -sqlcustom -sqldropindexes -sqlflush -sqlindexes -sqlinitialdata -sqlq -sqlsan -sqlsequencereset -sqltracelisteners -squashmigrations -srake -srandmember -src -srem -ssh -sshd -sshkey -sshkeyfile -sshkeypassphrase -sshpassword -sshport -sshpublickeyfile -sshuser -ssl -sslproxyhost -sslproxyport -ssm -sso -sst -sstat -stackoverflow -stacktrace -stagedstr -standalone -standaloneonly -startapp -startpage -startpost -startproject -startswith -startus -statd -statedb -statefile -statefulset -statelist -statementcachesize -statementleakreclaim -statementleaktimeout -statementtimeout -STATESEPARATOR -staticlib -statuspost -stderr -stdin -stdio -stdlayout -stdlib -stdout -steadypoolsize -stedolan -steeef -sterr -stevelosh -stgit -stil -STITLE -stn -stoppedservers -stoppedservices -stoppost -stopwait -storeprotocol -storeprotocolclass -stp -strfile -strftime -stringification -stringified -stringify -stripspace -strlen -strverscmp -Strzelecki -sts -stt -stty -stu -stylesheets -subcmds -subdigital -subdir -subdomain -subfolder -Subhaditya -subl -sublimemerge -sublimetext -subm -subnut -subpage -subpath -subscriberfile -subscriberorg -subservices -subshells -subspec -substr -subsubcmds -Subsubcommands -Subsubsubcommands -sudo -sudoedit -suitenames -sunaku -sunion -sunionstore -supad -superaccessors -supervisorctl -supervisord -suppresscc -suprl -suprm -suprr -suprs -supso -supsr -supu -Suraj -surryhill -suse -svcat -svg -svm -svn -svnsync -svntrunk -swiftc -swiftpm -sxa -sxc -sxd -sxf -sxfn -sxm -sxn -sxp -sxu -sxw -sxy -sykora -symfony -symkinds -symlink -Symlinking -symref -syms -syncdb -SYNOPSYS -syns -syohex -sys -sysadmins -sysctl -syslog -sysread -sysroot -systemadmin -systemctl -systemd -systeminfo -systemproperties -Syu -Syua -Syy -Tabone -tagname -tailcalls -Tajikistan -takedir -takegit -takeurl -tanabata -tarball -tarfile -targetcut -targetdevhubusername -targetprotocol -targetted -targetusername -Tasche -Tascii -taskwarrior -Tassilo -tatooine -tavric -tbz -tcl -tcp -tcpdump -tcpip -tcpnodelay -tcsh -tdiff -tdiffstr -tempdir -tempfile -tempfilename -TEMPLATENAME -terday -termcap -termcolor -Termfile -terminalapp -terminfo -terminitor -termsupport -termux -TERMWIDTH -terraform -terremark -testflag -testfunc -testlevel -testlog -testname -testng -testrb -testrunid -testrunner -testserver -textastic -textasticapp -textconv -textfile -textmate -tformat -tfstate -tftp -tfvars -tgz -thedir -thefuck -themeisfresh -thememsg -there're -thibault -thisfcn -Thoumie -threadpool -threadpoolid -thu -tif -timeoutmsec -timeremaining -timetolive -timewait -timothybasanov -tion -titlebar -tjkirch -tkachenko -tkdiff -tkss -tksv -tldr -Tlp -tls -tlscacert -tlscert -tlsciphers -tlsenabled -tlskey -tlsrollbackenabled -tlsverify -tlz -tmp -tmpdir -tmpfile -tmpfs -tmux -tmuxinator -tne -tnn -tobed -todo -Tokenise -tokenized -tolower -tomee -tonotdo -toolchain -toolcp -toplevel -Toponce -torrez -torromeo -tortoisemerge -totp -totpkey -Touron -tput -traceroute -trackball -transactionlogdir -transactionsupport -transferencoding -transprotocol -transprotocolclass -trapd -trconf -triggerevents -triggername -trins -trinsd -trizen -trloc -trlst -trmir -Troiae -Trojanowski -trorph -trre -trrem -trrep -trsu -trunc -trupd -trupg -tsdh -tsl -ttl -ttr -ttyctl -ttys -tview -twohead -txl -txn -txo -txs -txz -tycho -typechecking -typescriptlang -typesetsilent -typespec -typoes -tzst -uapprox -uberjar -Ubfksu -ubuntu -udp -uescape -UFE -ufw -uid -ukpog -ULCORNER -ulimit -Ullrich -ultiple -umask -umd -umich -unace -unalias -uname -unarchive -Uncomment -uncommit -uncompress -uncurry -undelete -undeploy -unedit -unescape -unexport -unexpose -unfunction -unhash -unheap -unhost -unicode -unidiff -unindex -uninst -uninstall -uninstalling -unionbedg -uniq -uniqid -uniquetablenames -unittest -universalarchive -unixfs -unixstamp -unlimit -unlzma -unmark -unmatch -unmonitor -unmute -unpause -unrar -unreachability -unsetopt -unshallow -unshare -unstagedstr -unstartup -unsubscribe -untag -unversioned -unwatch -unwip -unxz -unzstd -updatedb -updateonsave -updatestartuptty -upgr -upgradable -upgradetype -uploadpack -upperip -upsert -urandom -URCORNER -uri -url -urldecode -urlencode -urllib -urlmatch -urlonly -urlparse -urlstring -urltools -urxvt -usb -usbmux -usejavacp -uselimit -usemasterpassword -usergroups -userguide -userland -username -userns -userpass -userpassword -usetoolingapi -usetty -usr -utc -utf -utils -utm -uucp -UUID -Vagrantfile -vagrantup -valentinbud -validateatmostonceperiod -validateddeployrequestid -validateschema -validationclassname -validationmethod -validationtable -Valodim -vals -varargs -vared -varkey -varname -vaultproject -vba -vbl -vbm -vbo -vbox -vbqs -vbr -vbu -vcf -vcmp -vcs -vcsa -vdf -vectorize -Venant -vendored -venv -Verhoef -Verma -VERSINFO -versioncomp -versiondescription -versioned -versioning -versionname -versionnumber -versiontagprefix -verstr -vfs -vgi -vgrepping -vgs -vguerci -vhost -vhsp -vicmd -viewtopic -viins -vimdiff -vimgrep -vimrc -violenz -viopp -virtenv -virtualbox -virtualenv -virtualenvwrapper -virtualizing -virtualservers -virumque -visitpage -visualforce -visualstudio -VMDK -VMs -vmwarefusion -vmwarevcloudair -vmwarevsphere -vnc -vncviewer -vnd -voggom -Voldemort -volumedriver -vonnegut -Vop -vopts -vpaivatorres -vpc -vpli -vpll -vplu -vplun -vpr -vrdp -vre -vrp -vsc -vsca -vscd -vscde -vscg -vscie -vscl -vscn -vscode -vscodium -vscr -vscu -vscue -vscv -vscw -vsh -vsix -vsp -vsplit -vssh -vsshc -vssp -vst -VTE -vterm -Vue -vuejs -vulns -vulscan -vundle -vup -vvsp -vvv -vwxyz -vydpig -waittime -wakeonlan -walle -wantlist -warpdir -warprc -wav -wclip -wcomp -Webchat -weblog -webm -webrick -webscr -webserver -website -webtraffic -Wegner -Weiming -Weirich -Wez -wfilter -wget -whatchanged -whatisthor -whatthecommit -whatwg -whitespacelist -whl -whoami -wiki -wikipedia -wil -willmendesneto -wincmd -windowid -windowsdomain -windowspassword -windowsuser -wip -wjst -wks -wlne -wolframalpha -womens -wordbits -WORDBREAKS -WORDCHARS -wordlist -wordpress -workaround -workdir -workflow -workon -workpass -workqueues -workspaces -worktree -would've -wrapjdbcobjects -writetimeoutmillis -WSL -wslpath -wtf -wtfpl -www -wwwrun -Wzf -xargs -xcb -xcconfig -xcdd -xchm -xclick -xclip -xcode -xcodebuild -xcodeproj -xcp -xcsel -xcselv -xcworkspace -XDCHDSBDSDG -xdg -xdvi -xfn -xfree -xfs -xit -XIVIEWER -xjnmahqewy -xkcd -Xkten -XLBUFFER -xlbuflines -xml -xnode -xontab -xor -Xout -xperl -xphp -xpi -xpm -xpowered -xprop -xpython -XRBUFFER -xrbuflines -xruby -xsel -xshell -xstrat -xterm -XTRACE -xudmec -xunit -xvf -xvjf -xxd -xxdiff -Xxjn -xzcat -yaconf -yain -yainsd -yaloc -yalst -yamir -yaml -yandex -yandsearch -Yanovich -yaorph -yarem -yarep -yarnpkg -yarnrc -yasu -yaupd -yaupg -ybalrid -ycc -yesorno -yga -ygi -ygl -ygr -ygrm -ygu -yii -yiic -yiiframework -yireo -yleo -ylep -yli -yln -ylnf -yls -ymc -yml -yolo -Yonchu -YOSHIDA -yout -youtube -yrl -yrm -yrun -yst -ytc -yuc -yui -yuil -yuyuchu -yws -yyy -yzf -zadd -zake -zal -zall -zas -zbell -ZCA -zcard -zcl -zcompcache -zcompdump -zcompile -Zconvey -zcount -zcu -zcurses -zdbc -zdbcm -zdbm -zdbmigrate -zdbr -zdbreset -ZDgw -zdharma -zdirs -zdotdir -zdup -zenerate -zenmap -zerver -zfs -zgen -zgrep -zhimingwang -zhse -zic -zif -zin -zincrby -zinit -zinr -zinterstore -zipalign -zipfile -zkat -zle -zleparameter -zlicenses -zll -zlogin -zlogout -zlp -zlr -zls -zlu -zma -zmodload -zmr -zms -znr -znt -zocmez -zonsole -zoxide -zpa -zparseopts -zpatch -zpattern -zpch -zpchk -zpd -zplg -zplug -zplugin -zproduct -zprofile -zps -zpt -zrake -zrange -zrangebyscore -zrank -zref -zregexparse -zrem -zremrangebyrank -zremrangebyscore -zrevrange -zrevrangebyscore -zrevrank -zrl -zrm -zrn -zrr -zrs -zscore -zse -zsh -zsh'ed -zshaddhistory -zshcmd -zshcommands -zshcompfunc -zshconfig -zshell -zshenv -zshexpn -zshids -zshrc -zshtheme -zshwiki -zshzle -zsi -zsocket -Zsolt -zsource -zspec -zsr -zsrc -zst -Zstandard -zstat -zstd -zstdcat -zstyle -zsw -ztart -ztos -zucumber -zunctional -zunionstore -zunits -zunner -zup -zutil -zvcmp -zve -zweep -zwip -ZWJ -zwp -zxvf -zyg -zypper -zzz diff --git a/zsh/.github/actions/spelling/patterns.txt b/zsh/.github/actions/spelling/patterns.txt deleted file mode 100644 index 93dfa20..0000000 --- a/zsh/.github/actions/spelling/patterns.txt +++ /dev/null @@ -1,73 +0,0 @@ -# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns - -# YouTube -https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]* -<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"] -\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]* -# Google Analytics -\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* -# Google APIs -\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+ -\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) -# Google Calendar -\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+ -\w+\@group\.calendar\.google\.com\b -# Google DataStudio -\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|) -# The leading `/` here is as opposed to the `\b` above -# ... a short way to match `https://` or `http://` since most urls have one of those prefixes -# Google Docs -/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/? -# Google Drive -\bdrive\.google\.com/file/d/[0-9a-zA-Z_?=]* -# Google Groups -\bgroups\.google\.com/(?:forum/#!|d/)(?:msg|topic)/[^/]+/[a-zA-Z0-9]+(?:/[a-zA-Z0-9]+|) -# Google themes -themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+. -# Google CDN -\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]* -# Goo.gl -/goo\.gl/[a-zA-Z0-9]+ -# Google Chrome Store -\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|) -# Google Books -\bbooks\.google\.(?:\w{2,4})/books\?[-\w\d=&#.]* -# Google Fonts -\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]* - -# GitHub SHAs -\bapi.github\.com/repos/[^/]+/[^/]+/[^/]+/[0-9a-f]+\b -(?:\[[0-9a-f]+\]\(https:/|)/(?:www\.|)github\.com/[^/]+/[^/]+(?:/[^/]+/[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|) -\bgithub\.com/[^/]+/[^/]+[@#][0-9a-f]+\b -# githubusercontent -/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]* -# gist github -/gist\.github\.com/[^/]+/[0-9a-f]+ -# git.io -\bgit\.io/[0-9a-zA-Z]+ -# GitHub JSON -"node_id": "[-a-zA-Z=;:/0-9+]*" -# Contributor -\[[^\]]+]\(https://github\.com/[^/]+\) -# GHSA -GHSA(?:-[0-9a-z]{4}){3} - -LS_COLORS=(["']).*?\g{-1} - -(\\?)%[a-zA-Z]+\g{-1}(?!%) - -# URL escaped characters -\%[0-9A-F]{2} -# hex digits including css/html color classes: -(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b - -# https://www.gnu.org/software/groff/manual/groff.html -# man troff content -\\f[BCIPR] - -# Compiler flags -[\t "'`=]-[LPWXY] -[\t "'`=]-D(?!ebian) - -# ignore long runs of a single character: -\b([A-Za-z])\g{-1}{3,}\b diff --git a/zsh/.github/actions/spelling/reject.txt b/zsh/.github/actions/spelling/reject.txt deleted file mode 100644 index a5ba6f6..0000000 --- a/zsh/.github/actions/spelling/reject.txt +++ /dev/null @@ -1,7 +0,0 @@ -^attache$ -benefitting -occurence -Sorce -^[Ss]pae -^untill -^wether diff --git a/zsh/.github/workflows/main.yml b/zsh/.github/workflows/main.yml index cdadc14..50e00f9 100644 --- a/zsh/.github/workflows/main.yml +++ b/zsh/.github/workflows/main.yml @@ -10,6 +10,10 @@ on: branches: - master +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + jobs: tests: name: Run tests diff --git a/zsh/.github/workflows/project.yml b/zsh/.github/workflows/project.yml index 8007615..b221989 100644 --- a/zsh/.github/workflows/project.yml +++ b/zsh/.github/workflows/project.yml @@ -1,9 +1,13 @@ name: Project tracking on: issues: - types: [opened] + types: [opened, reopened] pull_request_target: - types: [opened, synchronize] + types: [opened, reopened, synchronize] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true jobs: add-to-project: diff --git a/zsh/CONTRIBUTING.md b/zsh/CONTRIBUTING.md index 6051428..2bd8778 100644 --- a/zsh/CONTRIBUTING.md +++ b/zsh/CONTRIBUTING.md @@ -47,7 +47,7 @@ It should include the data gathered as indicated above, along with: 2. What the correct behavior should be 3. What the actual behavior is -Please copy to anyone relevant (_eg_ plugin maintainers) by mentioning their GitHub handle +Please copy to anyone relevant (e.g. plugin maintainers) by mentioning their GitHub handle (starting with `@`) in your message. We will do our very best to help you. @@ -59,7 +59,7 @@ your suggestion. If you find one, comment on it so we can know there are more people supporting it. -If not, you can go ahead and create an issue. Please copy to anyone relevant (_eg_ plugin +If not, you can go ahead and create an issue. Please copy to anyone relevant (e.g. plugin maintainers) by mentioning their GitHub handle (starting with `@`) in your message. ## Submitting Pull Requests @@ -99,10 +99,10 @@ covering or related to what you want to add. If you find one, try it out and work with the author on a common solution. -If not, then go ahead and submit a PR. Please copy to anyone relevant (_eg_ plugin +If not, then go ahead and submit a PR. Please copy to anyone relevant (e.g. plugin maintainers) by mentioning their GitHub handle (starting with `@`) in your message. -For any extensive change, _eg_ a new plugin, you will have to find testers to +1 your PR. +For any extensive change, such as a new plugin, you will have to find testers to +1 your PR. ---- diff --git a/zsh/LICENSE.txt b/zsh/LICENSE.txt index becd6a7..2d7ca6f 100644 --- a/zsh/LICENSE.txt +++ b/zsh/LICENSE.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2009-2021 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) +Copyright (c) 2009-2022 Robby Russell and contributors (https://github.com/ohmyzsh/ohmyzsh/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/zsh/README.md b/zsh/README.md index 94a2008..1e4b7ff 100644 --- a/zsh/README.md +++ b/zsh/README.md @@ -1,4 +1,4 @@ -

Oh My Zsh

+

Oh My Zsh

Oh My Zsh is an open source, community-driven framework for managing your [zsh](https://www.zsh.org/) configuration. @@ -18,6 +18,41 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://twi [![Gitpod ready](https://img.shields.io/badge/Gitpod-ready-blue?logo=gitpod)](https://gitpod.io/#https://github.com/ohmyzsh/ohmyzsh) [![huntr.dev](https://cdn.huntr.dev/huntr_security_badge_mono.svg)](https://huntr.dev/bounties/disclose/?utm_campaign=ohmyzsh%2Fohmyzsh&utm_medium=social&utm_source=github&target=https%3A%2F%2Fgithub.com%2Fohmyzsh%2Fohmyzsh) +
+Table of Contents + +- [Getting Started](#getting-started) + - [Prerequisites](#prerequisites) + - [Basic Installation](#basic-installation) + - [Manual inspection](#manual-inspection) +- [Using Oh My Zsh](#using-oh-my-zsh) + - [Plugins](#plugins) + - [Enabling Plugins](#enabling-plugins) + - [Using Plugins](#using-plugins) + - [Themes](#themes) + - [Selecting a Theme](#selecting-a-theme) + - [FAQ](#faq) +- [Advanced Topics](#advanced-topics) + - [Advanced Installation](#advanced-installation) + - [Custom Directory](#custom-directory) + - [Unattended install](#unattended-install) + - [Installing from a forked repository](#installing-from-a-forked-repository) + - [Manual Installation](#manual-installation) + - [Installation Problems](#installation-problems) + - [Custom Plugins and Themes](#custom-plugins-and-themes) +- [Getting Updates](#getting-updates) + - [Manual Updates](#manual-updates) +- [Uninstalling Oh My Zsh](#uninstalling-oh-my-zsh) +- [How do I contribute to Oh My Zsh?](#how-do-i-contribute-to-oh-my-zsh) + - [Do NOT send us themes](#do-not-send-us-themes) +- [Contributors](#contributors) +- [Follow Us](#follow-us) +- [Merchandise](#merchandise) +- [License](#license) +- [About Planet Argon](#about-planet-argon) + +
+ ## Getting Started ### Prerequisites @@ -32,12 +67,12 @@ To learn more, visit [ohmyz.sh](https://ohmyz.sh), follow [@ohmyzsh](https://twi Oh My Zsh is installed by running one of the following commands in your terminal. You can install this via the command-line with either `curl`, `wget` or another similar tool. | Method | Command | -|:----------|:--------------------------------------------------------------------------------------------------| +| :-------- | :------------------------------------------------------------------------------------------------ | | **curl** | `sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` | | **wget** | `sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` | | **fetch** | `sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` | -_Note that previous configuration in `.zshrc` will be placed in `.pre-oh-my-zsh`. After installation you can move configuration you want to preserve into `.zshrc`._ +_Note that any previous `.zshrc` will be renamed to `.zshrc.pre-oh-my-zsh`. After installation, you can move the configuration you want to preserve into the new `.zshrc`._ #### Manual inspection @@ -82,7 +117,7 @@ _Note that the plugins are separated by whitespace (spaces, tabs, new lines...). #### Using Plugins -Each plugin includes a __README__, documenting it. This README should show the aliases (if the plugin adds any) and extra goodies that are included in that particular plugin. +Each built-in plugin includes a **README**, documenting it. This README should show the aliases (if the plugin adds any) and extra goodies that are included in that particular plugin. ### Themes @@ -105,7 +140,7 @@ ZSH_THEME="agnoster" # (this is one of the fancy ones) # see https://github.com/ohmyzsh/ohmyzsh/wiki/Themes#agnoster ``` -_Note: many themes require installing the [Powerline Fonts](https://github.com/powerline/fonts) in order to render properly._ +_Note: many themes require installing a [Powerline Font](https://github.com/powerline/fonts) or a [Nerd Font](https://github.com/ryanoasis/nerd-fonts) in order to render properly. Without them, these themes will render [weird prompt symbols](https://github.com/ohmyzsh/ohmyzsh/wiki/FAQ#i-have-a-weird-character-in-my-prompt)_ Open up a new terminal window and your prompt should look something like this: @@ -161,9 +196,9 @@ 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. +If you're running the Oh My Zsh install script as part of an automated install, you can pass the `--unattended` +flag to the `install.sh` script. This will have the effect of not trying to change +the default shell, and it also won't run `zsh` when the installation has finished. ```sh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended @@ -194,19 +229,19 @@ REPO=apjanke/oh-my-zsh BRANCH=edge sh install.sh #### Manual Installation -##### 1. Clone the repository +##### 1. Clone the repository ```sh git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh ``` -##### 2. *Optionally*, backup your existing `~/.zshrc` file +##### 2. _Optionally_, backup your existing `~/.zshrc` file ```sh cp ~/.zshrc ~/.zshrc.orig ``` -##### 3. Create a new zsh configuration file +##### 3. Create a new zsh configuration file You can create a new zsh config file by copying the template that we have included for you. @@ -214,7 +249,7 @@ You can create a new zsh config file by copying the template that we have includ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc ``` -##### 4. Change your default shell +##### 4. Change your default shell ```sh chsh -s $(which zsh) @@ -222,7 +257,7 @@ 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 +##### 5. Initialize your new zsh configuration Once you open up a new terminal window, it should load zsh with Oh My Zsh's configuration. @@ -230,10 +265,8 @@ 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 @@ -296,7 +329,7 @@ Before you participate in our delightful community, please read the [code of con 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/ohmyzsh/ohmyzsh/issues) and help where you can. +We also need people to test out pull requests. So take a look through [the open issues](https://github.com/ohmyzsh/ohmyzsh/issues) and help where you can. See [Contributing](CONTRIBUTING.md) for more details. diff --git a/zsh/lib/cli.zsh b/zsh/lib/cli.zsh index edc10e7..b71f6d9 100644 --- a/zsh/lib/cli.zsh +++ b/zsh/lib/cli.zsh @@ -105,7 +105,10 @@ function _omz { return 0 } -compdef _omz omz +# If run from a script, do not set the completion function +if (( ${+functions[compdef]} )); then + compdef _omz omz +fi ## Utility functions @@ -299,10 +302,8 @@ multi == 1 && length(\$0) > 0 { # Restart the zsh session if there were no errors _omz::log info "plugins disabled: ${(j:, :)dis_plugins}." - # Old zsh versions don't have ZSH_ARGZERO - local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" - # Check whether to run a login shell - [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::plugin::enable { @@ -375,10 +376,8 @@ multi == 1 && /^[^#]*\)/ { # Restart the zsh session if there were no errors _omz::log info "plugins enabled: ${(j:, :)add_plugins}." - # Old zsh versions don't have ZSH_ARGZERO - local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" - # Check whether to run a login shell - [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::plugin::info { @@ -574,12 +573,27 @@ function _omz::pr::test { # Rebase pull request branch against the current master _omz::log info "rebasing PR #$1..." - command git rebase master ohmyzsh/pull-$1 || { - command git rebase --abort &>/dev/null - _omz::log warn "could not rebase PR #$1 on top of master." - _omz::log warn "you might not see the latest stable changes." - _omz::log info "run \`zsh\` to test the changes." - return 1 + local ret gpgsign + { + # Back up commit.gpgsign setting: use --local to get the current repository + # setting, not the global one. If --local is not a known option, it will + # exit with a 129 status code. + gpgsign=$(command git config --local commit.gpgsign 2>/dev/null) || ret=$? + [[ $ret -ne 129 ]] || gpgsign=$(command git config commit.gpgsign 2>/dev/null) + command git config commit.gpgsign false + + command git rebase master ohmyzsh/pull-$1 || { + command git rebase --abort &>/dev/null + _omz::log warn "could not rebase PR #$1 on top of master." + _omz::log warn "you might not see the latest stable changes." + _omz::log info "run \`zsh\` to test the changes." + return 1 + } + } always { + case "$gpgsign" in + "") command git config --unset commit.gpgsign ;; + *) command git config commit.gpgsign "$gpgsign" ;; + esac } _omz::log info "fetch of PR #${1} successful." @@ -731,10 +745,8 @@ EOF # Restart the zsh session if there were no errors _omz::log info "'$1' theme set correctly." - # Old zsh versions don't have ZSH_ARGZERO - local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}" - # Check whether to run a login shell - [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::theme::use { diff --git a/zsh/lib/termsupport.zsh b/zsh/lib/termsupport.zsh index 4035d10..80ca7ef 100644 --- a/zsh/lib/termsupport.zsh +++ b/zsh/lib/termsupport.zsh @@ -17,7 +17,7 @@ function title { : ${2=$1} case "$TERM" in - cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty|st*) + cygwin|xterm*|putty*|rxvt*|konsole*|ansi|mlterm*|alacritty|st*|foot) print -Pn "\e]2;${2:q}\a" # set window name print -Pn "\e]1;${1:q}\a" # set tab name ;; diff --git a/zsh/lib/vcs_info.zsh b/zsh/lib/vcs_info.zsh new file mode 100644 index 0000000..e60938c --- /dev/null +++ b/zsh/lib/vcs_info.zsh @@ -0,0 +1,53 @@ +# Don't skip this file until a Zsh release does the necessary quoting. +# This is because even though 5.8.1 undid recursive prompt_subst inside +# prompt sequences, % characters in relevant fields will still be rendered +# incorrectly in vcs_info, on all Zsh releases up to writing this. +# +# There is no release yet that does this right, since it requires changing +# how what vcs_info hooks expect to receive. Even so, I'd rather be correct +# and break custom vcs_info hooks than have a broken prompt. + +# Quote necessary $hook_com[] items just before they are used +# in the line "VCS_INFO_hook 'post-backend'" of the VCS_INFO_formats +# function, where is: +# +# base: the full path of the repository's root directory. +# base-name: the name of the repository's root directory. +# branch: the name of the currently checked out branch. +# misc: a string that may contain anything the vcs_info backend wants. +# revision: an identifier of the currently checked out revision. +# subdir: the path of the current directory relative to the +# repository's root directory. +# +# This patch %-quotes these fields previous to their use in vcs_info hooks and +# the zformat call and, eventually, when they get expanded in the prompt. +# It's important to quote these here, and not later after hooks have modified the +# fields, because then we could be quoting % characters from valid prompt sequences, +# like %F{color}, %B, etc. +# +# 32 │ hook_com[subdir]="$(VCS_INFO_reposub ${hook_com[base]})" +# 33 │ hook_com[subdir_orig]="${hook_com[subdir]}" +# 34 │ +# 35 + │ for tmp in base base-name branch misc revision subdir; do +# 36 + │ hook_com[$tmp]="${hook_com[$tmp]//\%/%%}" +# 37 + │ done +# 38 + │ +# 39 │ VCS_INFO_hook 'post-backend' +# +# This is especially important so that no command substitution is performed +# due to malicious input as a consequence of CVE-2021-45444, which affects +# zsh versions from 5.0.3 to 5.8. +# +autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return + +# We use $tmp here because it's already a local variable in VCS_INFO_formats +typeset PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"' +# Unique string to avoid reapplying the patch if this code gets called twice +typeset PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b +# Only patch the VCS_INFO_formats function if not already patched +if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then + regexp-replace 'functions[VCS_INFO_formats]' \ + "VCS_INFO_hook 'post-backend'" \ + ': ${PATCH_ID}; ${PATCH}; ${MATCH}' +fi +unset PATCH PATCH_ID diff --git a/zsh/oh-my-zsh.sh b/zsh/oh-my-zsh.sh index b388b34..925ee46 100644 --- a/zsh/oh-my-zsh.sh +++ b/zsh/oh-my-zsh.sh @@ -57,14 +57,14 @@ mkdir -p "$ZSH_CACHE_DIR/completions" (( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) # Check for updates on initial load... -if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then - source $ZSH/tools/check_for_upgrade.sh +if [[ "$DISABLE_AUTO_UPDATE" != true ]]; then + source "$ZSH/tools/check_for_upgrade.sh" fi # Initializes Oh My Zsh # add a function path -fpath=($ZSH/functions $ZSH/completions $fpath) +fpath=("$ZSH/functions" "$ZSH/completions" $fpath) # Load all stock functions (from $fpath files) called below. autoload -U compaudit compinit @@ -75,7 +75,6 @@ if [[ -z "$ZSH_CUSTOM" ]]; then ZSH_CUSTOM="$ZSH/custom" fi - is_plugin() { local base_dir=$1 local name=$2 @@ -86,10 +85,10 @@ is_plugin() { # Add all defined plugins to fpath. This must be done # before running compinit. for plugin ($plugins); do - if is_plugin $ZSH_CUSTOM $plugin; then - fpath=($ZSH_CUSTOM/plugins/$plugin $fpath) - elif is_plugin $ZSH $plugin; then - fpath=($ZSH/plugins/$plugin $fpath) + if is_plugin "$ZSH_CUSTOM" "$plugin"; then + fpath=("$ZSH_CUSTOM/plugins/$plugin" $fpath) + elif is_plugin "$ZSH" "$plugin"; then + fpath=("$ZSH/plugins/$plugin" $fpath) else echo "[oh-my-zsh] plugin '$plugin' not found" fi @@ -98,14 +97,14 @@ done # Figure out the SHORT hostname if [[ "$OSTYPE" = darwin* ]]; then # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. - SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST=${HOST/.*/} + SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" else - SHORT_HOST=${HOST/.*/} + SHORT_HOST="${HOST/.*/}" fi # Save the location of the current completion dump file. -if [ -z "$ZSH_COMPDUMP" ]; then - ZSH_COMPDUMP="${ZDOTDIR:-${HOME}}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}" +if [[ -z "$ZSH_COMPDUMP" ]]; then + ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}" fi # Construct zcompdump OMZ metadata @@ -119,19 +118,20 @@ if ! command grep -q -Fx "$zcompdump_revision" "$ZSH_COMPDUMP" 2>/dev/null \ zcompdump_refresh=1 fi -if [[ $ZSH_DISABLE_COMPFIX != true ]]; then - source $ZSH/lib/compfix.zsh - # If completion insecurities exist, warn the user - handle_completion_insecurities +if [[ "$ZSH_DISABLE_COMPFIX" != true ]]; then + source "$ZSH/lib/compfix.zsh" # Load only from secure directories - compinit -i -C -d "${ZSH_COMPDUMP}" + compinit -i -d "$ZSH_COMPDUMP" + # If completion insecurities exist, warn the user + handle_completion_insecurities &| else # If the user wants it, load from all found directories - compinit -u -C -d "${ZSH_COMPDUMP}" + compinit -u -d "$ZSH_COMPDUMP" fi # Append zcompdump metadata if missing -if (( $zcompdump_refresh )); then +if (( $zcompdump_refresh )) \ + || ! command grep -q -Fx "$zcompdump_revision" "$ZSH_COMPDUMP" 2>/dev/null; then # Use `tee` in case the $ZSH_COMPDUMP filename is invalid, to silence the error # See https://github.com/ohmyzsh/ohmyzsh/commit/dd1a7269#commitcomment-39003489 tee -a "$ZSH_COMPDUMP" &>/dev/null <" - return 1 - fi +# Load op completion +eval "$(op completion zsh)" +compdef _op op - local service=$1 - - # If not logged in, print error and return - op list users > /dev/null || return - - local password - # Copy the password to the clipboard - if ! password=$(op get item "$service" --fields password 2>/dev/null); then - echo "error: could not obtain password for $service" - return 1 - fi - - echo -n "$password" | clipcopy - echo "✔ password for $service copied to clipboard" - - # If there's a one time password, copy it to the clipboard after 5 seconds - local totp - if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then - sleep 10 && echo -n "$totp" | clipcopy - echo "✔ TOTP for $service copied to clipboard" - fi - - (sleep 20 && clipcopy /dev/null) &! -} - -function _opswd() { - local -a services - services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}") - [[ -z "$services" ]] || compadd -a -- services -} - -compdef _opswd opswd +# Load opswd function +autoload -Uz opswd diff --git a/zsh/plugins/1password/README.md b/zsh/plugins/1password/README.md index f6790ca..f6854da 100644 --- a/zsh/plugins/1password/README.md +++ b/zsh/plugins/1password/README.md @@ -25,11 +25,14 @@ which service you want to get. For example, `opswd github.com` will put your GitHub password into your clipboard, and if a TOTP is available, it will be copied to the clipboard after 10 seconds. -> NOTE: you need to be logged in for `opswd` to work. See: +> NOTE: you need to be signed in for `opswd` to work. If you are using biometric unlock, +> 1Password CLI will automatically prompt you to sign in. See: > -> - [Sign in or out](https://support.1password.com/command-line/#sign-in-or-out) -> - [Session management](https://support.1password.com/command-line/#appendix-session-management) +> - [Get started with 1Password CLI 2: Sign in](https://developer.1password.com/docs/cli/get-started#sign-in) +> - [Sign in to your 1Password account manually](https://developer.1password.com/docs/cli/sign-in-manually) ## Requirements -- [1Password's command line utility](https://1password.com/downloads/command-line/). +- [1Password CLI 2](https://developer.1password.com/docs/cli/get-started#install) + + > NOTE: if you're using 1Password CLI 1, [see how to upgrade to CLI 2](https://developer.1password.com/docs/cli/upgrade). diff --git a/zsh/plugins/1password/_opswd b/zsh/plugins/1password/_opswd new file mode 100644 index 0000000..dbc094f --- /dev/null +++ b/zsh/plugins/1password/_opswd @@ -0,0 +1,19 @@ +#compdef opswd + +function _opswd() { + local -a services + services=("${(@f)$(op item list --categories Login --cache 2>/dev/null | awk 'NR != 1 { print $2 }')}") + [[ -z "$services" ]] || compadd -a -- services +} + +# TODO: 2022-03-26: Remove support for op CLI 1 +autoload -Uz is-at-least +is-at-least 2.0.0 $(op --version) || { + function _opswd() { + local -a services + services=("${(@f)$(op list items --categories Login 2>/dev/null | op get item - --fields title 2>/dev/null)}") + [[ -z "$services" ]] || compadd -a -- services + } +} + +_opswd "$@" diff --git a/zsh/plugins/1password/opswd b/zsh/plugins/1password/opswd new file mode 100644 index 0000000..5767280 --- /dev/null +++ b/zsh/plugins/1password/opswd @@ -0,0 +1,78 @@ +#autoload + +# opswd puts the password of the named service into the clipboard. If there's a +# one time password, it will be copied into the clipboard after 10 seconds. The +# clipboard is cleared after another 20 seconds. +function opswd() { + if [[ $# -lt 1 ]]; then + echo "Usage: opswd " + return 1 + fi + + local service=$1 + + # If not logged in, print error and return + op user list > /dev/null || return + + local password + # Copy the password to the clipboard + if ! password=$(op item get "$service" --fields password 2>/dev/null); then + echo "error: could not obtain password for $service" + return 1 + fi + + echo -n "$password" | clipcopy + echo "✔ password for $service copied to clipboard" + + # If there's a one time password, copy it to the clipboard after 10 seconds + local totp + if totp=$(op item get --otp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then + sleep 10 && echo -n "$totp" | clipcopy + echo "✔ TOTP for $service copied to clipboard" + fi + + (sleep 20 && clipcopy /dev/null) &! +} + +# TODO: 2022-03-26: Remove support for op CLI 1 +autoload -Uz is-at-least +is-at-least 2.0.0 $(op --version) || { + print -ru2 ${(%):-"%F{yellow}opswd: usage with op version $(op --version) is deprecated. Upgrade to CLI 2 and reload zsh. +For instructions, see https://developer.1password.com/docs/cli/upgrade.%f"} + + # opswd puts the password of the named service into the clipboard. If there's a + # one time password, it will be copied into the clipboard after 10 seconds. The + # clipboard is cleared after another 20 seconds. + function opswd() { + if [[ $# -lt 1 ]]; then + echo "Usage: opswd " + return 1 + fi + + local service=$1 + + # If not logged in, print error and return + op list users > /dev/null || return + + local password + # Copy the password to the clipboard + if ! password=$(op get item "$service" --fields password 2>/dev/null); then + echo "error: could not obtain password for $service" + return 1 + fi + + echo -n "$password" | clipcopy + echo "✔ password for $service copied to clipboard" + + # If there's a one time password, copy it to the clipboard after 5 seconds + local totp + if totp=$(op get totp "$service" 2>/dev/null) && [[ -n "$totp" ]]; then + sleep 10 && echo -n "$totp" | clipcopy + echo "✔ TOTP for $service copied to clipboard" + fi + + (sleep 20 && clipcopy /dev/null) &! + } +} + +opswd "$@" diff --git a/zsh/plugins/aliases/aliases.plugin.zsh b/zsh/plugins/aliases/aliases.plugin.zsh index b3d9340..4e1e055 100644 --- a/zsh/plugins/aliases/aliases.plugin.zsh +++ b/zsh/plugins/aliases/aliases.plugin.zsh @@ -3,9 +3,9 @@ # - acs: alias cheatsheet # group alias by command, pass addition argv to grep. function acs(){ - (( $+commands[python] )) || { + (( $+commands[python3] )) || { echo "[error] No python executable detected" return } - alias | python ${functions_source[$0]:h}/cheatsheet.py $@ + alias | python3 ${functions_source[$0]:h}/cheatsheet.py $@ } diff --git a/zsh/plugins/aliases/cheatsheet.py b/zsh/plugins/aliases/cheatsheet.py index 694afd3..a7e3968 100644 --- a/zsh/plugins/aliases/cheatsheet.py +++ b/zsh/plugins/aliases/cheatsheet.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import sys import itertools import termcolor diff --git a/zsh/plugins/autoenv/autoenv.plugin.zsh b/zsh/plugins/autoenv/autoenv.plugin.zsh index bd03cf4..229a8a8 100644 --- a/zsh/plugins/autoenv/autoenv.plugin.zsh +++ b/zsh/plugins/autoenv/autoenv.plugin.zsh @@ -13,6 +13,7 @@ if ! type autoenv_init >/dev/null; then ~/.autoenv ~/.local/bin /usr/local/opt/autoenv + /opt/homebrew/opt/autoenv /usr/local/bin /usr/share/autoenv-git ~/Library/Python/bin diff --git a/zsh/plugins/aws/aws.plugin.zsh b/zsh/plugins/aws/aws.plugin.zsh index 920a713..b8625d7 100644 --- a/zsh/plugins/aws/aws.plugin.zsh +++ b/zsh/plugins/aws/aws.plugin.zsh @@ -158,7 +158,7 @@ compctl -K _aws_profiles asp acp aws_change_access_key # AWS prompt function aws_prompt_info() { [[ -n "$AWS_PROFILE" ]] || return - echo "${ZSH_THEME_AWS_PREFIX:=}" + echo "${ZSH_THEME_AWS_PREFIX=}" } if [[ "$SHOW_AWS_PROMPT" != false && "$RPROMPT" != *'$(aws_prompt_info)'* ]]; then diff --git a/zsh/plugins/bazel/README.md b/zsh/plugins/bazel/README.md index e5ffe6e..fc375d2 100644 --- a/zsh/plugins/bazel/README.md +++ b/zsh/plugins/bazel/README.md @@ -1,5 +1,14 @@ -## Bazel autocomplete plugin +# Bazel plugin -A copy of the completion script from the -[bazelbuild/bazel](https://github.com/bazelbuild/bazel/master/scripts/zsh_completion/_bazel) -git repo. +This plugin adds completion for [bazel](https://bazel.build), an open-source build and +test tool that scalably supports multi-language and multi-platform projects. + +To use it, add `bazel` to the plugins array in your zshrc file: + +```zsh +plugins=(... bazel) +``` + +The plugin has a copy of [the completion script from the git repository][1]. + +[1]: https://github.com/bazelbuild/bazel/blob/master/scripts/zsh_completion/_bazel diff --git a/zsh/plugins/boot2docker/README.md b/zsh/plugins/boot2docker/README.md deleted file mode 100644 index 9551e23..0000000 --- a/zsh/plugins/boot2docker/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Boot2docker autocomplete plugin - -- Adds autocomplete options for all boot2docker commands. - - -Maintainer : Manfred Touron ([@moul](https://github.com/moul)) diff --git a/zsh/plugins/boot2docker/_boot2docker b/zsh/plugins/boot2docker/_boot2docker deleted file mode 100644 index 3116bd1..0000000 --- a/zsh/plugins/boot2docker/_boot2docker +++ /dev/null @@ -1,73 +0,0 @@ -#compdef boot2docker - -# Boot2docker autocompletion for oh-my-zsh -# Requires: Boot2docker installed -# Author: Manfred Touron (@moul) - -local -a _1st_arguments -_1st_arguments=( - "init":"Create a new Boot2Docker VM." - "up":"Start VM from any states." - "start":"Start VM from any states." - "boot":"Start VM from any states." - "ssh":"[ssh-command] Login to VM via SSH." - "save":"Suspend VM and save state to disk." - "suspend":"Suspend VM and save state to disk." - "down":"Gracefully shutdown the VM." - "stop":"Gracefully shutdown the VM." - "halt":"Gracefully shutdown the VM." - "restart":"Gracefully reboot the VM." - "poweroff":"Forcefully power off the VM (may corrupt disk image)." - "reset":"Forcefully power cycle the VM (may corrupt disk image)." - "delete":"Delete Boot2Docker VM and its disk image." - "destroy":"Delete Boot2Docker VM and its disk image." - "config":"Show selected profile file settings." - "cfg":"Show selected profile file settings." - "info":"Display detailed information of VM." - "ip":"Display the IP address of the VM's Host-only network." - "socket":"Display the DOCKER_HOST socket to connect to." - "shellinit":"Display the shell command to set up the Docker client." - "status":"Display current state of VM." - "download":"Download Boot2Docker ISO image." - "upgrade":"Upgrade the Boot2Docker ISO image (restart if running)." - "version":"Display version information." -) - -_arguments \ - '(--basevmdk)--basevmdk[Path to VMDK to use as base for persistent partition]' \ - '(--cpus)'{-c,--cpus}'[number of CPUs for boot2docker.]' \ - '(--clobber)--clobber[overwrite Docker client binary on boot2docker upgrade]' \ - '(--dhcp)--dhcp[enable VirtualBox host-only network DHCP.]' \ - '(--dhcpip)--dhcpip[VirtualBox host-only network DHCP server address.]' \ - '(-s --disksize)'{-s,--disksize}'[boot2docker disk image size (in MB).]' \ - '(--dockerport)--dockerport[host Docker port (forward to port 2376 in VM). (deprecated - use with care)]' \ - '(--driver)--driver[hypervisor driver.]' \ - '(--force-upgrade-download)--force-upgrade-download[always download on boot2docker upgrade, never skip.]' \ - '(--hostip)--hostip[VirtualBox host-only network IP address.]' \ - '(--iso)--iso[path to boot2docker ISO image.]' \ - '(--iso-url)--iso-url[/api.github.com/repos/boot2docker/boot2docker/releases": source URL to provision the boot2docker ISO image.]' \ - '(--lowerip)--lowerip[VirtualBox host-only network DHCP lower bound.]' \ - '(--memory)'{-m,--memory}'[virtual machine memory size (in MB).]' \ - '(--netmask)--netmask[VirtualBox host-only network mask.]' \ - '(--no-dummy)--no-dummy[Example parameter for the dummy driver.]' \ - '(--retries)--retries[number of port knocking retries during 'start']' \ - '(--serial)--serial[try serial console to get IP address (experimental)]' \ - '(--serialfile)--serialfile[path to the serial socket/pipe.]' \ - '(--ssh)--ssh[path to SSH client utility.]' \ - '(--ssh-keygen)--ssh-keygen[path to ssh-keygen utility.]' \ - '(--sshkey)--sshkey[path to SSH key to use.]' \ - '(--sshport)--sshport[host SSH port (forward to port 22 in VM).]' \ - '(--upperip)--upperip[VirtualBox host-only network DHCP upper bound.]' \ - '(--vbm)--vbm[path to VirtualBox management utility.]' \ - '(--vbox-share)--vbox-share[(defaults to "/Users=Users" if no shares are specified; use "disable" to explicitly prevent any shares from being created) List of directories to share during "up|start|boot" via VirtualBox Guest Additions, with optional labels]' \ - '(--verbose)'{-v,--verbose}'[display verbose command invocations.]' \ - '(--vm)--vm[virtual machine name.]' \ - '(--waittime)--waittime[Time in milliseconds to wait between port knocking retries during 'start']' \ - '*:: :->subcmds' && return 0 - -#_arguments '*:: :->command' - -if (( CURRENT == 1 )); then - _describe -t commands "boot2docker command" _1st_arguments - return -fi diff --git a/zsh/plugins/cargo/cargo.plugin.zsh b/zsh/plugins/cargo/cargo.plugin.zsh index e4b3382..692025e 100644 --- a/zsh/plugins/cargo/cargo.plugin.zsh +++ b/zsh/plugins/cargo/cargo.plugin.zsh @@ -1,14 +1,6 @@ print ${(%):-'%F{yellow}The `cargo` plugin is deprecated and has been moved to the `rust` plugin.'} print ${(%):-'Please update your .zshrc to use the `%Brust%b` plugin instead.%f'} -# TODO: 2021-12-28: remove this block -# Handle $0 according to the standard: -# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html -0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" -0="${${(M)0:#/*}:-$PWD/$0}" -# Remove old generated completion file -command rm -f "${0:A:h}/_cargo" "$ZSH_CACHE_DIR/cargo_version" - (( ${fpath[(Ie)$ZSH/plugins/rust]} )) || { fpath=("$ZSH/plugins/rust" $fpath) source "$ZSH/plugins/rust/rust.plugin.zsh" diff --git a/zsh/plugins/charm/README.md b/zsh/plugins/charm/README.md new file mode 100644 index 0000000..f237dce --- /dev/null +++ b/zsh/plugins/charm/README.md @@ -0,0 +1,9 @@ +# Charm plugin + +This plugin adds completion for the [charm](https://github.com/charmbracelet/charm) CLI. + +To use it, add `charm` to the plugins array in your zshrc file: + +```zsh +plugins=(... charm) +``` diff --git a/zsh/plugins/charm/charm.plugin.zsh b/zsh/plugins/charm/charm.plugin.zsh new file mode 100644 index 0000000..52361ce --- /dev/null +++ b/zsh/plugins/charm/charm.plugin.zsh @@ -0,0 +1,14 @@ +# Autocompletion for the Charm CLI (charm). +if (( ! $+commands[charm] )); then + return +fi + +# If the completion file doesn't exist yet, we need to autoload it and +# bind it to `charm`. Otherwise, compinit will have already done that. +if [[ ! -f "$ZSH_CACHE_DIR/completions/_charm" ]]; then + typeset -g -A _comps + autoload -Uz _charm + _comps[charm]=_charm +fi + +charm completion zsh >| "$ZSH_CACHE_DIR/completions/_charm" &| diff --git a/zsh/plugins/coffee/_coffee b/zsh/plugins/coffee/_coffee index 5e52b30..e2814f7 100644 --- a/zsh/plugins/coffee/_coffee +++ b/zsh/plugins/coffee/_coffee @@ -39,14 +39,14 @@ # # ------------------------------------------------------------------------------ -local curcontext="$curcontext" state line ret=1 version opts first second third +local curcontext="$curcontext" state line ret=1 version +local -a opts typeset -A opt_args -version=(${(f)"$(_call_program version $words[1] --version)"}) +version=(${(f)"$(_call_program version $words[1] --version)"}) || return ret version=${${(z)${version[1]}}[3]} -first=$(echo $version|cut -d '.' -f 1) -second=$(echo $version|cut -d '.' -f 2) -third=$(echo $version|cut -d '.' -f 3) -if (( $first < 2 )) && (( $second < 7 )) && (( $third < 3 ));then + +autoload -Uz is-at-least +if ! is-at-least 1.6.3 "$version"; then opts+=('(-l --lint)'{-l,--lint}'[pipe the compiled JavaScript through JavaScript Lint]' '(-r --require)'{-r,--require}'[require a library before executing your script]:library') fi diff --git a/zsh/plugins/copydir/README.md b/zsh/plugins/copydir/README.md index 594bf10..cf24b78 100644 --- a/zsh/plugins/copydir/README.md +++ b/zsh/plugins/copydir/README.md @@ -1,10 +1,3 @@ # copydir plugin -Copies the path of your current folder to the system clipboard. - -To use, add `copydir` to your plugins array: -``` -plugins=(... copydir) -``` - -Then use the command `copydir` to copy the $PWD. +This plugin is deprecated. Use the [`copypath` plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/copypath) instead. diff --git a/zsh/plugins/copydir/copydir.plugin.zsh b/zsh/plugins/copydir/copydir.plugin.zsh index c451062..a2b489e 100644 --- a/zsh/plugins/copydir/copydir.plugin.zsh +++ b/zsh/plugins/copydir/copydir.plugin.zsh @@ -1,5 +1,7 @@ -# Copies the pathname of the current directory to the system or X Windows clipboard +echo ${(%):-'%F{yellow}The `%Bcopydir%b` plugin is deprecated. Use the `%Bcopypath%b` plugin instead.%f'} +source "$ZSH/plugins/copypath/copypath.plugin.zsh" + +# TODO: 2022-02-22: Remove deprecated copydir function. function copydir { - emulate -L zsh - print -n $PWD | clipcopy + copypath } diff --git a/zsh/plugins/copypath/README.md b/zsh/plugins/copypath/README.md new file mode 100644 index 0000000..1e5a463 --- /dev/null +++ b/zsh/plugins/copypath/README.md @@ -0,0 +1,15 @@ +# copypath plugin + +Copies the path of given directory or file to the system clipboard. + +To use it, add `copypath` to the plugins array in your zshrc file: + +```zsh +plugins=(... copypath) +``` + +## Usage + +- `copypath`: copies the absolute path of the current directory. + +- `copypath `: copies the absolute path of the given file. diff --git a/zsh/plugins/copypath/copypath.plugin.zsh b/zsh/plugins/copypath/copypath.plugin.zsh new file mode 100644 index 0000000..8fe0a85 --- /dev/null +++ b/zsh/plugins/copypath/copypath.plugin.zsh @@ -0,0 +1,15 @@ +# Copies the path of given directory or file to the system or X Windows clipboard. +# Copy current directory if no parameter. +function copypath { + # If no argument passed, use current directory + local file="${1:-.}" + + # If argument is not an absolute path, prepend $PWD + [[ $file = /* ]] || file="$PWD/$file" + + # Copy the absolute path without resolving symlinks + # If clipcopy fails, exit the function with an error + print -n "${file:a}" | clipcopy || return 1 + + echo ${(%):-"%B${file:a}%b copied to clipboard."} +} diff --git a/zsh/plugins/dash/dash.plugin.zsh b/zsh/plugins/dash/dash.plugin.zsh index ace2e33..f6801a8 100644 --- a/zsh/plugins/dash/dash.plugin.zsh +++ b/zsh/plugins/dash/dash.plugin.zsh @@ -1,80 +1,84 @@ # Usage: dash [keyword:]query -dash() { open dash://"$*" } +dash() { open -a Dash.app dash://"$*" } compdef _dash dash _dash() { # No sense doing this for anything except the 2nd position and if we haven't # specified which docset to query against - if [[ $CURRENT -eq 2 && ! "$words[2]" =~ ":" ]]; then - local -a _all_docsets - _all_docsets=() - # Use defaults to get the array of docsets from preferences - # Have to smash it into one big line so that each docset is an element of - # our DOCSETS array - DOCSETS=("${(@f)$(defaults read com.kapeli.dashdoc docsets | tr -d '\n' | grep -oE '\{.*?\}')}") + if [[ $CURRENT -ne 2 || "$words[2]" =~ ":" ]]; then + return + fi - # remove all newlines since defaults prints so pretty like - # Now get each docset and output each on their own line - for doc in "$DOCSETS[@]"; do - # Only output docsets that are actually enabled - if [[ "`echo $doc | grep -Eo \"isEnabled = .*?;\" | sed 's/[^01]//g'`" == "0" ]]; then + local -aU docsets + docsets=() + + # Use defaults to get the array of docsets from preferences + # Have to smash it into one big line so that each docset is an element of our docsets array + # Only output docsets that are actually enabled + local -a enabled_docsets + enabled_docsets=("${(@f)$(defaults read com.kapeli.dashdoc docsets \ + | tr -d '\n' | grep -oE '\{.*?\}' | grep -E 'isEnabled = 1;')}") + + local docset name keyword + # Now get each docset and output each on their own line + for docset in "$enabled_docsets[@]"; do + keyword='' + # Order of preference as explained to me by @kapeli via email + for locator in keyword suggestedKeyword platform; do + # Echo the docset, try to find the appropriate keyword + # Strip doublequotes and colon from any keyword so that everything has the + # same format when output (we'll add the colon in the completion) + if [[ "$docset" =~ "$locator = ([^;]*);" ]]; then + keyword="${match[1]//[\":]}" + fi + + if [[ -z "$keyword" ]]; then continue fi - keyword='' - - # Order of preference as explained to me by @kapeli via email - KEYWORD_LOCATORS=(keyword suggestedKeyword platform) - for locator in "$KEYWORD_LOCATORS[@]"; do - # Echo the docset, try to find the appropriate keyword - # Strip doublequotes and colon from any keyword so that everything has the - # same format when output (we'll add the colon in the completion) - keyword=`echo $doc | grep -Eo "$locator = .*?;" | sed -e "s/$locator = \(.*\);/\1/" -e "s/[\":]//g"` - if [[ ! -z "$keyword" ]]; then - # if we fall back to platform, we should do some checking per @kapeli - if [[ "$locator" == "platform" ]]; then - # Since these are the only special cases right now, let's not do the - # expensive processing unless we have to - if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then - docsetName=`echo $doc | grep -Eo "docsetName = .*?;" | sed -e "s/docsetName = \(.*\);/\1/" -e "s/[\":]//g"` - case "$keyword" in - python) - case "$docsetName" in - "Python 2") keyword="python2" ;; - "Python 3") keyword="python3" ;; - esac ;; - java) - case "$docsetName" in - "Java SE7") keyword="java7" ;; - "Java SE6") keyword="java6" ;; - "Java SE8") keyword="java8" ;; - esac ;; - qt) - case "$docsetName" in - "Qt 5") keyword="qt5" ;; - "Qt 4"|Qt) keyword="qt4" ;; - esac ;; - cocos2d) - case "$docsetName" in - Cocos3D) keyword="cocos3d" ;; - esac ;; - esac - fi + # if we fall back to platform, we should do some checking per @kapeli + if [[ "$locator" == "platform" ]]; then + # Since these are the only special cases right now, let's not do the + # expensive processing unless we have to + if [[ "$keyword" = (python|java|qt|cocos2d) ]]; then + if [[ "$docset" =~ "docsetName = ([^;]*);" ]]; then + name="${match[1]//[\":]}" + case "$keyword" in + python) + case "$name" in + "Python 2") keyword="python2" ;; + "Python 3") keyword="python3" ;; + esac ;; + java) + case "$name" in + "Java SE7") keyword="java7" ;; + "Java SE6") keyword="java6" ;; + "Java SE8") keyword="java8" ;; + esac ;; + qt) + case "$name" in + "Qt 5") keyword="qt5" ;; + "Qt 4"|Qt) keyword="qt4" ;; + esac ;; + cocos2d) + case "$name" in + Cocos3D) keyword="cocos3d" ;; + esac ;; + esac fi - - # Bail once we have a match - break fi - done - - # If we have a keyword, add it to the list! - if [[ ! -z "$keyword" ]]; then - _all_docsets+=($keyword) fi + + # Bail once we have a match + break done - # special thanks to [arx] on #zsh for getting me sorted on this piece - compadd -qS: -- "$_all_docsets[@]" - return - fi + # If we have a keyword, add it to the list! + if [[ -n "$keyword" ]]; then + docsets+=($keyword) + fi + done + + # special thanks to [arx] on #zsh for getting me sorted on this piece + compadd -qS: -- "$docsets[@]" } diff --git a/zsh/plugins/deno/deno.plugin.zsh b/zsh/plugins/deno/deno.plugin.zsh index 6c12bae..7708f84 100644 --- a/zsh/plugins/deno/deno.plugin.zsh +++ b/zsh/plugins/deno/deno.plugin.zsh @@ -16,19 +16,6 @@ if (( ! $+commands[deno] )); then return fi -# TODO: 2021-12-28: remove this block -# Handle $0 according to the standard: -# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html -0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" -0="${${(M)0:#/*}:-$PWD/$0}" -# Remove old generated files -command rm -f "${0:A:h}/_deno" "$ZSH_CACHE_DIR/deno_version" - -# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh -# Add completions folder in $ZSH_CACHE_DIR -command mkdir -p "$ZSH_CACHE_DIR/completions" -(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) - # If the completion file doesn't exist yet, we need to autoload it and # bind it to `deno`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_deno" ]]; then diff --git a/zsh/plugins/django/README.md b/zsh/plugins/django/README.md deleted file mode 100644 index cfab439..0000000 --- a/zsh/plugins/django/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Django plugin - -This plugin adds completion for the [Django Project](https://www.djangoproject.com/) commands -(`manage.py`, `django-admin`, ...). - -## Deprecation (2021-09-22) - -The plugin used to provide completion for `./manage.py` and `django-admin`, but Zsh already provides -a better, more extensive completion for those, so this plugin is no longer needed. - -Right now a warning message is shown, but in the near future the plugin will stop working altogether. -So you can remove it from your plugins and you'll automatically start using Zsh's django completion. diff --git a/zsh/plugins/django/django.plugin.zsh b/zsh/plugins/django/django.plugin.zsh deleted file mode 100644 index a07a308..0000000 --- a/zsh/plugins/django/django.plugin.zsh +++ /dev/null @@ -1,407 +0,0 @@ -#compdef manage.py - -typeset -ga nul_args -nul_args=( - '--verbosity=-[verbosity level; 0=minimal output, 1=normal output, 2=all output.]:Verbosity:((0\:minimal 1\:normal 2\:all))' - '--settings=-[the Python path to a settings module.]:file:_files' - '--pythonpath=-[a directory to add to the Python path.]:directory:_directories' - '--traceback[print traceback on exception.]' - "--no-color[Don't colorize the command output.]" - "--version[show program's version number and exit.]" - {-h,--help}'[show this help message and exit.]' -) - -typeset -ga start_args -start_args=( - '--template=-[The path or URL to load the template from.]:directory:_directories' - '--extension=-[The file extension(s) to render (default: "py").]' - '--name=-[The file name(s) to render.]:file:_files' -) - -typeset -ga db_args -db_args=( - '--database=-[Nominates a database. Defaults to the "default" database.]' -) - -typeset -ga noinput_args -noinput_args=( - '--noinput[tells Django to NOT prompt the user for input of any kind.]' -) - -typeset -ga no_init_data_args -no_init_data_args=( - '--no-initial-data[Tells Django not to load any initial data after database synchronization.]' -) - -typeset -ga tag_args -tag_args=( - '--tag=-[Run only checks labeled with given tag.]' - '--list-tags[List available tags.]' -) - -_managepy-check(){ - _arguments -s : \ - $tag_args \ - $nul_args && ret=0 -} - -_managepy-changepassword(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-createcachetable(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-createsuperuser(){ - _arguments -s : \ - '--username=-[Specifies the login for the superuser.]' \ - '--email=-[Specifies the email for the superuser.]' \ - $noinput_args \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-collectstatic(){ - _arguments -s : \ - '--link[Create a symbolic link to each file instead of copying.]' \ - '--no-post-process[Do NOT post process collected files.]' \ - '--ignore=-[Ignore files or directories matching this glob-style pattern. Use multiple times to ignore more.]' \ - '--dry-run[Do everything except modify the filesystem.]' \ - '--clear[Clear the existing files using the storage before trying to copy or link the original file.]' \ - '--link[Create a symbolic link to each file instead of copying.]' \ - '--no-default-ignore[Do not ignore the common private glob-style patterns "CVS", ".*" and "*~".]' \ - $noinput_args \ - $nul_args && ret=0 -} - -_managepy-dbshell(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-diffsettings(){ - _arguments -s : \ - "--all[Display all settings, regardless of their value.]" - $nul_args && ret=0 -} - -_managepy-dumpdata(){ - _arguments -s : \ - '--format=-[Specifies the output serialization format for fixtures.]:format:(json yaml xml)' \ - '--indent=-[Specifies the indent level to use when pretty-printing output.]' \ - '--exclude=-[An app_label or app_label.ModelName to exclude (use multiple --exclude to exclude multiple apps/models).]' \ - '--natural-foreign[Use natural foreign keys if they are available.]' \ - '--natural-primary[Use natural primary keys if they are available.]' \ - "--all[Use Django's base manager to dump all models stored in the database.]" \ - '--pks=-[Only dump objects with given primary keys.]' \ - $db_args \ - $nul_args \ - '*::appname:_applist' && ret=0 -} - -_managepy-flush(){ - _arguments -s : \ - $no_init_data_args \ - $db_args \ - $noinput_args \ - $nul_args && ret=0 -} - -_managepy-help(){ - _arguments -s : \ - '*:command:_managepy_cmds' \ - $nul_args && ret=0 -} - -_managepy_cmds(){ - local line - local -a cmd - _call_program help-command ./manage.py help \ - |& sed -n '/^ /s/[(), ]/ /gp' \ - | while read -A line; do cmd=($line $cmd) done - _describe -t managepy-command 'manage.py command' cmd -} - -_managepy-inspectdb(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-loaddata(){ - _arguments -s : \ - '--ignorenonexistent[Ignores entries in the serialized data for fields that do not currently exist on the model.]' \ - '--app=-[Only look for fixtures in the specified app.]:appname:_applist' \ - '*::file:_files' \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-makemessages(){ - _arguments -s : \ - '--locale=-[Creates or updates the message files for the given locale(s) (e.g. pt_BR).]' \ - '--domain=-[The domain of the message files (default: "django").]' \ - '--all[Updates the message files for all existing locales.]' \ - '--extension=-[The file extension(s) to examine (default: "html,txt", or "js" if the domain is "djangojs").]' \ - '--symlinks[Follows symlinks to directories when examining source code and templates for translation strings.]' \ - '--ignore=-[Ignore files or directories matching this glob-style pattern.]' \ - "--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[Remove obsolete message strings.]' \ - '--keep-pot[Keep .pot file after making messages.]' \ - $nul_args && ret=0 -} -_managepy-makemigrations(){ - _arguments -s : \ - '--dry-run[Just show what migrations would be made]' \ - '--merge[Enable fixing of migration conflicts.]' \ - '--empty[Create an empty migration.]' \ - $noinput_args \ - $nul_args && ret=0 -} -_managepy-migrate(){ - _arguments -s : \ - '--fake[Mark migrations as run without actually running them]' \ - '--list[Show a list of all known migrations and which are applied]' \ - $no_init_data_args \ - $noinput_args \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-runfcgi(){ - local state - - local fcgi_opts - fcgi_opts=( - 'protocol[fcgi, scgi, ajp, ... (default fcgi)]:protocol:(fcgi scgi ajp)' - 'host[hostname to listen on..]:' - 'port[port to listen on.]:' - 'socket[UNIX socket to listen on.]:file:_files' - 'method[prefork or threaded (default prefork)]:method:(prefork threaded)' - 'maxrequests[number of requests a child handles before it is killed and a new child is forked (0 = no limit).]:' - 'maxspare[max number of spare processes / threads.]:' - 'minspare[min number of spare processes / threads.]:' - 'maxchildren[hard limit number of processes / threads.]:' - 'daemonize[whether to detach from terminal.]:boolean:(False True)' - 'pidfile[write the spawned process-id to this file.]:file:_files' - 'workdir[change to this directory when daemonizing.]:directory:_files' - 'outlog[write stdout to this file.]:file:_files' - 'errlog[write stderr to this file.]:file:_files' - ) - - _arguments -s : \ - $nul_args \ - '*: :_values "FCGI Setting" $fcgi_opts' && ret=0 -} - -_managepy-runserver(){ - _arguments -s : \ - '--ipv6[Tells Django to use an IPv6 address.]' \ - '--nothreading[Tells Django to NOT use threading.]' \ - '--noreload[Tells Django to NOT use the auto-reloader.]' \ - '--nostatic[Tells Django to NOT automatically serve static files at STATIC_URL.]' \ - '--insecure[Allows serving static files even if DEBUG is False.]' \ - $nul_args && ret=0 -} - -_managepy-shell(){ - _arguments -s : \ - '--plain[Tells Django to use plain Python, not IPython.]' \ - '--no-startup[When using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.]' \ - '--interface=-[Specify an interactive interpreter interface.]:INTERFACE:((ipython bpython))' \ - $nul_args && ret=0 -} - -_managepy-sql(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlall(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlclear(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlcustom(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-dropindexes(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlflush(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlindexes(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-sqlinitialdata(){ - _arguments -s : \ - $nul_args && ret=0 -} - -_managepy-sqlsequencereset(){ - _arguments -s : \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-squashmigrations(){ - _arguments -s : \ - '--no-optimize[Do not try to optimize the squashed operations.]' \ - $noinput_args \ - $nul_args && ret=0 -} - -_managepy-startapp(){ - _arguments -s : \ - $start_args \ - $nul_args && ret=0 -} -_managepy-startproject(){ - _arguments -s : \ - $start_args \ - $nul_args && ret=0 -} - -_managepy-syncdb() { - _arguments -s : \ - $noinput_args \ - $no_init_data_args \ - $db_args \ - $nul_args && ret=0 -} - -_managepy-test() { - _arguments -s : \ - '--failfast[Tells Django to stop running the test suite after first failed test.]' \ - '--testrunner=-[Tells Django to use specified test runner class instead of the one specified by the TEST_RUNNER setting.]' \ - '--liveserver=-[Overrides the default address where the live server (used with LiveServerTestCase) is expected to run from. The default value is localhost:8081.]' \ - '--top-level-directory=-[Top level of project for unittest discovery.]' \ - '--pattern=-[The test matching pattern. Defaults to test*.py.]:' \ - $noinput_args \ - '*::appname:_applist' \ - $nul_args && ret=0 -} - -_managepy-testserver() { - _arguments -s : \ - '--addrport=-[port number or ipaddr:port to run the server on.]' \ - '--ipv6[Tells Django to use an IPv6 address.]' \ - $noinput_args \ - '*::fixture:_files' \ - $nul_args && ret=0 -} - -_managepy-validate() { - _arguments -s : \ - $tag_args \ - $nul_args && ret=0 -} - -_managepy-commands() { - local -a commands - - commands=( - "changepassword:Change a user's password for django.contrib.auth." - 'check:Checks the entire Django project for potential problems.' - 'compilemessages:Compiles .po files to .mo files for use with builtin gettext support.' - 'createcachetable:Creates the table needed to use the SQL cache backend.' - 'createsuperuser:Used to create a superuser.' - 'collectstatic:Collect static files in a single location.' - 'dbshell:Runs the command-line client for the current DATABASE_ENGINE.' - "diffsettings:Displays differences between the current settings.py and Django's default settings." - 'dumpdata:Output the contents of the database as a fixture of the given format.' - 'flush:Executes ``sqlflush`` on the current database.' - 'help:manage.py help.' - 'inspectdb:Introspects the database tables in the given database and outputs a Django model module.' - 'loaddata:Installs the named fixture(s) in the database.' - 'makemessages:Runs over the entire source tree of the current directory and pulls out all strings marked for translation.' - 'makemigrations:Creates new migration(s) for apps.' - 'migrate:Updates database schema. Manages both apps with migrations and those without.' - 'runfcgi:Run this project as a fastcgi (or some other protocol supported by flup) application,' - 'runserver:Starts a lightweight Web server for development.' - 'shell:Runs a Python interactive interpreter.' - 'showmigrations:Shows all available migrations for the current project.' - 'sql:Prints the CREATE TABLE SQL statements for the given app name(s).' - 'sqlall:Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s).' - 'sqlclear:Prints the DROP TABLE SQL statements for the given app name(s).' - 'sqlcustom:Prints the custom table modifying SQL statements for the given app name(s).' - 'sqldropindexes:Prints the DROP INDEX SQL statements for the given model module name(s).' - 'sqlflush:Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed.' - 'sqlindexes:Prints the CREATE INDEX SQL statements for the given model module name(s).' - "sqlinitialdata:RENAMED: see 'sqlcustom'" - 'sqlsequencereset:Prints the SQL statements for resetting sequences for the given app name(s).' - 'squashmigrations:Squashes an existing set of migrations (from first until specified) into a single new one.' - "startapp:Creates a Django app directory structure for the given app name in this project's directory." - "startproject:Creates a Django project directory structure for the given project name in this current directory." - "syncdb:Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created." - 'test:Runs the test suite for the specified applications, or the entire site if no apps are specified.' - 'testserver:Runs a development server with data from the given fixture(s).' - 'validate:Validates all installed models.' - ) - - _describe -t commands 'manage.py command' commands && ret=0 -} - -_applist() { - local line - local -a apps - _call_program help-command "python -c \"import sys; del sys.path[0];\\ - import os.path as op, re, django.conf;\\ - bn=op.basename(op.abspath(op.curdir));[sys\\ - .stdout.write(str(re.sub(r'^%s\.(.*?)$' % - bn, r'\1', i)) + '\n') for i in django.conf.settings.\\ - INSTALLED_APPS if re.match(r'^%s' % bn, i)]\"" \ - | while read -A line; do apps=($line $apps) done - _values 'Application' $apps && ret=0 -} - -_managepy() { - local curcontext=$curcontext ret=1 - - if ((CURRENT == 2)); then - _managepy-commands - else - shift words - (( CURRENT -- )) - curcontext="${curcontext%:*:*}:managepy-$words[1]:" - _call_function ret _managepy-$words[1] - fi -} - -compdef _managepy manage.py -compdef _managepy django -compdef _managepy django-admin -compdef _managepy django-admin.py -compdef _managepy django-manage - -print -P "%F{yellow}The django plugin is deprecated in favor of Zsh's Django completion. -%BPlease remove it from your plugins to stop using it.%b%f" diff --git a/zsh/plugins/docker/README.md b/zsh/plugins/docker/README.md index fab7aa8..2b721c7 100644 --- a/zsh/plugins/docker/README.md +++ b/zsh/plugins/docker/README.md @@ -1,6 +1,6 @@ # Docker plugin -This plugin adds auto-completion for [docker](https://www.docker.com/). +This plugin adds auto-completion and aliases for [docker](https://www.docker.com/). To use it add `docker` to the plugins array in your zshrc file. @@ -28,7 +28,46 @@ the lines below to your zshrc file**, but be aware of the side effects: > > Therefore, this behavior is disabled by default. To enable it: > -> ``` +> ```sh > zstyle ':completion:*:*:docker:*' option-stacking yes > zstyle ':completion:*:*:docker-*:*' option-stacking yes > ``` + +## Aliases + +| Alias | Command | Description | +| :------ | :-------------------------- | :--------------------------------------------------------------------------------------- | +| dbl | `docker build` | Build an image from a Dockerfile | +| dcin | `docker container inspect` | Display detailed information on one or more containers | +| dlo | `docker container logs` | Fetch the logs of a docker container | +| dcls | `docker container ls` | List all the running docker containers | +| dclsa | `docker container ls -a` | List all running and stopped containers | +| dpo | `docker container port` | List port mappings or a specific mapping for the container | +| dpu | `docker pull` | Pull an image or a repository from a registry | +| dr | `docker container run` | Create a new container and start it using the specified command | +| drit | `docker container run -it` | Create a new container and start it in an interactive shell | +| drm | `docker container rm` | Remove the specified container(s) | +| drm! | `docker container rm -f` | Force the removal of a running container (uses SIGKILL) | +| dst | `docker container start` | Start one or more stopped containers | +| dstp | `docker container stop` | Stop one or more running containers | +| dtop | `docker top` | Display the running processes of a container | +| dxc | `docker container exec` | Run a new command in a running container | +| dxcit | `docker container exec -it` | Run a new command in a running container in an interactive shell | +| | | **Docker Images** | +| dib | `docker image build` | Build an image from a Dockerfile (same as docker build) | +| dii | `docker image inspect` | Display detailed information on one or more images | +| dils | `docker image ls` | List docker images | +| dip | `docker image push` | Push an image or repository to a remote registry | +| dirm | `docker image rm` | Remove one or more images | +| dit | `docker image tag` | Add a name and tag to a particular image | +| | | **Docker Network** | +| dnc | `docker network create` | Create a new network | +| dncn | `docker network connect` | Connect a container to a network | +| dndcn | `docker network disconnect` | Disconnect a container from a network | +| dni | `docker network inspect` | Return information about one or more networks | +| dnls | `docker network ls` | List all networks the engine daemon knows about, including those spanning multiple hosts | +| dnrm | `docker network rm` | Remove one or more networks | +| | | **Docker Volume** | +| dvi | `docker volume inspect` | Display detailed information about one or more volumes | +| dvls | `docker volume ls` | List all the volumes known to docker | +| dvprune | `docker volume prune` | Cleanup dangling volumes | diff --git a/zsh/plugins/docker/docker.plugin.zsh b/zsh/plugins/docker/docker.plugin.zsh new file mode 100644 index 0000000..843c8e2 --- /dev/null +++ b/zsh/plugins/docker/docker.plugin.zsh @@ -0,0 +1,39 @@ +alias dbl='docker build' +alias dpu='docker pull' +alias dtop='docker top' + +# docker containers +alias dcin='docker container inspect' +alias dlo='docker container logs' +alias dcls='docker container ls' +alias dclsa='docker container ls -a' +alias dpo='docker container port' +alias dr='docker container run' +alias drit='docker container run -it' +alias drm='docker container rm' +alias 'drm!'='docker container rm -f' +alias dst='docker container start' +alias dstp='docker container stop' +alias dxc='docker container exec' +alias dxcit='docker container exec -it' + +# docker images +alias dib='docker image build' +alias dii='docker image inspect' +alias dils='docker image ls' +alias dip='docker image push' +alias dirm='docker image rm' +alias dit='docker image tag' + +# docker network +alias dnc='docker network create' +alias dncn='docker network connect' +alias dndcn='docker network disconnect' +alias dni='docker network inspect' +alias dnls='docker network ls' +alias dnrm='docker network rm' + +# docker volume +alias dvi='docker volume inspect' +alias dvls='docker volume ls' +alias dvprune='docker volume prune' diff --git a/zsh/plugins/dotenv/dotenv.plugin.zsh b/zsh/plugins/dotenv/dotenv.plugin.zsh index 394455a..46cd4b1 100644 --- a/zsh/plugins/dotenv/dotenv.plugin.zsh +++ b/zsh/plugins/dotenv/dotenv.plugin.zsh @@ -52,7 +52,10 @@ source_env() { fi # test .env syntax - zsh -fn $ZSH_DOTENV_FILE || echo "dotenv: error when sourcing '$ZSH_DOTENV_FILE' file" >&2 + zsh -fn $ZSH_DOTENV_FILE || { + echo "dotenv: error when sourcing '$ZSH_DOTENV_FILE' file" >&2 + return 1 + } setopt localoptions allexport source $ZSH_DOTENV_FILE diff --git a/zsh/plugins/fd/README.md b/zsh/plugins/fd/README.md index cf9f781..f334161 100644 --- a/zsh/plugins/fd/README.md +++ b/zsh/plugins/fd/README.md @@ -7,7 +7,3 @@ To use it, add `fd` to the plugins array in your zshrc file: ```zsh plugins=(... fd) ``` - -Completion is taken from the fd release [`8.2.1`](https://github.com/sharkdp/fd/releases/tag/v8.2.1). - -Updated on April 1st, 2021. diff --git a/zsh/plugins/fd/_fd b/zsh/plugins/fd/_fd index f5d9e01..45b8ca4 100644 --- a/zsh/plugins/fd/_fd +++ b/zsh/plugins/fd/_fd @@ -1,4 +1,4 @@ -#compdef fd fdfind +#compdef fd ## # zsh completion function for fd @@ -57,6 +57,7 @@ _fd() { + no-ignore-partial # some ignore files "(no-ignore-full --no-ignore-vcs)--no-ignore-vcs[don't respect .gitignore files]" "!(no-ignore-full --no-global-ignore-file)--no-global-ignore-file[don't respect the global ignore file]" + $no'(no-ignore-full --no-ignore-parent)--no-ignore-parent[]' + '(case)' # case-sensitivity {-s,--case-sensitive}'[perform a case-sensitive search]' @@ -138,6 +139,7 @@ _fd() { + '(exec-cmds)' # execute command '(long-listing max-results)'{-x+,--exec=}'[execute command for each search result]:command: _command_names -e:*\;::program arguments: _normal' '(long-listing max-results)'{-X+,--exec-batch=}'[execute command for all search results at once]:command: _command_names -e:*\;::program arguments: _normal' + '(long-listing max-results)--batch-size=[max number of args for each -X call]:size' + other '!(--max-buffer-time)--max-buffer-time=[set amount of time to buffer before showing output]:time (ms)' @@ -153,6 +155,9 @@ _fd() { $no'(--base-directory)--base-directory=[change the current working directory to the given path]:directory:_files -/' $no'(*)*--search-path=[set search path (instead of positional arguments)]:directory:_files -/' + + strip-cwd-prefix + $no'(strip-cwd-prefix exec-cmds)--strip-cwd-prefix[Strip ./ prefix when output is redirected]' + + args # positional arguments '1: :_guard "^-*" pattern' '(--search-path)*:directory:_files -/' @@ -220,7 +225,7 @@ _fd() { _fd "$@" # ------------------------------------------------------------------------------ -# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users +# Copyright (c) 2011 GitHub zsh-users - http://github.com/zsh-users # All rights reserved. # # Redistribution and use in source and binary forms, with or without diff --git a/zsh/plugins/fnm/fnm.plugin.zsh b/zsh/plugins/fnm/fnm.plugin.zsh index 044e16a..6219025 100644 --- a/zsh/plugins/fnm/fnm.plugin.zsh +++ b/zsh/plugins/fnm/fnm.plugin.zsh @@ -2,19 +2,6 @@ if (( ! $+commands[fnm] )); then return fi -# TODO: 2021-12-28: remove this block -# Handle $0 according to the standard: -# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html -0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" -0="${${(M)0:#/*}:-$PWD/$0}" -# remove old generated files -command rm -f "${0:A:h}/_fnm" "$ZSH_CACHE_DIR/fnm_version" - -# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh -# Add completions folder in $ZSH_CACHE_DIR -command mkdir -p "$ZSH_CACHE_DIR/completions" -(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) - # If the completion file doesn't exist yet, we need to autoload it and # bind it to `fnm`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_fnm" ]]; then diff --git a/zsh/plugins/frontend-search/frontend-search.plugin.zsh b/zsh/plugins/frontend-search/frontend-search.plugin.zsh index 7f8d5c9..b9e2fe9 100644 --- a/zsh/plugins/frontend-search/frontend-search.plugin.zsh +++ b/zsh/plugins/frontend-search/frontend-search.plugin.zsh @@ -103,8 +103,7 @@ function frontend() { # build search url: # join arguments passed with '%20', then append to search context URL - # TODO substitute for proper urlencode method - url="${urls[$1]}${(j:%20:)@[2,-1]}" + url="${urls[$1]}$(omz_urlencode -P ${@[2,-1]})" echo "Opening $url ..." diff --git a/zsh/plugins/fzf/README.md b/zsh/plugins/fzf/README.md index 15d4d31..beedf46 100644 --- a/zsh/plugins/fzf/README.md +++ b/zsh/plugins/fzf/README.md @@ -31,8 +31,8 @@ export FZF_DEFAULT_COMMAND='' If not set, the plugin will try to set it to these, in the order in which they're found: -- [`rg`](https://github.com/BurntSushi/ripgrep) - [`fd`](https://github.com/sharkdp/fd) +- [`rg`](https://github.com/BurntSushi/ripgrep) - [`ag`](https://github.com/ggreer/the_silver_searcher) ### `DISABLE_FZF_AUTO_COMPLETION` diff --git a/zsh/plugins/fzf/fzf.plugin.zsh b/zsh/plugins/fzf/fzf.plugin.zsh index 1026059..a946cf7 100644 --- a/zsh/plugins/fzf/fzf.plugin.zsh +++ b/zsh/plugins/fzf/fzf.plugin.zsh @@ -173,6 +173,32 @@ function fzf_setup_using_cygwin() { return 0 } +function fzf_setup_using_macports() { + # If the command is not found, the package isn't installed + (( $+commands[fzf] )) || return 1 + + # The fzf-zsh-completion package installs the auto-completion in + local completions="/opt/local/share/zsh/site-functions/fzf" + # The fzf-zsh-completion package installs the key-bindings file in + local key_bindings="/opt/local/share/fzf/shell/key-bindings.zsh" + + if [[ ! -f "$completions" || ! -f "$key_bindings" ]]; then + return 1 + fi + + # Auto-completion + if [[ -o interactive && "$DISABLE_FZF_AUTO_COMPLETION" != "true" ]]; then + source "$completions" 2>/dev/null + fi + + # Key bindings + if [[ "$DISABLE_FZF_KEY_BINDINGS" != "true" ]]; then + source "$key_bindings" 2>/dev/null + fi + + return 0 +} + # Indicate to user that fzf installation not found if nothing worked function fzf_setup_error() { cat >&2 <<'EOF' @@ -185,16 +211,17 @@ fzf_setup_using_openbsd \ || fzf_setup_using_debian \ || fzf_setup_using_opensuse \ || fzf_setup_using_cygwin \ + || fzf_setup_using_macports \ || fzf_setup_using_base_dir \ || fzf_setup_error unset -f -m 'fzf_setup_*' if [[ -z "$FZF_DEFAULT_COMMAND" ]]; then - if (( $+commands[rg] )); then - export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"' - elif (( $+commands[fd] )); then + if (( $+commands[fd] )); then export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git' + elif (( $+commands[rg] )); then + export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git/*"' elif (( $+commands[ag] )); then export FZF_DEFAULT_COMMAND='ag -l --hidden -g "" --ignore .git' fi diff --git a/zsh/plugins/gh/gh.plugin.zsh b/zsh/plugins/gh/gh.plugin.zsh index 9263220..1d8d84c 100644 --- a/zsh/plugins/gh/gh.plugin.zsh +++ b/zsh/plugins/gh/gh.plugin.zsh @@ -3,19 +3,6 @@ if (( ! $+commands[gh] )); then return fi -# TODO: 2021-12-28: remove this block -# Handle $0 according to the standard: -# https://zdharma-continuum.github.io/Zsh-100-Commits-Club/Zsh-Plugin-Standard.html -0="${${ZERO:-${0:#$ZSH_ARGZERO}}:-${(%):-%N}}" -0="${${(M)0:#/*}:-$PWD/$0}" -# Remove old generated files -command rm -f "${0:A:h}/_gh" "$ZSH_CACHE_DIR/gh_version" - -# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh -# Add completions folder in $ZSH_CACHE_DIR -command mkdir -p "$ZSH_CACHE_DIR/completions" -(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) - # If the completion file doesn't exist yet, we need to autoload it and # bind it to `gh`. Otherwise, compinit will have already done that. if [[ ! -f "$ZSH_CACHE_DIR/completions/_gh" ]]; then diff --git a/zsh/plugins/git-prompt/README.md b/zsh/plugins/git-prompt/README.md index 83d365c..8775af8 100644 --- a/zsh/plugins/git-prompt/README.md +++ b/zsh/plugins/git-prompt/README.md @@ -13,7 +13,7 @@ See the [original repository](https://github.com/olivierverdier/zsh-git-prompt). ## Requirements -This plugin uses `python`, so your host needs to have it installed +This plugin uses `python3`, so your host needs to have it installed. ## Examples diff --git a/zsh/plugins/git-prompt/git-prompt.plugin.zsh b/zsh/plugins/git-prompt/git-prompt.plugin.zsh index c86c1f5..0485e31 100644 --- a/zsh/plugins/git-prompt/git-prompt.plugin.zsh +++ b/zsh/plugins/git-prompt/git-prompt.plugin.zsh @@ -36,7 +36,7 @@ function update_current_git_vars() { unset __CURRENT_GIT_STATUS local gitstatus="$__GIT_PROMPT_DIR/gitstatus.py" - _GIT_STATUS=$(python ${gitstatus} 2>/dev/null) + _GIT_STATUS=$(python3 ${gitstatus} 2>/dev/null) __CURRENT_GIT_STATUS=("${(@s: :)_GIT_STATUS}") GIT_BRANCH=$__CURRENT_GIT_STATUS[1] GIT_AHEAD=$__CURRENT_GIT_STATUS[2] diff --git a/zsh/plugins/git-prompt/gitstatus.py b/zsh/plugins/git-prompt/gitstatus.py index 4dea800..b5c3c9a 100644 --- a/zsh/plugins/git-prompt/gitstatus.py +++ b/zsh/plugins/git-prompt/gitstatus.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from __future__ import print_function import os diff --git a/zsh/plugins/gitfast/_git b/zsh/plugins/gitfast/_git index 988f5b1..31bf88c 100644 --- a/zsh/plugins/gitfast/_git +++ b/zsh/plugins/gitfast/_git @@ -33,8 +33,9 @@ if [ -z "$script" ]; then bash_completion='/usr/share/bash-completion/completions/' locations=( - "$(dirname ${funcsourcetrace[1]%:*})"/git-completion.bash + "${${funcsourcetrace[1]%:*}:A:h}"/git-completion.bash "$HOME/.local/share/bash-completion/completions/git" + '/usr/local/share/bash-completion/completions/git' "$bash_completion/git" '/etc/bash_completion.d/git' # old debian ) @@ -51,13 +52,20 @@ functions[complete]="$old_complete" __gitcompadd () { - compadd -Q -p "${2-}" -S "${3- }" ${@[4,-1]} -- ${=1} && _ret=0 + compadd -p "${2-}" -S "${3- }" -q -- ${=1} && _ret=0 } __gitcomp () { emulate -L zsh + IFS=$' \t\n' __gitcompadd "$1" "${2-}" "${4- }" +} + +__gitcomp_opts () +{ + emulate -L zsh + local cur_="${3-$cur}" [[ "$cur_" == *= ]] && return @@ -70,7 +78,7 @@ __gitcomp () break fi - if [[ -z "${4-}" ]]; then + if [[ -z "${4+set}" ]]; then case $c in *=) c="${c%=}"; sfx="=" ;; *.) sfx="" ;; @@ -79,7 +87,7 @@ __gitcomp () else sfx="$4" fi - __gitcompadd "$c" "${2-}" "$sfx" -q + __gitcompadd "$c" "${2-}" "$sfx" done } @@ -87,7 +95,10 @@ __gitcomp_nl () { emulate -L zsh - IFS=$'\n' __gitcompadd "$1" "${2-}" "${4- }" + # words that don't end up in space + compadd -p "${2-}" -S "${4- }" -q -- ${${(f)1}:#*\ } && _ret=0 + # words that end in space + compadd -p "${2-}" -S " ${4- }" -q -- ${${(M)${(f)1}:#*\ }% } && _ret=0 } __gitcomp_file () @@ -107,21 +118,6 @@ __gitcomp_file_direct () __gitcomp_file "$1" "" } -__gitcomp_nl_append () -{ - __gitcomp_nl "$@" -} - -__gitcomp_direct_append () -{ - __gitcomp_direct "$@" -} - -_git_zsh () -{ - __gitcomp "v1.2" -} - __git_complete_command () { emulate -L zsh @@ -206,9 +202,7 @@ __git_zsh_main () { local curcontext="$curcontext" state state_descr line typeset -A opt_args - local -a orig_words __git_C_args - - orig_words=( ${words[@]} ) + local -a __git_C_args _arguments -C \ '(-p --paginate -P --no-pager)'{-p,--paginate}'[pipe all output into ''less'']' \ @@ -245,7 +239,7 @@ __git_zsh_main () emulate ksh -c __git_complete_config_variable_name_and_value ;; (arg) - local command="${words[1]}" __git_dir + local command="${words[1]}" __git_dir __git_cmd_idx=1 if (( $+opt_args[--bare] )); then __git_dir='.' @@ -259,7 +253,7 @@ __git_zsh_main () (( $+opt_args[--help] )) && command='help' - words=( ${orig_words[@]} ) + words=( git ${words[@]} ) __git_zsh_bash_func $command ;; @@ -269,7 +263,7 @@ __git_zsh_main () _git () { local _ret=1 - local cur cword prev + local cur cword prev __git_cmd_idx=0 cur=${words[CURRENT]} prev=${words[CURRENT-1]} diff --git a/zsh/plugins/gitfast/git-completion.bash b/zsh/plugins/gitfast/git-completion.bash index f7b09b2..2603ba7 100644 --- a/zsh/plugins/gitfast/git-completion.bash +++ b/zsh/plugins/gitfast/git-completion.bash @@ -29,6 +29,15 @@ # tell the completion to use commit completion. This also works with aliases # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '". # +# If you have a command that is not part of git, but you would still +# like completion, you can use __git_complete: +# +# __git_complete gl git_log +# +# Or if it's a main command (i.e. git or gitk): +# +# __git_complete gk gitk +# # Compatible with bash 3.2.57. # # You can set the following environment variables to influence the behavior of @@ -45,6 +54,145 @@ # When set to "1" suggest all options, including options which are # typically hidden (e.g. '--allow-empty' for 'git commit'). +# The following functions are meant to modify COMPREPLY, which should not be +# modified directly. The purpose is to localize the modifications so it's +# easier to emulate it in Zsh. Every time a new __gitcomp* function is added, +# the corresponding function should be added to Zsh. + +__gitcompadd () +{ + local x i=${#COMPREPLY[@]} + for x in $1; do + if [[ "$x" == "$3"* ]]; then + COMPREPLY[i++]="$2$x$4" + fi + done +} + +# Creates completion replies. +# It accepts 1 to 4 arguments: +# 1: List of possible completion words. +# 2: A prefix to be added to each possible completion word (optional). +# 3: Generate possible completion matches for this word (optional). +# 4: A suffix to be appended to each possible completion word (optional). +__gitcomp () +{ + local IFS=$' \t\n' + __gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }" +} + +# Generates completion reply from newline-separated possible completion words +# by appending a space to all of them. The result is appended to COMPREPLY. +# It accepts 1 to 4 arguments: +# 1: List of possible completion words, separated by a single newline. +# 2: A prefix to be added to each possible completion word (optional). +# 3: Generate possible completion matches for this word (optional). +# 4: A suffix to be appended to each possible completion word instead of +# the default space (optional). If specified but empty, nothing is +# appended. +__gitcomp_nl () +{ + local IFS=$'\n' + __gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }" +} + +# Appends prefiltered words to COMPREPLY 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) +} + +# Generates completion reply with compgen from newline-separated possible +# completion filenames. +# It accepts 1 to 3 arguments: +# 1: List of possible completion filenames, separated by a single newline. +# 2: A directory prefix to be added to each possible completion filename +# (optional). +# 3: Generate possible completion matches for this word (optional). +__gitcomp_file () +{ + local IFS=$'\n' + + # XXX does not work when the directory prefix contains a tilde, + # since tilde expansion is not applied. + # This means that COMPREPLY will be empty and Bash default + # completion will be used. + __gitcompadd "$1" "${2-}" "${3-$cur}" "" + + # use a hack to enable file mode in bash < 4 + compopt -o filenames +o nospace 2>/dev/null || + compgen -f /non-existing-dir/ >/dev/null || + true +} + +# Fills the COMPREPLY array with prefiltered paths without any additional +# processing. +# Callers must take care of providing only paths that match the current path +# to be completed and adding any prefix path components, if necessary. +# 1: List of newline-separated matching paths, complete with all prefix +# path components. +__gitcomp_file_direct () +{ + local IFS=$'\n' + + COMPREPLY+=($1) + + # use a hack to enable file mode in bash < 4 + compopt -o filenames +o nospace 2>/dev/null || + compgen -f /non-existing-dir/ >/dev/null || + true +} + +# Creates completion replies, reorganizing options and adding suffixes as needed. +# It accepts 1 to 4 arguments: +# 1: List of possible completion words. +# 2: A prefix to be added to each possible completion word (optional). +# 3: Generate possible completion matches for this word (optional). +# 4: A suffix to be appended to each possible completion word (optional). +__gitcomp_opts () +{ + local cur_="${3-$cur}" + + if [[ "$cur_" == *= ]]; then + return + fi + + local c i=0 IFS=$' \t\n' sfx + for c in $1; do + if [[ $c == "--" ]]; then + if [[ "$cur_" == --no-* ]]; then + continue + fi + + if [[ --no == "$cur_"* ]]; then + COMPREPLY[i++]="--no-... " + fi + break + fi + if [[ $c == "$cur_"* ]]; then + if [[ -z "${4+set}" ]]; then + case $c in + *=|*.) sfx="" ;; + *) sfx=" " ;; + esac + else + sfx="$4" + fi + COMPREPLY[i++]="${2-}$c$sfx" + fi + done +} + +# __gitcomp functions end here +# ============================================================================== + # Discovers the path to the git repository taking any '--git-dir=' and # '-C ' options into account and stores it in the $__git_repo_path # variable. @@ -63,7 +211,7 @@ __git_find_repo_path () test -d "$__git_dir" && __git_repo_path="$__git_dir" elif [ -n "${GIT_DIR-}" ]; then - test -d "${GIT_DIR-}" && + test -d "$GIT_DIR" && __git_repo_path="$GIT_DIR" elif [ -d .git ]; then __git_repo_path=.git @@ -159,230 +307,6 @@ __git_dequote () done } -# The following function is based on code from: -# -# bash_completion - programmable completion functions for bash 3.2+ -# -# Copyright © 2006-2008, Ian Macdonald -# © 2009-2010, Bash Completion Maintainers -# -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# 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, see . -# -# The latest version of this software can be obtained here: -# -# http://bash-completion.alioth.debian.org/ -# -# RELEASE: 2.x - -# This function can be used to access a tokenized list of words -# on the command line: -# -# __git_reassemble_comp_words_by_ref '=:' -# if test "${words_[cword_-1]}" = -w -# then -# ... -# fi -# -# The argument should be a collection of characters from the list of -# word completion separators (COMP_WORDBREAKS) to treat as ordinary -# characters. -# -# This is roughly equivalent to going back in time and setting -# COMP_WORDBREAKS to exclude those characters. The intent is to -# make option types like --date= and : easy to -# recognize by treating each shell word as a single token. -# -# It is best not to set COMP_WORDBREAKS directly because the value is -# shared with other completion scripts. By the time the completion -# function gets called, COMP_WORDS has already been populated so local -# changes to COMP_WORDBREAKS have no effect. -# -# Output: words_, cword_, cur_. - -__git_reassemble_comp_words_by_ref() -{ - local exclude i j first - # Which word separators to exclude? - exclude="${1//[^$COMP_WORDBREAKS]}" - cword_=$COMP_CWORD - if [ -z "$exclude" ]; then - words_=("${COMP_WORDS[@]}") - return - fi - # List of word completion separators has shrunk; - # re-assemble words to complete. - for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do - # Append each nonempty word consisting of just - # word separator characters to the current word. - first=t - while - [ $i -gt 0 ] && - [ -n "${COMP_WORDS[$i]}" ] && - # word consists of excluded word separators - [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ] - do - # Attach to the previous token, - # unless the previous token is the command name. - if [ $j -ge 2 ] && [ -n "$first" ]; then - ((j--)) - fi - first= - words_[$j]=${words_[j]}${COMP_WORDS[i]} - if [ $i = $COMP_CWORD ]; then - cword_=$j - fi - if (($i < ${#COMP_WORDS[@]} - 1)); then - ((i++)) - else - # Done. - return - fi - done - words_[$j]=${words_[j]}${COMP_WORDS[i]} - if [ $i = $COMP_CWORD ]; then - cword_=$j - fi - done -} - -if ! type _get_comp_words_by_ref >/dev/null 2>&1; then -_get_comp_words_by_ref () -{ - local exclude cur_ words_ cword_ - if [ "$1" = "-n" ]; then - exclude=$2 - shift 2 - fi - __git_reassemble_comp_words_by_ref "$exclude" - cur_=${words_[cword_]} - while [ $# -gt 0 ]; do - case "$1" in - cur) - cur=$cur_ - ;; - prev) - prev=${words_[$cword_-1]} - ;; - words) - words=("${words_[@]}") - ;; - cword) - cword=$cword_ - ;; - esac - shift - done -} -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) -} - -# Similar to __gitcomp_direct, but appends to COMPREPLY instead. -# 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_append () -{ - local IFS=$'\n' - - COMPREPLY+=($1) -} - -__gitcompappend () -{ - local x i=${#COMPREPLY[@]} - for x in $1; do - if [[ "$x" == "$3"* ]]; then - COMPREPLY[i++]="$2$x$4" - fi - done -} - -__gitcompadd () -{ - COMPREPLY=() - __gitcompappend "$@" -} - -# Generates completion reply, appending a space to possible completion words, -# if necessary. -# It accepts 1 to 4 arguments: -# 1: List of possible completion words. -# 2: A prefix to be added to each possible completion word (optional). -# 3: Generate possible completion matches for this word (optional). -# 4: A suffix to be appended to each possible completion word (optional). -__gitcomp () -{ - local cur_="${3-$cur}" - - case "$cur_" in - *=) - ;; - --no-*) - local c i=0 IFS=$' \t\n' - for c in $1; do - if [[ $c == "--" ]]; then - continue - fi - c="$c${4-}" - if [[ $c == "$cur_"* ]]; then - case $c in - --*=|*.) ;; - *) c="$c " ;; - esac - COMPREPLY[i++]="${2-}$c" - fi - done - ;; - *) - local c i=0 IFS=$' \t\n' - for c in $1; do - if [[ $c == "--" ]]; then - c="--no-...${4-}" - if [[ $c == "$cur_"* ]]; then - COMPREPLY[i++]="${2-}$c " - fi - break - fi - c="$c${4-}" - if [[ $c == "$cur_"* ]]; then - case $c in - *=|*.) ;; - *) c="$c " ;; - esac - COMPREPLY[i++]="${2-}$c" - fi - done - ;; - esac -} - # Clear the variables caching builtins' options when (re-)sourcing # the completion script. if [[ -n ${ZSH_VERSION-} ]]; then @@ -391,107 +315,108 @@ else unset $(compgen -v __gitcomp_builtin_) fi -__gitcomp_builtin_add_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-chmod --no-pathspec-from-file --no-pathspec-file-nul" -__gitcomp_builtin_am_default=" --interactive --3way --quiet --signoff --utf8 --keep --keep-non-patch --message-id --keep-cr --no-keep-cr --scissors --whitespace= --ignore-space-change --ignore-whitespace --directory= --exclude= --include= --patch-format= --reject --resolvemsg= --continue --resolved --skip --abort --quit --show-current-patch --committer-date-is-author-date --ignore-date --rerere-autoupdate --gpg-sign -- --no-interactive --no-3way --no-quiet --no-signoff --no-utf8 --no-keep --no-keep-non-patch --no-message-id --no-scissors --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-directory --no-exclude --no-include --no-patch-format --no-reject --no-resolvemsg --no-committer-date-is-author-date --no-ignore-date --no-rerere-autoupdate --no-gpg-sign" -__gitcomp_builtin_apply_default=" --exclude= --include= --no-add --stat --numstat --summary --check --index --intent-to-add --cached --apply --3way --build-fake-ancestor= --whitespace= --ignore-space-change --ignore-whitespace --reverse --unidiff-zero --reject --allow-overlap --verbose --inaccurate-eof --recount --directory= --add -- --no-stat --no-numstat --no-summary --no-check --no-index --no-intent-to-add --no-cached --no-apply --no-3way --no-build-fake-ancestor --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-reverse --no-unidiff-zero --no-reject --no-allow-overlap --no-verbose --no-inaccurate-eof --no-recount --no-directory" +__gitcomp_builtin_add_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --sparse --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-sparse --no-chmod --no-pathspec-from-file --no-pathspec-file-nul" +__gitcomp_builtin_am_default=" --interactive --3way --quiet --signoff --utf8 --keep --keep-non-patch --message-id --keep-cr --no-keep-cr --scissors --quoted-cr= --whitespace= --ignore-space-change --ignore-whitespace --directory= --exclude= --include= --patch-format= --reject --resolvemsg= --continue --resolved --skip --abort --quit --show-current-patch --allow-empty --committer-date-is-author-date --ignore-date --rerere-autoupdate --gpg-sign --empty= -- --no-interactive --no-3way --no-quiet --no-signoff --no-utf8 --no-keep --no-keep-non-patch --no-message-id --no-scissors --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-directory --no-exclude --no-include --no-patch-format --no-reject --no-resolvemsg --no-committer-date-is-author-date --no-ignore-date --no-rerere-autoupdate --no-gpg-sign" +__gitcomp_builtin_apply_default=" --exclude= --include= --no-add --stat --numstat --summary --check --index --intent-to-add --cached --apply --3way --build-fake-ancestor= --whitespace= --ignore-space-change --ignore-whitespace --reverse --unidiff-zero --reject --allow-overlap --verbose --quiet --inaccurate-eof --recount --directory= --allow-empty --add -- --no-stat --no-numstat --no-summary --no-check --no-index --no-intent-to-add --no-cached --no-apply --no-3way --no-build-fake-ancestor --no-whitespace --no-ignore-space-change --no-ignore-whitespace --no-reverse --no-unidiff-zero --no-reject --no-allow-overlap --no-verbose --no-quiet --no-inaccurate-eof --no-recount --no-directory --no-allow-empty" __gitcomp_builtin_archive_default=" --output= --remote= --exec= --no-output -- --no-remote --no-exec" -__gitcomp_builtin_bisect__helper_default=" --next-all --write-terms --bisect-clean-state --check-expected-revs --bisect-reset --bisect-write --check-and-set-terms --bisect-next-check --bisect-terms --bisect-start --bisect-next --bisect-auto-next --bisect-autostart --no-log --log" +__gitcomp_builtin_bisect__helper_default=" --bisect-reset --bisect-next-check --bisect-terms --bisect-start --bisect-next --bisect-state --bisect-log --bisect-replay --bisect-skip --bisect-visualize --bisect-run --no-log --log" __gitcomp_builtin_blame_default=" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev" -__gitcomp_builtin_branch_default=" --verbose --quiet --track --set-upstream-to= --unset-upstream --color --remotes --contains --no-contains --abbrev --all --delete --move --copy --list --show-current --create-reflog --edit-description --merged --no-merged --column --sort= --points-at= --ignore-case --format= -- --no-verbose --no-quiet --no-track --no-set-upstream-to --no-unset-upstream --no-color --no-remotes --no-abbrev --no-all --no-delete --no-move --no-copy --no-list --no-show-current --no-create-reflog --no-edit-description --no-column --no-points-at --no-ignore-case --no-format" +__gitcomp_builtin_branch_default=" --verbose --quiet --track --set-upstream-to= --unset-upstream --color --remotes --contains --no-contains --abbrev --all --delete --move --copy --list --show-current --create-reflog --edit-description --merged --no-merged --column --sort= --points-at= --ignore-case --format= -- --no-verbose --no-quiet --no-track --no-set-upstream-to --no-unset-upstream --no-color --no-remotes --no-abbrev --no-all --no-delete --no-move --no-copy --no-list --no-show-current --no-create-reflog --no-edit-description --no-column --no-sort --no-points-at --no-ignore-case --no-format" __gitcomp_builtin_bugreport_default=" --output-directory= --suffix= --no-output-directory -- --no-suffix" __gitcomp_builtin_cat_file_default=" --textconv --filters --path= --allow-unknown-type --buffer --batch --batch-check --follow-symlinks --batch-all-objects --unordered --no-path -- --no-allow-unknown-type --no-buffer --no-follow-symlinks --no-batch-all-objects --no-unordered" __gitcomp_builtin_check_attr_default=" --all --cached --stdin --no-all -- --no-cached --no-stdin" __gitcomp_builtin_check_ignore_default=" --quiet --verbose --stdin --non-matching --no-index --index -- --no-quiet --no-verbose --no-stdin --no-non-matching" __gitcomp_builtin_check_mailmap_default=" --stdin --no-stdin" __gitcomp_builtin_checkout_default=" --guess --overlay --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-guess -- --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul" +__gitcomp_builtin_checkout__worker_default=" --prefix= --no-prefix" __gitcomp_builtin_checkout_index_default=" --all --force --quiet --no-create --index --stdin --temp --prefix= --stage= --create -- --no-all --no-force --no-quiet --no-index --no-stdin --no-temp --no-prefix" __gitcomp_builtin_cherry_default=" --abbrev --verbose --no-abbrev -- --no-verbose" __gitcomp_builtin_cherry_pick_default=" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --ff --allow-empty --allow-empty-message --keep-redundant-commits --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign --no-ff --no-allow-empty --no-allow-empty-message --no-keep-redundant-commits" __gitcomp_builtin_clean_default=" --quiet --dry-run --interactive --exclude= --no-quiet -- --no-dry-run --no-interactive" -__gitcomp_builtin_clone_default=" --verbose --quiet --progress --no-checkout --bare --mirror --local --no-hardlinks --shared --recurse-submodules --recursive --jobs= --template= --reference= --reference-if-able= --dissociate --origin= --branch= --upload-pack= --depth= --shallow-since= --shallow-exclude= --single-branch --no-tags --shallow-submodules --separate-git-dir= --config= --server-option= --ipv4 --ipv6 --filter= --remote-submodules --sparse --checkout --hardlinks --tags -- --no-verbose --no-quiet --no-progress --no-bare --no-mirror --no-local --no-shared --no-recurse-submodules --no-recursive --no-jobs --no-template --no-reference --no-reference-if-able --no-dissociate --no-origin --no-branch --no-upload-pack --no-depth --no-shallow-since --no-shallow-exclude --no-single-branch --no-shallow-submodules --no-separate-git-dir --no-config --no-server-option --no-ipv4 --no-ipv6 --no-filter --no-remote-submodules --no-sparse" +__gitcomp_builtin_clone_default=" --verbose --quiet --progress --reject-shallow --no-checkout --bare --mirror --local --no-hardlinks --shared --recurse-submodules --jobs= --template= --reference= --reference-if-able= --dissociate --origin= --branch= --upload-pack= --depth= --shallow-since= --shallow-exclude= --single-branch --no-tags --shallow-submodules --separate-git-dir= --config= --server-option= --ipv4 --ipv6 --filter= --remote-submodules --sparse --checkout --hardlinks --tags -- --no-verbose --no-quiet --no-progress --no-reject-shallow --no-bare --no-mirror --no-local --no-shared --no-recurse-submodules --no-recursive --no-jobs --no-template --no-reference --no-reference-if-able --no-dissociate --no-origin --no-branch --no-upload-pack --no-depth --no-shallow-since --no-shallow-exclude --no-single-branch --no-shallow-submodules --no-separate-git-dir --no-config --no-server-option --no-ipv4 --no-ipv6 --no-filter --no-remote-submodules --no-sparse" __gitcomp_builtin_column_default=" --command= --mode --raw-mode= --width= --indent= --nl= --padding= --no-command -- --no-mode --no-raw-mode --no-width --no-indent --no-nl --no-padding" -__gitcomp_builtin_commit_default=" --quiet --verbose --file= --author= --date= --message= --reedit-message= --reuse-message= --fixup= --squash= --reset-author --signoff --template= --edit --cleanup= --status --gpg-sign --all --include --interactive --patch --only --no-verify --dry-run --short --branch --ahead-behind --porcelain --long --null --amend --no-post-rewrite --untracked-files --pathspec-from-file= --pathspec-file-nul --verify --post-rewrite -- --no-quiet --no-verbose --no-file --no-author --no-date --no-message --no-reedit-message --no-reuse-message --no-fixup --no-squash --no-reset-author --no-signoff --no-template --no-edit --no-cleanup --no-status --no-gpg-sign --no-all --no-include --no-interactive --no-patch --no-only --no-dry-run --no-short --no-branch --no-ahead-behind --no-porcelain --no-long --no-null --no-amend --no-untracked-files --no-pathspec-from-file --no-pathspec-file-nul" +__gitcomp_builtin_commit_default=" --quiet --verbose --file= --author= --date= --message= --reedit-message= --reuse-message= --fixup= --squash= --reset-author --trailer= --signoff --template= --edit --cleanup= --status --gpg-sign --all --include --interactive --patch --only --no-verify --dry-run --short --branch --ahead-behind --porcelain --long --null --amend --no-post-rewrite --untracked-files --pathspec-from-file= --pathspec-file-nul --verify --post-rewrite -- --no-quiet --no-verbose --no-file --no-author --no-date --no-message --no-reedit-message --no-reuse-message --no-fixup --no-squash --no-reset-author --no-signoff --no-template --no-edit --no-cleanup --no-status --no-gpg-sign --no-all --no-include --no-interactive --no-patch --no-only --no-dry-run --no-short --no-branch --no-ahead-behind --no-porcelain --no-long --no-null --no-amend --no-untracked-files --no-pathspec-from-file --no-pathspec-file-nul" __gitcomp_builtin_commit_graph_default=" --object-dir= --no-object-dir" -__gitcomp_builtin_config_default=" --global --system --local --worktree --file= --blob= --get --get-all --get-regexp --get-urlmatch --replace-all --add --unset --unset-all --rename-section --remove-section --list --edit --get-color --get-colorbool --type= --bool --int --bool-or-int --bool-or-str --path --expiry-date --null --name-only --includes --show-origin --show-scope --default= --no-global -- --no-system --no-local --no-worktree --no-file --no-blob --no-get --no-get-all --no-get-regexp --no-get-urlmatch --no-replace-all --no-add --no-unset --no-unset-all --no-rename-section --no-remove-section --no-list --no-edit --no-get-color --no-get-colorbool --no-type --no-null --no-name-only --no-includes --no-show-origin --no-show-scope --no-default" +__gitcomp_builtin_config_default=" --global --system --local --worktree --file= --blob= --get --get-all --get-regexp --get-urlmatch --replace-all --add --unset --unset-all --rename-section --remove-section --list --fixed-value --edit --get-color --get-colorbool --type= --bool --int --bool-or-int --bool-or-str --path --expiry-date --null --name-only --includes --show-origin --show-scope --default= --no-global -- --no-system --no-local --no-worktree --no-file --no-blob --no-get --no-get-all --no-get-regexp --no-get-urlmatch --no-replace-all --no-add --no-unset --no-unset-all --no-rename-section --no-remove-section --no-list --no-fixed-value --no-edit --no-get-color --no-get-colorbool --no-type --no-null --no-name-only --no-includes --no-show-origin --no-show-scope --no-default" __gitcomp_builtin_count_objects_default=" --verbose --human-readable --no-verbose -- --no-human-readable" __gitcomp_builtin_credential_cache_default=" --timeout= --socket= --no-timeout -- --no-socket" __gitcomp_builtin_credential_cache__daemon_default=" --debug --no-debug" __gitcomp_builtin_credential_store_default=" --file= --no-file" __gitcomp_builtin_describe_default=" --contains --debug --all --tags --long --first-parent --abbrev --exact-match --candidates= --match= --exclude= --always --dirty --broken --no-contains -- --no-debug --no-all --no-tags --no-long --no-first-parent --no-abbrev --no-exact-match --no-candidates --no-match --no-exclude --no-always --no-dirty --no-broken" -__gitcomp_builtin_difftool_default=" --gui --dir-diff --no-prompt --symlinks --tool= --tool-help --trust-exit-code --extcmd= --no-index -- --no-gui --no-dir-diff --no-symlinks --no-tool --no-tool-help --no-trust-exit-code --no-extcmd" +__gitcomp_builtin_difftool_default=" --gui --dir-diff --no-prompt --symlinks --tool= --tool-help --trust-exit-code --extcmd= --no-index --index -- --no-gui --no-dir-diff --no-symlinks --no-tool --no-tool-help --no-trust-exit-code --no-extcmd" __gitcomp_builtin_env__helper_default=" --type= --default= --exit-code --no-default -- --no-exit-code" __gitcomp_builtin_fast_export_default=" --progress= --signed-tags= --tag-of-filtered-object= --reencode= --export-marks= --import-marks= --import-marks-if-exists= --fake-missing-tagger --full-tree --use-done-feature --no-data --refspec= --anonymize --anonymize-map= --reference-excluded-parents --show-original-ids --mark-tags --data -- --no-progress --no-signed-tags --no-tag-of-filtered-object --no-reencode --no-export-marks --no-import-marks --no-import-marks-if-exists --no-fake-missing-tagger --no-full-tree --no-use-done-feature --no-refspec --no-anonymize --no-reference-excluded-parents --no-show-original-ids --no-mark-tags" -__gitcomp_builtin_fetch_default=" --verbose --quiet --all --set-upstream --append --upload-pack= --force --multiple --tags --jobs= --prune --prune-tags --recurse-submodules --dry-run --write-fetch-head --keep --update-head-ok --progress --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --filter= --auto-maintenance --auto-gc --show-forced-updates --write-commit-graph --stdin --no-verbose -- --no-quiet --no-all --no-set-upstream --no-append --no-upload-pack --no-force --no-multiple --no-tags --no-jobs --no-prune --no-prune-tags --no-recurse-submodules --no-dry-run --no-write-fetch-head --no-keep --no-update-head-ok --no-progress --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-filter --no-auto-maintenance --no-auto-gc --no-show-forced-updates --no-write-commit-graph --no-stdin" -__gitcomp_builtin_fmt_merge_msg_default=" --log --message= --file= --no-log -- --no-message --no-file" -__gitcomp_builtin_for_each_ref_default=" --shell --perl --python --tcl --count= --format= --color --sort= --points-at= --merged --no-merged --contains --no-contains --ignore-case -- --no-shell --no-perl --no-python --no-tcl --no-count --no-format --no-color --no-points-at --no-ignore-case" -__gitcomp_builtin_format_patch_default=" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor" +__gitcomp_builtin_fetch_default=" --verbose --quiet --all --set-upstream --append --atomic --upload-pack= --force --multiple --tags --jobs= --prefetch --prune --prune-tags --recurse-submodules --dry-run --write-fetch-head --keep --update-head-ok --progress --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --negotiate-only --filter= --auto-maintenance --auto-gc --show-forced-updates --write-commit-graph --stdin --no-verbose -- --no-quiet --no-all --no-set-upstream --no-append --no-atomic --no-upload-pack --no-force --no-multiple --no-tags --no-jobs --no-prefetch --no-prune --no-prune-tags --no-recurse-submodules --no-dry-run --no-write-fetch-head --no-keep --no-update-head-ok --no-progress --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-negotiate-only --no-filter --no-auto-maintenance --no-auto-gc --no-show-forced-updates --no-write-commit-graph --no-stdin" +__gitcomp_builtin_fmt_merge_msg_default=" --log --message= --into-name= --file= --no-log -- --no-message --no-into-name --no-file" +__gitcomp_builtin_for_each_ref_default=" --shell --perl --python --tcl --count= --format= --color --sort= --points-at= --merged --no-merged --contains --no-contains --ignore-case -- --no-shell --no-perl --no-python --no-tcl --no-count --no-format --no-color --no-sort --no-points-at --no-ignore-case" +__gitcomp_builtin_for_each_repo_default=" --config= --no-config" +__gitcomp_builtin_format_patch_default=" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor" __gitcomp_builtin_fsck_default=" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects" __gitcomp_builtin_fsck_objects_default=" --verbose --unreachable --dangling --tags --root --cache --reflogs --full --connectivity-only --strict --lost-found --progress --name-objects --no-verbose -- --no-unreachable --no-dangling --no-tags --no-root --no-cache --no-reflogs --no-full --no-connectivity-only --no-strict --no-lost-found --no-progress --no-name-objects" __gitcomp_builtin_gc_default=" --quiet --prune --aggressive --keep-largest-pack --no-quiet -- --no-prune --no-aggressive --no-keep-largest-pack" __gitcomp_builtin_grep_default=" --cached --no-index --untracked --exclude-standard --recurse-submodules --invert-match --ignore-case --word-regexp --text --textconv --recursive --max-depth= --extended-regexp --basic-regexp --fixed-strings --perl-regexp --line-number --column --full-name --files-with-matches --name-only --files-without-match --only-matching --count --color --break --heading --context= --before-context= --after-context= --threads= --show-function --function-context --and --or --not --quiet --all-match --index -- --no-cached --no-untracked --no-exclude-standard --no-recurse-submodules --no-invert-match --no-ignore-case --no-word-regexp --no-text --no-textconv --no-recursive --no-extended-regexp --no-basic-regexp --no-fixed-strings --no-perl-regexp --no-line-number --no-column --no-full-name --no-files-with-matches --no-name-only --no-files-without-match --no-only-matching --no-count --no-color --no-break --no-heading --no-context --no-before-context --no-after-context --no-threads --no-show-function --no-function-context --no-or --no-quiet --no-all-match" __gitcomp_builtin_hash_object_default=" --stdin --stdin-paths --no-filters --literally --path= --filters -- --no-stdin --no-stdin-paths --no-literally --no-path" -__gitcomp_builtin_help_default=" --all --guides --config --man --web --info --verbose --no-all -- --no-guides --no-config --no-man --no-web --no-info --no-verbose" +__gitcomp_builtin_help_default=" --all --man --web --info --verbose --guides --config --no-man -- --no-web --no-info --no-verbose" __gitcomp_builtin_init_default=" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format" __gitcomp_builtin_init_db_default=" --template= --bare --shared --quiet --separate-git-dir= --initial-branch= --object-format= --no-template -- --no-bare --no-quiet --no-separate-git-dir --no-initial-branch --no-object-format" __gitcomp_builtin_interpret_trailers_default=" --in-place --trim-empty --where= --if-exists= --if-missing= --only-trailers --only-input --unfold --parse --no-divider --trailer= --divider -- --no-in-place --no-trim-empty --no-where --no-if-exists --no-if-missing --no-only-trailers --no-only-input --no-unfold --no-trailer" -__gitcomp_builtin_log_default=" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" -__gitcomp_builtin_ls_files_default=" --cached --deleted --modified --others --ignored --stage --killed --directory --eol --empty-directory --unmerged --resolve-undo --exclude= --exclude-from= --exclude-per-directory= --exclude-standard --full-name --recurse-submodules --error-unmatch --with-tree= --abbrev --debug --no-cached -- --no-deleted --no-modified --no-others --no-ignored --no-stage --no-killed --no-directory --no-eol --no-empty-directory --no-unmerged --no-resolve-undo --no-exclude-per-directory --no-recurse-submodules --no-error-unmatch --no-with-tree --no-abbrev --no-debug" -__gitcomp_builtin_ls_remote_default=" --quiet --upload-pack= --tags --heads --refs --get-url --sort= --symref --server-option= --no-quiet -- --no-upload-pack --no-tags --no-heads --no-refs --no-get-url --no-symref --no-server-option" +__gitcomp_builtin_log_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" +__gitcomp_builtin_ls_files_default=" --cached --deleted --modified --others --ignored --stage --killed --directory --eol --empty-directory --unmerged --resolve-undo --exclude= --exclude-from= --exclude-per-directory= --exclude-standard --full-name --recurse-submodules --error-unmatch --with-tree= --abbrev --debug --deduplicate --sparse --no-cached -- --no-deleted --no-modified --no-others --no-ignored --no-stage --no-killed --no-directory --no-eol --no-empty-directory --no-unmerged --no-resolve-undo --no-exclude-per-directory --no-recurse-submodules --no-error-unmatch --no-with-tree --no-abbrev --no-debug --no-deduplicate --no-sparse" +__gitcomp_builtin_ls_remote_default=" --quiet --upload-pack= --tags --heads --refs --get-url --sort= --symref --server-option= --no-quiet -- --no-upload-pack --no-tags --no-heads --no-refs --no-get-url --no-sort --no-symref --no-server-option" __gitcomp_builtin_ls_tree_default=" --long --name-only --name-status --full-name --full-tree --abbrev --no-long -- --no-name-only --no-name-status --no-full-name --no-full-tree --no-abbrev" -__gitcomp_builtin_merge_default=" --stat --summary --log --squash --commit --edit --cleanup= --ff --ff-only --rerere-autoupdate --verify-signatures --strategy= --strategy-option= --message= --file --verbose --quiet --abort --quit --continue --allow-unrelated-histories --progress --gpg-sign --autostash --overwrite-ignore --signoff --no-verify --verify -- --no-stat --no-summary --no-log --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-rerere-autoupdate --no-verify-signatures --no-strategy --no-strategy-option --no-message --no-verbose --no-quiet --no-abort --no-quit --no-continue --no-allow-unrelated-histories --no-progress --no-gpg-sign --no-autostash --no-overwrite-ignore --no-signoff" +__gitcomp_builtin_merge_default=" --stat --summary --log --squash --commit --edit --cleanup= --ff --ff-only --rerere-autoupdate --verify-signatures --strategy= --strategy-option= --message= --file --into-name= --verbose --quiet --abort --quit --continue --allow-unrelated-histories --progress --gpg-sign --autostash --overwrite-ignore --signoff --no-verify --verify -- --no-stat --no-summary --no-log --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-rerere-autoupdate --no-verify-signatures --no-strategy --no-strategy-option --no-message --no-into-name --no-verbose --no-quiet --no-abort --no-quit --no-continue --no-allow-unrelated-histories --no-progress --no-gpg-sign --no-autostash --no-overwrite-ignore --no-signoff" __gitcomp_builtin_merge_base_default=" --all --octopus --independent --is-ancestor --fork-point --no-all" -__gitcomp_builtin_merge_file_default=" --stdout --diff3 --ours --theirs --union --marker-size= --quiet --no-stdout -- --no-diff3 --no-ours --no-theirs --no-union --no-marker-size --no-quiet" +__gitcomp_builtin_merge_file_default=" --stdout --diff3 --zdiff3 --ours --theirs --union --marker-size= --quiet --no-stdout -- --no-diff3 --no-zdiff3 --no-ours --no-theirs --no-union --no-marker-size --no-quiet" __gitcomp_builtin_mktree_default=" --missing --batch --no-missing -- --no-batch" -__gitcomp_builtin_multi_pack_index_default=" --object-dir= --progress --batch-size= --no-object-dir -- --no-progress" -__gitcomp_builtin_mv_default=" --verbose --dry-run --no-verbose -- --no-dry-run" +__gitcomp_builtin_multi_pack_index_default=" --object-dir= --no-object-dir" +__gitcomp_builtin_mv_default=" --verbose --dry-run --sparse --no-verbose -- --no-dry-run --no-sparse" __gitcomp_builtin_name_rev_default=" --name-only --tags --refs= --exclude= --all --stdin --undefined --always --no-name-only -- --no-tags --no-refs --no-exclude --no-all --no-stdin --no-undefined --no-always" __gitcomp_builtin_notes_default=" --ref= --no-ref" -__gitcomp_builtin_pack_objects_default=" --quiet --progress --all-progress --all-progress-implied --index-version= --max-pack-size= --local --incremental --window= --window-memory= --depth= --reuse-delta --reuse-object --delta-base-offset --threads= --non-empty --revs --unpacked --all --reflog --indexed-objects --stdout --include-tag --keep-unreachable --pack-loose-unreachable --unpack-unreachable --sparse --thin --shallow --honor-pack-keep --keep-pack= --compression= --keep-true-parents --use-bitmap-index --write-bitmap-index --filter= --missing= --exclude-promisor-objects --delta-islands --uri-protocol= --no-quiet -- --no-progress --no-all-progress --no-all-progress-implied --no-local --no-incremental --no-window --no-depth --no-reuse-delta --no-reuse-object --no-delta-base-offset --no-threads --no-non-empty --no-revs --no-stdout --no-include-tag --no-keep-unreachable --no-pack-loose-unreachable --no-unpack-unreachable --no-sparse --no-thin --no-shallow --no-honor-pack-keep --no-keep-pack --no-compression --no-keep-true-parents --no-use-bitmap-index --no-write-bitmap-index --no-filter --no-exclude-promisor-objects --no-delta-islands --no-uri-protocol" +__gitcomp_builtin_pack_objects_default=" --quiet --progress --all-progress --all-progress-implied --index-version= --max-pack-size= --local --incremental --window= --window-memory= --depth= --reuse-delta --reuse-object --delta-base-offset --threads= --non-empty --revs --unpacked --all --reflog --indexed-objects --stdin-packs --stdout --include-tag --keep-unreachable --pack-loose-unreachable --unpack-unreachable --sparse --thin --shallow --honor-pack-keep --keep-pack= --compression= --keep-true-parents --use-bitmap-index --write-bitmap-index --filter= --missing= --exclude-promisor-objects --delta-islands --uri-protocol= --no-quiet -- --no-progress --no-all-progress --no-all-progress-implied --no-local --no-incremental --no-window --no-depth --no-reuse-delta --no-reuse-object --no-delta-base-offset --no-threads --no-non-empty --no-revs --no-stdin-packs --no-stdout --no-include-tag --no-keep-unreachable --no-pack-loose-unreachable --no-unpack-unreachable --no-sparse --no-thin --no-shallow --no-honor-pack-keep --no-keep-pack --no-compression --no-keep-true-parents --no-use-bitmap-index --no-write-bitmap-index --no-filter --no-exclude-promisor-objects --no-delta-islands --no-uri-protocol" __gitcomp_builtin_pack_refs_default=" --all --prune --no-all -- --no-prune" __gitcomp_builtin_pickaxe_default=" --incremental --root --show-stats --progress --score-debug --show-name --show-number --porcelain --line-porcelain --show-email --ignore-rev= --ignore-revs-file= --color-lines --color-by-age --minimal --contents= --abbrev --no-incremental -- --no-root --no-show-stats --no-progress --no-score-debug --no-show-name --no-show-number --no-porcelain --no-line-porcelain --no-show-email --no-ignore-rev --no-ignore-revs-file --no-color-lines --no-color-by-age --no-minimal --no-contents --no-abbrev" __gitcomp_builtin_prune_default=" --dry-run --verbose --progress --expire= --exclude-promisor-objects --no-dry-run -- --no-verbose --no-progress --no-expire --no-exclude-promisor-objects" __gitcomp_builtin_prune_packed_default=" --dry-run --quiet --no-dry-run -- --no-quiet" -__gitcomp_builtin_pull_default=" --verbose --quiet --progress --recurse-submodules --rebase --stat --log --signoff --squash --commit --edit --cleanup= --ff --ff-only --verify-signatures --autostash --strategy= --strategy-option= --gpg-sign --allow-unrelated-histories --all --append --upload-pack= --force --tags --prune --jobs --dry-run --keep --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --show-forced-updates --set-upstream --no-verbose -- --no-quiet --no-progress --no-recurse-submodules --no-rebase --no-stat --no-log --no-signoff --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-verify-signatures --no-autostash --no-strategy --no-strategy-option --no-gpg-sign --no-allow-unrelated-histories --no-all --no-append --no-upload-pack --no-force --no-tags --no-prune --no-jobs --no-dry-run --no-keep --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-show-forced-updates --no-set-upstream" -__gitcomp_builtin_push_default=" --verbose --quiet --repo= --all --mirror --delete --tags --dry-run --porcelain --force --force-with-lease --recurse-submodules= --receive-pack= --exec= --set-upstream --progress --prune --no-verify --follow-tags --signed --atomic --push-option= --ipv4 --ipv6 --verify -- --no-verbose --no-quiet --no-repo --no-all --no-mirror --no-delete --no-tags --no-dry-run --no-porcelain --no-force --no-force-with-lease --no-recurse-submodules --no-receive-pack --no-exec --no-set-upstream --no-progress --no-prune --no-follow-tags --no-signed --no-atomic --no-push-option --no-ipv4 --no-ipv6" -__gitcomp_builtin_range_diff_default=" --creation-factor= --no-dual-color --notes --patch --no-patch --unified --function-context --raw --patch-with-raw --patch-with-stat --numstat --shortstat --dirstat --cumulative --dirstat-by-file --check --summary --name-only --name-status --stat --stat-width= --stat-name-width= --stat-graph-width= --stat-count= --compact-summary --binary --full-index --color --ws-error-highlight= --abbrev --src-prefix= --dst-prefix= --line-prefix= --no-prefix --inter-hunk-context= --output-indicator-new= --output-indicator-old= --output-indicator-context= --break-rewrites --find-renames --irreversible-delete --find-copies --find-copies-harder --no-renames --rename-empty --follow --minimal --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-cr-at-eol --ignore-blank-lines --indent-heuristic --patience --histogram --diff-algorithm= --anchored= --word-diff --word-diff-regex= --color-words --color-moved --color-moved-ws= --relative --text --exit-code --quiet --ext-diff --textconv --ignore-submodules --submodule --ita-invisible-in-index --ita-visible-in-index --pickaxe-all --pickaxe-regex --find-object= --diff-filter= --output= --dual-color -- --no-creation-factor --no-notes --no-function-context --no-compact-summary --no-full-index --no-color --no-abbrev --no-find-copies-harder --no-rename-empty --no-follow --no-minimal --no-indent-heuristic --no-color-moved --no-color-moved-ws --no-relative --no-text --no-exit-code --no-quiet --no-ext-diff --no-textconv" +__gitcomp_builtin_pull_default=" --verbose --quiet --progress --recurse-submodules --rebase --stat --log --signoff --squash --commit --edit --cleanup= --ff --ff-only --verify --verify-signatures --autostash --strategy= --strategy-option= --gpg-sign --allow-unrelated-histories --all --append --upload-pack= --force --tags --prune --jobs --dry-run --keep --depth= --shallow-since= --shallow-exclude= --deepen= --unshallow --update-shallow --refmap= --server-option= --ipv4 --ipv6 --negotiation-tip= --show-forced-updates --set-upstream --no-verbose -- --no-quiet --no-progress --no-recurse-submodules --no-rebase --no-stat --no-log --no-signoff --no-squash --no-commit --no-edit --no-cleanup --no-ff --no-verify --no-verify-signatures --no-autostash --no-strategy --no-strategy-option --no-gpg-sign --no-allow-unrelated-histories --no-all --no-append --no-upload-pack --no-force --no-tags --no-prune --no-jobs --no-dry-run --no-keep --no-depth --no-shallow-since --no-shallow-exclude --no-deepen --no-update-shallow --no-server-option --no-ipv4 --no-ipv6 --no-negotiation-tip --no-show-forced-updates --no-set-upstream" +__gitcomp_builtin_push_default=" --verbose --quiet --repo= --all --mirror --delete --tags --dry-run --porcelain --force --force-with-lease --force-if-includes --recurse-submodules= --receive-pack= --exec= --set-upstream --progress --prune --no-verify --follow-tags --signed --atomic --push-option= --ipv4 --ipv6 --verify -- --no-verbose --no-quiet --no-repo --no-all --no-mirror --no-delete --no-tags --no-dry-run --no-porcelain --no-force --no-force-with-lease --no-force-if-includes --no-recurse-submodules --no-receive-pack --no-exec --no-set-upstream --no-progress --no-prune --no-follow-tags --no-signed --no-atomic --no-push-option --no-ipv4 --no-ipv6" +__gitcomp_builtin_range_diff_default=" --creation-factor= --no-dual-color --notes --left-only --right-only --patch --no-patch --unified --function-context --raw --patch-with-raw --patch-with-stat --numstat --shortstat --dirstat --cumulative --dirstat-by-file --check --summary --name-only --name-status --stat --stat-width= --stat-name-width= --stat-graph-width= --stat-count= --compact-summary --binary --full-index --color --ws-error-highlight= --abbrev --src-prefix= --dst-prefix= --line-prefix= --no-prefix --inter-hunk-context= --output-indicator-new= --output-indicator-old= --output-indicator-context= --break-rewrites --find-renames --irreversible-delete --find-copies --find-copies-harder --no-renames --rename-empty --follow --minimal --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-cr-at-eol --ignore-blank-lines --ignore-matching-lines= --indent-heuristic --patience --histogram --diff-algorithm= --anchored= --word-diff --word-diff-regex= --color-words --color-moved --color-moved-ws= --relative --text --exit-code --quiet --ext-diff --textconv --ignore-submodules --submodule --ita-invisible-in-index --ita-visible-in-index --pickaxe-all --pickaxe-regex --rotate-to= --skip-to= --find-object= --diff-filter= --output= --dual-color -- --no-creation-factor --no-notes --no-left-only --no-right-only --no-function-context --no-compact-summary --no-full-index --no-color --no-abbrev --no-find-copies-harder --no-rename-empty --no-follow --no-minimal --no-ignore-matching-lines --no-indent-heuristic --no-color-moved --no-color-moved-ws --no-relative --no-text --no-exit-code --no-quiet --no-ext-diff --no-textconv" __gitcomp_builtin_read_tree_default=" --index-output= --empty --verbose --trivial --aggressive --reset --prefix= --exclude-per-directory= --dry-run --no-sparse-checkout --debug-unpack --recurse-submodules --quiet --sparse-checkout -- --no-empty --no-verbose --no-trivial --no-aggressive --no-reset --no-dry-run --no-debug-unpack --no-recurse-submodules --no-quiet" __gitcomp_builtin_rebase_default=" --onto= --keep-base --no-verify --quiet --verbose --no-stat --signoff --committer-date-is-author-date --reset-author-date --ignore-whitespace --whitespace= --force-rebase --no-ff --continue --skip --abort --quit --edit-todo --show-current-patch --apply --merge --interactive --rerere-autoupdate --empty= --autosquash --gpg-sign --autostash --exec= --rebase-merges --fork-point --strategy= --strategy-option= --root --reschedule-failed-exec --reapply-cherry-picks --verify --stat --ff -- --no-onto --no-keep-base --no-quiet --no-verbose --no-signoff --no-committer-date-is-author-date --no-reset-author-date --no-ignore-whitespace --no-whitespace --no-force-rebase --no-rerere-autoupdate --no-autosquash --no-gpg-sign --no-autostash --no-exec --no-rebase-merges --no-fork-point --no-strategy --no-strategy-option --no-root --no-reschedule-failed-exec --no-reapply-cherry-picks" -__gitcomp_builtin_rebase__interactive_default=" --ff --rebase-merges --rebase-cousins --autosquash --signoff --verbose --continue --skip --edit-todo --show-current-patch --shorten-ids --expand-ids --check-todo-list --rearrange-squash --add-exec-commands --onto= --restrict-revision= --squash-onto= --upstream= --head-name= --gpg-sign --strategy= --strategy-opts= --switch-to= --onto-name= --cmd= --rerere-autoupdate --reschedule-failed-exec --no-ff -- --no-rebase-merges --no-rebase-cousins --no-autosquash --no-signoff --no-verbose --no-head-name --no-gpg-sign --no-strategy --no-strategy-opts --no-switch-to --no-onto-name --no-cmd --no-rerere-autoupdate --no-reschedule-failed-exec" __gitcomp_builtin_receive_pack_default=" --quiet --no-quiet" -__gitcomp_builtin_reflog_default=" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" +__gitcomp_builtin_reflog_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" __gitcomp_builtin_remote_default=" --verbose --no-verbose" -__gitcomp_builtin_repack_default=" --quiet --local --write-bitmap-index --delta-islands --unpack-unreachable= --keep-unreachable --window= --window-memory= --depth= --threads= --max-pack-size= --pack-kept-objects --keep-pack= --no-quiet -- --no-local --no-write-bitmap-index --no-delta-islands --no-unpack-unreachable --no-keep-unreachable --no-window --no-window-memory --no-depth --no-threads --no-max-pack-size --no-pack-kept-objects --no-keep-pack" +__gitcomp_builtin_repack_default=" --quiet --local --write-bitmap-index --delta-islands --unpack-unreachable= --keep-unreachable --window= --window-memory= --depth= --threads= --max-pack-size= --pack-kept-objects --keep-pack= --geometric= --write-midx --no-quiet -- --no-local --no-write-bitmap-index --no-delta-islands --no-unpack-unreachable --no-keep-unreachable --no-window --no-window-memory --no-depth --no-threads --no-max-pack-size --no-pack-kept-objects --no-keep-pack --no-geometric --no-write-midx" __gitcomp_builtin_replace_default=" --list --delete --edit --graft --convert-graft-file --raw --format= --no-raw -- --no-format" __gitcomp_builtin_rerere_default=" --rerere-autoupdate --no-rerere-autoupdate" __gitcomp_builtin_reset_default=" --quiet --mixed --soft --hard --merge --keep --recurse-submodules --patch --intent-to-add --pathspec-from-file= --pathspec-file-nul --no-quiet -- --no-mixed --no-soft --no-hard --no-merge --no-keep --no-recurse-submodules --no-patch --no-intent-to-add --no-pathspec-from-file --no-pathspec-file-nul" __gitcomp_builtin_restore_default=" --source= --staged --worktree --ignore-unmerged --overlay --quiet --recurse-submodules --progress --merge --conflict= --ours --theirs --patch --ignore-skip-worktree-bits --pathspec-from-file= --pathspec-file-nul --no-source -- --no-staged --no-worktree --no-ignore-unmerged --no-overlay --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-patch --no-ignore-skip-worktree-bits --no-pathspec-from-file --no-pathspec-file-nul" __gitcomp_builtin_revert_default=" --quit --continue --abort --skip --cleanup= --no-commit --edit --signoff --mainline= --rerere-autoupdate --strategy= --strategy-option= --gpg-sign --commit -- --no-cleanup --no-edit --no-signoff --no-mainline --no-rerere-autoupdate --no-strategy --no-strategy-option --no-gpg-sign" -__gitcomp_builtin_rm_default=" --dry-run --quiet --cached --ignore-unmatch --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-quiet --no-cached --no-ignore-unmatch --no-pathspec-from-file --no-pathspec-file-nul" -__gitcomp_builtin_send_pack_default=" --verbose --quiet --receive-pack= --exec= --remote= --all --dry-run --mirror --force --signed --push-option= --progress --thin --atomic --stateless-rpc --stdin --helper-status --force-with-lease --no-verbose -- --no-quiet --no-receive-pack --no-exec --no-remote --no-all --no-dry-run --no-mirror --no-force --no-signed --no-push-option --no-progress --no-thin --no-atomic --no-stateless-rpc --no-stdin --no-helper-status --no-force-with-lease" +__gitcomp_builtin_rm_default=" --dry-run --quiet --cached --ignore-unmatch --sparse --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-quiet --no-cached --no-ignore-unmatch --no-sparse --no-pathspec-from-file --no-pathspec-file-nul" +__gitcomp_builtin_send_pack_default=" --verbose --quiet --receive-pack= --exec= --remote= --all --dry-run --mirror --force --signed --push-option= --progress --thin --atomic --stateless-rpc --stdin --helper-status --force-with-lease --force-if-includes --no-verbose -- --no-quiet --no-receive-pack --no-exec --no-remote --no-all --no-dry-run --no-mirror --no-force --no-signed --no-push-option --no-progress --no-thin --no-atomic --no-stateless-rpc --no-stdin --no-helper-status --no-force-with-lease --no-force-if-includes" __gitcomp_builtin_shortlog_default=" --committer --numbered --summary --email --group= --no-committer -- --no-numbered --no-summary --no-email --no-group" -__gitcomp_builtin_show_default=" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" +__gitcomp_builtin_show_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" __gitcomp_builtin_show_branch_default=" --all --remotes --color --more --list --no-name --current --sha1-name --merge-base --independent --topo-order --topics --sparse --date-order --reflog --name -- --no-all --no-remotes --no-color --no-more --no-list --no-current --no-sha1-name --no-merge-base --no-independent --no-topo-order --no-topics --no-sparse --no-date-order" __gitcomp_builtin_show_index_default=" --object-format= --no-object-format" __gitcomp_builtin_show_ref_default=" --tags --heads --verify --head --dereference --hash --abbrev --quiet --exclude-existing --no-tags -- --no-heads --no-verify --no-head --no-dereference --no-hash --no-abbrev --no-quiet" __gitcomp_builtin_sparse_checkout_default="" -__gitcomp_builtin_stage_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-chmod --no-pathspec-from-file --no-pathspec-file-nul" +__gitcomp_builtin_stage_default=" --dry-run --verbose --interactive --patch --edit --force --update --renormalize --intent-to-add --all --ignore-removal --refresh --ignore-errors --ignore-missing --sparse --chmod= --pathspec-from-file= --pathspec-file-nul --no-dry-run -- --no-verbose --no-interactive --no-patch --no-edit --no-force --no-update --no-renormalize --no-intent-to-add --no-all --no-ignore-removal --no-refresh --no-ignore-errors --no-ignore-missing --no-sparse --no-chmod --no-pathspec-from-file --no-pathspec-file-nul" __gitcomp_builtin_stash_default="" __gitcomp_builtin_status_default=" --verbose --short --branch --show-stash --ahead-behind --porcelain --long --null --untracked-files --ignored --ignore-submodules --column --no-renames --find-renames --renames -- --no-verbose --no-short --no-branch --no-show-stash --no-ahead-behind --no-porcelain --no-long --no-null --no-untracked-files --no-ignored --no-ignore-submodules --no-column" __gitcomp_builtin_stripspace_default=" --strip-comments --comment-lines" __gitcomp_builtin_switch_default=" --create= --force-create= --guess --discard-changes --quiet --recurse-submodules --progress --merge --conflict= --detach --track --orphan= --ignore-other-worktrees --no-create -- --no-force-create --no-guess --no-discard-changes --no-quiet --no-recurse-submodules --no-progress --no-merge --no-conflict --no-detach --no-track --no-orphan --no-ignore-other-worktrees" __gitcomp_builtin_symbolic_ref_default=" --quiet --delete --short --no-quiet -- --no-delete --no-short" -__gitcomp_builtin_tag_default=" --list --delete --verify --annotate --message= --file= --edit --sign --cleanup= --local-user= --force --create-reflog --column --contains --no-contains --merged --no-merged --sort= --points-at --format= --color --ignore-case -- --no-annotate --no-file --no-edit --no-sign --no-cleanup --no-local-user --no-force --no-create-reflog --no-column --no-points-at --no-format --no-color --no-ignore-case" +__gitcomp_builtin_tag_default=" --list --delete --verify --annotate --message= --file= --edit --sign --cleanup= --local-user= --force --create-reflog --column --contains --no-contains --merged --no-merged --sort= --points-at --format= --color --ignore-case -- --no-annotate --no-file --no-edit --no-sign --no-cleanup --no-local-user --no-force --no-create-reflog --no-column --no-sort --no-points-at --no-format --no-color --no-ignore-case" __gitcomp_builtin_update_index_default=" --ignore-submodules --add --replace --remove --unmerged --refresh --really-refresh --cacheinfo --chmod= --assume-unchanged --no-assume-unchanged --skip-worktree --no-skip-worktree --ignore-skip-worktree-entries --info-only --force-remove --stdin --index-info --unresolve --again --ignore-missing --verbose --clear-resolve-undo --index-version= --split-index --untracked-cache --test-untracked-cache --force-untracked-cache --force-write-index --fsmonitor --fsmonitor-valid --no-fsmonitor-valid -- --no-ignore-submodules --no-add --no-replace --no-remove --no-unmerged --no-ignore-skip-worktree-entries --no-info-only --no-force-remove --no-ignore-missing --no-verbose --no-index-version --no-split-index --no-untracked-cache --no-test-untracked-cache --no-force-untracked-cache --no-force-write-index --no-fsmonitor" __gitcomp_builtin_update_ref_default=" --no-deref --stdin --create-reflog --deref -- --no-stdin --no-create-reflog" __gitcomp_builtin_update_server_info_default=" --force --no-force" -__gitcomp_builtin_upload_pack_default=" --stateless-rpc --advertise-refs --strict --timeout= --no-stateless-rpc -- --no-advertise-refs --no-strict --no-timeout" +__gitcomp_builtin_upload_pack_default=" --stateless-rpc --strict --timeout= --no-stateless-rpc -- --no-strict --no-timeout" __gitcomp_builtin_verify_commit_default=" --verbose --raw --no-verbose -- --no-raw" __gitcomp_builtin_verify_pack_default=" --verbose --stat-only --object-format= --no-verbose -- --no-stat-only --no-object-format" __gitcomp_builtin_verify_tag_default=" --verbose --raw --format= --no-verbose -- --no-raw --no-format" __gitcomp_builtin_version_default=" --build-options --no-build-options" -__gitcomp_builtin_whatchanged_default=" --quiet --source --use-mailmap --mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" +__gitcomp_builtin_whatchanged_default=" --quiet --source --use-mailmap --decorate-refs= --decorate-refs-exclude= --decorate --no-quiet -- --no-source --no-use-mailmap --no-mailmap --no-decorate-refs --no-decorate-refs-exclude --no-decorate" __gitcomp_builtin_write_tree_default=" --missing-ok --prefix= --no-missing-ok -- --no-prefix" -__gitcomp_builtin_send_email_default=" --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --to= --cc= --from --in-reply-to= --attach --inline --thread --signature= --base= --signature-file= --quiet --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-numbered --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-to --no-cc --no-from --no-in-reply-to --no-attach --no-thread --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor" +__gitcomp_builtin_send_email_default="--cc= --smtp-server= --identity= --smtp-ssl --sender= --from= --cc-cover --no-to-cover --sendmail-cmd= --signed-off-cc --signed-off-by-cc --in-reply-to= --no-cc --confirm= --no-bcc --to= --annotate --smtp-encryption= --relogin-delay= --to-cmd= --smtp-domain= --smtp-auth= --bcc= --quiet --subject= --chain-reply-to --cc-cmd= --no-format-patch --transfer-encoding= --smtp-user= --reply-to= --force --dry-run --no-identity --no-validate --8bit-encoding= --to-cover --compose --thread --format-patch --no-thread --smtp-server-option= --compose-encoding= --smtp-server-port= --no-smtp-auth --no-signed-off-cc --no-signed-off-by-cc --smtp-debug= --no-suppress-from --suppress-from --no-to --dump-aliases --xmailer --no-annotate --no-cc-cover --smtp-pass= --smtp-ssl-cert-path= --no-chain-reply-to --suppress-cc= --validate --batch-size= --envelope-sender= --no-xmailer --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --from --attach --inline --signature= --base= --signature-file= --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-from --no-in-reply-to --no-attach --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor" __gitcomp_builtin_get_default () { @@ -500,7 +425,7 @@ __gitcomp_builtin_get_default () # This function is equivalent to # -# __gitcomp "$(git xxx --git-completion-helper) ..." +# __gitcomp_opts "$(git xxx --git-completion-helper) ..." # # except that the output is cached. Accept 1-3 arguments: # 1: the git command to execute, this is also the cache key @@ -520,7 +445,7 @@ __gitcomp_builtin () if [ -z "$options" ]; then local completion_helper - if [ "$GIT_COMPLETION_SHOW_ALL" = "1" ]; then + if [ "${GIT_COMPLETION_SHOW_ALL-}" = "1" ]; then completion_helper="--git-completion-helper-all" else completion_helper="--git-completion-helper" @@ -537,71 +462,7 @@ __gitcomp_builtin () eval "$var=\"$options\"" fi - __gitcomp "$options" -} - -# Variation of __gitcomp_nl () that appends to the existing list of -# completion candidates, COMPREPLY. -__gitcomp_nl_append () -{ - local IFS=$'\n' - __gitcompappend "$1" "${2-}" "${3-$cur}" "${4- }" -} - -# Generates completion reply from newline-separated possible completion words -# by appending a space to all of them. -# It accepts 1 to 4 arguments: -# 1: List of possible completion words, separated by a single newline. -# 2: A prefix to be added to each possible completion word (optional). -# 3: Generate possible completion matches for this word (optional). -# 4: A suffix to be appended to each possible completion word instead of -# the default space (optional). If specified but empty, nothing is -# appended. -__gitcomp_nl () -{ - COMPREPLY=() - __gitcomp_nl_append "$@" -} - -# Fills the COMPREPLY array with prefiltered paths without any additional -# processing. -# Callers must take care of providing only paths that match the current path -# to be completed and adding any prefix path components, if necessary. -# 1: List of newline-separated matching paths, complete with all prefix -# path components. -__gitcomp_file_direct () -{ - local IFS=$'\n' - - COMPREPLY=($1) - - # use a hack to enable file mode in bash < 4 - compopt -o filenames +o nospace 2>/dev/null || - compgen -f /non-existing-dir/ >/dev/null || - true -} - -# Generates completion reply with compgen from newline-separated possible -# completion filenames. -# It accepts 1 to 3 arguments: -# 1: List of possible completion filenames, separated by a single newline. -# 2: A directory prefix to be added to each possible completion filename -# (optional). -# 3: Generate possible completion matches for this word (optional). -__gitcomp_file () -{ - local IFS=$'\n' - - # XXX does not work when the directory prefix contains a tilde, - # since tilde expansion is not applied. - # This means that COMPREPLY will be empty and Bash default - # completion will be used. - __gitcompadd "$1" "${2-}" "${3-$cur}" "" - - # use a hack to enable file mode in bash < 4 - compopt -o filenames +o nospace 2>/dev/null || - compgen -f /non-existing-dir/ >/dev/null || - true + __gitcomp_opts "$options" } # Execute 'git ls-files', unless the --committable option is specified, in @@ -610,7 +471,7 @@ __gitcomp_file () # argument, and using the options specified in the second argument. __git_ls_files_helper () { - if [ "$2" == "--committable" ]; then + if [ "$2" = "--committable" ]; then __git -C "$1" -c core.quotePath=false diff-index \ --name-only --relative HEAD -- "${3//\\/\\\\}*" else @@ -839,7 +700,7 @@ __git_refs () track="" ;; *) - for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD; do + for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do case "$i" in $match*) if [ -e "$dir/$i" ]; then @@ -947,7 +808,7 @@ __git_complete_refs () # Append DWIM remote branch names if requested if [ "$dwim" = "yes" ]; then - __gitcomp_direct_append "$(__git_dwim_remote_heads "$pfx" "$cur_" "$sfx")" + __gitcomp_direct "$(__git_dwim_remote_heads "$pfx" "$cur_" "$sfx")" fi } @@ -1103,8 +964,8 @@ __git_complete_revlist () __git_complete_remote_or_refspec () { - local cur_="$cur" cmd="${words[1]}" - local i c=2 remote="" pfx="" lhs=1 no_complete_refspec=0 + local cur_="$cur" cmd="${words[__git_cmd_idx]}" + local i c=$((__git_cmd_idx+1)) remote="" pfx="" lhs=1 no_complete_refspec=0 if [ "$cmd" = "remote" ]; then ((c++)) fi @@ -1184,7 +1045,7 @@ __git_complete_strategy () return 0 ;; -X) - __gitcomp "$__git_merge_strategy_options" + __gitcomp_opts "$__git_merge_strategy_options" return 0 ;; esac @@ -1194,7 +1055,7 @@ __git_complete_strategy () return 0 ;; --strategy-option=*) - __gitcomp "$__git_merge_strategy_options" "" "${cur##--strategy-option=}" + __gitcomp_opts "$__git_merge_strategy_options" "" "${cur##--strategy-option=}" return 0 ;; esac @@ -1226,7 +1087,7 @@ __git_pretty_aliases () # __git_aliased_command requires 1 argument __git_aliased_command () { - local cur=$1 last list word cmdline + local cur=$1 last list= word cmdline while [[ -n "$cur" ]]; do if [[ "$list" == *" $cur "* ]]; then @@ -1273,7 +1134,7 @@ __git_aliased_command () # --show-idx: Optionally show the index of the found word in the $words array. __git_find_on_cmdline () { - local word c=1 show_idx + local word c="$__git_cmd_idx" show_idx while test $# -gt 1; do case "$1" in @@ -1318,7 +1179,7 @@ __git_find_last_on_cmdline () done local wordlist="$1" - while [ $c -gt 1 ]; do + while [ $c -gt "$__git_cmd_idx" ]; do ((c--)) for word in $wordlist; do if [ "$word" = "${words[c]}" ]; then @@ -1403,7 +1264,7 @@ __git_count_arguments () local word i c=0 # Skip "git" (first argument) - for ((i=1; i < ${#words[@]}; i++)); do + for ((i=$__git_cmd_idx; i < ${#words[@]}; i++)); do word="${words[i]}" case "$word" in @@ -1430,12 +1291,13 @@ __git_whitespacelist="nowarn warn error error-all fix" __git_patchformat="mbox stgit stgit-series hg mboxrd" __git_showcurrentpatch="diff raw" __git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch" +__git_quoted_cr="nowarn warn strip" _git_am () { __git_find_repo_path if [ -d "$__git_repo_path"/rebase-apply ]; then - __gitcomp "$__git_am_inprogress_options" + __gitcomp_opts "$__git_am_inprogress_options" return fi case "$cur" in @@ -1451,6 +1313,10 @@ _git_am () __gitcomp "$__git_showcurrentpatch" "" "${cur##--show-current-patch=}" return ;; + --quoted-cr=*) + __gitcomp "$__git_quoted_cr" "" "${cur##--quoted-cr=}" + return + ;; --*) __gitcomp_builtin am "" \ "$__git_am_inprogress_options" @@ -1495,7 +1361,7 @@ _git_archive () { case "$cur" in --format=*) - __gitcomp "$(git archive --list)" "" "${cur##--format=}" + __gitcomp_nl "$(git archive --list)" "" "${cur##--format=}" return ;; --remote=*) @@ -1539,13 +1405,15 @@ __git_ref_fieldlist="refname objecttype objectsize objectname upstream push HEAD _git_branch () { - local i c=1 only_local_ref="n" has_r="n" + local i c="$__git_cmd_idx" only_local_ref="n" has_r="n" while [ $c -lt $cword ]; do i="${words[c]}" case "$i" in - -d|--delete|-m|--move) only_local_ref="y" ;; - -r|--remotes) has_r="y" ;; + -d|-D|--delete|-m|-M|--move|-c|-C|--copy) + only_local_ref="y" ;; + -r|--remotes) + has_r="y" ;; esac ((c++)) done @@ -1569,12 +1437,12 @@ _git_branch () _git_bundle () { - local cmd="${words[2]}" + local cmd="${words[__git_cmd_idx+1]}" case "$cword" in - 2) + $((__git_cmd_idx+1))) __gitcomp "create list-heads verify unbundle" ;; - 3) + $((__git_cmd_idx+2))) # looking for a file ;; *) @@ -1590,14 +1458,15 @@ _git_bundle () # Helper function to decide whether or not we should enable DWIM logic for # git-switch and git-checkout. # -# To decide between the following rules in priority order -# 1) the last provided of "--guess" or "--no-guess" explicitly enable or -# disable completion of DWIM logic respectively. -# 2) If the --no-track option is provided, take this as a hint to disable the -# DWIM completion logic -# 3) If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion -# logic, as requested by the user. -# 4) Enable DWIM logic otherwise. +# To decide between the following rules in decreasing priority order: +# - the last provided of "--guess" or "--no-guess" explicitly enable or +# disable completion of DWIM logic respectively. +# - If checkout.guess is false, disable completion of DWIM logic. +# - If the --no-track option is provided, take this as a hint to disable the +# DWIM completion logic +# - If GIT_COMPLETION_CHECKOUT_NO_GUESS is set, disable the DWIM completion +# logic, as requested by the user. +# - Enable DWIM logic otherwise. # __git_checkout_default_dwim_mode () { @@ -1608,11 +1477,17 @@ __git_checkout_default_dwim_mode () fi # --no-track disables DWIM, but with lower priority than - # --guess/--no-guess + # --guess/--no-guess/checkout.guess if [ -n "$(__git_find_on_cmdline "--no-track")" ]; then dwim_opt="" fi + # checkout.guess = false disables DWIM, but with lower priority than + # --guess/--no-guess + if [ "$(__git config --type=bool checkout.guess)" = "false" ]; then + dwim_opt="" + fi + # Find the last provided --guess or --no-guess last_option="$(__git_find_last_on_cmdline "--guess --no-guess")" case "$last_option" in @@ -1649,7 +1524,7 @@ _git_checkout () case "$cur" in --conflict=*) - __gitcomp "diff3 merge" "" "${cur##--conflict=}" + __gitcomp "diff3 merge zdiff3" "" "${cur##--conflict=}" ;; --*) __gitcomp_builtin checkout @@ -1682,7 +1557,7 @@ _git_cherry_pick () { __git_find_repo_path if [ -f "$__git_repo_path"/CHERRY_PICK_HEAD ]; then - __gitcomp "$__git_cherry_pick_inprogress_options" + __gitcomp_opts "$__git_cherry_pick_inprogress_options" return fi @@ -1811,8 +1686,14 @@ __git_diff_common_options="--stat --numstat --shortstat --summary --submodule --submodule= --ignore-submodules --indent-heuristic --no-indent-heuristic --textconv --no-textconv + --patch --no-patch + --anchored= " +__git_diff_difftool_options="--cached --staged --pickaxe-all --pickaxe-regex + --base --ours --theirs --no-index --relative --merge-base + $__git_diff_common_options" + _git_diff () { __git_has_doubledash && return @@ -1835,10 +1716,7 @@ _git_diff () return ;; --*) - __gitcomp "--cached --staged --pickaxe-all --pickaxe-regex - --base --ours --theirs --no-index - $__git_diff_common_options - " + __gitcomp_opts "$__git_diff_difftool_options" return ;; esac @@ -1860,11 +1738,7 @@ _git_difftool () return ;; --*) - __gitcomp_builtin difftool "$__git_diff_common_options - --base --cached --ours --theirs - --pickaxe-all --pickaxe-regex - --relative --staged - " + __gitcomp_builtin difftool "$__git_diff_difftool_options" return ;; esac @@ -1901,9 +1775,7 @@ _git_format_patch () { case "$cur" in --thread=*) - __gitcomp " - deep shallow - " "" "${cur##--thread=}" + __gitcomp "deep shallow" "" "${cur##--thread=}" return ;; --base=*|--interdiff=*|--range-diff=*) @@ -1930,7 +1802,7 @@ _git_fsck () _git_gitk () { - _gitk + __gitk_main } # Lists matching symbol names from a tag (as in ctags) file. @@ -1984,7 +1856,7 @@ _git_grep () esac case "$cword,$prev" in - 2,*|*,-*) + $((__git_cmd_idx+1)),*|*,-*) __git_complete_symbol && return ;; esac @@ -2000,7 +1872,7 @@ _git_help () return ;; esac - if test -n "$GIT_TESTING_ALL_COMMAND_LIST" + if test -n "${GIT_TESTING_ALL_COMMAND_LIST-}" then __gitcomp "$GIT_TESTING_ALL_COMMAND_LIST $(__git --list-cmds=alias,list-guide) gitk" else @@ -2085,7 +1957,7 @@ __git_log_shortlog_options=" " __git_log_pretty_formats="oneline short medium full fuller reference email raw format: tformat: mboxrd" -__git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default raw unix format:" +__git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default human raw unix auto: format:" _git_log () { @@ -2136,7 +2008,7 @@ _git_log () return ;; --*) - __gitcomp " + __gitcomp_opts " $__git_log_common_options $__git_log_shortlog_options $__git_log_gitk_options @@ -2154,11 +2026,9 @@ _git_log () --no-walk --no-walk= --do-walk --parents --children --expand-tabs --expand-tabs= --no-expand-tabs - --patch $merge $__git_diff_common_options --pickaxe-all --pickaxe-regex - --patch --no-patch " return ;; @@ -2201,7 +2071,7 @@ _git_mergetool () return ;; --*) - __gitcomp "--tool= --prompt --no-prompt --gui --no-gui" + __gitcomp_opts "--tool= --prompt --no-prompt --gui --no-gui" return ;; esac @@ -2349,7 +2219,7 @@ _git_range_diff () { case "$cur" in --*) - __gitcomp " + __gitcomp_opts " --creation-factor= --no-dual-color $__git_diff_common_options " @@ -2366,11 +2236,11 @@ _git_rebase () { __git_find_repo_path if [ -f "$__git_repo_path"/rebase-merge/interactive ]; then - __gitcomp "$__git_rebase_interactive_inprogress_options" + __gitcomp_opts "$__git_rebase_interactive_inprogress_options" return elif [ -d "$__git_repo_path"/rebase-apply ] || \ [ -d "$__git_repo_path"/rebase-merge ]; then - __gitcomp "$__git_rebase_inprogress_options" + __gitcomp_opts "$__git_rebase_inprogress_options" return fi __git_complete_strategy && return @@ -2404,6 +2274,7 @@ _git_reflog () fi } +__git_send_email_options="--no-cc-cover --cc= --no-bcc --force --relogin-delay= --to= --suppress-cc= --no-annotate --no-chain-reply-to --sendmail-cmd= --no-identity --transfer-encoding= --validate --no-smtp-auth --confirm= --no-format-patch --reply-to= --smtp-pass= --smtp-server= --annotate --envelope-sender= --no-validate --dry-run --no-thread --smtp-debug= --no-to --thread --no-xmailer --identity= --no-signed-off-cc --no-signed-off-by-cc --smtp-domain= --to-cover --8bit-encoding= --bcc= --smtp-ssl-cert-path= --smtp-user= --cc-cmd= --to-cmd= --no-cc --smtp-server-option= --in-reply-to= --subject= --batch-size= --smtp-auth= --compose --smtp-server-port= --xmailer --no-to-cover --chain-reply-to --smtp-encryption= --dump-aliases --quiet --smtp-ssl --signed-off-cc --signed-off-by-cc --suppress-from --compose-encoding= --no-suppress-from --sender= --from= --format-patch --cc-cover --numbered --no-numbered --signoff --stdout --cover-letter --numbered-files --suffix= --start-number= --reroll-count= --filename-max-length= --rfc --cover-from-description= --subject-prefix= --output-directory= --keep-subject --no-binary --zero-commit --ignore-if-in-upstream --no-stat --add-header= --from --attach --inline --signature= --base= --signature-file= --progress --interdiff= --range-diff= --creation-factor= --binary -- --no-signoff --no-stdout --no-cover-letter --no-numbered-files --no-suffix --no-start-number --no-reroll-count --no-filename-max-length --no-cover-from-description --no-zero-commit --no-ignore-if-in-upstream --no-add-header --no-from --no-in-reply-to --no-attach --no-signature --no-base --no-signature-file --no-quiet --no-progress --no-interdiff --no-range-diff --no-creation-factor" __git_send_email_confirm_options="always never auto cc compose" __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all" @@ -2411,7 +2282,7 @@ _git_send_email () { case "$prev" in --to|--cc|--bcc|--from) - __gitcomp "$(__git send-email --dump-aliases)" + __gitcomp_nl "$(__git send-email --dump-aliases)" return ;; esac @@ -2435,9 +2306,7 @@ _git_send_email () return ;; --thread=*) - __gitcomp " - deep shallow - " "" "${cur##--thread=}" + __gitcomp "deep shallow" "" "${cur##--thread=}" return ;; --to=*|--cc=*|--bcc=*|--from=*) @@ -2445,16 +2314,7 @@ _git_send_email () return ;; --*) - __gitcomp_builtin send-email "--annotate --bcc --cc --cc-cmd --chain-reply-to - --compose --confirm= --dry-run --envelope-sender - --from --identity - --in-reply-to --no-chain-reply-to --no-signed-off-by-cc - --no-suppress-from --no-thread --quiet --reply-to - --signed-off-by-cc --smtp-pass --smtp-server - --smtp-server-port --smtp-encryption= --smtp-user - --subject --suppress-cc= --suppress-from --thread --to - --validate --no-validate - $__git_format_patch_extra_options" + __gitcomp_builtin send-email "$__git_send_email_options $__git_format_patch_extra_options" return ;; esac @@ -2532,7 +2392,7 @@ _git_switch () case "$cur" in --conflict=*) - __gitcomp "diff3 merge" "" "${cur##--conflict=}" + __gitcomp "diff3 merge zdiff3" "" "${cur##--conflict=}" ;; --*) __gitcomp_builtin switch @@ -2566,7 +2426,7 @@ _git_switch () __git_config_get_set_variables () { local prevword word config_file= c=$cword - while [ $c -gt 1 ]; do + while [ $c -gt "$__git_cmd_idx" ]; do word="${words[c]}" case "$word" in --system|--global|--local|--file=*) @@ -2629,7 +2489,7 @@ __git_complete_config_variable_value () return ;; branch.*.rebase) - __gitcomp "false true merges preserve interactive" "" "$cur_" + __gitcomp "false true merges interactive" "" "$cur_" return ;; remote.pushdefault) @@ -2717,7 +2577,7 @@ __git_complete_config_variable_value () # subsections) instead of the default space. __git_complete_config_variable_name () { - local cur_="$cur" sfx + local cur_="$cur" sfx=" " while test $# != 0; do case "$1" in @@ -2739,7 +2599,7 @@ __git_complete_config_variable_name () local pfx="${cur_%.*}." cur_="${cur_#*.}" __gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")" - __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "${sfx:- }" + __gitcomp "autoSetupMerge autoSetupRebase" "$pfx" "$cur_" "$sfx" return ;; guitool.*.*) @@ -2773,7 +2633,7 @@ __git_complete_config_variable_name () local pfx="${cur_%.*}." cur_="${cur_#*.}" __git_compute_all_commands - __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx:- }" + __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "$sfx" return ;; remote.*.*) @@ -2789,7 +2649,7 @@ __git_complete_config_variable_name () local pfx="${cur_%.*}." cur_="${cur_#*.}" __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "." - __gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "${sfx:- }" + __gitcomp "pushDefault" "$pfx" "$cur_" "$sfx" return ;; url.*.*) @@ -2804,7 +2664,7 @@ __git_complete_config_variable_name () ;; *) __git_compute_config_vars - __gitcomp "$(echo "$__git_config_vars" | + __gitcomp_nl "$(echo "$__git_config_vars" | awk -F . '{ sections[$1] = 1 } @@ -2812,7 +2672,7 @@ __git_complete_config_variable_name () for (s in sections) print s "." } - ')" "" "$cur_" + ')" "" "$cur_" "" ;; esac } @@ -2906,7 +2766,7 @@ _git_remote () __gitcomp_builtin remote_update ;; update,*) - __gitcomp "$(__git_remotes) $(__git_get_config_variables "remotes")" + __gitcomp_nl "$(__git_remotes) $(__git_get_config_variables "remotes")" ;; set-url,--*) __gitcomp_builtin remote_set-url @@ -2973,7 +2833,7 @@ _git_restore () case "$cur" in --conflict=*) - __gitcomp "diff3 merge" "" "${cur##--conflict=}" + __gitcomp "diff3 merge zdiff3" "" "${cur##--conflict=}" ;; --source=*) __git_complete_refs --cur="${cur##--source=}" @@ -2990,7 +2850,7 @@ _git_revert () { __git_find_repo_path if [ -f "$__git_repo_path"/REVERT_HEAD ]; then - __gitcomp "$__git_revert_inprogress_options" + __gitcomp_opts "$__git_revert_inprogress_options" return fi __git_complete_strategy && return @@ -3022,7 +2882,7 @@ _git_shortlog () case "$cur" in --*) - __gitcomp " + __gitcomp_opts " $__git_log_common_options $__git_log_shortlog_options --numbered --summary --email @@ -3060,8 +2920,8 @@ _git_show () return ;; --*) - __gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit - --oneline --show-signature --patch + __gitcomp_opts "--pretty= --format= --abbrev-commit --no-abbrev-commit + --oneline --show-signature --expand-tabs --expand-tabs= --no-expand-tabs $__git_diff_common_options " @@ -3093,10 +2953,10 @@ _git_sparse_checkout () case "$subcommand,$cur" in init,--*) - __gitcomp "--cone" + __gitcomp_opts "--cone" ;; set,--*) - __gitcomp "--stdin" + __gitcomp_opts "--stdin" ;; *) ;; @@ -3105,63 +2965,48 @@ _git_sparse_checkout () _git_stash () { - local save_opts='--all --keep-index --no-keep-index --quiet --patch --include-untracked' local subcommands='push list show apply clear drop pop create branch' local subcommand="$(__git_find_on_cmdline "$subcommands save")" - if [ -z "$subcommand" -a -n "$(__git_find_on_cmdline "-p")" ]; then - subcommand="push" - fi + if [ -z "$subcommand" ]; then - case "$cur" in - --*) - __gitcomp "$save_opts" + case "$((cword - __git_cmd_idx)),$cur" in + *,--*) + __gitcomp_builtin stash_push ;; - sa*) - if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then - __gitcomp "save" - fi + 1,sa*) + __gitcomp "save" ;; - *) - if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then - __gitcomp "$subcommands" - fi + 1,*) + __gitcomp "$subcommands" ;; esac - else - case "$subcommand,$cur" in - push,--*) - __gitcomp "$save_opts --message" - ;; - save,--*) - __gitcomp "$save_opts" - ;; - apply,--*|pop,--*) - __gitcomp "--index --quiet" - ;; - drop,--*) - __gitcomp "--quiet" - ;; - list,--*) - __gitcomp "--name-status --oneline --patch-with-stat" - ;; - show,--*|branch,--*) - ;; - branch,*) - if [ $cword -eq 3 ]; then - __git_complete_refs - else - __gitcomp_nl "$(__git stash list \ - | sed -n -e 's/:.*//p')" - fi - ;; - show,*|apply,*|drop,*|pop,*) + return + fi + + case "$subcommand,$cur" in + list,--*) + # NEEDSWORK: can we somehow unify this with the options in _git_log() and _git_show() + __gitcomp_builtin stash_list "$__git_log_common_options $__git_diff_common_options" + ;; + show,--*) + __gitcomp_builtin stash_show "$__git_diff_common_options" + ;; + *,--*) + __gitcomp_builtin "stash_$subcommand" + ;; + branch,*) + if [ $cword -eq $((__git_cmd_idx+2)) ]; then + __git_complete_refs + else __gitcomp_nl "$(__git stash list \ | sed -n -e 's/:.*//p')" - ;; - *) - ;; - esac - fi + fi + ;; + show,*|apply,*|drop,*|pop,*) + __gitcomp_nl "$(__git stash list \ + | sed -n -e 's/:.*//p')" + ;; + esac } _git_submodule () @@ -3173,7 +3018,7 @@ _git_submodule () if [ -z "$subcommand" ]; then case "$cur" in --*) - __gitcomp "--quiet" + __gitcomp_opts "--quiet" ;; *) __gitcomp "$subcommands" @@ -3184,29 +3029,29 @@ _git_submodule () case "$subcommand,$cur" in add,--*) - __gitcomp "--branch --force --name --reference --depth" + __gitcomp_opts "--branch --force --name --reference --depth" ;; status,--*) - __gitcomp "--cached --recursive" + __gitcomp_opts "--cached --recursive" ;; deinit,--*) - __gitcomp "--force --all" + __gitcomp_opts "--force --all" ;; update,--*) - __gitcomp " + __gitcomp_opts " --init --remote --no-fetch --recommend-shallow --no-recommend-shallow --force --rebase --merge --reference --depth --recursive --jobs " ;; set-branch,--*) - __gitcomp "--default --branch" + __gitcomp_opts "--default --branch" ;; summary,--*) - __gitcomp "--cached --files --summary-limit" + __gitcomp_opts "--cached --files --summary-limit" ;; foreach,--*|sync,--*) - __gitcomp "--recursive" + __gitcomp_opts "--recursive" ;; *) ;; @@ -3247,64 +3092,64 @@ _git_svn () case "$subcommand,$cur" in fetch,--*) - __gitcomp "--revision= --fetch-all $fc_opts" + __gitcomp_opts "--revision= --fetch-all $fc_opts" ;; clone,--*) - __gitcomp "--revision= $fc_opts $init_opts" + __gitcomp_opts "--revision= $fc_opts $init_opts" ;; init,--*) - __gitcomp "$init_opts" + __gitcomp_opts "$init_opts" ;; dcommit,--*) - __gitcomp " + __gitcomp_opts " --merge --strategy= --verbose --dry-run --fetch-all --no-rebase --commit-url --revision --interactive $cmt_opts $fc_opts " ;; set-tree,--*) - __gitcomp "--stdin $cmt_opts $fc_opts" + __gitcomp_opts "--stdin $cmt_opts $fc_opts" ;; create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\ show-externals,--*|mkdirs,--*) - __gitcomp "--revision=" + __gitcomp_opts "--revision=" ;; log,--*) - __gitcomp " + __gitcomp_opts " --limit= --revision= --verbose --incremental --oneline --show-commit --non-recursive --authors-file= --color " ;; rebase,--*) - __gitcomp " + __gitcomp_opts " --merge --verbose --strategy= --local --fetch-all --dry-run $fc_opts " ;; commit-diff,--*) - __gitcomp "--message= --file= --revision= $cmt_opts" + __gitcomp_opts "--message= --file= --revision= $cmt_opts" ;; info,--*) - __gitcomp "--url" + __gitcomp_opts "--url" ;; branch,--*) - __gitcomp "--dry-run --message --tag" + __gitcomp_opts "--dry-run --message --tag" ;; tag,--*) - __gitcomp "--dry-run --message" + __gitcomp_opts "--dry-run --message" ;; blame,--*) - __gitcomp "--git-format" + __gitcomp_opts "--git-format" ;; migrate,--*) - __gitcomp " + __gitcomp_opts " --config-dir= --ignore-paths= --minimize --no-auth-cache --username= " ;; reset,--*) - __gitcomp "--revision= --parent" + __gitcomp_opts "--revision= --parent" ;; *) ;; @@ -3314,7 +3159,7 @@ _git_svn () _git_tag () { - local i c=1 f=0 + local i c="$__git_cmd_idx" f=0 while [ $c -lt $cword ]; do i="${words[c]}" case "$i" in @@ -3357,9 +3202,10 @@ _git_whatchanged () __git_complete_worktree_paths () { local IFS=$'\n' + # Generate completion reply from worktree list skipping the first + # entry: it's the path of the main worktree, which can't be moved, + # removed, locked, etc. __gitcomp_nl "$(git worktree list --porcelain | - # Skip the first entry: it's the path of the main worktree, - # which can't be moved, removed, locked, etc. sed -n -e '2,$ s/^worktree //p')" } @@ -3458,15 +3304,19 @@ __git_support_parseopt_helper () { esac } +__git_have_func () { + declare -f -- "$1" >/dev/null 2>&1 +} + __git_complete_command () { local command="$1" local completion_func="_git_${command//-/_}" - if ! declare -f $completion_func >/dev/null 2>/dev/null && - declare -f _completion_loader >/dev/null 2>/dev/null + if ! __git_have_func $completion_func && + __git_have_func _completion_loader then _completion_loader "git-$command" fi - if declare -f $completion_func >/dev/null 2>/dev/null + if __git_have_func $completion_func then $completion_func return 0 @@ -3483,21 +3333,40 @@ __git_main () { local i c=1 command __git_dir __git_repo_path local __git_C_args C_args_count=0 + local __git_cmd_idx while [ $c -lt $cword ]; do i="${words[c]}" case "$i" in - --git-dir=*) __git_dir="${i#--git-dir=}" ;; - --git-dir) ((c++)) ; __git_dir="${words[c]}" ;; - --bare) __git_dir="." ;; - --help) command="help"; break ;; - -c|--work-tree|--namespace) ((c++)) ;; - -C) __git_C_args[C_args_count++]=-C + --git-dir=*) + __git_dir="${i#--git-dir=}" + ;; + --git-dir) + ((c++)) + __git_dir="${words[c]}" + ;; + --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 ;; + -*) + ;; + *) + command="$i" + __git_cmd_idx="$c" + break + ;; esac ((c++)) done @@ -3519,7 +3388,8 @@ __git_main () ;; esac case "$cur" in - --*) __gitcomp " + --*) + __gitcomp_opts " --paginate --no-pager --git-dir= @@ -3541,7 +3411,7 @@ __git_main () then __gitcomp "$GIT_TESTING_PORCELAIN_COMMAND_LIST" else - __gitcomp "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" + __gitcomp_nl "$(__git --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config)" fi ;; esac @@ -3570,7 +3440,7 @@ __gitk_main () fi case "$cur" in --*) - __gitcomp " + __gitcomp_opts " $__git_log_common_options $__git_log_gitk_options $merge @@ -3586,17 +3456,106 @@ if [[ -n ${ZSH_VERSION-} && -z ${GIT_SOURCING_ZSH_COMPLETION-} ]]; then return fi +# The following function is based on code from: +# +# bash_completion - programmable completion functions for bash 3.2+ +# +# Copyright © 2006-2008, Ian Macdonald +# © 2009-2010, Bash Completion Maintainers +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# 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, see . +# +# The latest version of this software can be obtained here: +# +# http://bash-completion.alioth.debian.org/ +# +# RELEASE: 2.x + +# This function reorganizes the words on the command line to be processed by +# the rest of the script. +# +# This is roughly equivalent to going back in time and setting +# COMP_WORDBREAKS to exclude '=' and ':'. The intent is to +# make option types like --date= and : easy to +# recognize by treating each shell word as a single token. +# +# It is best not to set COMP_WORDBREAKS directly because the value is +# shared with other completion scripts. By the time the completion +# function gets called, COMP_WORDS has already been populated so local +# changes to COMP_WORDBREAKS have no effect. + +if ! type __git_get_comp_words_by_ref >/dev/null 2>&1; then +__git_get_comp_words_by_ref () +{ + local exclude i j first + + # Which word separators to exclude? + exclude="${COMP_WORDBREAKS//[^=:]}" + cword=$COMP_CWORD + if [ -n "$exclude" ]; then + # List of word completion separators has shrunk; + # re-assemble words to complete. + for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do + # Append each nonempty word consisting of just + # word separator characters to the current word. + first=t + while + [ $i -gt 0 ] && + [ -n "${COMP_WORDS[$i]}" ] && + # word consists of excluded word separators + [ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ] + do + # Attach to the previous token, + # unless the previous token is the command name. + if [ $j -ge 2 ] && [ -n "$first" ]; then + ((j--)) + fi + first= + words[$j]=${words[j]}${COMP_WORDS[i]} + if [ $i = $COMP_CWORD ]; then + cword=$j + fi + if (($i < ${#COMP_WORDS[@]} - 1)); then + ((i++)) + else + # Done. + break 2 + fi + done + words[$j]=${words[j]}${COMP_WORDS[i]} + if [ $i = $COMP_CWORD ]; then + cword=$j + fi + done + else + words=("${COMP_WORDS[@]}") + fi + + cur=${words[cword]} + prev=${words[cword-1]} +} +fi + __git_func_wrap () { - local cur words cword prev - _get_comp_words_by_ref -n =: cur words cword prev + local cur words cword prev __git_cmd_idx=0 + __git_get_comp_words_by_ref $1 } -# Setup completion for certain functions defined above by setting common -# variables and workarounds. -# This is NOT a public function; use at your own risk. -__git_complete () +___git_complete () { local wrapper="__git_wrap${2}" eval "$wrapper () { __git_func_wrap $2 ; }" @@ -3604,15 +3563,35 @@ __git_complete () || complete -o default -o nospace -F $wrapper $1 } +# Setup the completion for git commands +# 1: command or alias +# 2: function to call (e.g. `git`, `gitk`, `git_fetch`) +__git_complete () +{ + local func + + if __git_have_func $2; then + func=$2 + elif __git_have_func __$2_main; then + func=__$2_main + elif __git_have_func _$2; then + func=_$2 + else + echo "ERROR: could not find function '$2'" 1>&2 + return 1 + fi + ___git_complete $1 $func +} + if ! git --list-cmds=main >/dev/null 2>&1; then declare -A __git_cmds __git_cmds[list-complete]="apply blame cherry config difftool fsck help instaweb mergetool prune reflog remote repack replace request-pull send-email show-branch stage whatchanged" - __git_cmds[list-guide]="attributes cli core-tutorial credentials cvs-migration diffcore everyday faq glossary hooks ignore modules namespaces remote-helpers repository-layout revisions submodules tutorial-2 tutorial workflows" - __git_cmds[list-mainporcelain]="add am archive bisect branch bundle checkout cherry-pick citool clean clone commit describe diff fetch format-patch gc grep gui init gitk log maintenance merge mv notes pull push range-diff rebase reset restore revert rm shortlog show sparse-checkout stash status submodule switch tag worktree" - __git_cmds[main]="add add--interactive am annotate apply archimport archive bisect bisect--helper blame branch bugreport bundle cat-file check-attr check-ignore check-mailmap check-ref-format checkout checkout-index cherry cherry-pick citool clean clone column commit commit-graph commit-tree config count-objects credential credential-cache credential-cache--daemon credential-gnome-keyring credential-libsecret credential-store cvsexportcommit cvsimport cvsserver daemon describe diff diff-files diff-index diff-tree difftool difftool--helper env--helper fast-export fast-import fetch fetch-pack filter-branch fmt-merge-msg for-each-ref format-patch fsck fsck-objects gc get-tar-commit-id grep gui gui--askpass hash-object help http-backend http-fetch http-push imap-send index-pack init init-db instaweb interpret-trailers log ls-files ls-remote ls-tree mailinfo mailsplit maintenance merge merge-base merge-file merge-index merge-octopus merge-one-file merge-ours merge-recursive merge-recursive-ours merge-recursive-theirs merge-resolve merge-subtree merge-tree mergetool mktag mktree multi-pack-index mv mw name-rev notes p4 pack-objects pack-redundant pack-refs patch-id pickaxe prune prune-packed pull push quiltimport range-diff read-tree rebase rebase--interactive receive-pack reflog remote remote-ext remote-fd remote-ftp remote-ftps remote-http remote-https remote-mediawiki repack replace request-pull rerere reset restore rev-list rev-parse revert rm send-email send-pack sh-i18n--envsubst shell shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace submodule submodule--helper subtree svn switch symbolic-ref tag unpack-file unpack-objects update-index update-ref update-server-info upload-archive upload-archive--writer upload-pack var verify-commit verify-pack verify-tag version web--browse whatchanged worktree write-tree" - __git_cmds[others]="compare reintegrate related remote-hg remote-sync send-series smartlist" - __git_cmds[parseopt]="add am apply archive bisect--helper blame branch bugreport cat-file check-attr check-ignore check-mailmap checkout checkout-index cherry cherry-pick clean clone column commit commit-graph config count-objects credential-cache credential-cache--daemon credential-store describe difftool env--helper fast-export fetch fmt-merge-msg for-each-ref format-patch fsck fsck-objects gc grep hash-object help init init-db interpret-trailers log ls-files ls-remote ls-tree merge merge-base merge-file mktree multi-pack-index mv name-rev notes pack-objects pack-refs pickaxe prune prune-packed pull push range-diff read-tree rebase rebase--interactive receive-pack reflog remote repack replace rerere reset restore revert rm send-pack shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace switch symbolic-ref tag update-index update-ref update-server-info upload-pack verify-commit verify-pack verify-tag version whatchanged write-tree " + __git_cmds[list-guide]="attributes cli core-tutorial credentials cvs-migration diffcore everyday faq glossary hooks ignore mailmap modules namespaces remote-helpers repository-layout revisions submodules tutorial tutorial-2 workflows" + __git_cmds[list-mainporcelain]="add am archive bisect branch bundle checkout cherry-pick citool clean clone commit describe diff fetch format-patch gc grep gui init log maintenance merge mv notes pull push range-diff rebase reset restore revert rm shortlog show sparse-checkout stash status submodule switch tag worktree gitk" + __git_cmds[main]="add add--interactive am annotate apply archimport archive bisect bisect--helper blame branch bugreport bundle cat-file check-attr check-ignore check-mailmap check-ref-format checkout checkout--worker checkout-index cherry cherry-pick citool clean clone column commit commit-graph commit-tree config count-objects credential credential-cache credential-cache--daemon credential-gnome-keyring credential-libsecret credential-store cvsexportcommit cvsimport cvsserver daemon describe diff diff-files diff-index diff-tree difftool difftool--helper env--helper fast-export fast-import fetch fetch-pack filter-branch fmt-merge-msg for-each-ref for-each-repo format-patch fsck fsck-objects gc get-tar-commit-id grep gui gui--askpass hash-object help http-backend http-fetch http-push imap-send index-pack init init-db instaweb interpret-trailers log ls-files ls-remote ls-tree mailinfo mailsplit maintenance merge merge-base merge-file merge-index merge-octopus merge-one-file merge-ours merge-recursive merge-recursive-ours merge-recursive-theirs merge-resolve merge-subtree merge-tree mergetool mktag mktree multi-pack-index mv mw name-rev notes p4 pack-objects pack-redundant pack-refs patch-id pickaxe prune prune-packed pull push quiltimport range-diff read-tree rebase receive-pack reflog remote remote-ext remote-fd remote-ftp remote-ftps remote-http remote-https remote-mediawiki repack replace request-pull rerere reset restore rev-list rev-parse revert rm send-email send-pack sh-i18n--envsubst shell shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace submodule submodule--helper subtree svn switch symbolic-ref tag unpack-file unpack-objects update-index update-ref update-server-info upload-archive upload-archive--writer upload-pack var verify-commit verify-pack verify-tag version web--browse whatchanged worktree write-tree" + __git_cmds[others]="" + __git_cmds[parseopt]="add am apply archive bisect--helper blame branch bugreport cat-file check-attr check-ignore check-mailmap checkout checkout--worker checkout-index cherry cherry-pick clean clone column commit commit-graph config count-objects credential-cache credential-cache--daemon credential-store describe difftool env--helper fast-export fetch fmt-merge-msg for-each-ref for-each-repo format-patch fsck fsck-objects gc grep hash-object help init init-db interpret-trailers log ls-files ls-remote ls-tree merge merge-base merge-file mktree multi-pack-index mv name-rev notes pack-objects pack-refs pickaxe prune prune-packed pull push range-diff read-tree rebase receive-pack reflog remote repack replace rerere reset restore revert rm send-pack shortlog show show-branch show-index show-ref sparse-checkout stage stash status stripspace switch symbolic-ref tag update-index update-ref update-server-info upload-pack verify-commit verify-pack verify-tag version whatchanged write-tree " # Override __git __git () @@ -3641,13 +3620,13 @@ if ! git --list-cmds=main >/dev/null 2>&1; then fi -__git_complete git __git_main -__git_complete gitk __gitk_main +___git_complete git __git_main +___git_complete gitk __gitk_main # The following are necessary only for Cygwin, and only are needed # when the user has tab-completed the executable name and consequently # included the '.exe' suffix. # if [ "$OSTYPE" = cygwin ]; then - __git_complete git.exe __git_main + ___git_complete git.exe __git_main fi diff --git a/zsh/plugins/gitfast/git-prompt.sh b/zsh/plugins/gitfast/git-prompt.sh index 54e123d..db7c006 100644 --- a/zsh/plugins/gitfast/git-prompt.sh +++ b/zsh/plugins/gitfast/git-prompt.sh @@ -138,6 +138,7 @@ __git_ps1_show_upstream () done <<< "$output" # parse configuration values + local option for option in ${GIT_PS1_SHOWUPSTREAM}; do case "$option" in git|svn) upstream="$option" ;; @@ -432,8 +433,8 @@ __git_ps1 () fi local sparse="" - if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] && - [ -z "${GIT_PS1_OMITSPARSESTATE}" ] && + if [ -z "${GIT_PS1_COMPRESSSPARSESTATE-}" ] && + [ -z "${GIT_PS1_OMITSPARSESTATE-}" ] && [ "$(git config --bool core.sparseCheckout)" = "true" ]; then sparse="|SPARSE" fi @@ -542,7 +543,7 @@ __git_ps1 () u="%${ZSH_VERSION+%}" fi - if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] && + if [ -n "${GIT_PS1_COMPRESSSPARSESTATE-}" ] && [ "$(git config --bool core.sparseCheckout)" = "true" ]; then h="?" fi diff --git a/zsh/plugins/gitfast/update b/zsh/plugins/gitfast/update index 5311065..5ebaaef 100755 --- a/zsh/plugins/gitfast/update +++ b/zsh/plugins/gitfast/update @@ -1,7 +1,7 @@ #!/bin/sh url="https://raw.githubusercontent.com/felipec/git-completion" -version="1.2" +version="1.3.6" curl -s -o _git "${url}/v${version}/git-completion.zsh" && curl -s -o git-completion.bash "${url}/v${version}/git-completion.bash" && diff --git a/zsh/plugins/gnu-utils/gnu-utils.plugin.zsh b/zsh/plugins/gnu-utils/gnu-utils.plugin.zsh index 6ede9e3..9419127 100644 --- a/zsh/plugins/gnu-utils/gnu-utils.plugin.zsh +++ b/zsh/plugins/gnu-utils/gnu-utils.plugin.zsh @@ -35,6 +35,9 @@ __gnu_utils() { # Not part of either coreutils or findutils, installed separately. gcmds+=('gsed' 'gtar' 'gtime' 'gmake' 'ggrep') + # can be built optionally + gcmds+=('ghostname') + for gcmd in "${gcmds[@]}"; do # Do nothing if the command isn't found (( ${+commands[$gcmd]} )) || continue diff --git a/zsh/plugins/gpg-agent/gpg-agent.plugin.zsh b/zsh/plugins/gpg-agent/gpg-agent.plugin.zsh index 0adc8de..1f4be20 100644 --- a/zsh/plugins/gpg-agent/gpg-agent.plugin.zsh +++ b/zsh/plugins/gpg-agent/gpg-agent.plugin.zsh @@ -9,7 +9,7 @@ autoload -U add-zsh-hook add-zsh-hook preexec _gpg-agent_update-tty_preexec # If enable-ssh-support is set, fix ssh agent integration -if [[ $(gpgconf --list-options gpg-agent | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then +if [[ $(gpgconf --list-options gpg-agent 2>/dev/null | awk -F: '$1=="enable-ssh-support" {print $10}') = 1 ]]; then unset SSH_AGENT_PID if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]; then export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" diff --git a/zsh/plugins/helm/helm.plugin.zsh b/zsh/plugins/helm/helm.plugin.zsh index cadfa55..151c43d 100644 --- a/zsh/plugins/helm/helm.plugin.zsh +++ b/zsh/plugins/helm/helm.plugin.zsh @@ -2,21 +2,12 @@ if (( ! $+commands[helm] )); then return fi -# TODO: 2021-12-28: delete this block -# Remove old generated file -command rm -f "${ZSH_CACHE_DIR}/helm_completion" - -# TODO: 2021-12-28: remove this bit of code as it exists in oh-my-zsh.sh -# Add completions folder in $ZSH_CACHE_DIR -command mkdir -p "$ZSH_CACHE_DIR/completions" -(( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) - # If the completion file does not exist, generate it and then source it # Otherwise, source it and regenerate in the background if [[ ! -f "$ZSH_CACHE_DIR/completions/_helm" ]]; then - helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm" + helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null source "$ZSH_CACHE_DIR/completions/_helm" else source "$ZSH_CACHE_DIR/completions/_helm" - helm completion zsh >| "$ZSH_CACHE_DIR/completions/_helm" &| + helm completion zsh | tee "$ZSH_CACHE_DIR/completions/_helm" >/dev/null &| fi diff --git a/zsh/plugins/httpie/README.md b/zsh/plugins/httpie/README.md index 40d60c4..25bdd0c 100644 --- a/zsh/plugins/httpie/README.md +++ b/zsh/plugins/httpie/README.md @@ -11,10 +11,4 @@ plugins=(... httpie) It uses completion from [zsh-completions](https://github.com/zsh-users/zsh-completions). -## Aliases - -| Alias | Command | -| ------------ | ---------------------------------------------------------------- | -| `https` | `http --default-scheme=https` | - **Maintainer:** [lululau](https://github.com/lululau) diff --git a/zsh/plugins/httpie/httpie.plugin.zsh b/zsh/plugins/httpie/httpie.plugin.zsh deleted file mode 100644 index 088a1f1..0000000 --- a/zsh/plugins/httpie/httpie.plugin.zsh +++ /dev/null @@ -1,7 +0,0 @@ -# -# Aliases -# (sorted alphabetically) -# - -alias https='http --default-scheme=https' - diff --git a/zsh/plugins/jsontools/jsontools.plugin.zsh b/zsh/plugins/jsontools/jsontools.plugin.zsh index 857ca0e..49828d3 100644 --- a/zsh/plugins/jsontools/jsontools.plugin.zsh +++ b/zsh/plugins/jsontools/jsontools.plugin.zsh @@ -8,7 +8,7 @@ fi # If method undefined, find the first one that is installed if [[ -z "$JSONTOOLS_METHOD" ]]; then - for JSONTOOLS_METHOD in node python ruby; do + for JSONTOOLS_METHOD in node python3 ruby; do # If method found, break out of loop (( $+commands[$JSONTOOLS_METHOD] )) && break # Otherwise unset the variable @@ -45,12 +45,12 @@ case "$JSONTOOLS_METHOD" in xargs -0 node -e "console.log(decodeURIComponent(process.argv[1]))" } ;; - python) + python3) function pp_json() { - python -c 'import sys; del sys.path[0]; import runpy; runpy._run_module_as_main("json.tool")' + python3 -c 'import sys; del sys.path[0]; import runpy; runpy._run_module_as_main("json.tool")' } function is_json() { - python -c ' + python3 -c ' import sys; del sys.path[0]; import json try: @@ -61,14 +61,14 @@ except ValueError: ' } function urlencode_json() { - python -c ' + python3 -c ' import sys; del sys.path[0]; from urllib.parse import quote_plus print(quote_plus(sys.stdin.read())) ' } function urldecode_json() { - python -c ' + python3 -c ' import sys; del sys.path[0]; from urllib.parse import unquote_plus print(unquote_plus(sys.stdin.read())) diff --git a/zsh/plugins/juju/README.md b/zsh/plugins/juju/README.md index 49f8b0d..f0c6530 100644 --- a/zsh/plugins/juju/README.md +++ b/zsh/plugins/juju/README.md @@ -15,34 +15,46 @@ Naming convention: - `!` suffix: `--force --no-wait -y`. - `ds` suffix: `--destroy-storage`. +- `jsh` prefix means `juju show-*`. ### General -| Alias | Command | Description | -|--------|---------------------------------------------|--------------------------------------------------------| -| `jdl` | `juju debug-log --ms` | Display log, with millisecond resolution | -| `jdlr` | `juju debug-log --ms --replay` | Replay entire log | -| `jh` | `juju help` | Show help on a command or other topic | -| `jssl` | `juju juju show-status-log` | Output past statuses for the specified entity | -| `jstj` | `juju status --format=json` | Show status in json format (more detailed) | -| `jst` | `juju status --relations --storage --color` | Show status, including relations and storage, in color | +| Alias | Command | Description | +|---------|---------------------------------------------|--------------------------------------------------------| +| `j` | `juju` | The juju command | +| `jcld` | `juju clouds` | Lists all clouds with registered credentials | +| `jclda` | `juju clouds --all` | Lists all clouds available to Juju | +| `jdl` | `juju debug-log --ms` | Display log, with millisecond resolution | +| `jdlr` | `juju debug-log --ms --replay` | Replay entire log | +| `jh` | `juju help` | Show help on a command or other topic | +| `jshsl` | `juju show-status-log` | Output past statuses for the specified entity | +| `jstj` | `juju status --format=json` | Show status in json format (more detailed) | +| `jst` | `juju status --relations --color` | Show status, including relations, in color | +| `jsts` | `juju status --relations --storage --color` | Show status, including relations and storage, in color | ### Bootstrap -| Alias | Command | Description | -|-------|---------------------------|-------------------------------------------| -| `jb` | `juju bootstrap` | Initializing a Juju cloud environment | -| `jbm` | `juju bootstrap microk8s` | Initializing a MicroK8s cloud environment | +| Alias | Command | Description | +|---------|-------------------------------------|-------------------------------------------------------| +| `jb` | `juju bootstrap` | Initializing a Juju cloud environment | +| `jbng` | `juju bootstrap --no-gui` | Initializing a Juju cloud environment without GUI | +| `jbl` | `juju bootstrap localhost` | Initializing an lxd cloud environment | +| `jblng` | `juju bootstrap --no-gui localhost` | Initializing an lxd cloud environment without GUI | +| `jbm` | `juju bootstrap microk8s` | Initializing a MicroK8s cloud environment | +| `jbmng` | `juju bootstrap --no-gui microk8s` | Initializing a MicroK8s cloud environment without GUI | ### Controller | Alias | Command | Description | |----------|---------------------------------------------------------------------------------------|-------------------------------------------------------------------| +| `jctl` | `juju controllers` | List all controllers | +| `jctlr` | `juju controllers --refresh` | List all controllers (download latest details) | | `jdc` | `juju destroy-controller --destroy-all-models` | Destroy a controller | | `jdc!` | `juju destroy-controller --destroy-all-models --force --no-wait -y` | Destroy a controller | | `jdcds` | `juju destroy-controller --destroy-all-models --destroy-storage` | Destroy a controller and associated storage | | `jdcds!` | `juju destroy-controller --destroy-all-models --destroy-storage --force --no-wait -y` | Destroy a controller and associated storage | | `jkc` | `juju kill-controller -y -t 0` | Forcibly terminate all associated resources for a Juju controller | +| `jshc` | `juju show-controller` | Shows detailed information of a controller | | `jsw` | `juju switch` | Select or identify the current controller and model | ### Model @@ -74,9 +86,9 @@ Naming convention: | `jrmds!` | `juju remove-application --destroy-storage --force --no-wait` | Remove application forcefully, destroying attached storage | | `jrp` | `juju refresh --path` | Upgrade charm from local charm file | | `jsa` | `juju scale-application` | Set the desired number of application units | -| `jsh` | `juju ssh` | Initiate an SSH session or execute a command on a Juju target | -| `jshc` | `juju ssh --container` | Initiate an SSH session or execute a command on a given container | -| `jsu` | `juju show-unit` | Displays information about a unit | +| `jssh` | `juju ssh` | Initiate an SSH session or execute a command on a Juju target | +| `jsshc` | `juju ssh --container` | Initiate an SSH session or execute a command on a given container | +| `jshu` | `juju show-unit` | Displays information about a unit | ### Storage @@ -113,5 +125,6 @@ Naming convention: - `jaddr [unit_num]`: display app or unit IP address. - `jreld `: display app and unit relation data. +- `jclean`: destroy all controllers - `wjst [interval_secs] [args_for_watch]`: watch juju status, with optional interval (default: 5s); you may pass additional arguments to `watch`. diff --git a/zsh/plugins/juju/juju.plugin.zsh b/zsh/plugins/juju/juju.plugin.zsh index 07f15b3..be8a2c7 100644 --- a/zsh/plugins/juju/juju.plugin.zsh +++ b/zsh/plugins/juju/juju.plugin.zsh @@ -16,12 +16,22 @@ unset completion_file # Generally, # # - `!` means --force --no-wait -y # # - `ds` suffix means --destroy-storage # +# - `jsh` prefix means juju show-* # # ---------------------------------------------------------- # +alias j="juju" alias jam="juju add-model --config logging-config=\"=WARNING; unit=DEBUG\"\ --config update-status-hook-interval=\"60m\"" alias jb='juju bootstrap' +alias jbng='juju bootstrap --no-gui' +alias jbl='juju bootstrap localhost' +alias jblng='juju bootstrap --no-gui localhost' alias jbm='juju bootstrap microk8s' +alias jbmng='juju bootstrap --no-gui microk8s' alias jc='juju config' +alias jcld='juju clouds' +alias jclda='juju clouds --all' +alias jctl='juju controllers' +alias jctlr='juju controllers --refresh' alias jdc='juju destroy-controller --destroy-all-models' alias 'jdc!'='juju destroy-controller --destroy-all-models --force --no-wait -y' alias jdcds='juju destroy-controller --destroy-all-models --destroy-storage' @@ -56,13 +66,16 @@ alias jrp='juju refresh --path' alias jrs='juju remove-storage' alias 'jrs!'='juju remove-storage --force' alias jsa='juju scale-application' -alias jsh='juju ssh' -alias jshc='juju ssh --container' +alias jsha='juju show-application' +alias jshc='juju show-controller' alias jshm='juju show-model' -alias jssl='juju show-status-log' +alias jshsl='juju show-status-log' +alias jshu='juju show-unit' +alias jssh='juju ssh' +alias jsshc='juju ssh --container' alias jstj='juju status --format=json' -alias jst='juju status --relations --storage --color' -alias jsu='juju show-unit' +alias jst='juju status --relations --color' +alias jsts='juju status --relations --storage --color' alias jsw='juju switch' # ---------------------------------------------------------- # @@ -95,6 +108,37 @@ jaddr() { fi } +# Destroy all controllers +jclean() { + if (( ! ${+commands[jq]} )); then + echo "jq is required but could not be found." >&2 + return 1 + fi + + local controllers=$(juju controllers --format=json | jq -r '.controllers | keys[]' 2>/dev/null) + if [[ -z "$controllers" ]]; then + echo "No controllers registered" + return 0 + fi + + echo "This will forcefully destroy all storages, models and controllers." + echo "Controllers to be destroyed:" + echo "$controllers" + + if ! read -q '?Are you sure (y/n)? '; then + echo + echo "Aborted." + return 0 + fi + + echo + for controller in ${=controllers}; do + timeout 2m juju destroy-controller --destroy-all-models --destroy-storage --force --no-wait -y $controller + timeout 2m juju kill-controller -y -t 0 $controller 2>/dev/null + timeout 10s juju unregister $controller 2>/dev/null + done +} + # Display app and unit relation data jreld() { # $1 = relation name @@ -123,5 +167,6 @@ jreld() { wjst() { local interval="${1:-5}" shift $(( $# > 0 )) - watch -n "$interval" --color juju status --relations --storage --color "$@" + watch -n "$interval" --color juju status --relations --color "$@" } + diff --git a/zsh/plugins/kubectl/README.md b/zsh/plugins/kubectl/README.md index f6651c8..579a90b 100644 --- a/zsh/plugins/kubectl/README.md +++ b/zsh/plugins/kubectl/README.md @@ -22,7 +22,7 @@ plugins=(... kubectl) | kcsc | `kubectl config set-context` | Set a context entry in kubeconfig | | kcdc | `kubectl config delete-context` | Delete the specified context from the kubeconfig | | kccc | `kubectl config current-context` | Display the current-context | -| kcgc | `kubectl config get-contexts` | List of contexts available +| kcgc | `kubectl config get-contexts` | List of contexts available | | | | **General aliases** | | kdel | `kubectl delete` | Delete resources by filenames, stdin, resources and names, or by resources and label selector | | kdelf | `kubectl delete -f` | Delete a pod using the type and name specified in -f argument | @@ -71,9 +71,11 @@ plugins=(... kubectl) | kdeld | `kubectl delete deployment` | Delete the deployment | | ksd | `kubectl scale deployment` | Scale a deployment | | krsd | `kubectl rollout status deployment` | Check the rollout status of a deployment | -| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | +| kres | `kubectl set env $@ REFRESHED_AT=...` | Recreate all pods in deployment with zero-downtime | | | | **Rollout management** | -| kgrs | `kubectl get rs` | To see the ReplicaSet `rs` created by the deployment | +| kgrs | `kubectl get replicaset` | List all ReplicaSets `rs` created by the deployment | +| kdrs | `kubectl describe replicaset` | Describe ReplicaSet in detail | +| kers | `kubectl edit replicaset` | Edit ReplicaSet from the default editor | | krh | `kubectl rollout history` | Check the revisions of this deployment | | kru | `kubectl rollout undo` | Rollback to the previous revision | | | | **Port forwarding** | @@ -120,6 +122,11 @@ plugins=(... kubectl) | kecj | `kubectl edit cronjob` | Edit CronJob from the default editor | | kdcj | `kubectl describe cronjob` | Describe a CronJob in details | | kdelcj | `kubectl delete cronjob` | Delete the CronJob | +| | | **Job management** | +| kgj | `kubectl get job` | List all Job in ps output format | +| kej | `kubectl edit job` | Edit a Job in details | +| kdj | `kubectl describe job` | Describe the Job | +| kdelj | `kubectl delete job` | Delete the Job | ## Wrappers diff --git a/zsh/plugins/kubectl/kubectl.plugin.zsh b/zsh/plugins/kubectl/kubectl.plugin.zsh index 6edb597..095d2b3 100644 --- a/zsh/plugins/kubectl/kubectl.plugin.zsh +++ b/zsh/plugins/kubectl/kubectl.plugin.zsh @@ -1,21 +1,12 @@ if (( $+commands[kubectl] )); then - # TODO: 2022-01-05: remove this block - # remove old generated files - command rm -f "$ZSH_CACHE_DIR/kubectl_completion" - - # TODO: 2022-01-05: remove this bit of code as it exists in oh-my-zsh.sh - # Add completions folder in $ZSH_CACHE_DIR - command mkdir -p "$ZSH_CACHE_DIR/completions" - (( ${fpath[(Ie)"$ZSH_CACHE_DIR/completions"]} )) || fpath=("$ZSH_CACHE_DIR/completions" $fpath) - # If the completion file does not exist, generate it and then source it # Otherwise, source it and regenerate in the background if [[ ! -f "$ZSH_CACHE_DIR/completions/_kubectl" ]]; then - kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl" + kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null source "$ZSH_CACHE_DIR/completions/_kubectl" else source "$ZSH_CACHE_DIR/completions/_kubectl" - kubectl completion zsh >| "$ZSH_CACHE_DIR/completions/_kubectl" &| + kubectl completion zsh | tee "$ZSH_CACHE_DIR/completions/_kubectl" >/dev/null &| fi fi @@ -29,7 +20,7 @@ alias kca='_kca(){ kubectl "$@" --all-namespaces; unset -f _kca; }; _kca' alias kaf='kubectl apply -f' # Drop into an interactive terminal on a container -alias keti='kubectl exec -ti' +alias keti='kubectl exec -t -i' # Manage configuration quickly to switch contexts between local, dev ad staging. alias kcuc='kubectl config use-context' @@ -112,7 +103,9 @@ function kres(){ } # Rollout management. -alias kgrs='kubectl get rs' +alias kgrs='kubectl get replicaset' +alias kdrs='kubectl describe replicaset' +alias kers='kubectl edit replicaset' alias krh='kubectl rollout history' alias kru='kubectl rollout undo' @@ -178,6 +171,12 @@ alias kecj='kubectl edit cronjob' alias kdcj='kubectl describe cronjob' alias kdelcj='kubectl delete cronjob' +# Job management. +alias kgj='kubectl get job' +alias kej='kubectl edit job' +alias kdj='kubectl describe job' +alias kdelj='kubectl delete job' + # Only run if the user actually has kubectl installed if (( ${+_comps[kubectl]} )); then function kj() { kubectl "$@" -o json | jq; } diff --git a/zsh/plugins/kubectx/kubectx.plugin.zsh b/zsh/plugins/kubectx/kubectx.plugin.zsh index 1419f10..6096fee 100644 --- a/zsh/plugins/kubectx/kubectx.plugin.zsh +++ b/zsh/plugins/kubectx/kubectx.plugin.zsh @@ -3,7 +3,9 @@ typeset -g -A kubectx_mapping function kubectx_prompt_info() { (( $+commands[kubectl] )) || return - local current_ctx=$(kubectl config current-context) + local current_ctx=$(kubectl config current-context 2> /dev/null) + + [[ -n "$current_ctx" ]] || return # use value in associative array if it exists # otherwise fall back to the context name diff --git a/zsh/plugins/multipass/README.md b/zsh/plugins/multipass/README.md new file mode 100644 index 0000000..f6b2d76 --- /dev/null +++ b/zsh/plugins/multipass/README.md @@ -0,0 +1,22 @@ +# multipass + +This plugin provides completion for [multipass](https://multipass.run), as well as aliases +for multipass commands. + +To use it, add `multipass` to the plugins array in your zshrc file: + +```zsh +plugins=(... multipass) +``` + +## Aliases + +| Alias | Command | +| ------ | ------------------------------------------------------------------- | +| `mp` | `multipass` | +| `mpl` | `multipass list` | +| `mpla` | `multipass launch` | +| `mpln` | `multipass launch --network en0 --network name=bridge0,mode=manual` | +| `mps` | `multipass shell` | +| `mpsp` | `multipass stop` | +| `mpst` | `multipass start` | diff --git a/zsh/plugins/multipass/_multipass b/zsh/plugins/multipass/_multipass new file mode 100644 index 0000000..c742df6 --- /dev/null +++ b/zsh/plugins/multipass/_multipass @@ -0,0 +1,73 @@ +#compdef multipass + +_multipass_get_command_list () { + # Sample output: + # $ multipass --help + # ... + # Options: + # -h, --help Display this help + # -v, --verbose Increase logging verbosity. Repeat the 'v' in the short option + # for more detail. Maximum verbosity is obtained with 4 (or more) + # v's, i.e. -vvvv. + # ... + # Available commands: + # alias Create an alias + # aliases List available aliases + # ... + # + $_comp_command1 --help | sed '1,/Available commands/d' | awk '/^[ \t]*[a-z]+/ { print $1 }' +} + +_multipass_get_args_list () { + # Sample output: + # $ multpass help stop + # ... + # Options: + # -h, --help Display this help + # -v, --verbose Increase logging verbosity. Repeat the 'v' in the short + # option for more detail. Maximum verbosity is obtained with + # 4 (or more) v's, i.e. -vvvv. + # --all Stop all instances + # -t, --time