mirror of https://github.com/ohmyzsh/ohmyzsh.git
Compare commits
5 Commits
a87fbf8a68
...
366043304a
Author | SHA1 | Date |
---|---|---|
relaxin101 | 366043304a | |
dependabot[bot] | 6e9cda3d30 | |
ohmyzsh[bot] | d689aa289e | |
Felipe Contreras | 8c5b71b2f4 | |
relax | b0c3eb32f5 |
|
@ -2,11 +2,13 @@ dependencies:
|
||||||
plugins/gitfast:
|
plugins/gitfast:
|
||||||
repo: felipec/git-completion
|
repo: felipec/git-completion
|
||||||
branch: master
|
branch: master
|
||||||
version: tag:v2.1
|
version: tag:v2.2
|
||||||
postcopy: |
|
postcopy: |
|
||||||
set -e
|
set -e
|
||||||
rm -rf git-completion.plugin.zsh Makefile README.adoc t tools
|
rm -rf git-completion.plugin.zsh Makefile t tools
|
||||||
test -e git-completion.zsh && mv -f git-completion.zsh _git
|
mv README.adoc MANUAL.adoc
|
||||||
|
mv -f src/* .
|
||||||
|
rmdir src
|
||||||
plugins/gradle:
|
plugins/gradle:
|
||||||
repo: gradle/gradle-completion
|
repo: gradle/gradle-completion
|
||||||
branch: master
|
branch: master
|
||||||
|
|
|
@ -3,5 +3,5 @@ charset-normalizer==3.4.1
|
||||||
idna==3.10
|
idna==3.10
|
||||||
PyYAML==6.0.2
|
PyYAML==6.0.2
|
||||||
requests==2.32.3
|
requests==2.32.3
|
||||||
semver==3.0.2
|
semver==3.0.3
|
||||||
urllib3==2.3.0
|
urllib3==2.3.0
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
This project is a friendly fork of the official Git completion
|
||||||
|
(`contrib/completion`) and prompt scripts for Bash, Zsh, and possibly other
|
||||||
|
shells.
|
||||||
|
|
||||||
|
Most Git developers use the Bash shell, for which the completion scripts work
|
||||||
|
rather well, however, Zsh is typically neglected. I've sent many patches to fix
|
||||||
|
the issues, many have been merged, but many have been ignored, thus the need for
|
||||||
|
a canonical location of a good, working Zsh completion.
|
||||||
|
|
||||||
|
There are advantages for Bash users too. Currently the scripts under `contrib` are tied to the
|
||||||
|
specific Git version, for example the completion scripts of version v2.40
|
||||||
|
(https://git.kernel.org/pub/scm/git/git.git/plain/contrib/completion/git-completion.bash?h=v2.40.0[git-completion.bash])
|
||||||
|
have issues with older versions of Git (e.g. v2.33); the ones in
|
||||||
|
this project don't.
|
||||||
|
|
||||||
|
With `git-completion` you can be sure you are using the latest completion that
|
||||||
|
works in both shells, and any Git version.
|
||||||
|
|
||||||
|
This is a sister project of the
|
||||||
|
https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/gitfast[Oh My Zsh
|
||||||
|
gitfast] plugin (that I also maintain), which has similar needs.
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
|
||||||
|
* https://github.com/felipec/git-completion/wiki/Bash[Bash instructions]
|
||||||
|
* https://github.com/felipec/git-completion/wiki/Zsh[Zsh instructions]
|
||||||
|
|
||||||
|
== Improvements from upstream ==
|
||||||
|
|
||||||
|
This is a short list of the benefits you get:
|
||||||
|
|
||||||
|
* Easier installation
|
||||||
|
* Tons of bug fixes
|
||||||
|
* Works with older versions of git
|
||||||
|
* Zsh: much more options
|
||||||
|
* Zsh: quoting works properly
|
||||||
|
* Zsh: automatic suffix removal
|
||||||
|
|
||||||
|
For a full list of all the patches on top of upstream git check
|
||||||
|
https://github.com/felipec/git-completion/wiki/Patches[Patches].
|
|
@ -2,23 +2,11 @@
|
||||||
|
|
||||||
# zsh completion wrapper for git
|
# zsh completion wrapper for git
|
||||||
#
|
#
|
||||||
# Copyright (c) 2012-2020 Felipe Contreras <felipe.contreras@gmail.com>
|
# Copyright (c) 2012-2024 Felipe Contreras <felipe.contreras@gmail.com>
|
||||||
#
|
#
|
||||||
# The recommended way to install this script is to make a copy of it as a
|
# The recommended way to use this script is to prepend its location to your $fpath:
|
||||||
# file named '_git' inside any directory in your fpath.
|
|
||||||
#
|
#
|
||||||
# For example, create a directory '~/.zsh/', copy this file to '~/.zsh/_git',
|
# fpath=($git_completion_srcdir $fpath)
|
||||||
# and then add the following to your ~/.zshrc file:
|
|
||||||
#
|
|
||||||
# fpath=(~/.zsh $fpath)
|
|
||||||
#
|
|
||||||
# You need git's bash completion script installed. By default bash-completion's
|
|
||||||
# location will be used (e.g. pkg-config --variable=completionsdir bash-completion).
|
|
||||||
#
|
|
||||||
# If your bash completion script is somewhere else, you can specify the
|
|
||||||
# location in your ~/.zshrc:
|
|
||||||
#
|
|
||||||
# zstyle ':completion:*:*:git:*' script ~/.git-completion.bash
|
|
||||||
#
|
#
|
||||||
|
|
||||||
zstyle -T ':completion:*:*:git:*' tag-order && \
|
zstyle -T ':completion:*:*:git:*' tag-order && \
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# bash/zsh completion support for core Git.
|
# bash/zsh completion support for core Git.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
|
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
|
||||||
|
# Copyright (c) 2012-2024 Felipe Contreras <felipe.contreras@gmail.com>
|
||||||
|
#
|
||||||
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
|
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
|
||||||
# Distributed under the GNU General Public License, version 2.0.
|
# Distributed under the GNU General Public License, version 2.0.
|
||||||
#
|
#
|
||||||
|
|
|
@ -4,16 +4,52 @@
|
||||||
# Filter out wildcard host sections.
|
# Filter out wildcard host sections.
|
||||||
_ssh_configfile="$HOME/.ssh/config"
|
_ssh_configfile="$HOME/.ssh/config"
|
||||||
if [[ -f "$_ssh_configfile" ]]; then
|
if [[ -f "$_ssh_configfile" ]]; then
|
||||||
_ssh_hosts=($(
|
|
||||||
egrep '^Host.*' "$_ssh_configfile" |\
|
parse_ssh_config() {
|
||||||
|
local config_file="$1"
|
||||||
|
|
||||||
|
if [[ -f "$config_file" ]]; then
|
||||||
|
# Extract all "Host" entries
|
||||||
|
local hosts=($(
|
||||||
|
egrep -i '^Host.*' "$config_file" |\
|
||||||
awk '{for (i=2; i<=NF; i++) print $i}' |\
|
awk '{for (i=2; i<=NF; i++) print $i}' |\
|
||||||
sort |\
|
sort |\
|
||||||
uniq |\
|
uniq |\
|
||||||
grep -v '^*' |\
|
grep -v '^*' |\
|
||||||
sed -e 's/\.*\*$//'
|
sed -e 's/\.*\*$//'
|
||||||
))
|
))
|
||||||
zstyle ':completion:*:hosts' hosts $_ssh_hosts
|
|
||||||
|
# Add hosts to the global array
|
||||||
|
_ssh_hosts+=("${hosts[@]}")
|
||||||
|
|
||||||
|
# Handle Include directives by reading the files they reference
|
||||||
|
local includes=($(egrep '^Include ' "$config_file" | awk '{print $2}'))
|
||||||
|
|
||||||
|
# Loop through each included file or pattern
|
||||||
|
for include in "${includes[@]}"; do
|
||||||
|
|
||||||
|
# Resolve relative paths and handle wildcards
|
||||||
|
for file in $(eval echo $include); do
|
||||||
|
parse_ssh_config "$file"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_ssh_hosts=()
|
||||||
|
# Start parsing from the main SSH config file
|
||||||
|
_ssh_configfile="$HOME/.ssh/config"
|
||||||
|
parse_ssh_config "$_ssh_configfile"
|
||||||
|
_final_hosts=($(sort <<< "${_ssh_hosts[@]}" |\
|
||||||
|
uniq |\
|
||||||
|
grep -v '^*' |\
|
||||||
|
sed -e 's/\.*\*$//'
|
||||||
|
))
|
||||||
|
|
||||||
|
zstyle ':completion:*:hosts' hosts $_final_hosts
|
||||||
unset _ssh_hosts
|
unset _ssh_hosts
|
||||||
|
unset _final_hosts
|
||||||
fi
|
fi
|
||||||
unset _ssh_configfile
|
unset _ssh_configfile
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue