| 
								
							 | 
							
								# -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
							 | 
						
						
						
							| 
								
							 | 
							
								# Copyright (c) 2018 Sebastian Gniazdowski
							 | 
						
						
						
							| 
								
							 | 
							
								#
							 | 
						
						
						
							| 
								
							 | 
							
								# It runs given command, which in general will be a git command,
							 | 
						
						
						
							| 
								
							 | 
							
								# automatically looking at cache first (a field named *-cache,
							 | 
						
						
						
							| 
								
							 | 
							
								# in FAST_HIGHLIGHT), which is valid for 5 seconds, and in case
							 | 
						
						
						
							| 
								
							 | 
							
								# of outdated or not existing cache, runs the command, splitting
							 | 
						
						
						
							| 
								
							 | 
							
								# on new-lines, first checking if PWD is inside git repository.
							 | 
						
						
						
							| 
								
							 | 
							
								#
							 | 
						
						
						
							| 
								
							 | 
							
								# FAST_HIGHLIGHT hash serves as container for variables that
							 | 
						
						
						
							| 
								
							 | 
							
								# prevents creating them in global scope. (P) flag is not used,
							 | 
						
						
						
							| 
								
							 | 
							
								# output array is fixed (__lines_list).
							 | 
						
						
						
							| 
								
							 | 
							
								#
							 | 
						
						
						
							| 
								
							 | 
							
								# $1 - the command, e.g. "git remote"; 2>/dev/null redirection is
							 | 
						
						
						
							| 
								
							 | 
							
								#      added automatically
							 | 
						
						
						
							| 
								
							 | 
							
								# $2 - FAST_HIGHLIGHT field name, e.g. "chroma-git-branches"; two
							 | 
						
						
						
							| 
								
							 | 
							
								#      additional fields will be used, $2-cache, $2-cache-born-at
							 | 
						
						
						
							| 
								
							 | 
							
								# $3 - what to remove from beginning of the lines returned by the
							 | 
						
						
						
							| 
								
							 | 
							
								#      command
							 | 
						
						
						
							| 
								
							 | 
							
								# $4 - cache validity time, default 5 (seconds)
							 | 
						
						
						
							| 
								
							 | 
							
								#
							 | 
						
						
						
							| 
								
							 | 
							
								# Output: array __lines_list, with output of the (git) command ran
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								# User should not forget to define this array, the below code
							 | 
						
						
						
							| 
								
							 | 
							
								# will only ensure that it's array (can also define a global)
							 | 
						
						
						
							| 
								
							 | 
							
								typeset -ga __lines_list
							 | 
						
						
						
							| 
								
							 | 
							
								local -a __response
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								if [[ $1 == --status ]] {
							 | 
						
						
						
							| 
								
							 | 
							
								    integer __status=1
							 | 
						
						
						
							| 
								
							 | 
							
								    shift
							 | 
						
						
						
							| 
								
							 | 
							
								}
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								if [[ -z ${FAST_HIGHLIGHT[$2-cache]} || $(( EPOCHSECONDS - FAST_HIGHLIGHT[$2-cache-born-at] )) -gt ${4:-5} ]]; then
							 | 
						
						
						
							| 
								
							 | 
							
								    FAST_HIGHLIGHT[$2-cache-born-at]=$EPOCHSECONDS
							 | 
						
						
						
							| 
								
							 | 
							
								    if [[ "$(command git rev-parse --is-inside-work-tree 2>/dev/null)" = true ]]; then
							 | 
						
						
						
							| 
								
							 | 
							
								        __response=( ${${(f)"$(command ${(Qz)${1#+}} 2>/dev/null)"}#$3} )
							 | 
						
						
						
							| 
								
							 | 
							
								        integer retval=$?
							 | 
						
						
						
							| 
								
							 | 
							
								        if (( __status )) {
							 | 
						
						
						
							| 
								
							 | 
							
								            __response=( $retval )
							 | 
						
						
						
							| 
								
							 | 
							
								            __lines_list=( $retval )
							 | 
						
						
						
							| 
								
							 | 
							
								        } else {
							 | 
						
						
						
							| 
								
							 | 
							
								            [[ "$1" = "+"* ]] && \
							 | 
						
						
						
							| 
								
							 | 
							
								                __lines_list+=( "${__response[@]}" ) || \
							 | 
						
						
						
							| 
								
							 | 
							
								                __lines_list=( "${__response[@]}" )
							 | 
						
						
						
							| 
								
							 | 
							
								        }
							 | 
						
						
						
							| 
								
							 | 
							
								    else
							 | 
						
						
						
							| 
								
							 | 
							
								        __lines_list=()
							 | 
						
						
						
							| 
								
							 | 
							
								    fi
							 | 
						
						
						
							| 
								
							 | 
							
								    FAST_HIGHLIGHT[$2-cache]="${(j:;:)__response}"
							 | 
						
						
						
							| 
								
							 | 
							
								else
							 | 
						
						
						
							| 
								
							 | 
							
								    # Quoted (s:;:) flag without @ will skip empty elements. It
							 | 
						
						
						
							| 
								
							 | 
							
								    # still produces array output, interesingly. All this is for
							 | 
						
						
						
							| 
								
							 | 
							
								    # the trailing ";" above, to skip last, empty element.
							 | 
						
						
						
							| 
								
							 | 
							
								    [[ "$1" = "+"* ]] && \
							 | 
						
						
						
							| 
								
							 | 
							
								        __lines_list+=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" ) || \
							 | 
						
						
						
							| 
								
							 | 
							
								        __lines_list=( "${(@s:;:)FAST_HIGHLIGHT[$2-cache]}" )
							 | 
						
						
						
							| 
								
							 | 
							
								fi
							 | 
						
						
						
							| 
								
							 | 
							
								
							 | 
						
						
						
							| 
								
							 | 
							
								# vim:ft=zsh:et:sw=4
							 |