Skip to content

Commit 2f9f9e9

Browse files
committed
fix(script): fix completion for ~
Signed-off-by: wxiwnd <[email protected]>
1 parent b1817e8 commit 2f9f9e9

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

scripts/bash_pinyin_completion

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)