X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=charsel;h=56e1fdf244dfd622206370bb0b014baccb10fe8c;hb=fbbee478d81f974898259ba4307c1660fe72758d;hp=3961cf2f38bd47bd8b9aa3e0f2938fa8591ea270;hpb=a0ab9edae51a8ef6e0334691a7b905dbbac87835;p=charsel.git diff --git a/charsel b/charsel index 3961cf2..56e1fdf 100755 --- a/charsel +++ b/charsel @@ -1,28 +1,173 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash -# Merge both global and local charfiles -mkdir ~/.cache/charsel/ & -cp /usr/share/charsel/* ~/.cache/charsel/ -cp ~/.local/share/charsel/* ~/.cache/charsel/ -CHARDIR=~/.cache/charsel +####################################################################### + +# (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 . + +######################################################################## + +# 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 + +Exit status: + 0 okay, + 1 invalid charfile + 2 usage error/invalid option" +} + +CHARDIR=$HOME/.cache/charsel +function list() { + echo "The following charfiles are installed:" + ls $CHARDIR/charfiles +} + +function readme() { + cat /usr/share/doc/charsel/README.md +} + +function invalid_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 + rm -rf $CHARDIR/* +else + mkdir $CHARDIR +fi + +LOCALCHARDIR=$HOME/.local/share/charsel/charfiles +if [[ ! -d $LOCALCHARDIR ]] +then + mkdir -p $LOCALCHARDIR +fi + +localdirfiles=($LOCALCHARDIR/*) +if [[ ! -z "${#localdirfiles[*]}" ]] +then + cp -rf $LOCALCHARDIR/../* $CHARDIR +fi + +globaldirfiles=($/usr/share/charfiles/) +if [[ ! -z "${#globaldirfiles[*]}" ]] +then + cp -rf /usr/share/charsel/* $CHARDIR +fi + +# Check if charfile exists +CHARFILE="$CHARDIR/charfiles/$1" +if [[ ! -f $CHARFILE ]] +then + invalid_charfile +fi + +# Define length of shortcode +LENGTH=$(cat $CHARFILE \ + | cut -f 1 -d ',' -s \ + | wc -L \ + | cut -b 1) -# clear screen clear -while : +# Main program +while true do - - # Put charfile into table - column -t $CHARDIR/$1 -N SHORT,CHAR -R SHORT,CHAR --output-separator ' | ' - read INPUT - - # Navigate to the right characther - OUTPUT=$(grep $INPUT $CHARDIR/$1 | cut -c 3) - - # Clear screen - clear + # Format output + echo "*---------*---------------*" + echo "| CHARSEL |" $1 + echo "*---------*---------------*" + echo "" + + if [[ $2 == "--all" ]] + then + cat $CHARFILE | sed -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 \ + | column -t -N input,output --output-separator ' | ' --separator ',' + fi - # Print output, and copy to clipboard - echo $OUTPUT + echo "" + echo "*-------------------------*" + echo "| previous shorcode:" $INPUT + echo "| previous output: " $OUTPUT + echo "*-------------------------*" + + # 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" ]] + then + OUTPUT="" + fi + + # Copy output to clipboard echo $OUTPUT | xclip -selection clipboard + + clear done