153a5a1b3Sopenharmony_ci#compdef pulseaudio pactl pacmd pacat paplay parec parecord padsp pasuspender 253a5a1b3Sopenharmony_ci 353a5a1b3Sopenharmony_ci_set_remote() { 453a5a1b3Sopenharmony_ci for (( i = 0; i < ${#words[@]}; i++ )) do 553a5a1b3Sopenharmony_ci if [[ ${words[$i]} == -s || ${words[$i]} == --server ]]; then 653a5a1b3Sopenharmony_ci remote="-s ${words[$i+1]}" 753a5a1b3Sopenharmony_ci break; 853a5a1b3Sopenharmony_ci elif [[ ${words[$i]} == --server=* ]]; then 953a5a1b3Sopenharmony_ci remote=${words[$i]} 1053a5a1b3Sopenharmony_ci fi 1153a5a1b3Sopenharmony_ci done 1253a5a1b3Sopenharmony_ci} 1353a5a1b3Sopenharmony_ci 1453a5a1b3Sopenharmony_ci_devices() { 1553a5a1b3Sopenharmony_ci local -a _device_list 1653a5a1b3Sopenharmony_ci local cmd _device _device_description 1753a5a1b3Sopenharmony_ci 1853a5a1b3Sopenharmony_ci if [[ $service == pactl || $service == pacmd ]]; then 1953a5a1b3Sopenharmony_ci case $words[$((CURRENT - 1))] in 2053a5a1b3Sopenharmony_ci set-sink-input-*) cmd=('sink-inputs');; 2153a5a1b3Sopenharmony_ci set-sink-*) cmd=('sinks');; 2253a5a1b3Sopenharmony_ci set-default-sink) cmd=('sinks');; 2353a5a1b3Sopenharmony_ci set-default-source) cmd=('sources');; 2453a5a1b3Sopenharmony_ci set-source-output-*) cmd=('source-outputs');; 2553a5a1b3Sopenharmony_ci set-source-*) cmd=('sources');; 2653a5a1b3Sopenharmony_ci suspend-sink) cmd=('sinks');; 2753a5a1b3Sopenharmony_ci suspend-source) cmd=('sources');; 2853a5a1b3Sopenharmony_ci move-sink-input) cmd=('sink-inputs');; 2953a5a1b3Sopenharmony_ci move-source-output) cmd=('source-outputs');; 3053a5a1b3Sopenharmony_ci kill-sink-input) cmd=('sink-inputs');; 3153a5a1b3Sopenharmony_ci kill-source-output) cmd=('source-outputs');; 3253a5a1b3Sopenharmony_ci esac 3353a5a1b3Sopenharmony_ci 3453a5a1b3Sopenharmony_ci case $words[$((CURRENT - 2))] in 3553a5a1b3Sopenharmony_ci move-sink-input) cmd=('sinks');; 3653a5a1b3Sopenharmony_ci move-source-output) cmd=('sources');; 3753a5a1b3Sopenharmony_ci play-sample) cmd=('sinks');; 3853a5a1b3Sopenharmony_ci esac 3953a5a1b3Sopenharmony_ci 4053a5a1b3Sopenharmony_ci elif [[ $service == (pacat|paplay|parec|parecord) ]]; then 4153a5a1b3Sopenharmony_ci case $words[$((CURRENT))] in 4253a5a1b3Sopenharmony_ci --device=*) 4353a5a1b3Sopenharmony_ci if [[ $words == *(--playback|-p)[[:space:]]* || 4453a5a1b3Sopenharmony_ci $service == paplay ]]; then 4553a5a1b3Sopenharmony_ci cmd=('sinks') 4653a5a1b3Sopenharmony_ci elif [[ $words == *(--record|-r)[[:space:]]* || 4753a5a1b3Sopenharmony_ci $service == (parec|parecord) ]]; then 4853a5a1b3Sopenharmony_ci cmd=('sources') 4953a5a1b3Sopenharmony_ci else 5053a5a1b3Sopenharmony_ci cmd=('sinks' 'sources') 5153a5a1b3Sopenharmony_ci fi 5253a5a1b3Sopenharmony_ci ;; 5353a5a1b3Sopenharmony_ci --monitor-stream=*) cmd=('sink-inputs');; 5453a5a1b3Sopenharmony_ci esac 5553a5a1b3Sopenharmony_ci 5653a5a1b3Sopenharmony_ci case $words[$((CURRENT - 1))] in 5753a5a1b3Sopenharmony_ci -d) 5853a5a1b3Sopenharmony_ci if [[ $words == *(--playback|-p)[[:space:]]* || 5953a5a1b3Sopenharmony_ci $service == paplay ]]; then 6053a5a1b3Sopenharmony_ci cmd=('sinks') 6153a5a1b3Sopenharmony_ci elif [[ $words == *(--record|-r)[[:space:]]* || 6253a5a1b3Sopenharmony_ci $service == (parec|parecord) ]]; then 6353a5a1b3Sopenharmony_ci cmd=('sources') 6453a5a1b3Sopenharmony_ci else 6553a5a1b3Sopenharmony_ci cmd=('sinks' 'sources') 6653a5a1b3Sopenharmony_ci fi 6753a5a1b3Sopenharmony_ci ;; 6853a5a1b3Sopenharmony_ci esac 6953a5a1b3Sopenharmony_ci 7053a5a1b3Sopenharmony_ci fi 7153a5a1b3Sopenharmony_ci 7253a5a1b3Sopenharmony_ci for target in $cmd; do 7353a5a1b3Sopenharmony_ci for device_info in ${(ps:\n\n:)"$(_call_program device_tag "pactl $remote list $target 2> /dev/null")"}; do 7453a5a1b3Sopenharmony_ci for line in ${(f)device_info}; do 7553a5a1b3Sopenharmony_ci if [[ $target == (sink-inputs|source-outputs) ]]; then 7653a5a1b3Sopenharmony_ci if [[ $line == (Sink*Input|Source*Output)* ]]; then 7753a5a1b3Sopenharmony_ci _device=${line#*\#} 7853a5a1b3Sopenharmony_ci elif [[ $line == *application.name* ]]; then 7953a5a1b3Sopenharmony_ci _device_description=${line#*= } 8053a5a1b3Sopenharmony_ci fi 8153a5a1b3Sopenharmony_ci 8253a5a1b3Sopenharmony_ci else 8353a5a1b3Sopenharmony_ci if [[ $words[$((CURRENT - 1))] == *set-sink-formats* ]]; then 8453a5a1b3Sopenharmony_ci if [[ $line == Sink* ]]; then 8553a5a1b3Sopenharmony_ci _device=${line#*\#} 8653a5a1b3Sopenharmony_ci elif [[ $line == *Description:* ]]; then 8753a5a1b3Sopenharmony_ci _device_description=${line#*: } 8853a5a1b3Sopenharmony_ci fi 8953a5a1b3Sopenharmony_ci 9053a5a1b3Sopenharmony_ci else 9153a5a1b3Sopenharmony_ci if [[ $line == *Name:* ]]; then 9253a5a1b3Sopenharmony_ci _device=${line#*: } 9353a5a1b3Sopenharmony_ci elif [[ $line == *Description:* ]]; then 9453a5a1b3Sopenharmony_ci _device_description=${line#*: } 9553a5a1b3Sopenharmony_ci fi 9653a5a1b3Sopenharmony_ci fi 9753a5a1b3Sopenharmony_ci fi 9853a5a1b3Sopenharmony_ci done 9953a5a1b3Sopenharmony_ci _device_list+=($_device:$_device_description) 10053a5a1b3Sopenharmony_ci done 10153a5a1b3Sopenharmony_ci done 10253a5a1b3Sopenharmony_ci 10353a5a1b3Sopenharmony_ci _describe 'device list' _device_list 10453a5a1b3Sopenharmony_ci} 10553a5a1b3Sopenharmony_ci 10653a5a1b3Sopenharmony_ci_profiles() { 10753a5a1b3Sopenharmony_ci local -a _profile_list 10853a5a1b3Sopenharmony_ci local _current_card _raw_profiles _profile_name _profile_description 10953a5a1b3Sopenharmony_ci 11053a5a1b3Sopenharmony_ci _current_card=$words[$((CURRENT - 1))] 11153a5a1b3Sopenharmony_ci 11253a5a1b3Sopenharmony_ci for card in ${(ps:\n\n:)"$(_call_program profiles_tag "pactl $remote list cards 2> /dev/null")"}; do 11353a5a1b3Sopenharmony_ci if [[ $card == *$_current_card* ]]; then 11453a5a1b3Sopenharmony_ci _raw_profiles=${card##*Profiles:} 11553a5a1b3Sopenharmony_ci _raw_profiles=${_raw_profiles%%Active Profile:*} 11653a5a1b3Sopenharmony_ci for profile in ${(f)_raw_profiles}; do 11753a5a1b3Sopenharmony_ci if [[ $profile != [[:blank:]] ]]; then 11853a5a1b3Sopenharmony_ci _profile_name=${profile%%: *} 11953a5a1b3Sopenharmony_ci _profile_name=${_profile_name//[[:blank:]]/} 12053a5a1b3Sopenharmony_ci _profile_name=${_profile_name//:/\\:} 12153a5a1b3Sopenharmony_ci _profile_description=${profile#*: } 12253a5a1b3Sopenharmony_ci _profile_list+=($_profile_name:$_profile_description) 12353a5a1b3Sopenharmony_ci fi 12453a5a1b3Sopenharmony_ci done 12553a5a1b3Sopenharmony_ci fi 12653a5a1b3Sopenharmony_ci done 12753a5a1b3Sopenharmony_ci 12853a5a1b3Sopenharmony_ci _describe 'profile list' _profile_list 12953a5a1b3Sopenharmony_ci} 13053a5a1b3Sopenharmony_ci 13153a5a1b3Sopenharmony_ci_ports() { 13253a5a1b3Sopenharmony_ci local -a _port_list 13353a5a1b3Sopenharmony_ci local _raw_ports _port_name _port_description _current_device 13453a5a1b3Sopenharmony_ci 13553a5a1b3Sopenharmony_ci case $words[$((CURRENT - 2))] in 13653a5a1b3Sopenharmony_ci set-sink-port) cmd="sinks";; 13753a5a1b3Sopenharmony_ci set-source-port) cmd="sources";; 13853a5a1b3Sopenharmony_ci set-port-latency-offset) cmd="cards";; 13953a5a1b3Sopenharmony_ci esac 14053a5a1b3Sopenharmony_ci 14153a5a1b3Sopenharmony_ci _current_device=$words[$((CURRENT - 1))] 14253a5a1b3Sopenharmony_ci 14353a5a1b3Sopenharmony_ci for device in ${(ps:\n\n:)"$(_call_program port_tag "pactl $remote list $cmd 2> /dev/null")"}; do 14453a5a1b3Sopenharmony_ci if [[ $device == *Ports:* && $device == *$_current_device* ]]; then 14553a5a1b3Sopenharmony_ci _raw_ports=${device##*Ports:} 14653a5a1b3Sopenharmony_ci _raw_ports=${_raw_ports%%Active Port:*} 14753a5a1b3Sopenharmony_ci for line in ${(f)_raw_ports}; do 14853a5a1b3Sopenharmony_ci if [[ $line != [[:blank:]] && 14953a5a1b3Sopenharmony_ci $line != (*Part?of*|*Properties:*|*device.icon_name*) ]]; then 15053a5a1b3Sopenharmony_ci _port_name=${line%%: *} 15153a5a1b3Sopenharmony_ci _port_name=${_port_name##[[:blank:]]#} 15253a5a1b3Sopenharmony_ci _port_description=${line#*: } 15353a5a1b3Sopenharmony_ci _port_list+=($_port_name:$_port_description) 15453a5a1b3Sopenharmony_ci fi 15553a5a1b3Sopenharmony_ci done 15653a5a1b3Sopenharmony_ci fi 15753a5a1b3Sopenharmony_ci done 15853a5a1b3Sopenharmony_ci 15953a5a1b3Sopenharmony_ci _describe 'port list' _port_list 16053a5a1b3Sopenharmony_ci} 16153a5a1b3Sopenharmony_ci 16253a5a1b3Sopenharmony_ci_sample_names() { 16353a5a1b3Sopenharmony_ci local -a _sample_names 16453a5a1b3Sopenharmony_ci sample_names=(${${${(f)"$(_call_program samples_tag "pactl $remote list samples short 2> /dev/null")"}##[[:digit:]]#[[:blank:]]#}%%[[:blank:]]*}) 16553a5a1b3Sopenharmony_ci 16653a5a1b3Sopenharmony_ci _wanted pactl-samples expl 'sample list' compadd $sample_names 16753a5a1b3Sopenharmony_ci} 16853a5a1b3Sopenharmony_ci 16953a5a1b3Sopenharmony_ci_cards(){ 17053a5a1b3Sopenharmony_ci local -a _card_list 17153a5a1b3Sopenharmony_ci local _card _cad_name 17253a5a1b3Sopenharmony_ci 17353a5a1b3Sopenharmony_ci for card_info in ${(ps:\n\n:)"$(_call_program card_tag "pactl $remote list cards 2> /dev/null")"}; do 17453a5a1b3Sopenharmony_ci for line in ${(f)card_info}; do 17553a5a1b3Sopenharmony_ci if [[ $line == *Name:* ]]; then 17653a5a1b3Sopenharmony_ci _card=${line#*: } 17753a5a1b3Sopenharmony_ci elif [[ $line == *alsa.long_card_name* ]]; then 17853a5a1b3Sopenharmony_ci _card_name=${line#*= \"} 17953a5a1b3Sopenharmony_ci _card_name=${_card_name%at*} 18053a5a1b3Sopenharmony_ci fi 18153a5a1b3Sopenharmony_ci done 18253a5a1b3Sopenharmony_ci _card_list+=($_card:$_card_name) 18353a5a1b3Sopenharmony_ci done 18453a5a1b3Sopenharmony_ci 18553a5a1b3Sopenharmony_ci _describe 'card list' _card_list 18653a5a1b3Sopenharmony_ci} 18753a5a1b3Sopenharmony_ci 18853a5a1b3Sopenharmony_ci_all_modules(){ 18953a5a1b3Sopenharmony_ci local -a _all_modules_list 19053a5a1b3Sopenharmony_ci for module in ${(f)"$(_call_program modules_tag "pulseaudio --dump-modules 2> /dev/null")"}; do 19153a5a1b3Sopenharmony_ci _all_modules_list+=${module%% *} 19253a5a1b3Sopenharmony_ci done 19353a5a1b3Sopenharmony_ci _describe 'module list' _all_modules_list 19453a5a1b3Sopenharmony_ci} 19553a5a1b3Sopenharmony_ci 19653a5a1b3Sopenharmony_ci_loaded_modules(){ 19753a5a1b3Sopenharmony_ci local -a _loaded_modules_list 19853a5a1b3Sopenharmony_ci 19953a5a1b3Sopenharmony_ci for module in ${(f)"$(_call_program modules_tag "pactl $remote list modules short 2> /dev/null")"}; do 20053a5a1b3Sopenharmony_ci _loaded_modules_list+=(${${(ps:\t:)module}[1]}:${${(ps:\t:)module}[2]}) 20153a5a1b3Sopenharmony_ci done 20253a5a1b3Sopenharmony_ci _describe 'module list' _loaded_modules_list 20353a5a1b3Sopenharmony_ci} 20453a5a1b3Sopenharmony_ci 20553a5a1b3Sopenharmony_ci_resample_methods() { 20653a5a1b3Sopenharmony_ci local -a _resample_method_list 20753a5a1b3Sopenharmony_ci for method in ${(f)"$(_call_program modules_tag "pulseaudio --dump-resample-methods 2> /dev/null")"}; do 20853a5a1b3Sopenharmony_ci _resample_method_list+=$method 20953a5a1b3Sopenharmony_ci done 21053a5a1b3Sopenharmony_ci _describe 'resample method list' _resample_method_list 21153a5a1b3Sopenharmony_ci} 21253a5a1b3Sopenharmony_ci 21353a5a1b3Sopenharmony_ci_clients() { 21453a5a1b3Sopenharmony_ci local -a _client_list 21553a5a1b3Sopenharmony_ci local _client _client_description 21653a5a1b3Sopenharmony_ci 21753a5a1b3Sopenharmony_ci for client_info in ${(ps:\n\n:)"$(_call_program clients_tag "pactl $remote list clients 2> /dev/null")"}; do 21853a5a1b3Sopenharmony_ci for line in ${(f)client_info}; do 21953a5a1b3Sopenharmony_ci if [[ $line == Client[[:space:]]#* ]]; then 22053a5a1b3Sopenharmony_ci _client=${line#*\#} 22153a5a1b3Sopenharmony_ci elif [[ $line == *application.name* ]]; then 22253a5a1b3Sopenharmony_ci _client_description=${line#*=} 22353a5a1b3Sopenharmony_ci fi 22453a5a1b3Sopenharmony_ci done 22553a5a1b3Sopenharmony_ci _client_list+=($_client:$_client_description) 22653a5a1b3Sopenharmony_ci done 22753a5a1b3Sopenharmony_ci _describe 'client list' _client_list 22853a5a1b3Sopenharmony_ci} 22953a5a1b3Sopenharmony_ci 23053a5a1b3Sopenharmony_ci_pacat_file_formats() { 23153a5a1b3Sopenharmony_ci local -a _file_format_list 23253a5a1b3Sopenharmony_ci for format in ${(f)"$(_call_program fformats_tag "pacat --list-file-formats")"}; do 23353a5a1b3Sopenharmony_ci _file_format_list+=(${${(ps:\t:)format}[1]}:${${(ps:\t:)format}[2]}) 23453a5a1b3Sopenharmony_ci done 23553a5a1b3Sopenharmony_ci _describe 'file format list' _file_format_list 23653a5a1b3Sopenharmony_ci} 23753a5a1b3Sopenharmony_ci 23853a5a1b3Sopenharmony_ci_pactl_completion() { 23953a5a1b3Sopenharmony_ci _set_remote 24053a5a1b3Sopenharmony_ci 24153a5a1b3Sopenharmony_ci _pactl_command(){ 24253a5a1b3Sopenharmony_ci local -a _pactl_commands 24353a5a1b3Sopenharmony_ci 24453a5a1b3Sopenharmony_ci _pactl_commands=( 24553a5a1b3Sopenharmony_ci 'help: show help and exit' 24653a5a1b3Sopenharmony_ci 'stat: dump statistics about the PulseAudio daemon' 24753a5a1b3Sopenharmony_ci 'info: dump info about the PulseAudio daemon' 24853a5a1b3Sopenharmony_ci 'list: list modules/sources/streams/cards etc...' 24953a5a1b3Sopenharmony_ci 'exit: ask the PulseAudio daemon to exit' 25053a5a1b3Sopenharmony_ci 'upload-sample: upload a sound from a file into the sample cache' 25153a5a1b3Sopenharmony_ci 'play-sample: play the specified sample from the sample cache' 25253a5a1b3Sopenharmony_ci 'remove-sample: remove the specified sample from the sample cache' 25353a5a1b3Sopenharmony_ci 'load-module: load a module' 25453a5a1b3Sopenharmony_ci 'unload-module: unload a module' 25553a5a1b3Sopenharmony_ci 'move-sink-input: move a stream to a sink' 25653a5a1b3Sopenharmony_ci 'move-source-output: move a recording stream to a source' 25753a5a1b3Sopenharmony_ci 'suspend-sink: suspend or resume a sink' 25853a5a1b3Sopenharmony_ci 'suspend-source: suspend or resume a source' 25953a5a1b3Sopenharmony_ci 'set-card-profile: set a card profile' 26053a5a1b3Sopenharmony_ci 'set-default-sink: set the default sink' 26153a5a1b3Sopenharmony_ci 'set-default-source: set the default source' 26253a5a1b3Sopenharmony_ci 'set-sink-port: set the sink port of a sink' 26353a5a1b3Sopenharmony_ci 'set-source-port: set the source port of a source' 26453a5a1b3Sopenharmony_ci 'set-port-latency-offset: set a latency offset on a port' 26553a5a1b3Sopenharmony_ci 'set-sink-volume: set the volume of a sink' 26653a5a1b3Sopenharmony_ci 'set-source-volume: set the volume of a source' 26753a5a1b3Sopenharmony_ci 'set-sink-input-volume: set the volume of a stream' 26853a5a1b3Sopenharmony_ci 'set-source-output-volume: set the volume of a recording stream' 26953a5a1b3Sopenharmony_ci 'set-sink-mute: mute a sink' 27053a5a1b3Sopenharmony_ci 'set-source-mute: mute a source' 27153a5a1b3Sopenharmony_ci 'set-sink-input-mute: mute a stream' 27253a5a1b3Sopenharmony_ci 'set-source-output-mute: mute a recording stream' 27353a5a1b3Sopenharmony_ci 'set-sink-formats: set supported formats of a sink' 27453a5a1b3Sopenharmony_ci 'send-message: send a message to a pulseaudio object' 27553a5a1b3Sopenharmony_ci 'subscribe: subscribe to events' 27653a5a1b3Sopenharmony_ci ) 27753a5a1b3Sopenharmony_ci 27853a5a1b3Sopenharmony_ci _describe 'pactl commands' _pactl_commands 27953a5a1b3Sopenharmony_ci } 28053a5a1b3Sopenharmony_ci 28153a5a1b3Sopenharmony_ci _pactl_command_parameter() { 28253a5a1b3Sopenharmony_ci local _command 28353a5a1b3Sopenharmony_ci 28453a5a1b3Sopenharmony_ci _list_parameter() { 28553a5a1b3Sopenharmony_ci local -a _objects; 28653a5a1b3Sopenharmony_ci 28753a5a1b3Sopenharmony_ci _objects=( 28853a5a1b3Sopenharmony_ci 'modules: list loaded modules' 28953a5a1b3Sopenharmony_ci 'sinks: list available sinks' 29053a5a1b3Sopenharmony_ci 'sources: list available sources' 29153a5a1b3Sopenharmony_ci 'sink-inputs: list connected sink inputs' 29253a5a1b3Sopenharmony_ci 'source-outputs: list connected source outputs' 29353a5a1b3Sopenharmony_ci 'clients: list connected clients' 29453a5a1b3Sopenharmony_ci 'samples: list samples' 29553a5a1b3Sopenharmony_ci 'cards: list available cards' 29653a5a1b3Sopenharmony_ci 'message-handlers: list available message-handlers' 29753a5a1b3Sopenharmony_ci ) 29853a5a1b3Sopenharmony_ci 29953a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 30053a5a1b3Sopenharmony_ci # We're completing the first parameter after "list". 30153a5a1b3Sopenharmony_ci # "pactl list cards short" and "pactl list short cards" are 30253a5a1b3Sopenharmony_ci # treated as equivalent by pactl, but here we only support the 30353a5a1b3Sopenharmony_ci # first form, so "short" isn't a valid completion. 30453a5a1b3Sopenharmony_ci _describe 'objects' _objects 30553a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 30653a5a1b3Sopenharmony_ci # We're completing the second parameter after "list". As 30753a5a1b3Sopenharmony_ci # explained in the previous comment, we only support the 30853a5a1b3Sopenharmony_ci # "pactl list cards short" form, so "short" is the only valid 30953a5a1b3Sopenharmony_ci # completion here. 31053a5a1b3Sopenharmony_ci compadd short 31153a5a1b3Sopenharmony_ci fi 31253a5a1b3Sopenharmony_ci } 31353a5a1b3Sopenharmony_ci 31453a5a1b3Sopenharmony_ci _play_sample_parameter() { 31553a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 31653a5a1b3Sopenharmony_ci # We're completing the first parameter after "play-sample". 31753a5a1b3Sopenharmony_ci _sample_names 31853a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 31953a5a1b3Sopenharmony_ci # We're completing the second parameter after "play-sample". 32053a5a1b3Sopenharmony_ci _devices 32153a5a1b3Sopenharmony_ci fi 32253a5a1b3Sopenharmony_ci } 32353a5a1b3Sopenharmony_ci 32453a5a1b3Sopenharmony_ci _load_module_parameter() { 32553a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 32653a5a1b3Sopenharmony_ci # We're completing the first parameter after "load-module". 32753a5a1b3Sopenharmony_ci _all_modules 32853a5a1b3Sopenharmony_ci else 32953a5a1b3Sopenharmony_ci # We're completing the second or later parameter after 33053a5a1b3Sopenharmony_ci # "load-module", i.e. the module arguments. 33153a5a1b3Sopenharmony_ci # TODO: Implement module argument completion. 33253a5a1b3Sopenharmony_ci fi 33353a5a1b3Sopenharmony_ci } 33453a5a1b3Sopenharmony_ci 33553a5a1b3Sopenharmony_ci _move_sink_input_parameter() { 33653a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 33753a5a1b3Sopenharmony_ci # We're completing the first parameter after "move-sink-input". 33853a5a1b3Sopenharmony_ci # Even though the function name is "_devices", it actually 33953a5a1b3Sopenharmony_ci # completes the sink input index. _devices is magical like 34053a5a1b3Sopenharmony_ci # that. 34153a5a1b3Sopenharmony_ci _devices 34253a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 34353a5a1b3Sopenharmony_ci # We're completing the second parameter after 34453a5a1b3Sopenharmony_ci # "move-sink-input". 34553a5a1b3Sopenharmony_ci _devices 34653a5a1b3Sopenharmony_ci fi 34753a5a1b3Sopenharmony_ci } 34853a5a1b3Sopenharmony_ci 34953a5a1b3Sopenharmony_ci _move_source_output_parameter() { 35053a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 35153a5a1b3Sopenharmony_ci # We're completing the first parameter after 35253a5a1b3Sopenharmony_ci # "move-source-output". Even though the function name is 35353a5a1b3Sopenharmony_ci # "_devices", it actually completes the source output index. 35453a5a1b3Sopenharmony_ci # _devices is magical like that. 35553a5a1b3Sopenharmony_ci _devices 35653a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 35753a5a1b3Sopenharmony_ci # We're completing the second parameter after 35853a5a1b3Sopenharmony_ci # "move-source-output". 35953a5a1b3Sopenharmony_ci _devices 36053a5a1b3Sopenharmony_ci fi 36153a5a1b3Sopenharmony_ci } 36253a5a1b3Sopenharmony_ci 36353a5a1b3Sopenharmony_ci _suspend_sink_parameter() { 36453a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 36553a5a1b3Sopenharmony_ci # We're completing the first parameter after "suspend-sink". 36653a5a1b3Sopenharmony_ci _devices 36753a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 36853a5a1b3Sopenharmony_ci # We're completing the second parameter after "suspend-sink". 36953a5a1b3Sopenharmony_ci compadd true false 37053a5a1b3Sopenharmony_ci fi 37153a5a1b3Sopenharmony_ci } 37253a5a1b3Sopenharmony_ci 37353a5a1b3Sopenharmony_ci _suspend_source_parameter() { 37453a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 37553a5a1b3Sopenharmony_ci # We're completing the first parameter after "suspend-source". 37653a5a1b3Sopenharmony_ci _devices 37753a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 37853a5a1b3Sopenharmony_ci # We're completing the second parameter after "suspend-source". 37953a5a1b3Sopenharmony_ci compadd true false 38053a5a1b3Sopenharmony_ci fi 38153a5a1b3Sopenharmony_ci } 38253a5a1b3Sopenharmony_ci 38353a5a1b3Sopenharmony_ci _set_card_profile_parameter() { 38453a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 38553a5a1b3Sopenharmony_ci # We're completing the first parameter after 38653a5a1b3Sopenharmony_ci # "set-card-profile". 38753a5a1b3Sopenharmony_ci _cards 38853a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 38953a5a1b3Sopenharmony_ci # We're completing the second parameter after 39053a5a1b3Sopenharmony_ci # "set-card-profile". 39153a5a1b3Sopenharmony_ci _profiles 39253a5a1b3Sopenharmony_ci fi 39353a5a1b3Sopenharmony_ci } 39453a5a1b3Sopenharmony_ci 39553a5a1b3Sopenharmony_ci _set_sink_port_parameter() { 39653a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 39753a5a1b3Sopenharmony_ci # We're completing the first parameter after "set-sink-port". 39853a5a1b3Sopenharmony_ci _devices 39953a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 40053a5a1b3Sopenharmony_ci # We're completing the second parameter after "set-sink-port". 40153a5a1b3Sopenharmony_ci _ports 40253a5a1b3Sopenharmony_ci fi 40353a5a1b3Sopenharmony_ci } 40453a5a1b3Sopenharmony_ci 40553a5a1b3Sopenharmony_ci _set_source_port_parameter() { 40653a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 40753a5a1b3Sopenharmony_ci # We're completing the first parameter after "set-source-port". 40853a5a1b3Sopenharmony_ci _devices 40953a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 41053a5a1b3Sopenharmony_ci # We're completing the second parameter after 41153a5a1b3Sopenharmony_ci # "set-source-port". 41253a5a1b3Sopenharmony_ci _ports 41353a5a1b3Sopenharmony_ci fi 41453a5a1b3Sopenharmony_ci } 41553a5a1b3Sopenharmony_ci 41653a5a1b3Sopenharmony_ci _set_sink_mute_parameter() { 41753a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 41853a5a1b3Sopenharmony_ci # We're completing the first parameter after "set-sink-mute". 41953a5a1b3Sopenharmony_ci _devices 42053a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 42153a5a1b3Sopenharmony_ci # We're completing the second parameter after "set-sink-mute". 42253a5a1b3Sopenharmony_ci compadd true false toggle 42353a5a1b3Sopenharmony_ci fi 42453a5a1b3Sopenharmony_ci } 42553a5a1b3Sopenharmony_ci 42653a5a1b3Sopenharmony_ci _set_source_mute_parameter() { 42753a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 42853a5a1b3Sopenharmony_ci # We're completing the first parameter after "set-source-mute". 42953a5a1b3Sopenharmony_ci _devices 43053a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 43153a5a1b3Sopenharmony_ci # We're completing the second parameter after 43253a5a1b3Sopenharmony_ci # "set-source-mute". 43353a5a1b3Sopenharmony_ci compadd true false toggle 43453a5a1b3Sopenharmony_ci fi 43553a5a1b3Sopenharmony_ci } 43653a5a1b3Sopenharmony_ci 43753a5a1b3Sopenharmony_ci _set_sink_input_mute_parameter() { 43853a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 43953a5a1b3Sopenharmony_ci # We're completing the first parameter after 44053a5a1b3Sopenharmony_ci # "set-sink-input-mute". Even though the function name is 44153a5a1b3Sopenharmony_ci # "_devices", it actually completes the sink input index. 44253a5a1b3Sopenharmony_ci # _devices is magical like that. 44353a5a1b3Sopenharmony_ci _devices 44453a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 44553a5a1b3Sopenharmony_ci # We're completing the second parameter after 44653a5a1b3Sopenharmony_ci # "set-sink-input-mute". 44753a5a1b3Sopenharmony_ci compadd true false toggle 44853a5a1b3Sopenharmony_ci fi 44953a5a1b3Sopenharmony_ci } 45053a5a1b3Sopenharmony_ci 45153a5a1b3Sopenharmony_ci _set_source_output_mute_parameter() { 45253a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 45353a5a1b3Sopenharmony_ci # We're completing the first parameter after 45453a5a1b3Sopenharmony_ci # "set-source-output-mute". Even though the function name is 45553a5a1b3Sopenharmony_ci # "_devices", it actually completes the source output index. 45653a5a1b3Sopenharmony_ci # _devices is magical like that. 45753a5a1b3Sopenharmony_ci _devices 45853a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 45953a5a1b3Sopenharmony_ci # We're completing the second parameter after 46053a5a1b3Sopenharmony_ci # "set-source-output-mute". 46153a5a1b3Sopenharmony_ci compadd true false toggle 46253a5a1b3Sopenharmony_ci fi 46353a5a1b3Sopenharmony_ci } 46453a5a1b3Sopenharmony_ci 46553a5a1b3Sopenharmony_ci _set_port_latency_offset_parameter() { 46653a5a1b3Sopenharmony_ci if ((CURRENT == 2)); then 46753a5a1b3Sopenharmony_ci # We're completing the first parameter after 46853a5a1b3Sopenharmony_ci # "set-port-latency-offset". 46953a5a1b3Sopenharmony_ci _cards 47053a5a1b3Sopenharmony_ci elif ((CURRENT == 3)); then 47153a5a1b3Sopenharmony_ci # We're completing the second parameter after 47253a5a1b3Sopenharmony_ci # "set-port-latency-offset". 47353a5a1b3Sopenharmony_ci _ports 47453a5a1b3Sopenharmony_ci fi 47553a5a1b3Sopenharmony_ci } 47653a5a1b3Sopenharmony_ci 47753a5a1b3Sopenharmony_ci _command=$words[1] 47853a5a1b3Sopenharmony_ci 47953a5a1b3Sopenharmony_ci case $_command in 48053a5a1b3Sopenharmony_ci list) _list_parameter;; 48153a5a1b3Sopenharmony_ci upload-sample) if ((CURRENT == 2)); then _files; fi;; 48253a5a1b3Sopenharmony_ci play-sample) _play_sample_parameter;; 48353a5a1b3Sopenharmony_ci remove-sample) if ((CURRENT == 2)); then _sample_names; fi;; 48453a5a1b3Sopenharmony_ci load-module) _load_module_parameter;; 48553a5a1b3Sopenharmony_ci unload-module) if ((CURRENT == 2)); then _loaded_modules; fi;; 48653a5a1b3Sopenharmony_ci move-sink-input) _move_sink_input_parameter;; 48753a5a1b3Sopenharmony_ci move-source-output) _move_source_output_parameter;; 48853a5a1b3Sopenharmony_ci suspend-sink) _suspend_sink_parameter;; 48953a5a1b3Sopenharmony_ci suspend-source) _suspend_source_parameter;; 49053a5a1b3Sopenharmony_ci set-card-profile) _set_card_profile_parameter;; 49153a5a1b3Sopenharmony_ci set-default-sink) if ((CURRENT == 2)); then _devices; fi;; 49253a5a1b3Sopenharmony_ci set-default-source) if ((CURRENT == 2)); then _devices; fi;; 49353a5a1b3Sopenharmony_ci set-sink-port) _set_sink_port_parameter;; 49453a5a1b3Sopenharmony_ci set-source-port) _set_source_port_parameter;; 49553a5a1b3Sopenharmony_ci set-sink-volume) if ((CURRENT == 2)); then _devices; fi;; 49653a5a1b3Sopenharmony_ci set-source-volume) if ((CURRENT == 2)); then _devices; fi;; 49753a5a1b3Sopenharmony_ci set-sink-input-volume) if ((CURRENT == 2)); then _devices; fi;; 49853a5a1b3Sopenharmony_ci set-source-output-volume) if ((CURRENT == 2)); then _devices; fi;; 49953a5a1b3Sopenharmony_ci set-sink-mute) _set_sink_mute_parameter;; 50053a5a1b3Sopenharmony_ci set-source-mute) _set_source_mute_parameter;; 50153a5a1b3Sopenharmony_ci set-sink-input-mute) _set_sink_input_mute_parameter;; 50253a5a1b3Sopenharmony_ci set-source-output-mute) _set_source_output_mute_parameter;; 50353a5a1b3Sopenharmony_ci set-sink-formats) if ((CURRENT == 2)); then _devices; fi;; 50453a5a1b3Sopenharmony_ci set-port-latency-offset) _set_port_latency_offset_parameter;; 50553a5a1b3Sopenharmony_ci esac 50653a5a1b3Sopenharmony_ci } 50753a5a1b3Sopenharmony_ci 50853a5a1b3Sopenharmony_ci _arguments -C -S -A '-*' \ 50953a5a1b3Sopenharmony_ci {-h,--help}'[display help and exit]' \ 51053a5a1b3Sopenharmony_ci '--version[show version and exit]' \ 51153a5a1b3Sopenharmony_ci {-s,--server=}'[name of server to connect to]:host:_hosts' \ 51253a5a1b3Sopenharmony_ci {-n,--client-name=}'[client name to use]:name' \ 51353a5a1b3Sopenharmony_ci '::pactl command:_pactl_command' \ 51453a5a1b3Sopenharmony_ci '*::pactl command parameter:_pactl_command_parameter' 51553a5a1b3Sopenharmony_ci} 51653a5a1b3Sopenharmony_ci 51753a5a1b3Sopenharmony_ci_pacmd_completion() { 51853a5a1b3Sopenharmony_ci _pacmd_command(){ 51953a5a1b3Sopenharmony_ci _pacmd_commands=( 52053a5a1b3Sopenharmony_ci 'help: show help and exit' 52153a5a1b3Sopenharmony_ci 'list-modules: list modules' 52253a5a1b3Sopenharmony_ci 'list-cards: list cards' 52353a5a1b3Sopenharmony_ci 'list-sinks: list sinks' 52453a5a1b3Sopenharmony_ci 'list-sources: list sources' 52553a5a1b3Sopenharmony_ci 'list-clients: list clients' 52653a5a1b3Sopenharmony_ci 'list-sink-inputs: list sink-inputs' 52753a5a1b3Sopenharmony_ci 'list-source-outputs: list source-outputs' 52853a5a1b3Sopenharmony_ci 'stat: dump statistics about the PulseAudio daemon' 52953a5a1b3Sopenharmony_ci 'info: dump info about the PulseAudio daemon' 53053a5a1b3Sopenharmony_ci 'load-module: load a module' 53153a5a1b3Sopenharmony_ci 'unload-module: unload a module' 53253a5a1b3Sopenharmony_ci 'describe-module: print info for a module' 53353a5a1b3Sopenharmony_ci 'set-sink-volume: set the volume of a sink' 53453a5a1b3Sopenharmony_ci 'set-source-volume: set the volume of a source' 53553a5a1b3Sopenharmony_ci 'set-sink-mute: mute a sink' 53653a5a1b3Sopenharmony_ci 'set-source-mute: mute a source' 53753a5a1b3Sopenharmony_ci 'set-sink-input-volume: set the volume of a stream' 53853a5a1b3Sopenharmony_ci 'set-source-output-volume: set the volume of a recording stream' 53953a5a1b3Sopenharmony_ci 'set-sink-input-mute: mute a stream' 54053a5a1b3Sopenharmony_ci 'set-source-output-mute: mute a recording stream' 54153a5a1b3Sopenharmony_ci 'set-default-sink: set the default sink' 54253a5a1b3Sopenharmony_ci 'set-default-source: set the default source' 54353a5a1b3Sopenharmony_ci 'set-card-profile: set a card profile' 54453a5a1b3Sopenharmony_ci 'set-sink-port: set the sink port of a sink' 54553a5a1b3Sopenharmony_ci 'set-source-port: set the source port of a source' 54653a5a1b3Sopenharmony_ci 'set-port-latency-offset: set a latency offset on a port' 54753a5a1b3Sopenharmony_ci 'suspend-sink: suspend or resume a sink' 54853a5a1b3Sopenharmony_ci 'suspend-source: suspend or resume a source' 54953a5a1b3Sopenharmony_ci 'suspend: suspend all sinks and sources' 55053a5a1b3Sopenharmony_ci 'move-sink-input: move a stream to a sink' 55153a5a1b3Sopenharmony_ci 'move-source-output: move a recording stream to a source' 55253a5a1b3Sopenharmony_ci 'update-sink-proplist: update the properties of a sink' 55353a5a1b3Sopenharmony_ci 'update-source-proplist: update the properties of a source' 55453a5a1b3Sopenharmony_ci 'update-sink-input-proplist: update the properties of a sink-input' 55553a5a1b3Sopenharmony_ci 'update-source-output-proplist: update the properties of a source-output' 55653a5a1b3Sopenharmony_ci 'list-samples: list samples' 55753a5a1b3Sopenharmony_ci 'play-sample: play the specified sample from the sample cache' # TODO 55853a5a1b3Sopenharmony_ci 'remove-sample: remove the specified sample from the sample cache' # TODO 55953a5a1b3Sopenharmony_ci 'load-sample: upload a sound from a file into the sample cache' 56053a5a1b3Sopenharmony_ci 'load-sample-lazy: lazily upload a sound file into the sample cache' 56153a5a1b3Sopenharmony_ci 'load-sample-dir-lazy: lazily upload all sound files in a directory into the sample cache' 56253a5a1b3Sopenharmony_ci 'kill-client: kill a client' 56353a5a1b3Sopenharmony_ci 'kill-sink-input: kill a sink input' 56453a5a1b3Sopenharmony_ci 'kill-source-output: kill a source output' 56553a5a1b3Sopenharmony_ci 'set-log-target: change the log target' 56653a5a1b3Sopenharmony_ci 'set-log-level: change the log level' 56753a5a1b3Sopenharmony_ci 'set-log-meta: show source code location in log messages' 56853a5a1b3Sopenharmony_ci 'set-log-time: show timestamps in log messages' 56953a5a1b3Sopenharmony_ci 'set-log-backtrace: show backtrace in log messages' 57053a5a1b3Sopenharmony_ci 'play-file: play a sound file' 57153a5a1b3Sopenharmony_ci 'dump: show daemon configuration' 57253a5a1b3Sopenharmony_ci 'dump-volumes: show the state of all volumes' 57353a5a1b3Sopenharmony_ci 'shared: show shared properties' 57453a5a1b3Sopenharmony_ci 'send-message: send a message to a pulseaudio object' 57553a5a1b3Sopenharmony_ci 'exit: ask the PulseAudio daemon to exit' 57653a5a1b3Sopenharmony_ci ) 57753a5a1b3Sopenharmony_ci _describe 'pacmd commands' _pacmd_commands 57853a5a1b3Sopenharmony_ci } 57953a5a1b3Sopenharmony_ci 58053a5a1b3Sopenharmony_ci _arguments -C -S -A "-*" \ 58153a5a1b3Sopenharmony_ci {-h,--help}'[display help and exit]' \ 58253a5a1b3Sopenharmony_ci '--version[show version and exit]' \ 58353a5a1b3Sopenharmony_ci '::pacmd commands:_pacmd_command' \ 58453a5a1b3Sopenharmony_ci 58553a5a1b3Sopenharmony_ci case $words[$((CURRENT - 1))] in 58653a5a1b3Sopenharmony_ci set-card-profile) _cards;; 58753a5a1b3Sopenharmony_ci set-sink-*) _devices;; 58853a5a1b3Sopenharmony_ci set-source-*) _devices;; 58953a5a1b3Sopenharmony_ci load-module) _all_modules;; 59053a5a1b3Sopenharmony_ci describe-module) _all_modules;; 59153a5a1b3Sopenharmony_ci unload-module) _loaded_modules;; 59253a5a1b3Sopenharmony_ci suspend-*) _devices;; 59353a5a1b3Sopenharmony_ci move-*) _devices;; 59453a5a1b3Sopenharmony_ci set-port-latency-offset) _cards;; 59553a5a1b3Sopenharmony_ci load-sample*) _files;; 59653a5a1b3Sopenharmony_ci kill-client) _clients;; 59753a5a1b3Sopenharmony_ci kill-(sink|source)-*) _devices;; 59853a5a1b3Sopenharmony_ci set-log-target) compadd null auto syslog stderr file:;; 59953a5a1b3Sopenharmony_ci set-log-*) compadd true false;; 60053a5a1b3Sopenharmony_ci play-file) _files;; 60153a5a1b3Sopenharmony_ci esac 60253a5a1b3Sopenharmony_ci 60353a5a1b3Sopenharmony_ci case $words[$((CURRENT - 2))] in 60453a5a1b3Sopenharmony_ci set-card-profile) _profiles;; 60553a5a1b3Sopenharmony_ci set-(sink|source)-port) _ports;; 60653a5a1b3Sopenharmony_ci set-port-latency-offset) _ports;; 60753a5a1b3Sopenharmony_ci set-*-mute) compadd true false;; 60853a5a1b3Sopenharmony_ci suspend-*) compadd true false;; 60953a5a1b3Sopenharmony_ci move-*) _devices;; 61053a5a1b3Sopenharmony_ci esac 61153a5a1b3Sopenharmony_ci} 61253a5a1b3Sopenharmony_ci 61353a5a1b3Sopenharmony_ci_pasuspender_completion() { 61453a5a1b3Sopenharmony_ci # parenthesis expressions specify which options should not get suggested afterwards 61553a5a1b3Sopenharmony_ci # e.g. after -s, help and version will not get suggested, -- remains the only valid argument 61653a5a1b3Sopenharmony_ci # after "--" external commands get suggested 61753a5a1b3Sopenharmony_ci _arguments -C \ 61853a5a1b3Sopenharmony_ci '(-)'{-h,--help}'[display help and exit]' \ 61953a5a1b3Sopenharmony_ci '(-)--version[show version and exit]' \ 62053a5a1b3Sopenharmony_ci '(-h --help --version -s --server)'{-s,--server=}'[name of server to connect to]:host:_hosts' \ 62153a5a1b3Sopenharmony_ci '(-)--[program]:program: _command_names -e' && return 0 62253a5a1b3Sopenharmony_ci # check if "--" is one of the words in the command line 62353a5a1b3Sopenharmony_ci # if so, ${words[(i)--]} is the position of "--" 62453a5a1b3Sopenharmony_ci # shift the arguments and reduce CURRENT, such that further completions see only what follows "--" 62553a5a1b3Sopenharmony_ci if [[ ${words[(r)--]} == "--" ]]; then 62653a5a1b3Sopenharmony_ci for ((j = ${words[(i)--]}; j > 0; j--)); 62753a5a1b3Sopenharmony_ci do 62853a5a1b3Sopenharmony_ci shift words 62953a5a1b3Sopenharmony_ci (( CURRENT-- )) 63053a5a1b3Sopenharmony_ci done 63153a5a1b3Sopenharmony_ci # proceed with normal completion 63253a5a1b3Sopenharmony_ci _normal 63353a5a1b3Sopenharmony_ci fi 63453a5a1b3Sopenharmony_ci} 63553a5a1b3Sopenharmony_ci 63653a5a1b3Sopenharmony_ci_padsp_completion() { 63753a5a1b3Sopenharmony_ci _arguments -C -S -A "-*" \ 63853a5a1b3Sopenharmony_ci '-h[display help and exit]' \ 63953a5a1b3Sopenharmony_ci '-s[name of server to connect to]:host:_hosts' \ 64053a5a1b3Sopenharmony_ci '-n[client name to use]:name:' \ 64153a5a1b3Sopenharmony_ci '-m[stream name to use]:name:' \ 64253a5a1b3Sopenharmony_ci '-M[disable /dev/mixer emulation]' \ 64353a5a1b3Sopenharmony_ci '-S[disable /dev/sndstat emulation]' \ 64453a5a1b3Sopenharmony_ci '-D[disable /dev/dsp emulation]' \ 64553a5a1b3Sopenharmony_ci '-d[enable debug output]' \ 64653a5a1b3Sopenharmony_ci '--[disable further command line parsing]' \ 64753a5a1b3Sopenharmony_ci} 64853a5a1b3Sopenharmony_ci 64953a5a1b3Sopenharmony_ci# TODO channel map completion 65053a5a1b3Sopenharmony_ci_pacat_completion() { 65153a5a1b3Sopenharmony_ci _set_remote 65253a5a1b3Sopenharmony_ci 65353a5a1b3Sopenharmony_ci _pacat_sample_formats=('s16le' 's16be' 'u8' 'float32le' 'float32be' 65453a5a1b3Sopenharmony_ci 'ulaw' 'alaw' 's32le' 's32be' 's24le' 's24-32le' 's24-32be') 65553a5a1b3Sopenharmony_ci 65653a5a1b3Sopenharmony_ci _arguments -C -S -A "-*" \ 65753a5a1b3Sopenharmony_ci {-h,--help}'[display this help and exit]' \ 65853a5a1b3Sopenharmony_ci '--version[show version and exit]' \ 65953a5a1b3Sopenharmony_ci {-r,--record}'[create a connection for recording]' \ 66053a5a1b3Sopenharmony_ci {-p,--playback}'[create a connection for playback]' \ 66153a5a1b3Sopenharmony_ci {-s,--server=}'[name of server to connect to]:host:_hosts' \ 66253a5a1b3Sopenharmony_ci {-d,--device=}'[name of sink/source to connect to]:device:_devices' \ 66353a5a1b3Sopenharmony_ci '--monitor-stream=[index of the sink input to record from]:device:_devices' \ 66453a5a1b3Sopenharmony_ci {-n,--client-name=}'[client name to use]:name' \ 66553a5a1b3Sopenharmony_ci '--stream-name=[how to call this stream]:name' \ 66653a5a1b3Sopenharmony_ci '--volume=[initial volume to use]:volume' \ 66753a5a1b3Sopenharmony_ci '--rate=[sample rate to use]:rate:(44100 48000 96000)' \ 66853a5a1b3Sopenharmony_ci '--format=[sample type to use]:format:((${(q)_pacat_sample_formats}))' \ 66953a5a1b3Sopenharmony_ci '--channels=[number of channels to use]:number:(1 2)' \ 67053a5a1b3Sopenharmony_ci '--channel-map=[channel map to use]:map' \ 67153a5a1b3Sopenharmony_ci '--fix-format[use the sample format of the sink]' \ 67253a5a1b3Sopenharmony_ci '--fix-rate[use the rate of the sink]' \ 67353a5a1b3Sopenharmony_ci '--fix-channels[channel map of the sink]' \ 67453a5a1b3Sopenharmony_ci '--no-remix[do not upmix or downmix channels]' \ 67553a5a1b3Sopenharmony_ci '--no-remap[map channels by index instead of name]' \ 67653a5a1b3Sopenharmony_ci '--latency=[request the specified latency]:bytes' \ 67753a5a1b3Sopenharmony_ci '--process-time=[request the specified process time]:bytes' \ 67853a5a1b3Sopenharmony_ci '--latency-msec=[request the specified latency in msec]:msec' \ 67953a5a1b3Sopenharmony_ci '--process-time-msec=[request the specified process time in msec]:msec' \ 68053a5a1b3Sopenharmony_ci '--property=[set the specified property]:property' \ 68153a5a1b3Sopenharmony_ci '--raw[record/play raw PCM data]' \ 68253a5a1b3Sopenharmony_ci '--passthrough[passthrough data]' \ 68353a5a1b3Sopenharmony_ci '--file-format=[record/play formatted PCM data]:format:_pacat_file_formats' \ 68453a5a1b3Sopenharmony_ci '--list-file-formats[list available formats]' \ 68553a5a1b3Sopenharmony_ci '::files:_files' \ 68653a5a1b3Sopenharmony_ci} 68753a5a1b3Sopenharmony_ci 68853a5a1b3Sopenharmony_ci# TODO log-target file completion 68953a5a1b3Sopenharmony_ci_pulseaudio_completion() { 69053a5a1b3Sopenharmony_ci _arguments -C \ 69153a5a1b3Sopenharmony_ci {-h,--help}'[display this help and exit]' \ 69253a5a1b3Sopenharmony_ci '--version[show version and exit]' \ 69353a5a1b3Sopenharmony_ci '--dump-conf[show default configuration]' \ 69453a5a1b3Sopenharmony_ci '--dump-modules[show available modules]' \ 69553a5a1b3Sopenharmony_ci '--dump-resample-methods[show available resample methods]' \ 69653a5a1b3Sopenharmony_ci '--cleanup-shm[cleanup shared memory]' \ 69753a5a1b3Sopenharmony_ci '--start[start the daemon]' \ 69853a5a1b3Sopenharmony_ci {-k,--kill}'[kill a running daemon]' \ 69953a5a1b3Sopenharmony_ci '--check[check for a running daemon]' \ 70053a5a1b3Sopenharmony_ci '--system=[run as systemd-wide daemon]:bool:(true false)' \ 70153a5a1b3Sopenharmony_ci {-D,--daemonize=}'[daemonize after startup]:bool:(true false)' \ 70253a5a1b3Sopenharmony_ci '--fail=[quit when startup fails]:bool:(true false)' \ 70353a5a1b3Sopenharmony_ci '--high-priority=[try to set high nice level]:bool:(true false)' \ 70453a5a1b3Sopenharmony_ci '--realtime=[try to enable rt scheduling]:bool:(true false)' \ 70553a5a1b3Sopenharmony_ci '--disallow-module-loading=[disallow module loading]:bool:(true false)' \ 70653a5a1b3Sopenharmony_ci '--disallow-exit=[disallow user requested exit]' \ 70753a5a1b3Sopenharmony_ci '--exit-idle-time=[terminate the daemon on passed idle time]:time' \ 70853a5a1b3Sopenharmony_ci '--scache-idle-time=[unload autoloaded samples on passed idle time]:time' \ 70953a5a1b3Sopenharmony_ci '--log-level=[set the verbosity level]:level' \ 71053a5a1b3Sopenharmony_ci '-v[increase the verbosity level]' \ 71153a5a1b3Sopenharmony_ci '--log-target=[set the log target]:target:(auto syslog stderr file\: new_file\:):file' \ 71253a5a1b3Sopenharmony_ci '--log-meta=[include code location in log messages]:bool:(true false)' \ 71353a5a1b3Sopenharmony_ci '--log-time=[include timestamps in log messages]:bool:(true false)' \ 71453a5a1b3Sopenharmony_ci '--log-backtrace=[include backtrace in log messages]:frames' \ 71553a5a1b3Sopenharmony_ci {-p,--dl-search-path=}'[set the search path for plugins]:dir:_files' \ 71653a5a1b3Sopenharmony_ci '--resample-method=[set the resample method]:method:_resample_methods' \ 71753a5a1b3Sopenharmony_ci '--use-pid-file=[create a PID file]:bool:(true false)' \ 71853a5a1b3Sopenharmony_ci '--no-cpu-limit=[do not install CPU load limiter]:bool:(true false)' \ 71953a5a1b3Sopenharmony_ci '--disable-shm=[disable shared memory support]:bool:(true false)' \ 72053a5a1b3Sopenharmony_ci '--enable-memfd=[enable memfd shared memory support]:bool:(true false)' \ 72153a5a1b3Sopenharmony_ci {-L,--load=}'[load the specified module]:modules:_all_modules' \ 72253a5a1b3Sopenharmony_ci {-F,--file=}'[run the specified script]:file:_files' \ 72353a5a1b3Sopenharmony_ci '-C[open a command line on the running tty]' \ 72453a5a1b3Sopenharmony_ci '-n[do not load the default script file]' \ 72553a5a1b3Sopenharmony_ci} 72653a5a1b3Sopenharmony_ci 72753a5a1b3Sopenharmony_ci_pulseaudio() { 72853a5a1b3Sopenharmony_ci local state line curcontext="$curcontext" 72953a5a1b3Sopenharmony_ci 73053a5a1b3Sopenharmony_ci # Some commands, like pactl and pacat, have an option for specifying the 73153a5a1b3Sopenharmony_ci # server address, like "--server=somehost". If that option is set, then the 73253a5a1b3Sopenharmony_ci # helper commands that are run as part of the autocompletion need to use 73353a5a1b3Sopenharmony_ci # that same option. The option is saved in this variable in _set_remote(), 73453a5a1b3Sopenharmony_ci # which is called in the beginning of _pactl_completion() and others. The 73553a5a1b3Sopenharmony_ci # autocompletion commands can then find the option in that variable if the 73653a5a1b3Sopenharmony_ci # option is set. 73753a5a1b3Sopenharmony_ci local remote 73853a5a1b3Sopenharmony_ci 73953a5a1b3Sopenharmony_ci case $service in 74053a5a1b3Sopenharmony_ci pulseaudio) _pulseaudio_completion;; 74153a5a1b3Sopenharmony_ci pactl) _pactl_completion;; 74253a5a1b3Sopenharmony_ci pacmd) _pacmd_completion;; 74353a5a1b3Sopenharmony_ci pacat) _pacat_completion;; 74453a5a1b3Sopenharmony_ci paplay)_pacat_completion;; 74553a5a1b3Sopenharmony_ci parec) _pacat_completion;; 74653a5a1b3Sopenharmony_ci parecord)_pacat_completion;; 74753a5a1b3Sopenharmony_ci padsp) _padsp_completion;; 74853a5a1b3Sopenharmony_ci pasuspender) _pasuspender_completion;; 74953a5a1b3Sopenharmony_ci *) _message "Err";; 75053a5a1b3Sopenharmony_ci esac 75153a5a1b3Sopenharmony_ci} 75253a5a1b3Sopenharmony_ci 75353a5a1b3Sopenharmony_ci_pulseaudio "$@" 75453a5a1b3Sopenharmony_ci 75553a5a1b3Sopenharmony_ci#vim: set ft=zsh sw=4 ts=4 noet 756