diff --git a/Makefile b/Makefile index 84303dee..8e8c52b2 100644 --- a/Makefile +++ b/Makefile @@ -26,8 +26,8 @@ install: all mkdir -p "$(DESTDIR)/usr/share/ponysay/" mkdir -p "$(DESTDIR)/usr/share/ponysay/ponies" mkdir -p "$(DESTDIR)/usr/share/ponysay/ttyponies" - cp ponies/*.pony "$(DESTDIR)/usr/share/ponysay/ponies/" - cp ttyponies/*.pony "$(DESTDIR)/usr/share/ponysay/ttyponies/" + cp -P ponies/*.pony "$(DESTDIR)/usr/share/ponysay/ponies/" + cp -P ttyponies/*.pony "$(DESTDIR)/usr/share/ponysay/ttyponies/" mkdir -p "$(DESTDIR)/usr/bin/" install "ponysay" "$(DESTDIR)/usr/bin/ponysay" diff --git a/README b/README index 7e655922..24b11b35 100644 --- a/README +++ b/README @@ -25,11 +25,11 @@ Required runtime dependencies cowsay : this is a wrapper for cowsay - coreutils : the main script [file: ponysay] uses stty, cut, ls, cat, sort, head and tail + coreutils : the main script [file: ponysay] uses stty, cut, ls, cat, sort, readlink, head and tail - sed : used to remove .pony from pony named when running ponysay -l + sed : used to remove .pony from pony named when running `ponysay -l` and `ponysay -L` - perl : required to run ponysay -l + perl : required to run `ponysay -l` and `ponysay -L` Optional runtime dependencies diff --git a/README.md b/README.md index 252c8ede..6cf3e0a7 100644 --- a/README.md +++ b/README.md @@ -70,11 +70,11 @@ Dependencies `cowsay`: this is a wrapper for cowsay -`coreutils`: the main script uses stty, cut, ls, cat, sort, head and tail +`coreutils`: the main script uses stty, cut, ls, cat, sort, readlink, head and tail -`sed`: used to remove .pony from pony named when running `ponysay -l` +`sed`: used to remove .pony from pony named when running `ponysay -l` and `ponysay -l` -`perl`: required to run `ponysay -l` +`perl`: required to run `ponysay -l` and `ponysay -L` ### Package building dependencies diff --git a/manuals/manpage.6 b/manuals/manpage.6 index f2a39a27..daa221e0 100644 --- a/manuals/manpage.6 +++ b/manuals/manpage.6 @@ -51,6 +51,9 @@ Show version of program. .B \-l List pony files. .TP +.B \-L +List pony files with synonyms inside brackets. +.TP .B \-f \fIname\fP Select a pony (either a file name or a pony name), you can use this options multiple times, and one of the will be selected randomly. diff --git a/ponysay b/ponysay index 3cffbddb..a08dc553 100755 --- a/ponysay +++ b/ponysay @@ -18,17 +18,111 @@ version() { echo "ponysay v$version" } +scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2` +listcmd=$(echo $0 | sed -e 's/\/ponysay$/\//g' -e 's/\/ponythink$/\//g')"ponysaylist.pl" + list() { - scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2` - - listcmd=$(echo $0 | sed -e 's/\/ponysay$/\//g' -e 's/\/ponythink$/\//g')"ponysaylist.pl" - echo -e "\\e[01mponyfiles located in $SYSTEMPONIES:\\e[21m" - perl $listcmd $scrw $(ls --color=no $SYSTEMPONIES | sed "s/.pony//" | sort) + perl $listcmd $scrw $(ls --color=no $SYSTEMPONIES | sed -e 's/\.pony$//' | sort) if [[ -d $HOMEPONIES ]]; then echo -e "\\e[01mponyfiles located in $HOMEPONIES:\\e[21m" - perl $listcmd $scrw $(ls --color=no $HOMEPONIES | sed "s/.pony//" | sort) + perl $listcmd $scrw $(ls --color=no $HOMEPONIES | sed -e 's/\.pony$//' | sort) + fi +} + +_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 + + scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2` + + perl '/dev/stdin' $(echo $args) < /dev/shm/ponysay~ +#!/usr/bin/perl + +#Author: Mattias Andrée (maandree@kth.se) + +%hash = (); +\$argc = @ARGV; + +\$i = 0; +while (\$i < \$argc) +{ + \$source = \$ARGV[\$i]; + \$i += 1; + \$target = \$ARGV[\$i]; + \$i += 1; + if (\$source eq \$target) + { + \$hash{\$source} = [ () ]; + } +} + +\$i = 0; +while (\$i < \$argc) +{ + \$source = \$ARGV[\$i]; + \$i += 1; + \$target = \$ARGV[\$i]; + \$i += 1; + unless (\$source eq \$target) + { + push @{ \$hash{\$target} }, \$source; + } +} + +\$i = 0; +while (\$i < \$argc) +{ + \$source = \$ARGV[\$i]; + \$i += 1; + \$target = \$ARGV[\$i]; + \$i += 1; + if (\$source eq \$target) + { + @list = @{ \$hash{\$source} }; + \$first = 1; + print \$source; + foreach \$link (@list) + { + if (\$first eq 1) + { + print " (".\$link; + \$first = 0; + } + else + { + print " ".\$link; + } + } + if (\$first eq 0) + { + print ")"; + } + print "\n"; + } +} +EOF + + perl $listcmd $scrw $(cat /dev/shm/ponysay~) | sed -e 's/_/ /g' +} + +linklist() { + _linklist $SYSTEMPONIES + if [[ -d $HOMEPONIES ]]; then + _linklist $HOMEPONIES fi } @@ -45,6 +139,7 @@ Options: -v Show version and exit. -h Show this help and exit. -l List pony files. + -L List pony files with synonyms inside brackets. -f[name] Select a pony (either a file name or a pony name.) -W[column] The screen column where the message should be wrapped. @@ -104,13 +199,14 @@ say() { ponies=() -while getopts f:W:lhv OPT +while getopts f:W:Llhv OPT do case ${OPT} in v) version; exit ;; h) usage; exit ;; f) ponies+=( "$OPTARG" ) ;; l) list; exit ;; + L) linklist; exit ;; W) wrap="$OPTARG" ;; \?) usage >&2; exit 1 ;; esac