[pacman-dev,1/2] bash-completion: don't complete filenames when they're not wanted

Message ID 20180907155853.20191-1-eschwartz@archlinux.org
State Accepted, archived
Headers show
Series
  • [pacman-dev,1/2] bash-completion: don't complete filenames when they're not wanted
Related show

Commit Message

Eli Schwartz Sept. 7, 2018, 3:58 p.m. UTC
Filename completion should only be generated for makepkg, when using the
options -p or --config... which means we should offer option completions
by default.

Filename completion for pacman, should not be generated when using -Qu,
or -F without -o.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 scripts/completion/bash_completion.in | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

Comments

Allan McRae Oct. 21, 2018, 9:33 a.m. UTC | #1
On 8/9/18 1:58 am, Eli Schwartz wrote:
> Filename completion should only be generated for makepkg, when using the
> options -p or --config... which means we should offer option completions
> by default.
> 
> Filename completion for pacman, should not be generated when using -Qu,
> or -F without -o.
> 
> Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>

This looks OK and passed a very quick test.

A

Patch

diff --git a/scripts/completion/bash_completion.in b/scripts/completion/bash_completion.in
index d99fba53..31b41f71 100644
--- a/scripts/completion/bash_completion.in
+++ b/scripts/completion/bash_completion.in
@@ -71,10 +71,13 @@  _pacman_key() {
 }
 
 _makepkg() {
+  compopt +o default
   local cur opts prev
   COMPREPLY=()
   _get_comp_words_by_ref cur prev
-  if [[ $cur = -* && ! $prev =~ ^-(-(config|help|key|version)$|\w*[Vhp]) ]]; then
+  if [[ $prev = @(-p|--config) ]]; then
+    compopt -o default
+  elif [[ ! $prev =~ ^-(-(config|help|key|version)$|\w*[Vh]) ]]; then
     opts=('allsource asdeps check clean cleanbuild config force geninteg help
            holdver ignorearch install key log needed noarchive nobuild nocheck
            nocolor noconfirm nodeps noextract noprepare noprogressbar nosign
@@ -101,6 +104,7 @@  _pacman_repo_list() {
 }
 
 _pacman() {
+  compopt -o default
   local common core cur database files prev query remove sync upgrade o
   COMPREPLY=()
   _get_comp_words_by_ref cur prev
@@ -131,12 +135,14 @@  _pacman() {
       D|R)
           _pacman_pkg Qq;;
       F)
-          _arch_incomp 'l list'   && _pacman_pkg Slq
-          ;;
+        { _arch_incomp 'l list'   && _pacman_pkg Slq ; }       ||
+          _arch_incomp 'o owns'   ||
+          compopt +o default;;
       Q)
         { _arch_incomp 'g groups' && _pacman_pkg Qg sort; }    ||
         { _arch_incomp 'p file'   && _pacman_file; }           ||
-          _arch_incomp 'o owns'   || _arch_incomp 'u upgrades' ||
+        { _arch_incomp 'u upgrades' && compopt +o default; }   ||
+          _arch_incomp 'o owns'   ||
           _pacman_pkg Qq;;
       S)
         { _arch_incomp 'g groups' && _pacman_pkg Sg; }      ||
@@ -153,8 +159,8 @@  _pacman_file() {
   compopt -o filenames; _filedir 'pkg.tar*'
 }
 
-complete -F _pacman -o default pacman
-complete -F _makepkg -o default makepkg
+complete -F _pacman pacman
+complete -F _makepkg makepkg
 complete -F _pacman_key -o default pacman-key
 
 # ex:et ts=2 sw=2 ft=sh