From 640a840d2e94f0fc245ef8632050c37af23c6b94 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Thu, 15 Apr 1999 18:21:49 +0000 Subject: zsh-3.1.5-pws-13 --- Completion/Commands/_correct_filename | 47 +++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) (limited to 'Completion/Commands') diff --git a/Completion/Commands/_correct_filename b/Completion/Commands/_correct_filename index 582555587..27295738c 100644 --- a/Completion/Commands/_correct_filename +++ b/Completion/Commands/_correct_filename @@ -6,18 +6,46 @@ # # You can adapt max_approx to the maximum number of mistakes # which are allowed in total. +# +# If the numeric prefix is greater than 1, the maximum number of errors +# will be set to that. + +# Doesn't get right special characters in the filename; should +# strip them (e.g. "foo\ bar" -> "foo bar") and then re-insert them. emulate -LR zsh setopt extendedglob -local file="$PREFIX$SUFFIX" trylist +local file="$PREFIX$SUFFIX" trylist tilde etilde testcmd integer approx max_approx=6 -[[ -z $WIDGET ]] && file=$1 +if [[ -z $WIDGET ]]; then + file=$1 + local IPREFIX +else + (( NUMERIC > 1 )) && max_approx=$NUMERIC +fi + +if [[ $file = \~*/* ]]; then + tilde=${file%%/*} + etilde=${~tilde} + file=${file/#$tilde/$etilde} +fi + +if [[ $CURRENT -eq 1 && $file != /* ]]; then + testcmd=1 +elif [[ $file = \=* ]]; then + [[ -n $WIDGET ]] && PREFIX="$PREFIX[2,-1]" + IPREFIX="${IPREFIX}=" + file="$file[2,-1]" + testcmd=1 +fi -if [[ -e "$file" ]]; then +# We need the -Q's to avoid the tilde we've put back getting quoted. +if [[ -z $testcmd && -e "$file" ]] || + { [[ -n $testcmd ]] && whence "$file" >&/dev/null }; then if [[ -n $WIDGET ]]; then - compadd -U -i "$IPREFIX" "$file" + compadd -QUf -i "$IPREFIX" "${file/#$etilde/$tilde}" [[ -n "$compstate[insert]" ]] && compstate[insert]=menu else print "$file" @@ -26,14 +54,19 @@ if [[ -e "$file" ]]; then fi for (( approx = 1; approx <= max_approx; approx++ )); do - trylist=( (#a$approx)"$file"(N) ) + if [[ -z $testcmd ]]; then + trylist=( (#a$approx)"$file"(N) ) + else + trylist=( "${(@)${(@f)$(whence -wm "(#a$approx)$file" 2>/dev/null)}%:*}" ) + [[ $file = */* ]] || trylist=(${trylist##*/}) + fi (( $#trylist )) && break done (( $#trylist )) || return 1 if [[ -n $WIDGET ]]; then - compadd -U -i "$IPREFIX" -U "${trylist[@]}" + compadd -QUf -i "$IPREFIX" "${trylist[@]/#$etilde/$tilde}" [[ -n "$compstate[insert]" ]] && compstate[insert]=menu else - print "${trylist[@]}" + print "$IPREFIX${^trylist[@]}" fi -- cgit 1.4.1