|
|
- # -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
- # Copyright (c) 2018-2019 Sebastian Gniazdowski
-
- (( next_word = 2 | 8192 ))
- local THEFD check __first_call="$1" __wrd="$2" __start_pos="$3" __end_pos="$4"
- local __style
-
- (( ! ${+FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]} )) && \
- FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=0
-
- (( ! ${+FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]} )) && {
- is-at-least 5.0.6 && local __res=1 || local __res=0
- FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]="$__res"
- }
-
- -fast-whatis-chroma-callback() {
- emulate -L zsh
- setopt extendedglob warncreateglobal typesetsilent
-
- local THEFD="$1" input check=2 nl=$'\n' __wrd __style
-
- .fast-zts-read-all "$THEFD" input
-
- zle -F "$THEFD"
- exec {THEFD}<&-
-
- __wrd="${${input#[^$nl]#$nl}%%$nl*}"
- if [[ "$input" = test* ]]; then
- if [[ "${input%$nl}" = *[^0-9]'0' ]]; then
- if [[ "${input#test$nl}" = *nothing\ appropriate* ]]; then
- FAST_HIGHLIGHT[whatis_chroma_type]=2
- else
- FAST_HIGHLIGHT[whatis_chroma_type]=0
- fi
- else
- FAST_HIGHLIGHT[whatis_chroma_type]=1
- fi
- elif [[ "$input" = type2* ]]; then
- [[ "$input" != *nothing\ appropriate* ]] && check=1 || check=0
- elif [[ "$input" = type1* ]]; then
- [[ "${input%$nl}" = *0 ]] && check=1 || check=0
- fi
-
- if (( check != 2 )); then
- FAST_HIGHLIGHT[whatis-cache-$__wrd]=$check
- if (( check )) then
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}
- elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}
- else
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}
- fi
- local -a start_end
- start_end=( ${(s:/:)${${(M)${${input#type?${nl}[^$nl]#$nl}}#*$nl}%$nl}} )
- (( start_end[1] >= 0 )) && region_highlight+=("$start_end[1] $start_end[2] $__style")
- zle -R
- fi
-
- FAST_HIGHLIGHT[whatis_chroma_callback_was_ran]=1
- return 0
- }
-
- zle -N -- -fast-whatis-chroma-callback
-
- if (( __first_call )) && [[ -z "${FAST_HIGHLIGHT[whatis_chroma_type]}" ]] ;then
- if ! command -v whatis > /dev/null; then
- FAST_HIGHLIGHT[whatis_chroma_type]=0
- return 1
- fi
-
- exec {THEFD}< <(
- print "test"
- LANG=C whatis "osx whatis fallback check"
- print "$?"
- )
- command true # a workaround of Zsh bug
- zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback
- fi
-
- [[ "$__arg_type" = 3 ]] && return 2
-
- if (( in_redirection > 0 || this_word & 128 )) || [[ $__wrd == "<<<" ]]; then
- return 1
- fi
-
- if (( __first_call )) || [[ "$__wrd" = -* ]]; then
- return 1
- elif (( ! FAST_HIGHLIGHT[whatis_chroma_type] )); then
- # Return 1 (i.e. treat the argument as a path) only if the callback have
- # had a chance to establish the whatis_chroma_type field
- (( FAST_HIGHLIGHT[whatis_chroma_callback_was_ran] )) && return 1
- else
- if [[ -z "${FAST_HIGHLIGHT[whatis-cache-$__wrd]}" ]]; then
- if (( FAST_HIGHLIGHT[whatis_chroma_type] == 2 )); then
- exec {THEFD}< <(
- print "type2"
- print "$__wrd"
- (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} ))
- print "$__start/$__end"
- LANG=C whatis "$__wrd" 2>/dev/null
- )
- command true # see above
- zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback
- else
- exec {THEFD}< <(
- print "type1"
- print "$__wrd"
- (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER} ))
- print "$__start/$__end"
- LANG=C whatis "$__wrd" &> /dev/null
- print "$?"
- )
- command true
- zle -F ${${FAST_HIGHLIGHT[whatis_chroma_zle_-F_have_-w_opt]:#0}:+-w} "$THEFD" -fast-whatis-chroma-callback
- fi
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}
- (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \
- reply+=("$__start $__end $__style")
- else
- check=${FAST_HIGHLIGHT[whatis-cache-$__wrd]}
- if (( check )) then
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}correct-subtle]}
- elif [[ ${~__wrd} = */* && -e ${~__wrd} ]] then
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}path]}
- elif (( FAST_HIGHLIGHT[whatis_chroma_type] )); then
- __style=${FAST_HIGHLIGHT_STYLES[${FAST_THEME_NAME}incorrect-subtle]}
- fi
- [[ -n "$__style" ]] && \
- (( __start=__start_pos-${#PREBUFFER}, __end=__end_pos-${#PREBUFFER}, __start >= 0 )) && \
- reply+=("$__start $__end $__style")
- fi
- fi
- (( this_word = next_word ))
- _start_pos=$_end_pos
-
- return 0
-
- # vim:ft=zsh:et:sw=4:sts=4
|