diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2007-02-25 22:44:51 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2007-02-25 22:44:51 +0000 |
commit | d98959ab6729d6c849a00ebcb2d9f72ac9959b28 (patch) | |
tree | af524cde5580bc525cccd004a528711b317493c5 /Completion/Base/Utility | |
parent | 9d55e0002c850ff5697598e00b5245d246e61f8f (diff) | |
download | zsh-d98959ab6729d6c849a00ebcb2d9f72ac9959b28.tar.gz zsh-d98959ab6729d6c849a00ebcb2d9f72ac9959b28.tar.xz zsh-d98959ab6729d6c849a00ebcb2d9f72ac9959b28.zip |
23186: _ip completion and regex handling additions
Diffstat (limited to 'Completion/Base/Utility')
-rw-r--r-- | Completion/Base/Utility/_regex_words | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/Completion/Base/Utility/_regex_words b/Completion/Base/Utility/_regex_words new file mode 100644 index 000000000..1cc9e9ccc --- /dev/null +++ b/Completion/Base/Utility/_regex_words @@ -0,0 +1,44 @@ +#autoload + +local opt OPTARG +local term=$'\0' + +while getopts "t:" opt; do + case $opt in + (t) + term=$OPTARG + ;; + + (*) + return 1 + ;; + esac +done +shift $(( OPTIND - 1 )) + +local tag=$1 +local desc=$2 +shift 2 + +reply=(\() + +integer i +local -a wds + +for (( i = 1; i <= $#; i++ )); do + wds=(${(s.:.)argv[i]}) + reply+=(/${wds[1]//\**/"[^$term]#"}"$term"/) + if [[ $term = $'\0' ]]; then + reply+=(":${tag}:${desc}:(( ${wds[1]//\*}:${wds[2]//(#m)[: \(\)]/\\$MATCH} ))") + else + # HERE: we should add the terminator instead of a space, but + # there doesn't appear to be an easy way of doing that. + reply+=(":${tag}:${desc}:(( ${wds[1]//\*}${term//(#m)[: \(\)]/\\$MATCH}:${wds[2]//(#m)[: \(\)]/\\$MATCH} ))") + fi + eval "reply+=($wds[3])" + if (( $i == $# )); then + reply+=(\)) + else + reply+=(\|) + fi +done |