aboutsummaryrefslogtreecommitdiff
path: root/ponysay
diff options
context:
space:
mode:
Diffstat (limited to 'ponysay')
-rwxr-xr-xponysay301
1 files changed, 16 insertions, 285 deletions
diff --git a/ponysay b/ponysay
index e08fb1e..545144e 100755
--- a/ponysay
+++ b/ponysay
@@ -1,294 +1,25 @@
#!/usr/bin/env bash
-VERSION=1.4.1
-
-
-
-# Get bash script directory's parent
INSTALLDIR="$(dirname $( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd ))"
+LIBDIR="$INSTALLDIR/lib/ponysay"
-# Directory for installed media files
-SYSTEMSHARE="$INSTALLDIR/share/ponysay"
-HOMESHARE="${HOME}/.local/share/ponysay"
-
-# Subscripts
-listcmd="$INSTALLDIR/lib/ponysay/list.pl"
-linklistcmd="$INSTALLDIR/lib/ponysay/linklist.pl"
-truncatercmd="$INSTALLDIR/lib/ponysay/truncater"
-quotecmd="$INSTALLDIR/lib/ponysay/pq4ps"
-qlistcmd="$INSTALLDIR/lib/ponysay/pq4ps-list.pl"
-
-pony="*" # Selected pony
-wrap="" # Message wrap column
-ponies=() # Selected ponies
-
-scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2` # Screen width
-scrh=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 1` # Screen height
-
-# KMS ponies extension
-kmscmd=""
-[ "$TERM" = "linux" ] && kmscmd=$(for c in $(echo $PATH":" | sed -e 's/:/\/ponysay2kmsponysay /g'); do if [ -f $c ]; then echo $c; break; fi done)
-[ ! "$kmscmd" = "" ] && TERM="-linux-"
-
-# Directories for installed ponies files
-if [ "$TERM" = "linux" ]; then
- SYSTEMPONIES="$SYSTEMSHARE/ttyponies"
- HOMEPONIES="$HOMESHARE/ttyponies"
-else
- SYSTEMPONIES="$SYSTEMSHARE/ponies"
- HOMEPONIES="$HOMESHARE/ponies"
-fi
-
-# Cowsay script
-if [ ${0} == *ponythink ]; then
- if [ "$PONYSAY_COWTHINK" = "" ]; then
- cmd=cowthink
- customcmd=0
- else
- cmd="$PONYSAY_COWTHINK"
- customcmd=1
- fi
-else
- if [ "$PONYSAY_COWSAY" = "" ]; then
- cmd=cowsay
- customcmd=0
- else
- cmd="$PONYSAY_COWSAY"
- customcmd=1
- fi
-fi
-
-
-
-# Ponysay version print function
-version() {
- echo "ponysay v$VERSION"
-}
-
-# Marks ponies in lists that have quotes
-qoutelist() {
- bash -c "$("$qlistcmd" $("$quotecmd" --list))"
-}
-
-# Pony list function
-list() {
- if [ -d $SYSTEMPONIES ]; then
- echo -e "\\e[01mponyfiles located in $SYSTEMPONIES:\\e[21m"
- perl $listcmd $scrw $(ls --color=no $SYSTEMPONIES | sed -e 's/\.pony$//' | sort) | qoutelist
- fi
- if [ -d $HOMEPONIES ]; then
- echo -e "\\e[01mponyfiles located in $HOMEPONIES:\\e[21m"
- perl $listcmd $scrw $(ls --color=no $HOMEPONIES | sed -e 's/\.pony$//' | sort) | qoutelist
- fi
- if [ ! -d $SYSTEMPONIES ] && [ ! -d $HOMEPONIES ]; then
- echo >&2 "All the ponies are missing! Call the Princess!"
- fi
-}
-
-# Pony list function with symlink map, for one directory
-_linklist() {
- echo -e "\\e[01mponyfiles located in $1:\\e[21m"
- files=$(ls --color=no $1 | sed -e 's/\.pony$//' | sort)
-
- args=""
-
- for file in $files; do
- target="$(readlink $1"/"$file".pony")"
-
- if [ "$target" = "" ]; then
- target=$file
- else
- target=$(echo $target | sed -e 's/^\.\///g' -e 's/\.pony$//g')
- fi
-
- args=$(echo $args $file $target)
- done
-
- perl $listcmd $scrw $(perl $linklistcmd $(echo $args) | sed -e 's/ /_/g') | sed -e 's/_/ /g' | qoutelist
-}
-
-# Pony list function with symlink map, for both directories
-linklist() {
- _linklist $SYSTEMPONIES
-
- if [ -d $HOMEPONIES ]; then
- _linklist $HOMEPONIES
- fi
-}
-
-# Pony quotes
-ponyquotes() {
- [ "$TERM" = "-linux-" ] && TERM="linux"
- "$0" ${wrap:+-W$wrap} $("$quotecmd" $@)
-}
-
-# Usage help print function
-usage() {
- version
- cat <<EOF
-
-Usage:
-${0##*/} [options] [message]
+# The truncater executable
+truncatercmd="$LIBDIR/truncater"
-If [message] is not provided, reads the message from STDIN.
+# Screen width
+scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2`
-Options:
- -v Show version and exit.
- -h Show this help and exit.
- -l List pony files.
- -L List pony files with synonyms inside brackets.
- -q Use the pony quote feature.
- -f[name] Select a pony (either a file name or a pony name.)
- -W[column] The screen column where the message should be wrapped.
-
-See man ponysay(6) for more information.
-EOF
+# Output trunction on width
+function wtrunc {
+ if [[ "$PONYSAY_FULL_WIDTH" = 'yes' ]] || [[ "$PONYSAY_FULL_WIDTH" = 'y' ]] || [[ "$PONYSAY_FULL_WIDTH" = '1' ]] || [[ ! -f $truncatercmd ]]; then
+ cat
+ else
+ $truncatercmd $scrw
+ fi
}
-# Function for printing the ponies and the message
-say() {
- # Ponies use UTF-8 drawing characters. Prevent a Perl warning.
- export PERL_UNICODE=S
-
- # Clear screen in TTY
- ( [ "$TERM" = "linux" ] || [ "$TERM" = "-linux-" ] ) && echo -ne '\e[H\e[2J'
-
- # Set PONYSAY_SHELL_LINES to default if not specified
- [ "$PONYSAY_SHELL_LINES" = "" ] && PONYSAY_SHELL_LINES=2
-
- # Width trunction
- function wtrunc {
- if [ "$PONYSAY_FULL_WIDTH" = 'yes' ] || [ "$PONYSAY_FULL_WIDTH" = 'y' ] || [ "$PONYSAY_FULL_WIDTH" = '1' ]; then
- cat
- else
- if [ -f $truncatercmd ]; then
- $truncatercmd $scrw
- else
- cat
- fi
- fi
- }
-
- # Height trunction, show top
- function htrunchead {
- head --lines=$(( $scrh - $PONYSAY_SHELL_LINES ))
- }
-
- # Height trunction, show bottom
- function htrunctail {
- tail --lines=$(( $scrh - $PONYSAY_SHELL_LINES ))
- }
-
- # Simplification of customisation of cowsay
- if [ $customcmd = 0 ]; then
- function cowcmd {
- pcmd='#!/usr/bin/perl\nuse utf8;'
- ccmd=$(for c in $(echo $PATH":" | sed -e 's/:/\/'"$cmd"' /g'); do if [ -f $c ]; then echo $c; break; fi done)
-
- if [ ${0} == *ponythink ]; then
- cat <(echo -e $pcmd) $ccmd > "/tmp/ponythink"
- perl '/tmp/ponythink' "$@"
- rm '/tmp/ponythink'
- else
- perl <(cat <(echo -e $pcmd) $ccmd) "$@"
- fi
- }
- else
- function cowcmd {
- $cmd "$@"
- }
- fi
-
- # KMS ponies support
- if [ "$kmscmd" = "" ]; then
- function runcmd {
- cowcmd -f "$pony" "$@"
- }
- else
- function runcmd {
- cowcmd -f <($kmscmd "$pony") "$@"
- }
- fi
-
- # Print the pony and the message
- if [ "$TERM" = "linux" ] || [ "$PONYSAY_TRUNCATE_HEIGHT" = 'yes' ] || [ "$PONYSAY_TRUNCATE_HEIGHT" = 'y' ] || [ "$PONYSAY_TRUNCATE_HEIGHT" = '1' ]; then
- if [ "$PONYSAY_BOTTOM" = 'yes' ] || [ "$PONYSAY_BOTTOM" = 'y' ] || [ "$PONYSAY_BOTTOM" = '1' ]; then
- runcmd "${wrap:+-W$wrap}" | wtrunc | htrunctail
- else
- runcmd "${wrap:+-W$wrap}" | wtrunc | htrunchead
- fi
- else
- runcmd "${wrap:+-W$wrap}" | wtrunc
- fi
-}
-
-
-
-# If no stdin and no arguments then print usage and exit
-if [ -t 0 ] && [ $# == 0 ]; then
- usage
- exit
-fi
-
-
-
-# Parse options
-while getopts "f:W:Llhvq" OPT; do
- case ${OPT} in
- v) version; exit ;;
- h) usage; exit ;;
- f) ponies+=( $OPTARG ) ;;
- l) list; exit ;;
- L) linklist; exit ;;
- W) wrap="$OPTARG" ;;
- q) shift $((OPTIND - 1)); ponyquotes "$*"; exit ;;
- \?) usage >&2; exit 1 ;;
- esac
-done
-shift $((OPTIND - 1))
-
-
-# Check for cowsay
-hash $cmd &>/dev/null; if [ $? -ne 0 ]; then
- cat >&2 <<EOF
-You don't seem to have the $cmd program.
-Please install it in order to use this wrapper.
-
-Alternatively, symlink it to '$cmd' in anywhere in \$PATH
-if it actually exists under a different filename.
-EOF
- exit 1
-fi
-
-
-# Select random pony for the set of -f arguments
-if [ ! ${#ponies[@]} == 0 ]; then
- pony="${ponies[$RANDOM%${#ponies[@]}]}"
-fi
-
-
-# Pony not a file? Search for it
-if [ ! -f "$pony" ]; then
- ponies=()
- [ -d $SYSTEMPONIES ] && ponies+=( "$SYSTEMPONIES"/$pony.pony )
- [ -d $HOMEPONIES ] && ponies+=( "$HOMEPONIES"/$pony.pony )
-
- if (( ${#ponies} < 1 )); then
- echo >&2 "All the ponies are missing! Call the Princess!"
- exit 1
- fi
-
- # Choose a random pony
- pony="${ponies[$RANDOM%${#ponies[@]}]}"
-fi
-
-
-# Print pony with message
-if [ -n "$*" ]; then
- # Handle a message given via arguments
- say <<<"$*"
-else
- # Handle a message given in stdin
- say
-fi
+# Ponies use UTF-8 drawing characters. Prevent a Perl warning.
+export PERL_UNICODE=S
+# Run ponysay
+"$0.py" "$@" | wtrunc