source: roaraudio/plugins/bash/roaraudio @ 5135:2e2850aa6df2

Last change on this file since 5135:2e2850aa6df2 was 5124:d5f2eee3d3b8, checked in by phi, 13 years ago

done some updates to bash completion file, still need some more updates, see #174

File size: 18.4 KB
Line 
1#
2#  /etc/bash_completion.d/roaraudio
3#
4# Bash completion function for the RoarAudio.
5# http://roaraudio.keep-cool.org/
6#
7# Philipp "ph3-der-loewe" Schafft <lion@lion.leolix.org>
8# --
9#
10
11# Tools supported completly:
12#roarctl
13#roard
14#roarvumeter
15#roarcat
16#roarmon
17#roarinterconnect
18#roarcatplay
19#roarradio
20#roarvorbis
21#roarbidir
22#roarphone
23#roarcatvio
24#roarcatpassfh
25#roarcatsendfile
26#roarcatad
27#roarcat2sock
28#roartypes
29#roarsocktypes
30
31# Tools supported partly:
32#roarify
33
34# Tools not supported at all:
35#roarfilt
36#roarfish
37#roarlight
38#roarshout
39#roarsin
40
41# Tools not supported at all and unimportent:
42#roarfctest
43#roarsockconnect
44
45# Unsupported devel tools:
46#roar-config
47
48# The rest:
49#roarmonhttp
50
51_roar_no_opts() {
52    COMPREPLY=()
53}
54complete -F _roar_no_opts roarsocktypes roartypes
55
56_roar_server() {
57    COMPREPLY=( $(_roar_server_exec "$1") )
58}
59
60_roar_server_exec() {
61 local cur link words nodes stdsocks x11sock
62 cur="$1"
63 link=$(readlink /etc/roarserver 2> /dev/null)
64
65 nodes=$(grep '^\(node\|executor\)' /etc/decnet.conf 2> /dev/null | sed 's/^.*\tname\t\t*//; s/\t.*$//; s/$/::/')
66
67 stdsocks="/tmp/roar $HOME/.roar localhost 0.0";
68
69 x11sock=$(xprop -root 2>/dev/null | grep '^ROAR_SERVER(STRING) = ' | sed 's/^[^"]*"//; s/"$//')
70
71 words="$link $nodes $stdsocks $x11sock +slp +fork +abstract"
72
73 compgen -A hostname $cur
74 compgen -W "$words" $cur
75}
76
77_roar_jumbo_mtu() {
78    COMPREPLY=($(compgen -W "750 1000 1100 1200 1300" -- "${COMP_WORDS[COMP_CWORD]}")) 
79}
80
81_roar_rate() {
82    local cur
83    cur="${COMP_WORDS[COMP_CWORD]}"
84    COMPREPLY=($(compgen -W "8000 16000 32000 11025 22050 44100 48000 96000" -- ${cur})) 
85}
86
87_roar_bits() {
88    local cur
89    cur="${COMP_WORDS[COMP_CWORD]}"
90    COMPREPLY=($(compgen -W "8 16 24 32" -- ${cur})) 
91}
92
93_roar_channels() {
94    local cur
95    cur="${COMP_WORDS[COMP_CWORD]}"
96    COMPREPLY=($(compgen -W "1 2 3 4 5 6 7 8 9" -- ${cur})) 
97}
98
99_roar_codec() {
100    local cur
101    cur="${COMP_WORDS[COMP_CWORD]}"
102    words=$(roard --list-cf | tail -n +4 | sed 's/^ *//; s/ .*$//')
103    COMPREPLY=($(compgen -W "${words} default pcm" -- ${cur})) 
104}
105
106_roar_flag() {
107    local cur
108    cur="${COMP_WORDS[COMP_CWORD]}"
109    COMPREPLY=($(compgen -W "meta primary sync cleanmeta hwmixer pause mute mmap antiecho recsource passmixer virtual prethru immutable enhance singlesink" -- ${cur}))
110}
111
112_roar_dir() {
113    local cur
114    cur="${COMP_WORDS[COMP_CWORD]}"
115    COMPREPLY=($(compgen -W "play record monitor filter output mixing meta bidir thru bridge midi_in midi_out light_in light_out raw_in raw_out complex_in complex_out rdtcs_in rdtcs_out" -- ${cur}))
116}
117
118_roar_metatype() {
119    local cur
120    cur="${COMP_WORDS[COMP_CWORD]}"
121#phi@ph7:roaraudio $ echo $(grep '^#define ROAR_META_TYPE_' include/roaraudio/meta.h  | cut -d_ -f4,5,6,7,8,9 | cut -d' ' -f1 | tr A-Z a-z)
122    COMPREPLY=($(compgen -W "none title album author autor artist version date license tracknumber organization description genre location contact streamurl homepage thumbnail length comment other filename fileurl server duration www woaf encoder encodedby year discid rpg_track_peak rpg_track_gain rpg_album_peak rpg_album_gain hash signalinfo audioinfo offset performer copyright likeness composer rights isrc language gtin isbn ean publisher discnumber sourcemedia label labelno" -- ${cur}))
123}
124
125_roar_baseopts() {
126    case "$1" in
127        '--rate')
128            _roar_rate
129            return 0
130            ;;
131        '--bits')
132            _roar_bits
133            return 0
134            ;;
135        '--chans')
136            _roar_channels
137            return 0
138            ;;
139        '--server')
140            _roar_server "${COMP_WORDS[COMP_CWORD]}"
141            return 0
142            ;;
143        *)
144        ;;
145    esac
146
147  return 77
148}
149
150_roar_basecodec() {
151    case "$1" in
152        '--codec')
153            _roar_codec
154            return 0
155            ;;
156        *)
157        ;;
158    esac
159
160  return 77
161}
162
163
164_roar_baseclients() {
165    local cur prev opts dirs
166    COMPREPLY=()
167    cur="${COMP_WORDS[COMP_CWORD]}"
168    prev="${COMP_WORDS[COMP_CWORD-1]}"
169
170    dirs="--wave --midi --light --raw --complex --rdtcs"
171    opts="$dirs --server --rate -R --bits -B --chans -C --codec --rel-id --help"
172
173    [ "${COMP_WORDS[0]}" = "roarmon" ] && opts="$opts --prethru"
174
175    _roar_baseopts  "$prev" && return 0;
176    _roar_basecodec "$prev" && return 0;
177
178    case "${prev}" in
179        '-R')
180            _roar_rate
181            return 0
182            ;;
183        '-B')
184            _roar_bits
185            return 0
186            ;;
187        '-C')
188            _roar_channels
189            return 0
190            ;;
191        *)
192        ;;
193    esac
194
195   _filedir
196   COMPREPLY=(${COMPREPLY[*]} $(compgen -W "${opts}" -- ${cur}))
197   return 0
198}
199complete -F _roar_baseclients roarcat roarmon
200
201_roarcatplay() {
202    local cur prev opts
203    COMPREPLY=()
204    cur="${COMP_WORDS[COMP_CWORD]}"
205
206    opts="--server --simple --passive --background --verbose --help"
207
208    case "${COMP_WORDS[COMP_CWORD-1]}" in
209        '--server')
210            _roar_server "$cur"
211            return 0
212            ;;
213        *)
214        ;;
215    esac
216
217   _filedir
218   COMPREPLY=(${COMPREPLY[*]} $(compgen -W "${opts}" -- ${cur}))
219   return 0
220}
221complete -F _roarcatplay roarcatplay
222
223_roarvumeter() {
224    local cur prev opts
225    COMPREPLY=()
226    cur="${COMP_WORDS[COMP_CWORD]}"
227    prev="${COMP_WORDS[COMP_CWORD-1]}"
228
229    opts="--server --rate --bits --chans --samples --pc --db --beat --lowpass --help"
230
231    _roar_baseopts "$prev" && return 0;
232
233    case "${prev}" in
234        '--samples')
235            COMPREPLY=($(compgen -W "5000 50000" -- ${cur})) 
236            return 0
237            ;;
238        '--lowpass')
239            COMPREPLY=($(compgen -W "100 200 300 400 500" -- ${cur})) 
240            return 0
241            ;;
242        *)
243        ;;
244    esac
245
246   COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
247   return 0
248}
249complete -F _roarvumeter roarvumeter
250
251_roarradio() {
252    local cur prev opts
253    COMPREPLY=()
254    cur="${COMP_WORDS[COMP_CWORD]}"
255    prev="${COMP_WORDS[COMP_CWORD-1]}"
256
257    opts="--server --rate --bits --chans --codec --help"
258
259    _roar_baseopts  "$prev" && return 0;
260    _roar_basecodec "$prev" && return 0;
261
262   COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
263   return 0
264}
265complete -F _roarradio roarradio
266
267_roarvorbis() {
268    local cur prev opts
269    COMPREPLY=()
270    cur="${COMP_WORDS[COMP_CWORD]}"
271    prev="${COMP_WORDS[COMP_CWORD-1]}"
272
273    opts="--server --vclt-out --help"
274
275    case "${prev}" in
276        '--vclt-out')
277            _filedir
278            return 0
279            ;;
280        '--server')
281            _roar_server "$cur"
282            return 0
283            ;;
284        *)
285        ;;
286    esac
287
288   COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
289   return 0
290}
291complete -F _roarvorbis roarvorbis
292
293
294_roarinterconnect() {
295    local cur prev opts
296    COMPREPLY=()
297    cur="${COMP_WORDS[COMP_CWORD]}"
298    prev="${COMP_WORDS[COMP_CWORD-1]}"
299
300    opts="--server --remote --type --rate --bits --chans --codec --help"
301
302    _roar_baseopts  "$prev" && return 0;
303    _roar_basecodec "$prev" && return 0;
304
305    case "${prev}" in
306        '--remote')
307            _roar_server "$cur"
308            return 0
309            ;;
310        '--type')
311            COMPREPLY=($(compgen -W "roar esd bidir filter transmit receive" -- ${cur})) 
312            return 0
313            ;;
314        *)
315        ;;
316    esac
317
318   COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
319   return 0
320}
321complete -F _roarinterconnect roarinterconnect
322
323_roarbidir() {
324    local cur prev opts
325    COMPREPLY=()
326    cur="${COMP_WORDS[COMP_CWORD]}"
327    prev="${COMP_WORDS[COMP_CWORD-1]}"
328
329    opts="--server --rate --bits --chans --codec --help"
330
331    _roar_baseopts  "$prev" && return 0;
332    _roar_basecodec "$prev" && return 0;
333
334   _filedir
335   COMPREPLY=(${COMPREPLY[*]} $(compgen -W "${opts}" -- ${cur}))
336   return 0
337}
338complete -F _roarbidir roarbidir roarcatvio roarcatpassfh roarcatsendfile
339
340_roarcatad() {
341    local cur prev opts
342    COMPREPLY=()
343    cur="${COMP_WORDS[COMP_CWORD]}"
344    prev="${COMP_WORDS[COMP_CWORD-1]}"
345
346    opts="--server --rate --bits --chans --help"
347
348    _roar_baseopts  "$prev" && return 0;
349
350   _filedir
351   COMPREPLY=(${COMPREPLY[*]} $(compgen -W "${opts}" -- ${cur}))
352   return 0
353}
354complete -F _roarcatad roarcatad roarcat2sock
355
356_roarphone() {
357    local cur prev opts mopts
358    COMPREPLY=()
359    cur="${COMP_WORDS[COMP_CWORD]}"
360    prev="${COMP_WORDS[COMP_CWORD-1]}"
361
362    mopts="--m-rn --m-nick --m-email --m-hp --m-thumbn --m-loc --m-org"
363    opts="--server --jumbo-mtu --io-flush --rate --bits --chans --afi-downmix --afi-lowpass --afi-speex-prep --afi-speex-denoise --afi-speex-agc --afi-speex-vad --codec --transcode --driver --device --antiecho --threshold --help $mopts"
364
365    _roar_baseopts  "$prev" && return 0;
366    _roar_basecodec "$prev" && return 0;
367
368    case "${prev}" in
369        '--jumbo-mtu')
370            _roar_jumbo_mtu
371            return 0
372            ;;
373        '--io-flush')
374            return 0
375            ;;
376        '--afi-lowpass')
377            return 0
378            ;;
379        '--driver')
380            return 0
381            ;;
382        '--device')
383            _filedir
384            return 0
385            ;;
386        '--antiecho')
387            COMPREPLY=($(compgen -W "none simple speex roard" -- ${cur})) 
388            return 0
389            ;;
390        '--threshold')
391            return 0
392            ;;
393        '--m-rn')
394            return 0
395            ;;
396        '--m-nick')
397            COMPREPLY=($(compgen -W "$USER" -- ${cur})) 
398            return 0
399            ;;
400        '--m-email')
401            COMPREPLY=($(compgen -W "$USER@$HOSTNAME" -- ${cur})) 
402            return 0
403            ;;
404        '--m-hp')
405            return 0
406            ;;
407        '--m-thumbn')
408            return 0
409            ;;
410        '--m-loc')
411            return 0
412            ;;
413        '--m-org')
414            return 0
415            ;;
416        *)
417        ;;
418    esac
419
420   COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
421   return 0
422}
423complete -F _roarphone roarphone
424
425_roarctl() {
426    local cur prev pprev opts cmds
427    COMPREPLY=()
428    cur="${COMP_WORDS[COMP_CWORD]}"
429    prev="${COMP_WORDS[COMP_CWORD-1]}"
430
431    pprev="--NX-COMMAND--"
432    if [ "$COMP_CWORD" -ge 2 ]
433    then
434     pprev="${COMP_WORDS[COMP_CWORD-2]}"
435    fi
436
437    if [ "$COMP_CWORD" -ge 3 ]
438    then
439     if [ "${COMP_WORDS[COMP_CWORD-3]}" = 'newvirtual' ]
440     then
441      _roar_codec
442      return 0
443     fi
444     if [ "$COMP_CWORD" -ge 4 ]
445     then
446      if [ "${COMP_WORDS[COMP_CWORD-4]}" = 'newvirtual' ]
447      then
448       _roar_rate
449       return 0
450      fi
451      if [ "$COMP_CWORD" -ge 5 ]
452      then
453       if [ "${COMP_WORDS[COMP_CWORD-5]}" = 'newvirtual' ]
454       then
455        _roar_bits
456        return 0
457       fi
458       if [ "$COMP_CWORD" -ge 6 ]
459       then
460        if [ "${COMP_WORDS[COMP_CWORD-6]}" = 'newvirtual' ]
461        then
462         _roar_channels
463         return 0
464        fi
465       fi
466      fi
467     fi
468    fi
469
470    opts="--server --help --verbose -v --list-aiprofiles"
471    cmds="help sleep ping whoami listaiprofiles aiprofileget standby off resume on standbymode exit terminate volume flag unflag kick newvirtual metaget metasave metaload serveroinfo listclients liststreams allinfo"
472
473    case "${pprev}" in
474        'volume')
475            COMPREPLY=($(compgen -W "mono stereo 1 2 3 4 5 6 7 8 9" -- ${cur})) 
476            return 0
477            ;;
478        'flag')
479            _roar_flag
480            return 0
481            ;;
482        'unflag')
483            _roar_flag
484            return 0
485            ;;
486        'kick')
487            return 0
488            ;;
489        'newvirtual')
490            _roar_dir
491            return 0
492            ;;
493        'metaget')
494            _roar_metatype
495            return 0
496            ;;
497        'metasave')
498            _filedir
499            return 0
500            ;;
501        'metaload')
502            _filedir
503            return 0
504            ;;
505       *)
506        ;;
507    esac
508
509    case "${prev}" in
510        '--server')
511            _roar_server "$cur"
512            return 0
513            ;;
514        'sleep')
515            return 0
516            ;;
517        'ping')
518            return 0
519            ;;
520        'aiprofileget')
521            COMPREPLY=($(compgen -W "$(roarctl --list-aiprofiles | grep '^Profile Name *: *' | sed 's/^.*: *//')" -- ${cur})) 
522            return 0
523            ;;
524        'volume')
525            return 0
526            ;;
527        'flag')
528            return 0
529            ;;
530        'unflag')
531            return 0
532            ;;
533        'kick')
534            COMPREPLY=($(compgen -W "client stream sample source" -- ${cur})) 
535            return 0
536            ;;
537        'newvirtual')
538            return 0
539            ;;
540        'metaget')
541            return 0
542            ;;
543        'metasave')
544            return 0
545            ;;
546        'metaload')
547            return 0
548            ;;
549        *)
550        ;;
551    esac
552
553   COMPREPLY=($(compgen -W "${opts} ${cmds}" -- ${cur}))
554   return 0
555}
556
557complete -F _roarctl roarctl
558
559_roard()
560{
561    local cur prev opts
562    local opts_misc opts_auth opts_plugins opts_audio opts_stream opts_rolestack opts_output opts_source opts_cf opts_midi opts_light opts_rdtcs opts_x11 opts_server
563    COMPREPLY=()
564    cur="${COMP_WORDS[COMP_CWORD]}"
565    prev="${COMP_WORDS[COMP_CWORD-1]}"
566
567    #
568    #  The basic options we'll complete.
569    #
570    opts_misc="--daemon --verbose --terminate --start --restart --stop --shutdown --realtime --memlock --chroot --setgid --setuid --sysclocksync --location --description --pidfile --log-syslog --script-postdown"
571    opts_auth="--guest-acclev --trust-acclev --trust-root --no-trust-root --authfile-gen --authfile-load --authfile-type --authfile-acclev --new-authfile"
572    opts_plugins="--plugin-load"
573    opts_audio="--rate --bits --chans -R -B -C --aiprofile"
574    opts_stream="--stream-flags"
575    opts_rolestack="--list-rolestack --rolestack-push"
576    opts_output="--odriver --odevice -o -O -oO -oP -oN --list-driver"
577    opts_source="--source -s -S -sO -sP -sN --list-sources"
578    opts_mixer="-m --mixer -mO -mN -mP --list-mixers"
579    opts_cf="--list-cf"
580    opts_midi="--midi-no-console --midi-console-enable --midi-console --ssynth-enable --ssynth-disable"
581    opts_light="--light-channels"
582    opts_rdtcs="--rds-pi --rds-ps --rds-pty --rds-tp --rds-ct"
583    opts_x11="--x11-display --display"
584    opts_server="--tcp --unix --decnet -t -u -n -4 -6 -64 --port -p --bind -b --sock --proto --proto-dir --proto-rate --proto-bits --proto-codec --proto-chans --list-proto --list-profiles --proto-profile --proto-aiprofile --list-aiprofiles --new-sock --slp --x11 --jumbo-mtu -G -U --no-listen --client-fh --close-fh --standby --auto-standby"
585
586    opts="$opts_misc $opts_auth $opts_plugins $opts_audio $opts_stream $opts_rolestack $opts_output $opts_source $opts_mixer $opts_cf $opts_midi $opts_light $opts_rdtcs $opts_x11 $opts_server --help"
587
588
589    #
590    #  Complete the arguments to some of the basic commands.
591    #
592    case "${prev}" in
593# DIR/FILE:
594        '--chroot')
595            _filedir -d
596            return 0
597            ;;
598        '--pidfile')
599            _filedir
600            return 0
601            ;;
602        '--script-postdown')
603            _filedir
604            return 0
605            ;;
606        '--plugin-load')
607            _filedir
608            return 0
609            ;;
610        '--authfile-gen'|'--authfile-load')
611            _filedir
612            return 0
613            ;;
614# MemLock:
615        '--memlock')
616            COMPREPLY=($(compgen -W "none low medium high nearlyall nearlyallsys allcur all default" -- ${cur})) 
617            return 0
618            ;;
619# Acclev
620        '--guest-acclev'|'--trust-acclev'|'--authfile-acclev')
621            COMPREPLY=($(compgen -W "none idented conctl guest user pwruser all" -- ${cur})) 
622            return 0
623            ;;
624        '--authfile-type')
625            COMPREPLY=($(compgen -W "roar esd pulse htpasswd xauth" -- ${cur})) 
626            return 0
627            ;;
628# String:
629        '--location'|'--description')
630            return 0
631            ;;
632# Int:
633        '--rate'|'-R'|'--proto-rate')
634            _roar_rate
635            return 0
636            ;;
637        '--bits'|'-B'|'--proto-bits')
638            _roar_bits
639            return 0
640            ;;
641        '--chans'|'-C'|'--proto-chans')
642            _roar_channels
643            return 0
644            ;;
645        '--light-channels')
646            COMPREPLY=($(compgen -W "512 1024 1536 2048 4096 8192" -- ${cur})) 
647            return 0
648            ;;
649        '--jumbo-mtu')
650            _roar_jumbo_mtu
651            return 0
652            ;;
653# C=F:
654        '--stream-flags')
655            return 0
656            ;;
657# R:A
658        '--rolestack-push')
659            return 0
660            ;;
661# driver:
662        '--odriver'|'-o')
663            words=$(roard --list-driver | tail -n +3 | sed 's/^ *//; s/ .*$//')
664            COMPREPLY=($(compgen -W "${words}" -- ${cur})) 
665            return 0
666            ;;
667# Source:
668        '--source'|'-s')
669            words=$(roard --list-sources | tail -n +3 | sed 's/^ *//; s/ .*$//')
670            COMPREPLY=($(compgen -W "${words}" -- ${cur})) 
671            return 0
672            ;;
673# Device:
674# FIXME: add support for non file devices
675        '--odevice'|'-O')
676            _filedir
677            return 0
678            ;;
679        '-S')
680            _filedir
681            return 0
682            ;;
683        '--midi-console')
684            _filedir
685            return 0
686            ;;
687# Options:
688        '-dO')
689            return 0
690            ;;
691        '-oO')
692            return 0
693            ;;
694        '-sO')
695            return 0
696            ;;
697# RDS:
698        '--rds-pi')
699            return 0
700            ;;
701        '--rds-ps')
702            return 0
703            ;;
704        '--rds-pty')
705            return 0
706            ;;
707# X11:
708        '--x11-display'|'--display')
709            return 0
710            ;;
711# Port:
712        '--port'|'-p')
713            COMPREPLY=( $( compgen -s $cur ) )
714            return 0
715            ;;
716# Host/Node/File:
717        '--bind'|'-b')
718            COMPREPLY=( $( compgen -A hostname $cur ) "0.0.0.0" )
719            return 0
720            ;;
721        '--sock')
722            _filedir
723            return 0
724            ;;
725# Proto:
726        '--proto')
727            words=$(roard --list-proto | tail -n +3 | sed 's/^ *//; s/ .*$//')
728            COMPREPLY=($(compgen -W "${words}" -- ${cur})) 
729            return 0
730            ;;
731        '--proto-profile')
732            words=$(roard --list-profiles | tail -n +3 | sed 's/^ *//; s/ .*$//')
733            COMPREPLY=($(compgen -W "${words}" -- ${cur}))
734            return 0
735            ;;
736        '--proto-aiprofile'|'--aiprofile')
737            words=$(roarctl --list-aiprofiles | grep '^Profile Name' | sed 's/^.*: *//')
738            COMPREPLY=($(compgen -W "${words}" -- ${cur}))
739            return 0
740            ;;
741# FH:
742        '--client-fh')
743            words=$(command ls /proc/self/fd 2> /dev/null)
744            COMPREPLY=($(compgen -W "${words}" -- ${cur})) 
745            return 0
746            ;;
747        '--close-fh')
748            words=$(command ls /proc/self/fd 2> /dev/null)
749            COMPREPLY=($(compgen -W "${words}" -- ${cur})) 
750            return 0
751            ;;
752# Dir:
753        '--proto-dir')
754            _roar_dir
755            return 0;
756            ;;
757# Codec:
758        '--proto-codec')
759            _roar_codec
760            return 0;
761            ;;
762
763        *)
764        ;;
765    esac
766
767   COMPREPLY=($(compgen -W "${opts}" -- ${cur})) 
768   return 0
769}
770complete -F _roard roard
771
772complete -F _command roarify
773
774# vim:ft=sh:
775
776#ll
Note: See TracBrowser for help on using the repository browser.