From fb6a6c80c00dd4a20889cbeedcb04ecfd33a45f8 Mon Sep 17 00:00:00 2001 From: Konstantin Gredeskoul Date: Sat, 7 May 2016 04:23:03 -0700 Subject: [PATCH] Highlighting color of enabled components --- lib/helpers.bash | 0 lib/history.bash | 0 lib/search.bash | 79 ++++++++++++++++++++++++++++++++++++++------ test/lib/search.bats | 6 ++-- 4 files changed, 72 insertions(+), 13 deletions(-) mode change 100755 => 100644 lib/helpers.bash mode change 100755 => 100644 lib/history.bash diff --git a/lib/helpers.bash b/lib/helpers.bash old mode 100755 new mode 100644 diff --git a/lib/history.bash b/lib/history.bash old mode 100755 new mode 100644 diff --git a/lib/search.bash b/lib/search.bash index 5d7d9bb0..1d7b302f 100644 --- a/lib/search.bash +++ b/lib/search.bash @@ -1,4 +1,3 @@ - # This function returns list of aliases, plugins and completions in bash-it, # whose name or description matches one of the search terms provided as arguments. # @@ -18,11 +17,23 @@ _bash-it-search() { _example '$ _bash-it-search ruby rvm rake bundler' declare -a _components=(aliases plugins completions) + for _component in "${_components[@]}" ; do - _bash-it-search-component "${_component}" "$*" + _bash-it-search-component "${_component}" "$@" done } +# +# array=("something to search for" "a string" "test2000") +# _bash-it-array-contains-element "a string" "${array[@]}" +# ( prints "true" or "false" ) +_bash-it-array-contains-element () { + local e + local r=false + for e in "${@:2}"; do [[ "$e" == "$1" ]] && r=true; done + echo -n $r +} + _bash-it-search-component() { _about 'searches for given terms amongst a given component' _param '1: component type, one of: [ aliases | plugins | completions ]' @@ -31,24 +42,72 @@ _bash-it-search-component() { _example '$ _bash-it-search-component aliases rake bundler' _component=$1 + local func=_bash-it-${_component} local help=$($func) - shift + + # if one of the search terms is --enable or --disable, we will apply + # this action to the result set interactively. + local cmd action component_singular + declare -a _search_commands=(enable disable) + for _search_command in "${_search_commands[@]}"; do + if [[ $(_bash-it-array-contains-element "--${_search_command}" "$@") == "true" ]]; then + cmd=$_search_command + component_singular=${_component} + component_singular=${component_singular/es/} # aliases -> alias + component_singular=${component_singular/ns/n} # plugins -> plugin + action="_${cmd}-${component_singular}" + break + fi + done + declare -a terms=($@) declare -a matches=() local _grep=$(which egrep || which grep) for term in "${terms[@]}"; do - local term_match=($(echo "${help}"| ${_grep} -i -- ${term} | cut -d ' ' -f 1 | tr '\n' ' ')) + if [[ "${term}" =~ "--" ]]; then + continue + fi + # print asterisk next to each command that is already enabled + local term_match=($(echo "${help}"| ${_grep} -i -- ${term} | cut -b -30 | sed 's/ *\[ \]//g;s/ *\[x\]/*/g;' )) [[ "${#term_match[@]}" -gt 0 ]] && { matches=(${matches[@]} ${term_match[@]}) } done - [[ -n "$NO_COLOR" && color_on="" ]] || color_on="\e[1;32m" - [[ -n "$NO_COLOR" && color_off="" ]] || color_off="\e[0;0m" - - if [[ "${#matches[*]}" -gt 0 ]] ; then - printf "%-12s: ${color_on}%s${color_off}\n" "${_component}" "$(echo -n ${matches[*]} | tr ' ' '\n' | sort | uniq | tr '\n' ' ' | sed 's/ $//g')" - fi + _bash-it-search-result $action # "${matches[@]}" unset matches } + +_bash-it-search-result() { + local action=shift + local color_component color_enable color_disable color_off + + [[ -z "$NO_COLOR" ]] && { + color_component='\e[0;33m' + color_enable='\e[1;32m' + color_disable='\e[0;0m' + color_off='\e[0;0m' + } + + [[ -n "$NO_COLOR" ]] && { + color_enable='*' + } + + if [[ "${#matches[*]}" -gt 0 ]] ; then + printf "${color_component}%-12s:${color_off} " "${_component}" + sorted_matches=($(echo "${matches[*]}" | tr ' ' '\n' | sort | uniq)) + for match in "${sorted_matches[@]}"; do + local match_color + if [[ $match =~ "*" ]]; then + match_color=$color_enable + else + match_color=$color_disable + fi + printf " ${match_color}${match/\*/}${color_off}" + done + + printf "\n" + fi + +} diff --git a/test/lib/search.bats b/test/lib/search.bats index 7a3efc84..9baede99 100644 --- a/test/lib/search.bats +++ b/test/lib/search.bats @@ -17,7 +17,7 @@ NO_COLOR=true @test "helpers search all ruby et al" { run _bash-it-search 'ruby' 'gem' 'bundle' 'rake' 'rails' - [[ "${lines[0]}" == 'aliases : bundler rails' ]] - [[ "${lines[1]}" == 'plugins : chruby chruby-auto ruby' ]] - [[ "${lines[2]}" == 'completions : bundler gem rake' ]] + [[ "${lines[0]/\*/}" == 'aliases : bundler rails' ]] + [[ "${lines[1]/\*/}" == 'plugins : chruby chruby-auto ruby' ]] + [[ "${lines[2]/\*/}" == 'completions : bundler gem rake' ]] }