X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=charsel;h=7938a1c251847e106e55ddad6a63fb33b6b75242;hb=d0ed470926adc3f7c4d94e3c91a353317654010a;hp=b15a1ff4f31fbf204f236d9447bde8fcbc8c57e3;hpb=457e07c6f5ccc6cd2c32ca2b58371c81dc863d0b;p=charsel.git diff --git a/charsel b/charsel index b15a1ff..7938a1c 100755 --- a/charsel +++ b/charsel @@ -19,29 +19,45 @@ ######################################################################## -VERSION=2.0.1 +VERSION=2.0.8 # 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 - -v print version - --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 + -n dont copy character to clipboard, avoids Xclip dependency + -V check for updates + -v print current version Exit status: - 0 okay, - 1 charfile does not exist, - 2 charfile syntax error, - 3 usage error/invalid option, - 4 other error" + 0 okay, + 1 charfile does not exist, + 2 charfile syntax error, + 3 usage error/invalid option, + 4 other error" +} + +function version_check(){ + NEW_VERSION=$(curl -s https://codeberg.org/armaan/charsel/raw/branch/master/charsel \ + | grep VERSION= | tail -c +9) + if [[ $VERSION != $NEW_VERSION ]] + then + echo "an update is available" + else + echo "you are up to date" + fi + } CHARDIR=$HOME/.cache/charsel function list() { - echo "The following charfiles are installed:" ls $CHARDIR/charfiles } @@ -49,19 +65,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 } -# Check if Xclip is installed -if [[ -x xclip ]] -then - echo "Please install xclip." - exit 4 -fi - # Merge global and local charfiles if [[ -d $CHARDIR ]] then @@ -88,52 +97,102 @@ then cp -rf /usr/share/charsel/* $CHARDIR 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 ":lhdv" arg +while getopts ":abcdhlLnvV" arg do case ${arg} in + a) + SHOWALL="true" + ;; + b) + COLOR="bw" + ;; + c) + validity + exit 0 + ;; + d) + readme + exit 0 + ;; h) usage exit 0 ;; l) + echo "The following charfiles are installed:" list exit 0 ;; - d) - readme + L) + list exit 0 ;; + n) + COPY="no" + ;; v) echo "charsel" $VERSION exit 0 ;; + V) + version_check + exit 0 + ;; ?) echo "Invalid option" usage exit 3 ;; - :) - break - ;; esac done shift $((OPTIND-1)) -# Check if charfile exists +if [ $# -eq 0 ]; then + echo "Please enter a valid charfile, or use charsel -h for help." + charsel -l + exit 3 +fi +# Redefine charfile and check file validity CHARFILE="$CHARDIR/charfiles/$1" -if [[ ! -f $CHARFILE ]] +existence +validity + +# Dependency check +if [[ ! $COPY == "no" ]] then - invalid_charfile + if [[ -x xclip ]] + then + echo "Please install xclip." + exit 4 + fi fi -# VERY basic syntax validation -if [[ $(grep , $CHARFILE && grep - $CHARFILE) ]] +if [[ $(echo $LANG | grep UTF-8) -ne 0 ]] then - echo "valid charfile" -else - echo "invalid charfile" - exit 2 + echo "Please enable unicode support" + exit 4 fi # Define length of shortcode @@ -144,22 +203,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 "" @@ -169,9 +241,9 @@ do echo "*-------------------------*" # User input - read -p "| input shortcode: " -N $LENGTH INPUT + read -p "| ${bold}input shortcode: ${normal} " -N $LENGTH INPUT - if [[ $INPUT == ";"* ]] # Semicolon exits + if [[ $INPUT == ";"* ]] # Semicolon exts then clear exit 0 @@ -193,7 +265,10 @@ do fi # Copy output to clipboard - echo $OUTPUT | xclip -selection clipboard + if [[ ! $COPY == "no" ]] + then + echo -n $OUTPUT | xclip -selection clipboard + fi clear fi