summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn R. Lenton <jlenton@gmail.com>2016-11-30 09:28:27 +0000
committerJohn R. Lenton <jlenton@gmail.com>2016-11-30 11:15:08 +0000
commit6761dae5d0c372d132b0df91753120b59e30fd0e (patch)
tree59097275ca1b16577a1c999fcfb074a1277344c6
parent7d5234ab88b4cd6b172f13d0912c585983c3410b (diff)
downloadapt-6761dae5d0c372d132b0df91753120b59e30fd0e.tar.gz
bash-completion: Only complete understood file paths for install
Previouosly apt's bash completion was such that, given $ mkdir xyzzz $ touch xyzzy.deb xyzzx.two.deb you'd get $ apt install xyzz<tab> xyzzx.two.deb xyzzz/ $ apt install /tmp/foo/xyzz<tab> xyzzx.two.deb xyzzz/ this is inconsistent (xyzzx.two.deb is listed but not xyzzy.deb), but worse than that it offered things that apt would not actually recognise as candidates for install: $ sudo apt install xyzzx.two.deb Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package xyzzx.two.deb E: Couldn't find any package by glob 'xyzzx.two.deb' E: Couldn't find any package by regex 'xyzzx.two.deb' With this small (trival, really) change, apt's bash completion will only offer things apt understands, and won't recquire an aditional period in the filename to offer it: $ apt install xyzz<tab>^C $ # (no completions!) $ apt install ./xyzz<tab> xyzzx.two.deb xyzzy.deb xyzzz/ $ apt install /tmp/foo/xyzz xyzzx.two.deb xyzzy.deb xyzzz/ fixes #28 LP: #1645815
-rw-r--r--completions/bash/apt4
1 files changed, 3 insertions, 1 deletions
diff --git a/completions/bash/apt b/completions/bash/apt
index 451004982..f7dd61f3b 100644
--- a/completions/bash/apt
+++ b/completions/bash/apt
@@ -189,7 +189,9 @@ _apt()
install)
COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" \
2> /dev/null ) )
- _filedir "*.deb"
+ if [[ "$cur" == ./* || "$cur" == /* ]]; then
+ _filedir "deb"
+ fi
return 0
;;
source|build-dep|showsrc|policy)