#compdef open _open_absolute_application_path() { local expl curcontext zstyle -T ":completion:${curcontext}:files" prefix-needed && \ [[ "$PREFIX" != [/~]* && compstate[nmatches] -ne 0 ]] && return 1 _wanted files expl 'application file' _path_files -P "$PREFIX[1]" -W / } _open() { local curcontext="$curcontext" state line expl _arguments -C \ '-a[specify application]: :->open_mac_applications' \ '-e[open with TextEdit]' \ '-f[reads input from standard input and opens with TextEdit]' \ '*: :->open_files' case "$state" in open_mac_applications) _alternative \ "commands: :_mac_applications" \ "files:: _open_absolute_application_path" ;; open_files) local app if [[ -n "$words[(r)-a]" ]]; then app="${(Q)words[words[(i)-a] + 1]}" elif [[ -n "$words[(r)-e]" || -n "$words[(r)-f]" ]]; then app="Text Edit" fi if [[ -n "$app" ]]; then _wanted files expl "file for $app" _mac_files_for_application "$app" else _webbrowser fi ;; esac } _open "$@"