* [PATCH BlueZ] zsh: use the correct completion return value
@ 2025-02-07 5:23 Ronan Pigott
2025-02-07 6:33 ` [BlueZ] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: Ronan Pigott @ 2025-02-07 5:23 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Ronan Pigott
The return value of a completion function is significant, if we fail to
return success additional completers may be invoked when they otherwise
should not be.
Also cleanup up the zsh completion, removing the redundant definition of
_bluetoothctl and using the _call_program helper where appropriate.
---
completion/zsh/_bluetoothctl | 127 ++++++++++++++++-------------------
1 file changed, 58 insertions(+), 69 deletions(-)
diff --git a/completion/zsh/_bluetoothctl b/completion/zsh/_bluetoothctl
index 610ca2b8d59c..734036e596c1 100644
--- a/completion/zsh/_bluetoothctl
+++ b/completion/zsh/_bluetoothctl
@@ -1,97 +1,86 @@
#compdef bluetoothctl
-__bluetoothctl() {
- bluetoothctl "$@" 2>/dev/null
-}
-
_bluezcomp_controller() {
local -a controllers
- bluetoothctl list |
+ _call_program bluez-controller bluetoothctl list |
while read _ MAC NAME; do
- controllers+="${MAC//:/\\:}:${NAME//:/\\:}"
+ controllers+=("${MAC//:/\\:}:${NAME//:/\\:}")
done
_describe -t controllers 'controller' controllers
}
_bluezcomp_device() {
local -a devices
- bluetoothctl devices |
+ _call_program bluez-device bluetoothctl devices |
while read _ MAC NAME; do
- devices+="${MAC//:/\\:}:${NAME//:/\\:}"
+ devices+=("${MAC//:/\\:}:${NAME//:/\\:}")
done
_describe -t devices 'device' devices
}
_bluezcomp_agentcap() {
- local -a agent_options=(${(f)"$(__bluetoothctl agent help)"})
- agent_options=( "${(@)agent_options:#(on|off)}" )
- compadd -a agent_options
+ local -a agent_options=(${${(@f)"$(_call_program bluez-agent bluetoothctl agent help)"}:#(on|off)})
+ compadd "$@" - -a agent_options
}
_bluetoothctl_agent() {
- local -a agent_options=(${(f)"$(__bluetoothctl agent help)"})
- agent_options+=help
- compadd -a agent_options
+ local -a agent_options=(help ${(@f)"$(_call_program bluez-agent bluetoothctl agent help)"})
+ compadd "$@" - -a agent_options
}
-_bluetoothctl_advertise() {
- local -a ad_options=(${(f)"$(__bluetoothctl advertise help)"})
- ad_options+=help
- compadd -a ad_options
-}
+local -a toggle_commands=(
+ "discoverable" "pairable" "power" "scan"
+)
-_bluetoothctl() {
- local -a toggle_commands=(
- "discoverable" "pairable" "power" "scan"
- )
+local -a controller_commands=(
+ "select" "show"
+)
- local -a controller_commands=(
- "select" "show"
- )
+local -a device_commands=(
+ "block" "connect" "disconnect" "info"
+ "pair" "remove" "trust" "unblock" "untrust"
+)
- local -a device_commands=(
- "block" "connect" "disconnect" "info"
- "pair" "remove" "trust" "unblock" "untrust"
- )
+# Other commands may be handled by _bluetoothctl_$command
+local -a all_commands=( "${(@f)$(_call_program bluetoothctl bluetoothctl --zsh-complete help)}" )
- # Other commands may be handled by _bluetoothctl_$command
- local -a all_commands=( "${(@f)$(__bluetoothctl --zsh-complete help)}" )
+local curcontext=$curcontext state line ret=1
+_arguments -C \
+ + '(info)' \
+ {-h,--help}'[Show help message and exit]' \
+ {-v,--version}'--version[Show version info and exit]' \
+ + 'mod' \
+ '(info)'{-a+,--agent=}'[Register agent handler]:agent:_bluezcomp_agentcap' \
+ '(info)'{-t,--timeout}'[Timeout in seconds for non-interactive mode]' \
+ '(info)'{-m,--monitor}'[Enable monitor output]' \
+ + 'command' \
+ '(info):command:->command' \
+ '(info):: :->argument'
- local curcontext=$curcontext state line ret=1
- _arguments -C \
- + '(info)' \
- {-h,--help}'[Show help message and exit]' \
- {-v,--version}'--version[Show version info and exit]' \
- + 'mod' \
- '(info)'{-a+,--agent=}'[Register agent handler]:agent:_bluezcomp_agentcap' \
- '(info)'{-t,--timeout}'[Timeout in seconds for non-interactive mode]' \
- '(info)'{-m,--monitor}'[Enable monitor output]' \
- + 'command' \
- '(info):command:->command' \
- '(info):: :->argument'
-
- if [[ $state == "command" ]]; then
- _describe -t commands 'command' all_commands
- elif [[ $state == "argument" ]]; then
- if (( ! ${"${(@)all_commands%%:*}"[(I)${line[1]}]} )); then
- _message "Unknown bluetoothctl command: $line[1]"
- return 1;
- fi
-
- curcontext="${curcontext%:*:*}:bluetoothctl-$line[1]:"
- if ! _call_function ret _bluetoothctl_$line[1]; then
- case $line[1] in
- (${(~j.|.)toggle_commands})
- compadd on off
- ;;
- (${(~j.|.)device_commands})
- _bluezcomp_device
- ;;
- (${(~j.|.)controller_commands})
- _bluezcomp_controller
- ;;
- esac
- fi
- return ret
+if [[ $state == "command" ]]; then
+ _describe -t commands 'command' all_commands
+elif [[ $state == "argument" ]]; then
+ if (( ! ${"${(@)all_commands%%:*}"[(I)${line[1]}]} )); then
+ _message "Unknown bluetoothctl command: $line[1]"
+ return 1;
fi
-} && _bluetoothctl
+
+ curcontext="${curcontext%:*:*}:bluetoothctl-$line[1]:"
+ if ! _call_function ret _bluetoothctl_$line[1]; then
+ case $line[1] in
+ (advertise)
+ compadd - help on off type && ret=0
+ ;;
+ (${(~j.|.)toggle_commands})
+ compadd on off && ret=0
+ ;;
+ (${(~j.|.)device_commands})
+ _bluezcomp_device && ret=0
+ ;;
+ (${(~j.|.)controller_commands})
+ _bluezcomp_controller && ret=0
+ ;;
+ esac
+ fi
+ return ret
+fi
--
2.48.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-02-07 6:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-07 5:23 [PATCH BlueZ] zsh: use the correct completion return value Ronan Pigott
2025-02-07 6:33 ` [BlueZ] " bluez.test.bot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.