1 | #!/bin/bash
|
2 | #
|
3 | # Demo of bash completion fallback. Hm. -D is not chained, and neither is -F
|
4 | # -F.
|
5 | #
|
6 | # Usage:
|
7 | # $ bash --norc --noprofile
|
8 | # $ . completion-demo.bash
|
9 |
|
10 | # NOOP
|
11 | fnone() {
|
12 | echo -n ''
|
13 | }
|
14 |
|
15 | f12() {
|
16 | COMPREPLY=(f1 f2)
|
17 | }
|
18 |
|
19 | f34() {
|
20 | COMPREPLY=(f3 f4)
|
21 | }
|
22 |
|
23 | complete-file() {
|
24 | local cur="${COMP_WORDS[COMP_CWORD]}"
|
25 | # Hm no trailing slash here.
|
26 | COMPREPLY=( $(compgen -A file -- "${cur}") )
|
27 | }
|
28 |
|
29 | # Use -X to filter
|
30 | complete-sh() {
|
31 | local cur="${COMP_WORDS[COMP_CWORD]}"
|
32 | # Hm no trailing slash here.
|
33 | COMPREPLY=( $(compgen -A file -X '!*.sh' -o plusdirs -- "${cur}") )
|
34 | }
|
35 |
|
36 | # default completion
|
37 | complete -F f12 -F f34 -D
|
38 |
|
39 | # empty completion
|
40 | # Oops, does NOT fall back on f34
|
41 | complete -F f12 -F f34 -F fnone -E
|
42 |
|
43 | # Directory names will be completed with trailing slash; this is default readline behavior.
|
44 | complete -A file foo
|
45 |
|
46 | # Hm no trailing slash here. Lame.
|
47 | complete -F complete-sh bar
|
48 |
|
49 | # Aha! This adds trailing slash. The problem is that if you are completing
|
50 | # with -D, you may or may not be completing with a file! Need to use comopt?
|
51 | complete -F complete-sh -o filenames -o bashdefault barf
|
52 |
|
53 | echo 'Installed completions'
|
54 |
|