Skip to content

Commit 80b0889

Browse files
authored
Merge pull request #153 from Shadoukun/master
Fix zsh autocompletion for tag and untag commands -t|--tags argument.
2 parents 854d2b6 + b68039a commit 80b0889

File tree

1 file changed

+53
-7
lines changed

1 file changed

+53
-7
lines changed

misc/zsh/_tmsu

+53-7
Original file line numberDiff line numberDiff line change
@@ -104,25 +104,71 @@ _tmsu_tag_values() {
104104
local tag=${PREFIX%=*}
105105
local escapedTag=$tag:gs/:/\\:/:gs/=/\\\\=/
106106

107-
_call_program tmsu tmsu $db values 2>/dev/null | \
107+
# set PREFIX to partial value
108+
if (( ${(w)#PREFIX#*=} ))
109+
then
110+
PREFIX="${PREFIX#*=}"
111+
# or an empty string
112+
else
113+
PREFIX=""
114+
fi
115+
116+
IPREFIX="${IPREFIX}${tag}="
117+
118+
_call_program tmsu tmsu $db values $tag 2>/dev/null | \
108119
while read value
109120
do
110121
local escapedValue=$value:gs/:/\\:/
111122
escapedValue=$escapedValue:gs/=/\\=/
112123

113-
value_list+=("$escapedTag=$escapedValue")
124+
value_list+=("$escapedValue")
114125
done
115126

116127
_describe -t values 'values' value_list
117128
}
118129

119130
# the set of tags, or values for that tag if ending =
120131
_tmsu_tags_with_values() {
121-
if [[ -prefix *= ]]
132+
133+
# add quote to end of IPREFIX if missing.
134+
if [[ $IPREFIX =~ '--.*' || IPREFIX =~ '.*\"' ]]
122135
then
123-
_tmsu_tag_values
124-
else
136+
IPREFIX="${IPREFIX}\""
137+
fi
138+
139+
if [[ ${PREFIX} == '' ]] # if prefix is empty
140+
then
141+
_tmsu_tags
142+
return
143+
fi
144+
145+
# if following a space
146+
if [[ ${(Q)PREFIX[-1]} == ' ' ]]
147+
then
148+
if (( ${(w)#PREFIX} >= 1 ))
149+
then
150+
IPREFIX="${(Q)IPREFIX}${(Q)PREFIX}"
151+
PREFIX=""
152+
fi
153+
125154
_tmsu_tags
155+
return
156+
157+
else
158+
# If theres more than one word, append to IPREFIX
159+
if (( ${(w)#PREFIX} > 1 ))
160+
then
161+
IPREFIX="${(Q)IPREFIX}${(Q)PREFIX[1,(w)-2]} "
162+
PREFIX="${PREFIX[(w)-1]}"
163+
fi
164+
165+
# If last inputted word contains =
166+
if [[ ${PREFIX} =~ '.+\=.*' ]]
167+
then
168+
_tmsu_tag_values
169+
else
170+
_tmsu_tags
171+
fi
126172
fi
127173
}
128174

@@ -236,7 +282,7 @@ _tmsu_query() {
236282

237283
# set of files
238284
_tmsu_setting_names() {
239-
if [[ -prefix *^= ]]
285+
if [[ -prefix *^= ]]
240286
then
241287
typeset -a setting_names
242288
local name
@@ -417,7 +463,7 @@ _tmsu_cmd_tags() {
417463
if (( ${+opt_args[--value]} ))
418464
then
419465
_wanted values expl 'values' _tmsu_values
420-
else
466+
else
421467
_wanted files expl 'files' _files
422468
fi
423469
esac

0 commit comments

Comments
 (0)