[StGit PATCH] Added basic bash completion script for StGit.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Ted Pavlic <ted@xxxxxxxxxxxxx>

Signed-off-by: Ted Pavlic <ted@xxxxxxxxxxxxx>
---
 contrib/completion/stg-completion.bash |  106 ++++++++++++++++++++++++++++++++
 1 files changed, 106 insertions(+), 0 deletions(-)
 create mode 100755 contrib/completion/stg-completion.bash

diff --git a/contrib/completion/stg-completion.bash b/contrib/completion/stg-completion.bash
new file mode 100755
index 0000000..13cc792
--- /dev/null
+++ b/contrib/completion/stg-completion.bash
@@ -0,0 +1,106 @@
+#!bash
+#
+# bash completion support for Stacked Git (StGit).
+#
+# Copyright (c) 2009 by Theodore P. Pavlic <ted@xxxxxxxxxxxxx>
+# Distributed under the GNU General Public License, version 2.0.
+#
+# Design is highly influenced by completion scripts for Mercurial and
+# git.
+#
+# To use these routines:
+#
+#    1) Copy this file to somewhere (e.g. ~/.stg-completion.sh).
+#    2) Added the following line to your .bashrc or .bash_profile:
+#        source ~/.stg-completion.sh
+#
+# To submit patches:
+#
+#    *) Read Documentation/SubmittingPatches
+#    *) Send all patches to the Git mailing list
+#
+#           git@xxxxxxxxxxxxxxx
+#
+#       and CC the message to the StGit maintainer
+#
+#           catalin.marinas@xxxxxxxxx
+#
+#       Prefix the subject with something like "[StGit PATCH]",
+#       "[StGit PATCH i/n]", "[StGit PATCH RFC]", or similar. Patches
+#       should be "Signed-off-by:" you as described in
+#       Documentation/SubmittingPatches.
+#
+#       It is recommended that editors submit patches using utilities
+#       like
+#
+#           stg mail
+#           git send-email
+#           git format-patch
+#
+#       In the latter case, make sure e-amils submitted to the list do
+#       not have "format=flowed" and do not "word wrap" your patch.
+#
+
+# This 'extglob' bash option allows for
+#       if [[ $param == @(-h|--help) ]]
+# type statements. That is, the pattern is true if $param matches -h OR
+# --help
+shopt -s extglob
+
+__stg_commands()
+{
+    local commands
+    commands="$("$stg" help|grep '^ '|cut -f3 -d' ' 2>/dev/null)" || commands=""
+    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
+}
+
+__stg()
+{
+    local cur prev cmd
+    local stg="$1"
+
+    COMPREPLY=()
+    cur="$2"
+    prev="$3"
+
+    if [ $COMP_CWORD -gt 1 ]; then
+        # Try to complete the argument to an already complete stg command
+        # (e.g., "stg command partial<tab>")
+        cmd=${COMP_WORDS[${COMP_CWORD}-1]}
+        __stg_specific_command
+    else
+        # Try to complete an incomplete stg command (possibly blank)
+        # (e.g., "stg partial<tab>")
+        __stg_commands
+    fi
+
+}
+
+# Handle "stg command <tab>" completion
+__stg_specific_command()
+{
+    # Here, try to find (possibly user-defined) functions that match the
+    # command
+    if [ "$(type -t "__stg_cmd_$cmd")" = function ]; then
+        "__stg_cmd_$cmd"
+        return 0
+    fi
+
+    # Special handling of particular stg commands can be placed here
+    case "$cmd" in
+        help)
+            # Complete help with all possible help commands
+            __stg_commands
+            ;;
+        *)
+            # Bail out to normal bash completion
+            return 1
+            ;;
+   esac
+
+   return 0
+}
+
+# Use __stg for stg completion and bail out to normal bash completion
+complete -o bashdefault -o default -F __stg stg 2>/dev/null \
+    || complete -o default -F __stg stg
-- 
1.6.1.87.g15624

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux