mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 16:32:18 +01:00 
			
		
		
		
	completion: Invoke the command being completed
As suggested by Ville Skyttä in https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4012#note_2084405, make sure to invoke the copy of the command which is being completed when asking for completions of a given subcommand. This avoids accidentally invoking any old `gdbus`/`gresource`/etc. binary which is hanging around in another part of `$PATH`. Signed-off-by: Philip Withnall <pwithnall@gnome.org>
This commit is contained in:
		| @@ -7,6 +7,9 @@ | ||||
| #################################################################################################### | ||||
|  | ||||
| __app() { | ||||
|   local gapplication_binary | ||||
|   gapplication_binary="$1" | ||||
|  | ||||
|   case "${COMP_CWORD}" in | ||||
|     1) | ||||
|       # shellcheck disable=SC2207 | ||||
| @@ -18,7 +21,7 @@ __app() { | ||||
|       case "${COMP_WORDS[1]}" in | ||||
|         launch|action|list-actions) | ||||
|           # shellcheck disable=SC2207 | ||||
|           COMPREPLY=($(compgen -W "$(gapplication list-apps)" -- "${COMP_WORDS[2]}")) | ||||
|           COMPREPLY=($(compgen -W "$("$gapplication_binary" list-apps)" -- "${COMP_WORDS[2]}")) | ||||
|           return 0 | ||||
|           ;; | ||||
|  | ||||
| @@ -36,7 +39,7 @@ __app() { | ||||
|       # Word 3 is the action name.  This is the only one we can help with. | ||||
|       if [ "${COMP_CWORD}" == 3 ]; then | ||||
|         # shellcheck disable=SC2207 | ||||
|         COMPREPLY=($(compgen -W "$(gapplication list-actions "${COMP_WORDS[2]}")" -- "${COMP_WORDS[3]}")) | ||||
|         COMPREPLY=($(compgen -W "$("$gapplication_binary" list-actions "${COMP_WORDS[2]}")" -- "${COMP_WORDS[3]}")) | ||||
|         return 0 | ||||
|       else | ||||
|         COMPREPLY=() | ||||
|   | ||||
| @@ -8,12 +8,15 @@ | ||||
|  | ||||
|  | ||||
| __gdbus() { | ||||
|     local gdbus_binary | ||||
|     gdbus_binary="$1" | ||||
|  | ||||
|     local IFS=$'\n' | ||||
|     local cur | ||||
|     cur="$(_get_cword :)" | ||||
|  | ||||
|     local suggestions | ||||
|     suggestions="$(gdbus complete "${COMP_LINE}" "${COMP_POINT}")" | ||||
|     suggestions="$("$gdbus_binary" complete "${COMP_LINE}" "${COMP_POINT}")" | ||||
|     # shellcheck disable=SC2207 | ||||
|     COMPREPLY=($(compgen -W "$suggestions" -- "$cur")) | ||||
|  | ||||
|   | ||||
| @@ -37,6 +37,8 @@ __gio_has_common_prefix() { | ||||
|  | ||||
| # Complete file location | ||||
| __gio_location() { | ||||
|     local gio_binary | ||||
|     gio_binary="$1" | ||||
|     # Prevent breaking on colons, we have to work with uris | ||||
|     local cur | ||||
|     _get_comp_words_by_ref -n : cur | ||||
| @@ -59,7 +61,7 @@ __gio_location() { | ||||
|  | ||||
|         # Use only matching mounts | ||||
|         [[ "$mount" =~ ^"$cur" && "$mount" != "$cur" ]] && mounts+=("$mount") | ||||
|     done < <(gio mount -li | sed -n -r 's/^ *(default_location|activation_root)=(.*)$/\2/p' | sort -u) | ||||
|     done < <("$gio_binary" mount -li | sed -n -r 's/^ *(default_location|activation_root)=(.*)$/\2/p' | sort -u) | ||||
|  | ||||
|     # Workaround to unescape dir name (e.g. "\ " -> " ") | ||||
|     local -a tmp="( ${dir} )" | ||||
| @@ -88,7 +90,7 @@ __gio_location() { | ||||
|             files+=("$path") | ||||
|             names+=("$escaped_name") | ||||
|         fi | ||||
|     done < <(gio list -hl "$unescaped_dir" 2> /dev/null) | ||||
|     done < <("$gio_binary" list -hl "$unescaped_dir" 2> /dev/null) | ||||
|  | ||||
|     COMPREPLY=("${files[@]}" "${mounts[@]}") | ||||
|  | ||||
| @@ -118,7 +120,7 @@ __gio() { | ||||
|     fi | ||||
|  | ||||
|     # Complete file locations | ||||
|     __gio_location | ||||
|     __gio_location "$1" | ||||
| } | ||||
|  | ||||
| #################################################################################################### | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| #################################################################################################### | ||||
|  | ||||
| __gresource() { | ||||
|   local choices coffset | ||||
|   local choices coffset gresource_binary | ||||
|   gresource_binary="$1" | ||||
|  | ||||
|   if [ "${COMP_CWORD}" -gt 2 ]; then | ||||
|       if [ "${COMP_WORDS[1]}" = --section ]; then | ||||
| @@ -45,7 +46,7 @@ __gresource() { | ||||
|     3) | ||||
|       case "${COMP_WORDS[$((coffset+1))]}" in | ||||
|         list|details|extract) | ||||
|           choices="$(gresource list "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null | sed -e 's.$. .')" | ||||
|           choices="$("$gresource_binary" list "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null | sed -e 's.$. .')" | ||||
|           ;; | ||||
|       esac | ||||
|       ;; | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| #################################################################################################### | ||||
|  | ||||
| __gsettings() { | ||||
|   local choices coffset schemadir="" | ||||
|   local choices coffset schemadir="" gsettings_binary | ||||
|   gsettings_binary="$1" | ||||
|  | ||||
|   if [ "${COMP_CWORD}" -gt 2 ]; then | ||||
|       if [ "${COMP_WORDS[1]}" = --schemadir ]; then | ||||
| @@ -38,7 +39,7 @@ __gsettings() { | ||||
|           choices=$'list-schemas\nlist-relocatable-schemas\nlist-keys\nlist-children\nlist-recursively\nget\nrange\nset\nreset\nreset-recursively\nwritable\nmonitor' | ||||
|           ;; | ||||
|         list-keys|list-children|list-recursively|reset-recursively) | ||||
|           choices="$(gsettings "$schemadir" list-schemas 2> /dev/null)"$'\n'"$(gsettings "$schemadir" list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')" | ||||
|           choices="$("$gsettings_binary" "$schemadir" list-schemas 2> /dev/null)"$'\n'"$("$gsettings_binary" "$schemadir" list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')" | ||||
|           ;; | ||||
|         list-schemas) | ||||
|           # shellcheck disable=SC2207 | ||||
| @@ -47,7 +48,7 @@ __gsettings() { | ||||
|           ;; | ||||
|  | ||||
|         get|range|set|reset|writable|monitor|describe) | ||||
|           choices="$(gsettings "$schemadir" list-schemas 2> /dev/null | sed -e 's.$. .')"$'\n'"$(gsettings "$schemadir" list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')" | ||||
|           choices="$("$gsettings_binary" "$schemadir" list-schemas 2> /dev/null | sed -e 's.$. .')"$'\n'"$("$gsettings_binary" "$schemadir" list-relocatable-schemas 2> /dev/null | sed -e 's.$.:/.')" | ||||
|           ;; | ||||
|       esac | ||||
|       ;; | ||||
| @@ -55,11 +56,11 @@ __gsettings() { | ||||
|     3) | ||||
|       case "${COMP_WORDS[$((coffset+1))]}" in | ||||
|         set) | ||||
|           choices="$(gsettings "$schemadir" list-keys "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null | sed -e 's.$. .')" | ||||
|           choices="$("$gsettings_binary" "$schemadir" list-keys "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null | sed -e 's.$. .')" | ||||
|           ;; | ||||
|  | ||||
|         get|range|reset|writable|monitor|describe) | ||||
|           choices="$(gsettings "$schemadir" list-keys "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null)" | ||||
|           choices="$("$gsettings_binary" "$schemadir" list-keys "${COMP_WORDS[$((coffset+2))]}" 2> /dev/null)" | ||||
|           ;; | ||||
|       esac | ||||
|       ;; | ||||
| @@ -68,7 +69,7 @@ __gsettings() { | ||||
|       case "${COMP_WORDS[$((coffset+2))]}" in | ||||
|         set) | ||||
|           # shellcheck disable=SC2207 | ||||
|           range=($(gsettings "$schemadir" range "${COMP_WORDS[$((coffset+2))]}" "${COMP_WORDS[$((coffset+3))]}" 2> /dev/null)) | ||||
|           range=($("$gsettings_binary" "$schemadir" range "${COMP_WORDS[$((coffset+2))]}" "${COMP_WORDS[$((coffset+3))]}" 2> /dev/null)) | ||||
|           case "${range[0]}" in | ||||
|             enum) | ||||
|               unset 'range[0]' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user