@@ -44,6 +44,8 @@ _add_completion() {
4444 local cur
4545
4646 eval " cur=${_cur} "
47+ # Save original cur (to restore later)
48+ local orig_cur=" $cur "
4749
4850 # Check if we have the necessary variables
4951 if [[ -z " ${_cur-} " ]] || [[ -z " ${_var-} " ]]; then
@@ -110,20 +112,32 @@ _add_completion() {
110112 if [[ -n " $dirpart " ]]; then
111113 local sep=" /"
112114 [[ " $dirpart " == " /" ]] && sep=" "
113-
114115 for i in " ${! pinyin_matched[@]} " ; do
115116 pinyin_matched[$i ]=" ${dirpart}${sep}${pinyin_matched[$i]} "
116117 done
117118 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+
120134 local current_results_var=" current_results"
121135 eval " local -a $current_results_var =(\"\$ {$var_name [@]}\" )"
122136
123137 # Merge results and remove duplicates
124138 local -a all_results
125139 eval " all_results=(\"\$ {$current_results_var [@]}\" \"\$ {pinyin_matched[@]}\" )"
126-
140+
127141 declare -A seen
128142 local -a unique_results=()
129143 for item in " ${all_results[@]} " ; do
@@ -132,7 +146,7 @@ _add_completion() {
132146 unique_results+=(" $item " )
133147 fi
134148 done
135-
149+
136150 eval " $var_name =(\"\$ {unique_results[@]}\" )"
137151 fi
138152}
0 commit comments