From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 29543 invoked from network); 23 Nov 2020 17:57:02 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 23 Nov 2020 17:57:02 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1606154222; b=nn32yBXBRzGGrQ/LjyKgs/LWzXRjSHGQ+uqJe6ySzWTzJ0S60d5xScn0niDO0woVl1Lo85EIjB UuAF43dY0b7dfmwnThNy8NKLWsYtQQ41XtoVURydfMwqhnqh1zRKr8I/gZGIahL99TjGJXkJjl rbi0LjH8DL8suW5XSv/CZg3FtC97gutlbXav9FVSJP2KcmlJl6++tkSCgZASRdEVk6es39kIJG 7q+X063+u0kPmpOP0b6vblKpbnv8HMzZJ9Dz158gGnSEOhwIgpSf8JYyt/AYmZZR88XWtWnpR6 klfiS00IX5tifm5fjs2tO5T1w2H8HKtXZBtrhEqSY4xO3Q==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ot1-f66.google.com) smtp.remote-ip=209.85.210.66; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1606154222; bh=RJcK+nlbcKp6Y6vp7BXmSdl0BzgnN3L+m4chBrE1J2I=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:MIME-Version:Message-ID:Date: Subject:Cc:To:From:DKIM-Signature:DKIM-Signature; b=XvvaO7mmCUrXb8r6hpT8RfLrXxESjpAvWzxddjaAI3yiCkmXHc7fOmRqo+FOlRjWrppxmWY/PI olLunIlQY/f6w0D6ypAZWIlECMp9N6ghVJvk51myCoLmdxfoSXHHnp5Kn/ttnC0+U/NQq9cTj8 GT/KYOc/Yzw0THMDUbPYXdDx+ZgyeNIU+nniJ17G9eM6UyDc26zmzC519cQpX7wH3xXag0FcxN uDFLZWzVg14RedlrqOpb/XwkZBy9AxngEx9m9PzgLXpFoN4xQJH0vKocxQVFdr4A7+PZbTN48s Fwjwx4yZJFsXnp7nrtCYy/Aju3x/rkLcTAB8lR9qjA5LMg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Transfer-Encoding: MIME-Version:Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=RFE8MqmJ6EJVzgIz5bNmxlEniCX829q7yHYMufKjB5o=; b=Ufbo6QtyeGdoBzDsFrZwAYEG3M 1F71MTfWVEJ1wI5k2j5FUPXPPmRfhNFuY0uIttOlizdv84MBZtHKBDs+fVz8MkJ9EyWbqX3Z9Lwog ZoMOHqtT2uy2vx3IYxMwzWta6y/gUdtQBxbXA5VQ0+mXEKd8tfPV36aOJELUc7nEn15EjNrOHzU6F uTmYGdZJEdesQjZ23Zh1CSfLA7lCRryd6tqkWV9rTInKmTvuw5pbnGH+UW1pbBvHduO0QoHjJo/Tx ZKDFFK1xFt3DNd0aYs9uWJGzEOdFjzaGKjlnK6JWds3mkO+DgJGuKz0Z09sN4JSupW5oS+T7+JPWM x75ISjHA==; Received: from authenticated user by zero.zsh.org with local id 1khG5E-000Kls-HG; Mon, 23 Nov 2020 17:57:00 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ot1-f66.google.com) smtp.remote-ip=209.85.210.66; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-ot1-f66.google.com ([209.85.210.66]:34989) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1khG4z-000KdM-Jb; Mon, 23 Nov 2020 17:56:46 +0000 Received: by mail-ot1-f66.google.com with SMTP id n11so16740410ota.2 for ; Mon, 23 Nov 2020 09:56:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=RFE8MqmJ6EJVzgIz5bNmxlEniCX829q7yHYMufKjB5o=; b=XcS44Df2FhqBWB5XsuBFRQ4vRr7P3ERJF+laLUxxwkptuJGjqwiiFLZoICqwFo2Kng KNbzjBme4CkyLG3/mOasRtwgYmPIv9p7YJ/UgjMnptJwVCxXRjaSOpUgRNRhbs6JB4uK FwPYwuUDq2WQ6BHPKHfTGwqigpvxgnszbHBwXx5iDxA/yp96l3JCMwmxgjh8L//zNiKo T+eIePYvCwT0Ge9jnRTm/nVuISVGnzuDdSskNNR2WINA2lHe9OK+279G8SKe05xCDmkp I27aqpMKkoCtC5b0/UIv1bp1TnPK0UbtNSBIZhW6+Mp5EpS8HciZMkJhdhx+9rOsVVlI jovg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=RFE8MqmJ6EJVzgIz5bNmxlEniCX829q7yHYMufKjB5o=; b=X1dpmA7IjqezvurE1/Ci9mzv++BBhmQGSo77aG6smcJv+duqmWTIB0jkgQ+nIwE5w3 trex0C6vnObpeVu4YB9KEjhP3uTD2uykY/hcpYUmkD5CcCeFLf1taLh0fCDyWcG8ElE3 veldU/MEQx+EjwqEZNph67T+hKWfFDEjbT+T616KzmG0lxaxCVMOoCeDN/3/82f1gtlq P5ANkLwIiFVHLeN0mkdf2jYGQDrtyvawho6hRH3Idx7BEhhOn6EjUSCEXR52e2zT+hYc M5f9HXDmWymcA5NKQ99J3Uu7jJu4MIA7rwrU624Z30+M0n4+DFoLjxo+PlTlp6JcaMZ8 pP9g== X-Gm-Message-State: AOAM532TID79cPHbh93hOz1kV/jTszpzQdHw6TqmJynrRFZQhR6emRYf dd012t9D1MdlfazH9K6MKlIl09ODIygpsQ== X-Google-Smtp-Source: ABdhPJxflyyOtqFmpjGuZPNQJgsLyCeKNw06q0RIIPacTFTaLkUPwJh5ivkzMzhD5rwpgX9vgkupmg== X-Received: by 2002:a9d:3636:: with SMTP id w51mr362255otb.71.1606154203661; Mon, 23 Nov 2020 09:56:43 -0800 (PST) Received: from localhost (189-209-26-110.static.axtel.net. [189.209.26.110]) by smtp.gmail.com with ESMTPSA id o63sm7979677ooa.10.2020.11.23.09.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Nov 2020 09:56:43 -0800 (PST) From: Felipe Contreras To: zsh-workers@zsh.org Cc: Daniel Shahaf , Felipe Contreras Subject: [RFC/PATCH] completion: git: add fast mode Date: Mon, 23 Nov 2020 11:56:41 -0600 Message-Id: <20201123175641.2111934-1-felipe.contreras@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Seq: 47608 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: Using the official Git Bash completion script the completion is blazingly fast. We can optionally enable this mode if Git's official Bash completion script is specified by the user. Signed-off-by: Felipe Contreras --- This patch is just to show how merging the gitfast/git zsh wrapper/git-completion might look like. Completion/Unix/Command/_git | 125 +++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index 81a060e4d..9a307faad 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -39,6 +39,104 @@ # TODO: There is still undocumented configurability in here. +zstyle -s ":completion:*:*:git:*" bash-script git_bash_script + +if [ -n "$git_bash_script" ]; then + +local old_complete="$functions[complete]" +functions[complete]=: +COMP_WORDBREAKS=':' +GIT_SOURCING_ZSH_COMPLETION=y . "$git_bash_script" +functions[complete]="$old_complete" + +__gitcompadd () +{ + compadd -Q -p "${2-}" -S "${3- }" ${@[4,-1]} -- ${=1} && _ret=0 +} + +__gitcomp () +{ + emulate -L zsh + + local cur_="${3-$cur}" + + [[ "$cur_" == *= ]] && return + + local c IFS=$' \t\n' sfx + for c in ${=1}; do + if [[ $c == "--" ]]; then + [[ "$cur_" == --no-* ]] && continue + __gitcompadd "--no-..." + break + fi + + if [[ -z "${4-}" ]]; then + case $c in + *=) c="${c%=}"; sfx="=" ;; + *.) sfx="" ;; + *) sfx=" " ;; + esac + else + sfx="$4" + fi + __gitcompadd "$c" "${2-}" "$sfx" -q + done +} + +__gitcomp_nl () +{ + emulate -L zsh + + IFS=$'\n' __gitcompadd "$1" "${2-}" "${4- }" +} + +__gitcomp_file () +{ + emulate -L zsh + + compadd -f -p "${2-}" -- ${(f)1} && _ret=0 +} + +__gitcomp_direct () +{ + __gitcomp_nl "$1" "" "" "" +} + +__gitcomp_file_direct () +{ + __gitcomp_file "$1" "" +} + +__gitcomp_nl_append () +{ + __gitcomp_nl "$@" +} + +__gitcomp_direct_append () +{ + __gitcomp_direct "$@" +} + +__gitbash_complete_func () +{ + local _ret=1 + local cur cword prev + + cur=${words[CURRENT]} + prev=${words[CURRENT-1]} + let cword=CURRENT-1 + + if (( $+functions[$1] )); then + compset -P '*[=:]' + emulate ksh -c $1 + return _ret + else + return 1 + fi +} + +fi + # HIGH-LEVEL COMMANDS (PORCELAIN) # Main Porcelain Commands @@ -768,6 +866,11 @@ _git-diff () { case $state in (from-to-file) + if [ -n "$git_bash_script" ]; then + __gitbash_complete_func __git_complete_revlist && ret=0 + return ret + fi + # If "--" is part of $opt_args, this means it was specified before any # $words arguments. This means that no heads are specified in front, so # we need to complete *changed* files only. @@ -953,6 +1056,11 @@ _git-format-patch () { case $state in (commit-or-commit-range) + if [ -n "$git_bash_script" ]; then + __gitbash_complete_func __git_complete_revlist && ret=0 + return ret + fi + if [[ -n ${opt_args[(I)--root]} ]]; then __git_commits && ret=0 else @@ -1183,6 +1291,13 @@ _git-log () { '1: :->first-commit-ranges-or-files' \ '*: :->commit-ranges-or-files' && ret=0 + if [ -n "$git_bash_script" ]; then + if [ -n "$state" ]; then + __gitbash_complete_func __git_complete_revlist && ret=0 + return ret + fi + fi + case $state in (first-commit-ranges-or-files) if [[ -n ${opt_args[(I)--]} ]]; then @@ -1676,6 +1791,11 @@ _git-shortlog () { fi ;; (commit-range-or-file) + if [ -n "$git_bash_script" ]; then + __gitbash_complete_func __git_complete_revlist && ret=0 + return ret + fi + case $CURRENT in (1) if [[ -n ${opt_args[(I)--]} ]]; then @@ -5412,6 +5532,11 @@ _git-rev-list () { case $state in (commit-or-path) + if [ -n "$git_bash_script" ]; then + __gitbash_complete_func __git_complete_revlist && ret=0 + return ret + fi + # TODO: What paths should we be completing here? if [[ -n ${opt_args[(I)--]} ]]; then __git_cached_files && ret=0 -- 2.29.2