X-Git-Url: https://git.armaanb.net/?p=charsel.git;a=blobdiff_plain;f=charsel;h=6e687e681f7c54bfe9d6915e34b6f4f456249765;hp=56e1fdf244dfd622206370bb0b014baccb10fe8c;hb=5a438f89bca0f0d143ece98d3aa149d97a354702;hpb=fbbee478d81f974898259ba4307c1660fe72758d diff --git a/charsel b/charsel index 56e1fdf..6e687e6 100755 --- a/charsel +++ b/charsel @@ -19,6 +19,8 @@ ######################################################################## +VERSION=2.0.1 + # Define argument functions function usage() { echo "Usage: /usr/bin/charsel [OPTION]... [CHARFILE]... @@ -26,12 +28,16 @@ A simple terminal character selector -h show this message -l show installed charfiles -d show readme + -v print version + -c check charfile validity --all include hidden shortcodes Exit status: 0 okay, - 1 invalid charfile - 2 usage error/invalid option" + 1 charfile does not exist, + 2 charfile syntax error, + 3 usage error/invalid option, + 4 other error" } CHARDIR=$HOME/.cache/charsel @@ -44,47 +50,12 @@ function readme() { cat /usr/share/doc/charsel/README.md } -function invalid_charfile() { +function missing_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 if Xclip is installed -if [[ -x xclip ]] -then - echo "Please install xclip." - exit 1 -fi - # Merge global and local charfiles if [[ -d $CHARDIR ]] then @@ -112,10 +83,72 @@ then fi # Check if charfile exists +CHARFILE="$CHARDIR/charfiles/$2" +function existence() { + if [[ ! -f $CHARFILE ]] + then + missing_charfile + fi +} + +# VERY basic syntax check +function validity() { + if [[ $(grep , $CHARFILE && grep - $CHARFILE) ]] + then + echo "valid charfile" + else + existence + echo "invalid charfile" + exit 2 + fi +} + +# Look for arguments +while getopts ":lchdv" arg +do + case ${arg} in + h) + usage + exit 0 + ;; + l) + list + exit 0 + ;; + d) + readme + exit 0 + ;; + v) + echo "charsel" $VERSION + exit 0 + ;; + c) + validity + exit 0 + ;; + ?) + echo "Invalid option" + usage + exit 3 + ;; + :) + break + ;; + esac +done +shift $((OPTIND-1)) + +# Redefine charfile and check file validity CHARFILE="$CHARDIR/charfiles/$1" -if [[ ! -f $CHARFILE ]] +existence +validity + +# Dependency check +if [[ -x xclip ]] then - invalid_charfile + echo "Please install xclip." + exit 4 fi # Define length of shortcode @@ -153,21 +186,30 @@ do # User input read -p "| input shortcode: " -N $LENGTH INPUT - # 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) - - # 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 [[ $INPUT == ";"* ]] # Semicolon exits + then + clear + exit 0 + elif [[ $INPUT == " "* ]] # Spaces dont count then OUTPUT="" - fi + clear + else + # Finds line number of shortcode + LINENUMBER=$(cut -f 1 -d ',' -s $CHARFILE | grep -wn $INPUT | cut -d : -f 1) + + # Outputs character selected above + OUTPUT=$(cut -f 2 -d ',' -s $CHARFILE | head -$LINENUMBER | tail +$LINENUMBER) - # Copy output to clipboard - echo $OUTPUT | xclip -selection clipboard + # Check to see if the shortcode actually exists + if [[ $(cut -f 1 -d ',' -s $CHARFILE | grep -wnc $INPUT) == "0" ]] + then + OUTPUT="" + fi - clear + # Copy output to clipboard + echo $OUTPUT | xclip -selection clipboard + + clear + fi done