1
1
# Utility xfunc functions for array manipulations -*- shell-script -*-
2
2
3
3
# Filter the array elements with the specified condition.
4
- # @param $1 Array name (that is not "value" or other internal variable names)
4
+ # @param $1 Array name (that is not "value", "_*" or other internal variable
5
+ # names)
5
6
# @param $2 When any of the options `-EFG' is specified, the second argument is
6
7
# used as a pattern string whose meaning is determined by the option `-EFG'.
7
8
# Otherwise, the second argument specifies the command that tests the array
53
54
# unchanged. ]
54
55
_comp_xfunc_ARRAY_filter ()
55
56
{
56
- local _comp_local_flags =' ' _comp_local_pattype =' ' _comp_local_anchoring =' '
57
- local OPTIND=1 OPTARG=' ' OPTERR=0 _comp_local_opt =' '
58
- while getopts ' EFGpsmxrC' _comp_local_opt " $@ " ; do
59
- case $_comp_local_opt in
60
- [EFG]) _comp_local_pattype= $_comp_local_opt ;;
61
- [psmx]) _comp_local_anchoring= $_comp_local_opt ;;
62
- [rC]) _comp_local_flags= $_comp_local_opt$_comp_local_flags ;;
57
+ local _flags =' ' _pattype =' ' _anchoring =' '
58
+ local OPTIND=1 OPTARG=' ' OPTERR=0 _opt =' '
59
+ while getopts ' EFGpsmxrC' _opt " $@ " ; do
60
+ case $_opt in
61
+ [EFG]) _pattype= $_opt ;;
62
+ [psmx]) _anchoring= $_opt ;;
63
+ [rC]) _flags= $_opt$_flags ;;
63
64
* )
64
65
printf ' bash_completion: %s: %s\n' " $FUNCNAME " ' usage error' >&2
65
66
printf ' usage: %s %s\n' " $FUNCNAME " " [-EFGpsmxrC] ARRAY_NAME CONDITION" >&2
@@ -76,76 +77,76 @@ _comp_xfunc_ARRAY_filter()
76
77
elif [[ $1 != [a-zA-Z_]* ([a-zA-Z_0-9]) ]]; then
77
78
printf ' bash_completion: %s: %s\n' " $FUNCNAME " " invalid array name '$1 '." >&2
78
79
return 2
79
- elif [[ $1 == @ (_comp_local_ * | OPTIND| OPTARG| OPTERR) ]]; then
80
+ elif [[ $1 == @ (_ * | OPTIND| OPTARG| OPTERR) ]]; then
80
81
printf ' bash_completion: %s: %s\n' " $FUNCNAME " " array name '$1 ' is reserved for internal uses" >&2
81
82
return 2
82
- elif [[ ! $_comp_local_pattype && $1 == value ]]; then
83
+ elif [[ ! $_pattype && $1 == value ]]; then
83
84
printf ' bash_completion: %s: %s\n' " $FUNCNAME " " array name '$1 ' cannot be used for the predicate" >&2
84
85
return 2
85
86
fi
86
87
# When the array is empty:
87
88
eval " ((\$ {#$1 [@]}))" || return 0
88
89
89
- local _comp_local_predicate =' ' _comp_local_pattern =$2
90
- case $_comp_local_pattype in
90
+ local _predicate =' ' _pattern =$2
91
+ case $_pattype in
91
92
E)
92
- case $_comp_local_anchoring in
93
- p) _comp_local_predicate =' [[ $_comp_local_value =~ ^($_comp_local_pattern ) ]]' ;;
94
- s) _comp_local_predicate =' [[ $_comp_local_value =~ ($_comp_local_pattern )$ ]]' ;;
95
- x) _comp_local_predicate =' [[ $_comp_local_value =~ ^($_comp_local_pattern )$ ]]' ;;
96
- * ) _comp_local_predicate =' [[ $_comp_local_value =~ $_comp_local_pattern ]]' ;;
93
+ case $_anchoring in
94
+ p) _predicate =' [[ $_value =~ ^($_pattern ) ]]' ;;
95
+ s) _predicate =' [[ $_value =~ ($_pattern )$ ]]' ;;
96
+ x) _predicate =' [[ $_value =~ ^($_pattern )$ ]]' ;;
97
+ * ) _predicate =' [[ $_value =~ $_pattern ]]' ;;
97
98
esac
98
99
;;
99
100
F)
100
- case $_comp_local_anchoring in
101
- p) _comp_local_predicate =' [[ $_comp_local_value == "$_comp_local_pattern "* ]]' ;;
102
- s) _comp_local_predicate =' [[ $_comp_local_value == *"$_comp_local_pattern " ]]' ;;
103
- x) _comp_local_predicate =' [[ $_comp_local_value == "$_comp_local_pattern " ]]' ;;
104
- * ) _comp_local_predicate =' [[ $_comp_local_value == *"$_comp_local_pattern "* ]]' ;;
101
+ case $_anchoring in
102
+ p) _predicate =' [[ $_value == "$_pattern "* ]]' ;;
103
+ s) _predicate =' [[ $_value == *"$_pattern " ]]' ;;
104
+ x) _predicate =' [[ $_value == "$_pattern " ]]' ;;
105
+ * ) _predicate =' [[ $_value == *"$_pattern "* ]]' ;;
105
106
esac
106
107
;;
107
108
G)
108
- case $_comp_local_anchoring in
109
- p) _comp_local_predicate =' [[ $_comp_local_value == $_comp_local_pattern * ]]' ;;
110
- s) _comp_local_predicate =' [[ $_comp_local_value == *$_comp_local_pattern ]]' ;;
111
- m) _comp_local_predicate =' [[ $_comp_local_value == *$_comp_local_pattern * ]]' ;;
112
- * ) _comp_local_predicate =' [[ $_comp_local_value == $_comp_local_pattern ]]' ;;
109
+ case $_anchoring in
110
+ p) _predicate =' [[ $_value == $_pattern * ]]' ;;
111
+ s) _predicate =' [[ $_value == *$_pattern ]]' ;;
112
+ m) _predicate =' [[ $_value == *$_pattern * ]]' ;;
113
+ * ) _predicate =' [[ $_value == $_pattern ]]' ;;
113
114
esac
114
115
;;
115
116
* )
116
117
if type -t " $2 " & > /dev/null; then
117
- _comp_local_predicate =" $2 \"\$ _comp_local_value \" "
118
+ _predicate =" $2 \"\$ _value \" "
118
119
else
119
- _comp_local_predicate =" local -x value=\$ _comp_local_value ; $2 "
120
+ _predicate =" local -x value=\$ _value ; $2 "
120
121
fi
121
122
;;
122
123
esac
123
124
124
- local _comp_local_unset =' ' _comp_local_expected_status =0
125
- [[ $_comp_local_flags == * r* ]] && _comp_local_expected_status =1
125
+ local _unset =' ' _expected_status =0
126
+ [[ $_flags == * r* ]] && _expected_status =1
126
127
127
- local _comp_local_indices _comp_local_index _comp_local_value
128
- eval " _comp_local_indices =(\"\$ {!$1 [@]}\" )"
129
- for _comp_local_index in " ${_comp_local_indices [@]} " ; do
130
- eval " _comp_local_value =\$ {$1 [\$ _comp_local_index ]}; $_comp_local_predicate "
128
+ local _indices _index _value
129
+ eval " _indices =(\"\$ {!$1 [@]}\" )"
130
+ for _index in " ${_indices [@]} " ; do
131
+ eval " _value =\$ {$1 [\$ _index ]}; $_predicate "
131
132
case $? in
132
- " $_comp_local_expected_status " ) continue ;;
133
+ " $_expected_status " ) continue ;;
133
134
[01])
134
- unset -v " $1 [\$ _comp_local_index ]"
135
- _comp_local_unset =1
135
+ unset -v " $1 [\$ _index ]"
136
+ _unset =1
136
137
;;
137
138
27) break ;;
138
139
* )
139
140
printf ' bash_completion: %s: %s\n' " $FUNCNAME " \
140
- " filter condition broken '${_comp_local_pattype : +-$_comp_local_pattype } $2 '" >&2
141
+ " filter condition broken '${_pattype : +-$_pattype } $2 '" >&2
141
142
return 2
142
143
;;
143
144
esac
144
145
done
145
146
146
147
# Compaction of the sparse array
147
- [[ $_comp_local_flags == * C* ]] ||
148
+ [[ $_flags == * C* ]] ||
148
149
eval " ((\$ {#$1 [@]})) && $1 =(\"\$ {$1 [@]}\" )"
149
150
150
- [[ ! $_comp_local_unset ]]
151
+ [[ ! $_unset ]]
151
152
}
0 commit comments