X-Git-Url: https://git.armaanb.net/?p=charsel.git;a=blobdiff_plain;f=charsel;h=56e1fdf244dfd622206370bb0b014baccb10fe8c;hp=d2e7525e0c246a9b4a4a165d024e169ce22c9d74;hb=fbbee478d81f974898259ba4307c1660fe72758d;hpb=76db80f5cf647e9aa47cd1404e7acd5107166dfb diff --git a/charsel b/charsel index d2e7525..56e1fdf 100755 --- a/charsel +++ b/charsel @@ -19,53 +19,103 @@ ######################################################################## -# Merge global and local charfiles +# Define argument functions +function usage() { + echo "Usage: /usr/bin/charsel [OPTION]... [CHARFILE]... +A simple terminal character selector + -h show this message + -l show installed charfiles + -d show readme + --all include hidden shortcodes + +Exit status: + 0 okay, + 1 invalid charfile + 2 usage error/invalid option" +} + CHARDIR=$HOME/.cache/charsel +function list() { + echo "The following charfiles are installed:" + ls $CHARDIR/charfiles +} -if [[ ! -d $CHARDIR ]] -then - mkdir $CHARDIR/ -elif [[ ! "$(ls -A $CHARDIR)" ]] -then - cp -rf /usr/share/charsel/- $CHARDIR/ - cp -rf $HOME/.local/share/charsel/- $CHARDIR/ -fi +function readme() { + cat /usr/share/doc/charsel/README.md +} + +function invalid_charfile() { + echo "The selected charfile is missing or invalid" + list + exit 1 +} + +# Look for arguments +while getopts ":lhd" arg +do + case ${arg} in + h) + usage + exit 0 + ;; + l) + list + exit 0 + ;; + d) + readme + exit 0 + ;; + ?) + echo "Invalid option" + usage + exit 2 + ;; + :) + break + ;; + esac +done +shift $((OPTIND-1)) -# Check for xclip -if [[ ! -f "$(which xclip)" ]] +# Check if Xclip is installed +if [[ -x xclip ]] then echo "Please install xclip." exit 1 fi -# Check for user inputs -if [[ $1 == "-l" \ - || $1 == "--list" ]] +# Merge global and local charfiles +if [[ -d $CHARDIR ]] then - echo "The following charfiles are installed:" - ls $CHARDIR/charfiles - exit 0 -elif [[ $1 == "-h" \ - || $1 == "--help" ]] + rm -rf $CHARDIR/* +else + mkdir $CHARDIR +fi + +LOCALCHARDIR=$HOME/.local/share/charsel/charfiles +if [[ ! -d $LOCALCHARDIR ]] then - cat /usr/share/doc/charsel/usage - exit 0 -elif [[ $1 == "-d" \ - || $1 == "--doc" ]] + mkdir -p $LOCALCHARDIR +fi + +localdirfiles=($LOCALCHARDIR/*) +if [[ ! -z "${#localdirfiles[*]}" ]] then - cat /usr/share/doc/charsel/README.md - exit 0 + cp -rf $LOCALCHARDIR/../* $CHARDIR fi -# Define charfile path -CHARFILE=$CHARDIR/charfiles/$1 +globaldirfiles=($/usr/share/charfiles/) +if [[ ! -z "${#globaldirfiles[*]}" ]] +then + cp -rf /usr/share/charsel/* $CHARDIR +fi -# Check if given charfile exists +# Check if charfile exists +CHARFILE="$CHARDIR/charfiles/$1" if [[ ! -f $CHARFILE ]] then - echo "Please enter a valid charfile." - charsel -l - exit 1 + invalid_charfile fi # Define length of shortcode @@ -87,15 +137,10 @@ do if [[ $2 == "--all" ]] then - cat $CHARFILE \ - | sed -e '/^[ \t]*#/d' \ - | tail -n +2 \ + cat $CHARFILE | sed -e '/^[ \t]*#/d' | tail -n +2 \ | column -t -N input,output --output-separator ' | ' --separator ',' else - cat $CHARFILE \ - | sed -e '/^[ \t]*#/d' \ - | grep -A 100 - \ - | tail -n +2 \ + cat $CHARFILE | sed -e '/^[ \t]*#/d' | grep -A 100 - | tail -n +2 \ | column -t -N input,output --output-separator ' | ' --separator ',' fi @@ -110,26 +155,19 @@ do # This can definately be simplifed, but it works fine # Finds line number of shortcode - LINENUMBER=$(cut -f 1 -d ',' -s $CHARFILE \ - | grep -wn $INPUT \ - | cut -d : -f 1) + LINENUMBER=$(cut -f 1 -d ',' -s $CHARFILE | grep -wn $INPUT | cut -d : -f 1) - # Outputs charachter selected above - OUTPUT=$(cut -f 2 -d ',' -s $CHARFILE \ - | head -$LINENUMBER \ - | tail +$LINENUMBER) + # Outputs character selected above + OUTPUT=$(cut -f 2 -d ',' -s $CHARFILE | head -$LINENUMBER | tail +$LINENUMBER) # Check to see if the shortcode actually exists - if [[ $(cut -f 1 -d ',' -s $CHARFILE \ - | grep -wnc $INPUT) == "0" ]] + if [[ $(cut -f 1 -d ',' -s $CHARFILE | grep -wnc $INPUT) == "0" ]] then OUTPUT="" fi # Copy output to clipboard - echo $OUTPUT \ - | xclip -selection clipboard + echo $OUTPUT | xclip -selection clipboard clear - done