NoPaste

pactl-Completion

von smutbert
SNIPPET_DESC:
/usr/share/bash-completion/completions/pactl aus pulseaudio
SNIPPET_CREATION_TIME:
27.02.2021 23:15:26
SNIPPET_PRUNE_TIME:
27.08.2021 00:15:26

SNIPPET_TEXT:
  1. #!/bin/bash
  2.  
  3. __cards () {
  4.     while IFS=$'\t' read idx name _; do
  5.         printf "%s %s\n" "$idx" "$name"
  6.     done < <(pactl list cards short 2> /dev/null)
  7. }
  8.  
  9. #...
  10.  
  11. __profiles () {
  12.     pactl list cards 2> /dev/null | awk -- \
  13.         '/^\tProfiles:/ {
  14.             flag=1; next
  15.         }
  16.  
  17.         /^\t[A-Za-z]/ {
  18.             flag=0
  19.         }
  20.  
  21.         flag {
  22.             if (/^\t\t[A-Za-z]/)
  23.                 profiles = profiles substr($0, 3, index($0, ": ")-3) " "
  24.         }
  25.  
  26.         END {
  27.             print profiles
  28.         }'
  29. }
  30.  
  31. #...
  32.  
  33. _pactl() {
  34.     local cur prev words cword preprev command
  35.     local comps
  36.     local flags='-h --help --version -s --server= --client-name='
  37.     local list_types='short sinks sources sink-inputs source-outputs cards
  38.                     modules samples clients'
  39.     local commands=(stat info list exit upload-sample play-sample remove-sample
  40.                     load-module unload-module move-sink-input move-source-output
  41.                     suspend-sink suspend-source set-card-profile set-default-sink
  42.                     set-sink-port set-default-source set-source-port set-sink-volume
  43.                     set-source-volume set-sink-input-volume set-source-output-volume
  44.                     set-sink-mute set-source-mute set-sink-input-mute
  45.                     set-source-output-mute set-sink-formats set-port-latency-offset
  46.                     subscribe help)
  47.  
  48.     _init_completion -n = || return
  49.     preprev=${words[$cword-2]}
  50.  
  51.     for word in "${COMP_WORDS[@]}"; do
  52.         if in_array "$word" "${commands[@]}"; then
  53.             command=$word
  54.             break
  55.         fi
  56.     done
  57.  
  58.     case $preprev in
  59.         list) COMPREPLY=($(compgen -W 'short' -- "$cur")) ;;
  60.  
  61.         #...
  62.  
  63.         set-card-profile)
  64.             comps=$(__profiles)
  65.             COMPREPLY=($(compgen -W '${comps[*]}' -- "$cur"))
  66.             ;;
  67.  
  68.         #...
  69.        
  70.     esac
  71.     [[ $COMPREPLY ]] && return 0
  72.  
  73.     #...
  74.    
  75.     [[ $COMPREPLY ]] && return 0
  76.  
  77.     case $cur in
  78.         --server=*)
  79.             cur=${cur#*=}
  80.             _known_hosts_real "$cur"
  81.             ;;
  82.  
  83.         -*)
  84.             COMPREPLY=($(compgen -W '${flags[*]}' -- "$cur"))
  85.             [[ $COMPREPLY == *= ]] && compopt -o nospace
  86.             ;;
  87.  
  88.         *)
  89.             [[ -z $command ]] && COMPREPLY=($(compgen -W '${commands[*]}' -- "$cur"))
  90.             ;;
  91.     esac
  92. }
  93. complete -F _pactl pactl

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN