Add zsh-lookup sub-system
[grml-etc-core.git] / usr_share_grml / zsh / functions / Lookup / LOOKUP_query_handler
1 ### vim:ft=zsh:foldmethod=marker
2 ## run query handlers
3 ## Copyright: 2009, Frank Terbeck <ft@bewatermyfriend.org>
4
5 LOOKUP_guard || return 1
6 local old_lookup_ei qh qh_return ret
7 local -a qhs
8
9 zstyle -t "${lookup_context}" debug &&
10     printf 'LOOKUP_query_handler: current context: "%s"\n' "${lookup_context}"
11
12 (( lookup_use_qh == 0 )) && return 0
13 zstyle -a "${lookup_context}" query-handlers qhs || return 0
14
15 qh_return=0
16 old_lookup_ei=${lookup_ei}
17 lookup_ei='-queryhandler-'
18 for qh in ${qhs} ; do
19     if (( ${+functions[LOOKUP_qh_$qh]} == 0 )) ; then
20         printf 'query-handler %s requires this function: %s\n' "${qa}" "LOOKUP_qh_${qh}"
21         printf 'Hit any key to continue...\n'
22         read -k 1
23     else
24         if [[ ${lookup_qh_arg-wasunset} == 'wasunset' ]] ; then
25             LOOKUP_qh_${qh}
26             ret=$?
27         else
28             LOOKUP_qh_${qh} ${lookup_qh_arg}
29             ret=$?
30         fi
31         case ${ret} in
32             (1) # stop processing
33                 break
34                 ;;
35             (2) # clear QUERY and stop processing
36                 QUERY=''
37                 break
38                 ;;
39             (3) # clear QUERY and stop processing and return 1
40                 # which means, the backends are supposed to return 1, too.
41                 # thus, no browser will be called.
42                 QUERY=''
43                 qh_return=1
44                 break
45                 ;;
46             (0|*) # just continue
47                 ;;
48         esac
49     fi
50 done
51 lookup_ei=${old_lookup_ei}
52 return ${qh_return}