X-Git-Url: https://git.armaanb.net/?p=charsel.git;a=blobdiff_plain;f=charsel;h=d9dcb0f9b2a298c6e123f13bce0d8eba530c4c88;hp=5249f83db96b0381f9f87c2e49b8ffb074cf80ef;hb=HEAD;hpb=ba3ef21cadf9954b53686a686ee2a3f23a789624 diff --git a/charsel b/charsel index 5249f83..d9dcb0f 100755 --- a/charsel +++ b/charsel @@ -1,36 +1,20 @@ #!/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.4 +# 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 + -c check charfile validity + -d show readme -h show this message + -L show installed charfiles without the message -l show installed charfiles - -d show readme - -v print version - -c check charfile validity - -a include hidden shortcodes + -n dont copy character to clipboard, avoids Xclip dependency Exit status: 0 okay, @@ -42,8 +26,7 @@ Exit status: CHARDIR=$HOME/.cache/charsel function list() { - echo "The following charfiles are installed:" - ls $CHARDIR/charfiles + ls "$CHARDIR"/charfiles } function readme() { @@ -57,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 @@ -104,35 +75,38 @@ function validity() { } # Look for arguments -if [ $# -eq 0 ]; then - usage - exit 3 -fi -while getopts ":alchdv" arg +while getopts ":abcdhlLnvV" arg do case ${arg} in - h) - usage - exit 0 + a) + SHOWALL="true" ;; - l) - list + b) + COLOR="bw" + ;; + 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 + ;; + n) + COPY="no" ;; ?) echo "Invalid option" @@ -143,21 +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 +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) @@ -167,56 +147,56 @@ clear bold=$(tput bold) normal=$(tput sgr0) +highlight=$(tput setaf 5) +[[ $COLOR == bw ]] && highlight=$(tput setaf 7) + +white=$(tput setaf 7) + # Main program while true do # Format output echo "*---------*---------------*" - echo "| ${bold}CHARSEL${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 exits - 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 $OUTPUT | xclip -selection clipboard + if [[ ! $COPY == "no" ]]; then + echo -n "$OUTPUT" | xclip -selection clipboard + fi clear fi