X-Git-Url: https://git.armaanb.net/?p=charsel.git;a=blobdiff_plain;f=charsel;h=d9dcb0f9b2a298c6e123f13bce0d8eba530c4c88;hp=cef174685cf360ca8b4651ede1b25766573d420f;hb=HEAD;hpb=4b7ab17d3340b6b7440631cec87ea30ec29b0c35 diff --git a/charsel b/charsel index cef1746..d9dcb0f 100755 --- a/charsel +++ b/charsel @@ -1,31 +1,11 @@ #!/usr/bin/env bash - -####################################################################### - -# (C) Copyright Armaan Bhojwani, 2020 - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -######################################################################## - -VERSION=2.0.7 - -# Environment variables +# Charsel - terminal character selector +# Copyright Armaan Bhojwani 2020, MIT License # Define argument functions function usage() { echo "Usage: /usr/bin/charsel [OPTION]... [CHARFILE]... + A simple terminal character selector -a include hidden shortcodes -b disable color support @@ -34,7 +14,7 @@ A simple terminal character selector -h show this message -L show installed charfiles without the message -l show installed charfiles - -v print version + -n dont copy character to clipboard, avoids Xclip dependency Exit status: 0 okay, @@ -46,7 +26,7 @@ Exit status: CHARDIR=$HOME/.cache/charsel function list() { - ls $CHARDIR/charfiles + ls "$CHARDIR"/charfiles } function readme() { @@ -60,44 +40,32 @@ function missing_charfile() { } # Merge global and local charfiles -if [[ -d $CHARDIR ]] -then - rm -rf $CHARDIR/* +if [[ -d $CHARDIR ]]; then + rm -rf "${CHARDIR:?}"/* else - mkdir $CHARDIR + mkdir "$CHARDIR" fi LOCALCHARDIR=$HOME/.local/share/charsel/charfiles -if [[ ! -d $LOCALCHARDIR ]] -then - mkdir -p $LOCALCHARDIR -fi +[[ -d $LOCALCHARDIR ]] || mkdir -p "$LOCALCHARDIR" -localdirfiles=($LOCALCHARDIR/*) -if [[ ! -z "${#localdirfiles[*]}" ]] -then - cp -rf $LOCALCHARDIR/../* $CHARDIR -fi +localdirfiles="$LOCALCHARDIR"/* +[[ -n "${#localdirfiles[*]}" ]] && cp -rf "$LOCALCHARDIR"/../* "$CHARDIR" globaldirfiles=($/usr/share/charfiles/) -if [[ ! -z "${#globaldirfiles[*]}" ]] -then - cp -rf /usr/share/charsel/* $CHARDIR -fi +[[ -n "${#globaldirfiles[*]}" ]] && cp -rf /usr/share/charsel/* "$CHARDIR" # Check if charfile exists CHARFILE="$CHARDIR/charfiles/$2" function existence() { - if [[ ! -f $CHARFILE ]] - then + if [[ ! -f $CHARFILE ]]; then missing_charfile fi } # VERY basic syntax check function validity() { - if [[ $(grep , $CHARFILE && grep - $CHARFILE) ]] - then + if [[ $(grep , "$CHARFILE" && grep - "$CHARFILE") ]]; then echo "valid charfile" else existence @@ -107,43 +75,38 @@ function validity() { } # Look for arguments -if [ $# -eq 0 ]; then - usage - exit 3 -fi -while getopts ":baLlchdv" arg +while getopts ":abcdhlLnvV" arg do case ${arg} in - h) - usage - exit 0 + a) + SHOWALL="true" ;; - l) - echo "The following charfiles are installed:" - list - exit 0 + b) + COLOR="bw" ;; - L) - list + c) + validity exit 0 ;; d) readme exit 0 ;; - v) - echo "charsel" $VERSION + h) + usage exit 0 ;; - c) - validity + l) + echo "The following charfiles are installed:" + list exit 0 ;; - a) - SHOWALL="true" + L) + list + exit 0 ;; - b) - COLOR="bw" + n) + COPY="no" ;; ?) echo "Invalid option" @@ -154,27 +117,27 @@ do done shift $((OPTIND-1)) +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" existence validity # Dependency check -if [[ -x xclip ]] -then - echo "Please install xclip." - exit 4 -fi - -if [[ $(echo $LANG | grep UTF-8) -ne 0 ]] -then - echo "Please enable unicode support" - exit 4 +if [[ $COPY == "no" ]]; then + if [[ ! -x /usr/bin/xclip ]]; then + echo "Please install xclip." + exit 4 + fi fi # Define length of shortcode -LENGTH=$(cat $CHARFILE \ - | cut -f 1 -d ',' -s \ +LENGTH=$(cut "$CHARFILE" -f 1 -d ',' -s \ | wc -L \ | cut -b 1) @@ -184,12 +147,8 @@ clear bold=$(tput bold) normal=$(tput sgr0) -if [[ $COLOR == bw ]] -then - magenta=$(tput setaf 7) -else - magenta=$(tput setaf 5) -fi +highlight=$(tput setaf 5) +[[ $COLOR == bw ]] && highlight=$(tput setaf 7) white=$(tput setaf 7) @@ -198,51 +157,46 @@ while true do # Format output echo "*---------*---------------*" - echo "| ${bold}${magenta}CHARSEL${white}${normal} |" $1 + echo "| ${bold}${highlight}CHARSEL${white}${normal} |" "$1" echo "*---------*---------------*" echo "" - if [[ $SHOWALL == true ]] - then - cat $CHARFILE | sed -e '/^[ \t]*#/d' | tail -n +2 \ + if [[ $SHOWALL == true ]]; then + sed "$CHARFILE" -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 \ + sed "$CHARFILE" -e '/^[ \t]*#/d' | grep -A 100 - | tail -n +2 \ | column -t -N "input","output" --output-separator ' | ' --separator ',' fi echo "" echo "*-------------------------*" - echo "| previous shorcode:" $INPUT - echo "| previous output: " $OUTPUT + echo "| previous shorcode:" "$(echo $INPUT)" + echo "| previous output: " "$OUTPUT" echo "*-------------------------*" # User input - read -p "| ${bold}input shortcode: ${normal} " -N $LENGTH INPUT + read -r -p "| ${bold}input shortcode: ${normal} " -N "$LENGTH" INPUT - if [[ $INPUT == ";"* ]] # Semicolon exts - then + if [[ $INPUT == ";"* ]]; then # Semicolon exts clear exit 0 - elif [[ $INPUT == " "* ]] # Spaces dont count - then - OUTPUT="" - clear else # 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 character selected above - OUTPUT=$(cut -f 2 -d ',' -s $CHARFILE | head -$LINENUMBER | tail +$LINENUMBER) + 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" ]] - then + if [[ $(cut -f 1 -d ',' -s "$CHARFILE" | grep -wnc "$INPUT") == "0" ]]; then OUTPUT="" fi # Copy output to clipboard - echo -n $OUTPUT | xclip -selection clipboard + if [[ ! $COPY == "no" ]]; then + echo -n "$OUTPUT" | xclip -selection clipboard + fi clear fi