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

Eli Schwartz eschwartz at archlinux.org
Fri Sep 7 15:58:52 UTC 2018


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 at archlinux.org>
---
 scripts/completion/bash_completion.in | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

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
-- 
2.18.0


More information about the pacman-dev mailing list