diff options
Diffstat (limited to 'shell-completion')
-rw-r--r-- | shell-completion/zsh/_pulseaudio | 88 |
1 files changed, 34 insertions, 54 deletions
diff --git a/shell-completion/zsh/_pulseaudio b/shell-completion/zsh/_pulseaudio index ef279f19f..243c1b4fb 100644 --- a/shell-completion/zsh/_pulseaudio +++ b/shell-completion/zsh/_pulseaudio @@ -1,8 +1,17 @@ #compdef pulseaudio pactl pacmd pacat paplay parec parecord padsp pasuspender +_set_remote() { + for (( i = 0; i < ${#words[@]}; i++ )) do + if [[ ${words[$i]} == -s ]]; then + remote="-s ${words[$i+1]}" + break; + fi + done +} + _devices() { local -a _device_list - local cmd _device _device_description _remote_cmd + local cmd _device _device_description if [[ $service == pactl || $service == pacmd ]]; then case $words[$((CURRENT - 1))] in @@ -55,15 +64,8 @@ _devices() { fi - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done - for target in $cmd; do - for device_info in ${(ps:\n\n:)"$(_call_program device_tag "pactl $_remote_cmd list $target 2> /dev/null")"}; do + for device_info in ${(ps:\n\n:)"$(_call_program device_tag "pactl $remote list $target 2> /dev/null")"}; do for line in ${(f)device_info}; do if [[ $target == (sink-inputs|source-outputs) ]]; then if [[ $line == (Sink*Input|Source*Output)* ]]; then @@ -98,18 +100,11 @@ _devices() { _profiles() { local -a _profile_list - local _current_card _raw_profiles _profile_name _profile_description _remote_cmd + local _current_card _raw_profiles _profile_name _profile_description _current_card=$words[$((CURRENT - 1))] - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done - - for card in ${(ps:\n\n:)"$(_call_program profiles_tag "pactl $_remote_cmd list cards 2> /dev/null")"}; do + for card in ${(ps:\n\n:)"$(_call_program profiles_tag "pactl $remote list cards 2> /dev/null")"}; do if [[ $card == *$_current_card* ]]; then _raw_profiles=${card##*Profiles:} _raw_profiles=${_raw_profiles%%Active Profile:*} @@ -130,7 +125,7 @@ _profiles() { _ports() { local -a _port_list - local _raw_ports _port_name _port_description _current_device _remote_cmd + local _raw_ports _port_name _port_description _current_device case $words[$((CURRENT - 2))] in set-sink-port) cmd="sinks";; @@ -140,14 +135,7 @@ _ports() { _current_device=$words[$((CURRENT - 1))] - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done - - for device in ${(ps:\n\n:)"$(_call_program port_tag "pactl $_remote_cmd list $cmd 2> /dev/null")"}; do + for device in ${(ps:\n\n:)"$(_call_program port_tag "pactl $remote list $cmd 2> /dev/null")"}; do if [[ $device == *Ports:* && $device == *$_current_device* ]]; then _raw_ports=${device##*Ports:} _raw_ports=${_raw_ports%%Active Port:*} @@ -168,16 +156,9 @@ _ports() { _cards(){ local -a _card_list - local _card _cad_name _remote_cmd - - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done + local _card _cad_name - for card_info in ${(ps:\n\n:)"$(_call_program card_tag "pactl $_remote_cmd list cards 2> /dev/null")"}; do + for card_info in ${(ps:\n\n:)"$(_call_program card_tag "pactl $remote list cards 2> /dev/null")"}; do for line in ${(f)card_info}; do if [[ $line == *Name:* ]]; then _card=${line#*: } @@ -201,16 +182,9 @@ _all_modules(){ } _loaded_modules(){ - local -a _loaded_modules_list _remote_cmd + local -a _loaded_modules_list - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done - - for module in ${(f)"$(_call_program modules_tag "pactl $_remote_cmd list modules short 2> /dev/null")"}; do + for module in ${(f)"$(_call_program modules_tag "pactl $remote list modules short 2> /dev/null")"}; do _loaded_modules_list+=(${${(ps:\t:)module}[1]}:${${(ps:\t:)module}[2]}) done _describe 'module list' _loaded_modules_list @@ -226,16 +200,9 @@ _resample_methods() { _clients() { local -a _client_list - local _client _client_description _remote_cmd + local _client _client_description - for (( i = 0; i < ${#words[@]}; i++ )) do - if [[ ${words[$i]} == -s ]]; then - _remote_cmd="-s ${words[$i+1]}" - break; - fi - done - - for client_info in ${(ps:\n\n:)"$(_call_program clients_tag "pactl $_remote_cmd list clients 2> /dev/null")"}; do + for client_info in ${(ps:\n\n:)"$(_call_program clients_tag "pactl $remote list clients 2> /dev/null")"}; do for line in ${(f)client_info}; do if [[ $line == Client[[:space:]]#* ]]; then _client=${line#*\#} @@ -257,6 +224,8 @@ _pacat_file_formats() { } _pactl_completion() { + _set_remote + _pactl_command(){ _pactl_commands=( 'help: show help and exit' @@ -459,6 +428,8 @@ _padsp_completion() { # TODO channel map completion _pacat_completion() { + _set_remote + _pacat_sample_formats=('s16le' 's16be' 'u8' 'float32le' 'float32be' 'ulaw' 'alaw' 's32le' 's32be' 's24le' 's24-32le' 's24-32be') @@ -535,6 +506,15 @@ _pulseaudio_completion() { _pulseaudio() { local state line curcontext="$curcontext" + # Some commands, like pactl and pacat, have an option for specifying the + # server address, like "--server=somehost". If that option is set, then the + # helper commands that are run as part of the autocompletion need to use + # that same option. The option is saved in this variable in _set_remote(), + # which is called in the beginning of _pactl_completion() and others. The + # autocompletion commands can then find the option in that variable if the + # option is set. + local remote + case $service in pulseaudio) _pulseaudio_completion;; pactl) _pactl_completion;; |