--- /dev/null
+### vim:ft=zsh:foldmethod=marker
+## run query handlers
+## Copyright: 2009, Frank Terbeck <ft@bewatermyfriend.org>
+
+LOOKUP_guard || return 1
+local old_lookup_ei qh qh_return ret
+local -a qhs
+
+zstyle -t "${lookup_context}" debug &&
+ printf 'LOOKUP_query_handler: current context: "%s"\n' "${lookup_context}"
+
+(( lookup_use_qh == 0 )) && return 0
+zstyle -a "${lookup_context}" query-handlers qhs || return 0
+
+qh_return=0
+old_lookup_ei=${lookup_ei}
+lookup_ei='-queryhandler-'
+for qh in ${qhs} ; do
+ if (( ${+functions[LOOKUP_qh_$qh]} == 0 )) ; then
+ printf 'query-handler %s requires this function: %s\n' "${qa}" "LOOKUP_qh_${qh}"
+ printf 'Hit any key to continue...\n'
+ read -k 1
+ else
+ if [[ ${lookup_qh_arg-wasunset} == 'wasunset' ]] ; then
+ LOOKUP_qh_${qh}
+ ret=$?
+ else
+ LOOKUP_qh_${qh} ${lookup_qh_arg}
+ ret=$?
+ fi
+ case ${ret} in
+ (1) # stop processing
+ break
+ ;;
+ (2) # clear QUERY and stop processing
+ QUERY=''
+ break
+ ;;
+ (3) # clear QUERY and stop processing and return 1
+ # which means, the backends are supposed to return 1, too.
+ # thus, no browser will be called.
+ QUERY=''
+ qh_return=1
+ break
+ ;;
+ (0|*) # just continue
+ ;;
+ esac
+ fi
+done
+lookup_ei=${old_lookup_ei}
+return ${qh_return}