From 51dd2a377a021bff361dbea019a86ed8715bfa44 Mon Sep 17 00:00:00 2001 From: "Morgan (hi/him)" Date: Thu, 21 Dec 2023 11:33:34 +0000 Subject: [PATCH] Add functions.sh --- functions.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 functions.sh diff --git a/functions.sh b/functions.sh new file mode 100644 index 0000000..4e36f8b --- /dev/null +++ b/functions.sh @@ -0,0 +1,39 @@ +bold=$(tput bold) +reset=$(tput sgr0) +purple=$(tput setaf 171) +green=$(tput setaf 76) +tan=$(tput setaf 3) + +header() { + printf "\n${bold}${purple}========== %s ==========${reset}\n" "$@" +} +arrow() { + printf " ➜ %s\n" "$@" +} +success() { + printf "${green} ✔ %s${reset}\n" "$@" +} +warning() { + printf "${tan} ➜ %s${reset}\n" "$@" +} +function top_commands_full() { + local filter="$1" + local max_results=${2:-'50'} + history | \cat | awk '{$1=$1};1' | sed 's/^[0-9\* TAB]*//g' | awk '{CMD[$0]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "%\t" a; }' | grep "$filter" | sort -nr | nl | head "-n$max_results" +} +function suggest_aliases() { + local search_input_size=${1:-'50'} + header "alias recommendations" + while read -r line; do + local matching_aliases=$(alias | grep -i "$line") + if [ ! -z "$matching_aliases" ]; then + success "there is an alias for $line :" + while read -r alias_line; do + arrow "$alias_line" + done < <(echo "$matching_aliases") + echo + else + warning "no alias for $line" + fi + done < <(top_commands_full "" "$search_input_size" | awk '{ $1=""; $2=""; $3=""; print}' | awk 'NF' | awk '{$1=$1};1' | awk -v COUNT=1 'NF>COUNT' | head "-$search_input_size") +} \ No newline at end of file