summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Murzov <e-mail@date.by>2011-11-17 04:02:35 +0300
committerIgor Murzov <e-mail@date.by>2011-11-17 04:02:35 +0300
commit82784121d863bede6b40433a52cceaabb79d7df6 (patch)
treec93ba333f02f7e4a9ec076f916fffb1e78085399
parent068a1a1b531a1c1823da496156a8bed17373c4ee (diff)
downloadbash-completion-82784121d863bede6b40433a52cceaabb79d7df6.tar.gz
upgradepkg: Support oldpackage%newpackage notation.
-rw-r--r--completions/upgradepkg12
-rw-r--r--test/lib/completions/upgradepkg.exp12
2 files changed, 24 insertions, 0 deletions
diff --git a/completions/upgradepkg b/completions/upgradepkg
index 06dbe571..59a27ca5 100644
--- a/completions/upgradepkg
+++ b/completions/upgradepkg
@@ -11,6 +11,18 @@ _upgradepkg()
return 0
fi
+ if [[ "$cur" == ?*%* ]]; then
+ prev="${cur%%?(\\)%*}"
+ cur="${cur#*%}"
+ local nofiles IFS=$'\n'
+ compopt -o filenames
+ COMPREPLY=( $( compgen -P "$prev%" -f -X "!*.@(t[bgxl]z)" -- "$cur" ) )
+ [[ $COMPREPLY ]] || nofiles=1
+ COMPREPLY+=( $( compgen -P "$prev%" -S '/' -d -- "$cur" ) )
+ [[ $nofiles ]] && compopt -o nospace
+ return 0
+ fi
+
_filedir "t[bglx]z"
} && complete -F _upgradepkg upgradepkg
diff --git a/test/lib/completions/upgradepkg.exp b/test/lib/completions/upgradepkg.exp
index 860dde9e..4783aec3 100644
--- a/test/lib/completions/upgradepkg.exp
+++ b/test/lib/completions/upgradepkg.exp
@@ -36,4 +36,16 @@ assert_complete_dir $files "upgradepkg " $dir $test
sync_after_int
+set test "should complete *.t\[gbxl\]z files and dirs after % sign"
+set oldpkg "xx-2.0-i486-2"
+set dir $::srcdir/fixtures/slackware/home
+set files [split [exec bash -c "cd $dir && find . -mindepth 1 -maxdepth 1 \
+ \\( -type d -printf '$oldpkg%%%P/\\n' \\) -o \
+ \\( -type f -name '*.t\[bglx\]z' -printf '$oldpkg%%%P\\n' \\)"] "\n"]
+assert_complete_dir $files "upgradepkg $oldpkg%" $dir $test
+
+
+sync_after_int
+
+
teardown