X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=charsel;h=cef174685cf360ca8b4651ede1b25766573d420f;hb=f91f2f2e9d218da186b0e84d1ad1a57632d3aebb;hp=56e1fdf244dfd622206370bb0b014baccb10fe8c;hpb=fbbee478d81f974898259ba4307c1660fe72758d;p=charsel.git diff --git a/charsel b/charsel index 56e1fdf..cef1746 100755 --- a/charsel +++ b/charsel @@ -19,24 +19,33 @@ ######################################################################## +VERSION=2.0.7 + +# Environment variables + # 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 + -a include hidden shortcodes + -b disable color support + -c check charfile validity + -d show readme + -h show this message + -L show installed charfiles without the message + -l show installed charfiles + -v print version Exit status: - 0 okay, - 1 invalid charfile - 2 usage error/invalid option" + 0 okay, + 1 charfile does not exist, + 2 charfile syntax error, + 3 usage error/invalid option, + 4 other error" } CHARDIR=$HOME/.cache/charsel function list() { - echo "The following charfiles are installed:" ls $CHARDIR/charfiles } @@ -44,47 +53,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 +86,90 @@ 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 +if [ $# -eq 0 ]; then + usage + exit 3 +fi +while getopts ":baLlchdv" arg +do + case ${arg} in + h) + usage + exit 0 + ;; + l) + echo "The following charfiles are installed:" + list + exit 0 + ;; + L) + list + exit 0 + ;; + d) + readme + exit 0 + ;; + v) + echo "charsel" $VERSION + exit 0 + ;; + c) + validity + exit 0 + ;; + a) + SHOWALL="true" + ;; + b) + COLOR="bw" + ;; + ?) + echo "Invalid option" + usage + exit 3 + ;; + 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 + echo "Please install xclip." + exit 4 +fi + +if [[ $(echo $LANG | grep UTF-8) -ne 0 ]] then - invalid_charfile + echo "Please enable unicode support" + exit 4 fi # Define length of shortcode @@ -126,22 +180,35 @@ LENGTH=$(cat $CHARFILE \ clear +# Define text formatting +bold=$(tput bold) +normal=$(tput sgr0) + +if [[ $COLOR == bw ]] +then + magenta=$(tput setaf 7) +else + magenta=$(tput setaf 5) +fi + +white=$(tput setaf 7) + # Main program while true do # Format output echo "*---------*---------------*" - echo "| CHARSEL |" $1 + echo "| ${bold}${magenta}CHARSEL${white}${normal} |" $1 echo "*---------*---------------*" echo "" - if [[ $2 == "--all" ]] + if [[ $SHOWALL == true ]] then cat $CHARFILE | sed -e '/^[ \t]*#/d' | tail -n +2 \ - | column -t -N input,output --output-separator ' | ' --separator ',' + | column -t -N "input","output" --output-separator ' | ' --separator ',' else cat $CHARFILE | sed -e '/^[ \t]*#/d' | grep -A 100 - | tail -n +2 \ - | column -t -N input,output --output-separator ' | ' --separator ',' + | column -t -N "input","output" --output-separator ' | ' --separator ',' fi echo "" @@ -151,23 +218,32 @@ do echo "*-------------------------*" # User input - read -p "| input shortcode: " -N $LENGTH INPUT + read -p "| ${bold}input shortcode: ${normal} " -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 exts + 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 -n $OUTPUT | xclip -selection clipboard + + clear + fi done