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 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
[](https://gitpod.io/#https://github.com/ohmyzsh/ohmyzsh)
[](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