X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=usr_share_grml%2Fzsh%2Ffunctions%2FLookup%2FBackends%2FLOOKUP_be_wikipedia;fp=usr_share_grml%2Fzsh%2Ffunctions%2FLookup%2FBackends%2FLOOKUP_be_wikipedia;h=4135666eba2d2d760d2c276998b4535f877a5dc3;hb=1ee27bd79f2b8eae519f6890bc43f5feca13a261;hp=0000000000000000000000000000000000000000;hpb=9ae0b0c0858f15dc7ec46fbd86660dafc3946695;p=grml-etc-core.git diff --git a/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_wikipedia b/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_wikipedia new file mode 100644 index 0000000..4135666 --- /dev/null +++ b/usr_share_grml/zsh/functions/Lookup/Backends/LOOKUP_be_wikipedia @@ -0,0 +1,115 @@ +### vim:ft=zsh:foldmethod=marker +## wikipedia backend for lookup +## Copyright: 2009, Frank Terbeck + +LOOKUP_guard || return 1 +[[ -n ${lookup_describe} ]] && + printf '%s' 'search wikipedia' && + return 0 + +local lookup_context +local -a comp_args private_completions +local -A known_locations + +lookup_context="$(LOOKUP_context)" + +known_locations=( + # yeah, there are more... a lot more. + ca 'Catalan' + cs 'Czech' + da 'Danish' + de 'German' + en 'English' + eo 'Esperanto' + es 'Spanish' + 'fi' 'Finnish' + fr 'French' + hu 'Hungarian' + it 'Italian' + ja 'Japanese' + nl 'Dutch' + no 'Norwegian' + pt 'Portuguese' + pl 'Polish' + ro 'Romanian' + ru 'Russian' + sk 'Slovenian' + sv 'Swedish' + tr 'Turkish' + uk 'Ukrainian' +) + +LOOKUP_guard -fd LOOKUP_help_${backend} || +function LOOKUP_help_${backend}() { + LOOKUP_guard || return 1 + local l + printf 'usage: %s [-l ] \n' ${backend} + printf ' -l use a specific non-default wikipedia location\n' + printf '\n Query wikipedia.org about stuff you don'\''t know. :-)\n' + printf '\nKnown location codes:\n' + for l in ${(kon)known_locations}; do + printf '%6s - %s\n' $l ${known_locations[$l]} + done + printf '\n There are more than that, obviously. Inclusion of codes had to stop\n' + printf ' somewhere, so I settled for codes, that had 100.000+ articles at the time\n' + printf ' of writing. The default location is '\''en'\'', which can be modified via the\n' + printf ' '\''default-location'\'' style in this context:\n' + printf ' %s\n' ${lookup_context} + printf '\n The completion code only completes the known locations by default. If your\n' + printf ' code is missing you can add it via the '\''my-completions'\'' list style,\n' + printf ' looked up in this context: '\'':completion:*:lookup-%s:'\''\n' ${backend} + printf '\nExamples:\n' + printf ' %% zstyle '\'':lookup:*:%s:*'\'' default-location de\n' ${backend} + printf ' %% zstyle '\'':completion:*:lookup-%s:'\'' my-completions gr:Greek\n' ${backend} + printf ' %% lookup %s zsh\n' ${backend} + printf ' %% lookup %s -l de zsh\n' ${backend} + printf ' %% lookup %s -l no zsh\n\n' ${backend} +} +LOOKUP_help && return 0 + +if [[ -n ${lookup_complete} ]] ; then + + zstyle -a ":completion:${curcontext}" my-completions private_completions + + LOOKUP_guard -fd __lookup_${backend}_known_locations || + function __lookup_${backend}_known_locations() { + local l + local -a ls + + ls=(${private_completions}) + for l in ${(k)known_locations}; do + ls+=("$l:${known_locations[$l]}") + done + _describe -t leo_langs 'known locations' ls + } + + comp_args=( + '-l[choose a wikipedia flavour]:known locations:__lookup_'${backend}'_known_locations' + '*:wikipedia search:true' + ) + + _arguments -s -w -A '-*' ${comp_args} && return 0 + _message 'wikipedia search' + return 0 +fi + +local loc +local -A opts +local -x QUERY + +zstyle -s "${lookup_context}" default-location loc || loc='en' + +lu_parseopts_args=( l string ) +LOOKUP_parseopts "$@" || return 1 +[[ -n ${opts[-l]} ]] && loc="${opts[-l]}" + +QUERY="${args[*]}" +LOOKUP_query_handler || return 1 +if [[ -z ${QUERY} ]] ; then + LOOKUP_help -f + return 1 +fi + +LOOKUP_encode -q +LOOKUP_browser "http://${loc}.wikipedia.org/w/wiki.phtml?search=${QUERY}&go=Go" +return $?