From 037a13cde0124fc670bf6b7ad9034ec0c9865594 Mon Sep 17 00:00:00 2001 From: Matthew Leeds Date: Sat, 9 Sep 2017 02:33:22 -0700 Subject: [PATCH] completion: Make filename completions smarter Many flatpak commands only work on *.flatpak or *.flatpakref files, so the bash auto completion showing every file is distracting and unnecessary. This commit makes flatpak only show relevant files when possible by using the "-G globpattern" compgen option. --- app/flatpak-builtins-build-bundle.c | 2 +- app/flatpak-builtins-build-import-bundle.c | 2 +- app/flatpak-builtins-document-export.c | 2 +- app/flatpak-builtins-document-info.c | 2 +- app/flatpak-builtins-document-unexport.c | 2 +- common/flatpak-utils.c | 7 +++--- common/flatpak-utils.h | 3 ++- completion/flatpak | 29 +++++++++++++--------- 8 files changed, 28 insertions(+), 21 deletions(-) diff --git a/app/flatpak-builtins-build-bundle.c b/app/flatpak-builtins-build-bundle.c index 6c42c9b2..6a12e9b2 100644 --- a/app/flatpak-builtins-build-bundle.c +++ b/app/flatpak-builtins-build-bundle.c @@ -544,7 +544,7 @@ flatpak_complete_build_bundle (FlatpakCompletion *completion) break; case 2: /* FILENAME */ - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_BUNDLE_FILE"); break; } diff --git a/app/flatpak-builtins-build-import-bundle.c b/app/flatpak-builtins-build-import-bundle.c index 047d6d4e..7f0c3094 100644 --- a/app/flatpak-builtins-build-import-bundle.c +++ b/app/flatpak-builtins-build-import-bundle.c @@ -264,7 +264,7 @@ flatpak_complete_build_import (FlatpakCompletion *completion) break; case 2: /* FILENAME */ - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_BUNDLE_FILE"); break; } diff --git a/app/flatpak-builtins-document-export.c b/app/flatpak-builtins-document-export.c index 75d101a8..1a16c7b0 100644 --- a/app/flatpak-builtins-document-export.c +++ b/app/flatpak-builtins-document-export.c @@ -237,7 +237,7 @@ flatpak_complete_document_export (FlatpakCompletion *completion) flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_FILE"); break; } diff --git a/app/flatpak-builtins-document-info.c b/app/flatpak-builtins-document-info.c index 38c35f1b..bd7edc68 100644 --- a/app/flatpak-builtins-document-info.c +++ b/app/flatpak-builtins-document-info.c @@ -148,7 +148,7 @@ flatpak_complete_document_info (FlatpakCompletion *completion) flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_FILE"); break; } diff --git a/app/flatpak-builtins-document-unexport.c b/app/flatpak-builtins-document-unexport.c index 6fde3b61..8efeeb76 100644 --- a/app/flatpak-builtins-document-unexport.c +++ b/app/flatpak-builtins-document-unexport.c @@ -112,7 +112,7 @@ flatpak_complete_document_unexport (FlatpakCompletion *completion) flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_FILE"); break; } diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index 8f7bfcea..63d455ab 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -5668,10 +5668,11 @@ is_word_separator (char c) } void -flatpak_complete_file (FlatpakCompletion *completion) +flatpak_complete_file (FlatpakCompletion *completion, + const char *file_type) { flatpak_completion_debug ("completing FILE"); - g_print ("%s\n", "__FLATPAK_FILE"); + g_print ("%s\n", file_type); } void @@ -5928,7 +5929,7 @@ flatpak_complete_options (FlatpakCompletion *completion, } else if (strcmp (e->arg_description, "FILE") == 0) { - flatpak_complete_file (completion); + flatpak_complete_file (completion, "__FLATPAK_FILE"); } else flatpak_complete_word (completion, "%s", prefix); diff --git a/common/flatpak-utils.h b/common/flatpak-utils.h index 48a84580..102c9650 100644 --- a/common/flatpak-utils.h +++ b/common/flatpak-utils.h @@ -673,7 +673,8 @@ void flatpak_complete_partial_ref (FlatpakCompletion *completion, const char *only_arch, FlatpakDir *dir, const char *remote); -void flatpak_complete_file (FlatpakCompletion *completion); +void flatpak_complete_file (FlatpakCompletion *completion, + const char *file_type); void flatpak_complete_dir (FlatpakCompletion *completion); void flatpak_complete_options (FlatpakCompletion *completion, GOptionEntry *entries); diff --git a/completion/flatpak b/completion/flatpak index ee4605ec..b90ef092 100755 --- a/completion/flatpak +++ b/completion/flatpak @@ -11,19 +11,24 @@ __flatpak() { COMPREPLY=() for i in "${!RES[@]}"; do if [[ "${RES[$i]}" = "__FLATPAK_FILE" ]]; then - if [[ "${cur}" = "=" ]]; then - CUR="" - else - CUR="${cur}" - fi - COMPREPLY=("${COMPREPLY[@]}" $(compgen -f -- "${CUR}") ) + declare -a COMPGEN_OPTS=('-f') + elif [[ "${RES[$i]}" = "__FLATPAK_BUNDLE_FILE" ]]; then + declare -a COMPGEN_OPTS=('-f' '-G' '*.flatpak') + elif [[ "${RES[$i]}" = "__FLATPAK_BUNDLE_OR_REF_FILE" ]]; then + declare -a COMPGEN_OPTS=('-f' '-G' '*.flatpak@(|ref)') elif [[ "${RES[$i]}" = "__FLATPAK_DIR" ]]; then - if [[ "${cur}" = "=" ]]; then - CUR="" - else - CUR="${cur}" - fi - COMPREPLY=("${COMPREPLY[@]}" $(compgen -d -- "${CUR}") ) + declare -a COMPGEN_OPTS=('-d') + else + declare -a COMPGEN_OPTS=() + fi + + if [[ ${#COMPGEN_OPTS[@]} -ne 0 ]]; then + if [[ "${cur}" = "=" ]]; then + CUR="" + else + CUR="${cur}" + fi + COMPREPLY=("${COMPREPLY[@]}" $(compgen ${COMPGEN_OPTS[@]} -- "${CUR}") ) else COMPREPLY=("${COMPREPLY[@]}" "${RES[$i]}") fi