@@ -44,6 +44,8 @@ _add_completion() {
44
44
local cur
45
45
46
46
eval " cur=${_cur} "
47
+ # Save original cur (to restore later)
48
+ local orig_cur=" $cur "
47
49
48
50
# Check if we have the necessary variables
49
51
if [[ -z " ${_cur-} " ]] || [[ -z " ${_var-} " ]]; then
@@ -110,20 +112,32 @@ _add_completion() {
110
112
if [[ -n " $dirpart " ]]; then
111
113
local sep=" /"
112
114
[[ " $dirpart " == " /" ]] && sep=" "
113
-
114
115
for i in " ${! pinyin_matched[@]} " ; do
115
116
pinyin_matched[$i ]=" ${dirpart}${sep}${pinyin_matched[$i]} "
116
117
done
117
118
fi
118
-
119
-
119
+
120
+ local orig_check=" $orig_cur "
121
+ if [[ " $orig_check " == " '" * || " $orig_check " == ' "' * ]]; then
122
+ orig_check=" ${orig_check: 1} "
123
+ fi
124
+ if [[ " $orig_check " == ~ * ]]; then
125
+ for i in " ${! pinyin_matched[@]} " ; do
126
+ if [[ " ${pinyin_matched[$i]} " == " $HOME " ]]; then
127
+ pinyin_matched[$i ]=" ~"
128
+ elif [[ " ${pinyin_matched[$i]} " == $HOME /* ]]; then
129
+ pinyin_matched[$i ]=" ~/${pinyin_matched[$i]# " $HOME /" } "
130
+ fi
131
+ done
132
+ fi
133
+
120
134
local current_results_var=" current_results"
121
135
eval " local -a $current_results_var =(\"\$ {$var_name [@]}\" )"
122
136
123
137
# Merge results and remove duplicates
124
138
local -a all_results
125
139
eval " all_results=(\"\$ {$current_results_var [@]}\" \"\$ {pinyin_matched[@]}\" )"
126
-
140
+
127
141
declare -A seen
128
142
local -a unique_results=()
129
143
for item in " ${all_results[@]} " ; do
@@ -132,7 +146,7 @@ _add_completion() {
132
146
unique_results+=(" $item " )
133
147
fi
134
148
done
135
-
149
+
136
150
eval " $var_name =(\"\$ {unique_results[@]}\" )"
137
151
fi
138
152
}
0 commit comments