[PATCH] bash_completion: complete bookmarks

Kevin Bullock kbullock+mercurial at ringworld.org
Mon Feb 28 17:09:29 CST 2011


# HG changeset patch
# User Kevin Bullock <kbullock at ringworld.org>
# Date 1298933115 21600
# Branch stable
# Node ID b908a275cf2af595dfe23eaf677796039b09ff6e
# Parent  9b617c56eb651a7f9d19290b0918f4982871298b
bash_completion: complete bookmarks

Since bookmarks moved into core and are no longer merged with the list
of tags (d012d95499f7), they don't get completed in bash_completion
along with other revision specifiers. This adds a new function to
provide the list of bookmarks for completion, and another, _hg_labels(),
to list all tags, branches, and bookmarks. It further modifies
completion for all commands where '_hg_tags; _hg_branches' was used to
use '_hg_labels' instead.

diff --git a/contrib/bash_completion b/contrib/bash_completion
--- a/contrib/bash_completion
+++ b/contrib/bash_completion
@@ -101,6 +101,20 @@
     COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$branches' -- "$cur"))
 }
 
+_hg_bookmarks()
+{
+    local bookmarks="$(_hg_cmd bookmarks -q)"
+    local IFS=$'\n'
+    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$bookmarks' -- "$cur"))
+}
+
+_hg_labels()
+{
+    _hg_tags
+    _hg_branches
+    _hg_bookmarks
+}
+
 # this is "kind of" ugly...
 _hg_count_non_option()
 {
@@ -200,12 +214,10 @@
 
     if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
 	if [ $canonical = 1 ]; then
-	    _hg_tags
-	    _hg_branches
+	    _hg_labels
 	    return 0
 	elif [[ status != "$cmd"* ]]; then
-	    _hg_tags
-	    _hg_branches
+            _hg_labels
 	    return 0
 	else
 	    return 1
@@ -220,12 +232,10 @@
 	    if _hg_ext_mq_patchlist qapplied && [ "${COMPREPLY[*]}" ]; then
 		return 0
 	    fi
-	    _hg_tags
-	    _hg_branches
+	    _hg_labels
 	;;
 	manifest|update)
-	    _hg_tags
-	    _hg_branches
+	    _hg_labels
 	;;
 	pull|push|outgoing|incoming)
 	    _hg_paths
@@ -238,8 +248,7 @@
 	    _hg_status "u"
 	;;
 	merge)
-	    _hg_tags
-	    _hg_branches
+	    _hg_labels
 	;;
 	commit|record)
 	    _hg_status "mar"
@@ -378,8 +387,7 @@
 
 _hg_cmd_strip()
 {
-    _hg_tags
-    _hg_branches
+    _hg_labels
 }
 
 _hg_cmd_qcommit()
@@ -497,8 +505,7 @@
 
     case "$subcmd" in
 	good|bad)
-	    _hg_tags
-	    _hg_branches
+	    _hg_labels
 	    ;;
     esac
 
@@ -534,8 +541,7 @@
 	    ;;
     esac
 
-    _hg_tags
-    _hg_branches
+    _hg_labels
     return
 }
 
@@ -543,8 +549,7 @@
 # gpg
 _hg_cmd_sign()
 {
-    _hg_tags
-    _hg_branches
+    _hg_labels
 }
 
 
@@ -564,8 +569,7 @@
     esac
 
     # all other transplant options values and command parameters are revisions
-    _hg_tags
-    _hg_branches
+    _hg_labels
     return
 }
 


More information about the Mercurial-devel mailing list