mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-25 06:22:15 +02: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() { | __app() { | ||||||
|  |   local gapplication_binary | ||||||
|  |   gapplication_binary="$1" | ||||||
|  |  | ||||||
|   case "${COMP_CWORD}" in |   case "${COMP_CWORD}" in | ||||||
|     1) |     1) | ||||||
|       # shellcheck disable=SC2207 |       # shellcheck disable=SC2207 | ||||||
| @@ -18,7 +21,7 @@ __app() { | |||||||
|       case "${COMP_WORDS[1]}" in |       case "${COMP_WORDS[1]}" in | ||||||
|         launch|action|list-actions) |         launch|action|list-actions) | ||||||
|           # shellcheck disable=SC2207 |           # shellcheck disable=SC2207 | ||||||
|           COMPREPLY=($(compgen -W "$(gapplication list-apps)" -- "${COMP_WORDS[2]}")) |           COMPREPLY=($(compgen -W "$("$gapplication_binary" list-apps)" -- "${COMP_WORDS[2]}")) | ||||||
|           return 0 |           return 0 | ||||||
|           ;; |           ;; | ||||||
|  |  | ||||||
| @@ -36,7 +39,7 @@ __app() { | |||||||
|       # Word 3 is the action name.  This is the only one we can help with. |       # Word 3 is the action name.  This is the only one we can help with. | ||||||
|       if [ "${COMP_CWORD}" == 3 ]; then |       if [ "${COMP_CWORD}" == 3 ]; then | ||||||
|         # shellcheck disable=SC2207 |         # 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 |         return 0 | ||||||
|       else |       else | ||||||
|         COMPREPLY=() |         COMPREPLY=() | ||||||
|   | |||||||
| @@ -8,12 +8,15 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| __gdbus() { | __gdbus() { | ||||||
|  |     local gdbus_binary | ||||||
|  |     gdbus_binary="$1" | ||||||
|  |  | ||||||
|     local IFS=$'\n' |     local IFS=$'\n' | ||||||
|     local cur |     local cur | ||||||
|     cur="$(_get_cword :)" |     cur="$(_get_cword :)" | ||||||
|  |  | ||||||
|     local suggestions |     local suggestions | ||||||
|     suggestions="$(gdbus complete "${COMP_LINE}" "${COMP_POINT}")" |     suggestions="$("$gdbus_binary" complete "${COMP_LINE}" "${COMP_POINT}")" | ||||||
|     # shellcheck disable=SC2207 |     # shellcheck disable=SC2207 | ||||||
|     COMPREPLY=($(compgen -W "$suggestions" -- "$cur")) |     COMPREPLY=($(compgen -W "$suggestions" -- "$cur")) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -37,6 +37,8 @@ __gio_has_common_prefix() { | |||||||
|  |  | ||||||
| # Complete file location | # Complete file location | ||||||
| __gio_location() { | __gio_location() { | ||||||
|  |     local gio_binary | ||||||
|  |     gio_binary="$1" | ||||||
|     # Prevent breaking on colons, we have to work with uris |     # Prevent breaking on colons, we have to work with uris | ||||||
|     local cur |     local cur | ||||||
|     _get_comp_words_by_ref -n : cur |     _get_comp_words_by_ref -n : cur | ||||||
| @@ -59,7 +61,7 @@ __gio_location() { | |||||||
|  |  | ||||||
|         # Use only matching mounts |         # Use only matching mounts | ||||||
|         [[ "$mount" =~ ^"$cur" && "$mount" != "$cur" ]] && mounts+=("$mount") |         [[ "$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. "\ " -> " ") |     # Workaround to unescape dir name (e.g. "\ " -> " ") | ||||||
|     local -a tmp="( ${dir} )" |     local -a tmp="( ${dir} )" | ||||||
| @@ -88,7 +90,7 @@ __gio_location() { | |||||||
|             files+=("$path") |             files+=("$path") | ||||||
|             names+=("$escaped_name") |             names+=("$escaped_name") | ||||||
|         fi |         fi | ||||||
|     done < <(gio list -hl "$unescaped_dir" 2> /dev/null) |     done < <("$gio_binary" list -hl "$unescaped_dir" 2> /dev/null) | ||||||
|  |  | ||||||
|     COMPREPLY=("${files[@]}" "${mounts[@]}") |     COMPREPLY=("${files[@]}" "${mounts[@]}") | ||||||
|  |  | ||||||
| @@ -118,7 +120,7 @@ __gio() { | |||||||
|     fi |     fi | ||||||
|  |  | ||||||
|     # Complete file locations |     # Complete file locations | ||||||
|     __gio_location |     __gio_location "$1" | ||||||
| } | } | ||||||
|  |  | ||||||
| #################################################################################################### | #################################################################################################### | ||||||
|   | |||||||
| @@ -7,7 +7,8 @@ | |||||||
| #################################################################################################### | #################################################################################################### | ||||||
|  |  | ||||||
| __gresource() { | __gresource() { | ||||||
|   local choices coffset |   local choices coffset gresource_binary | ||||||
|  |   gresource_binary="$1" | ||||||
|  |  | ||||||
|   if [ "${COMP_CWORD}" -gt 2 ]; then |   if [ "${COMP_CWORD}" -gt 2 ]; then | ||||||
|       if [ "${COMP_WORDS[1]}" = --section ]; then |       if [ "${COMP_WORDS[1]}" = --section ]; then | ||||||
| @@ -45,7 +46,7 @@ __gresource() { | |||||||
|     3) |     3) | ||||||
|       case "${COMP_WORDS[$((coffset+1))]}" in |       case "${COMP_WORDS[$((coffset+1))]}" in | ||||||
|         list|details|extract) |         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 |       esac | ||||||
|       ;; |       ;; | ||||||
|   | |||||||
| @@ -7,7 +7,8 @@ | |||||||
| #################################################################################################### | #################################################################################################### | ||||||
|  |  | ||||||
| __gsettings() { | __gsettings() { | ||||||
|   local choices coffset schemadir="" |   local choices coffset schemadir="" gsettings_binary | ||||||
|  |   gsettings_binary="$1" | ||||||
|  |  | ||||||
|   if [ "${COMP_CWORD}" -gt 2 ]; then |   if [ "${COMP_CWORD}" -gt 2 ]; then | ||||||
|       if [ "${COMP_WORDS[1]}" = --schemadir ]; 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' |           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) |         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) |         list-schemas) | ||||||
|           # shellcheck disable=SC2207 |           # shellcheck disable=SC2207 | ||||||
| @@ -47,7 +48,7 @@ __gsettings() { | |||||||
|           ;; |           ;; | ||||||
|  |  | ||||||
|         get|range|set|reset|writable|monitor|describe) |         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 |       esac | ||||||
|       ;; |       ;; | ||||||
| @@ -55,11 +56,11 @@ __gsettings() { | |||||||
|     3) |     3) | ||||||
|       case "${COMP_WORDS[$((coffset+1))]}" in |       case "${COMP_WORDS[$((coffset+1))]}" in | ||||||
|         set) |         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) |         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 |       esac | ||||||
|       ;; |       ;; | ||||||
| @@ -68,7 +69,7 @@ __gsettings() { | |||||||
|       case "${COMP_WORDS[$((coffset+2))]}" in |       case "${COMP_WORDS[$((coffset+2))]}" in | ||||||
|         set) |         set) | ||||||
|           # shellcheck disable=SC2207 |           # 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 |           case "${range[0]}" in | ||||||
|             enum) |             enum) | ||||||
|               unset 'range[0]' |               unset 'range[0]' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user