diff options
author | John R. Lenton <jlenton@gmail.com> | 2016-11-30 09:28:27 +0000 |
---|---|---|
committer | John R. Lenton <jlenton@gmail.com> | 2016-11-30 11:15:08 +0000 |
commit | 6761dae5d0c372d132b0df91753120b59e30fd0e (patch) | |
tree | 59097275ca1b16577a1c999fcfb074a1277344c6 | |
parent | 7d5234ab88b4cd6b172f13d0912c585983c3410b (diff) | |
download | apt-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/apt | 4 |
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) |