diff --git a/Makefile b/Makefile index 5d969127..a5929db4 100644 --- a/Makefile +++ b/Makefile @@ -136,16 +136,20 @@ uninstall-old: if [ -d "$(INSTALLDIR)/lib/ponysay/pq4ps-list.pl" ]; then unlink "$(INSTALLDIR)/lib/ponysay/pq4ps-list.pl" ; fi clean: - if [ -f "truncater" ]; then rm -f "truncater" ; fi - if [ -f "completion/bash-completion-think.sh" ]; then rm -f "completion/bash-completion-think.sh" ; fi - if [ -f "completion/fish-completion-think.fish" ]; then rm -f "completion/fish-completion-think.fish"; fi - if [ -f "completion/zsh-completion-think.zsh" ]; then rm -f "completion/zsh-completion-think.zsh" ; fi - if [ -f "manuals/manpage.6.gz" ]; then rm -f "manuals/manpage.6.gz" ; fi - if [ -f "manuals/manpage.es.6.gz" ]; then rm -f "manuals/manpage.es.6.gz" ; fi - if [ -f "ponysay.info.gz" ]; then rm -f "ponysay.info.gz" ; fi + if [ -f "truncater" ]; then rm -f "truncater" ; fi + if [ -f "completion/bash-completion-think.sh" ]; then rm -f "completion/bash-completion-think.sh" ; fi + if [ -f "completion/fish-completion-think.fish" ]; then rm -f "completion/fish-completion-think.fish" ; fi + if [ -f "completion/zsh-completion-think.zsh" ]; then rm -f "completion/zsh-completion-think.zsh" ; fi + if [ -f "completion/bash-completion.sh.install" ]; then rm -f "completion/bash-completion.sh.install" ; fi + if [ -f "completion/fish-completion.fish.install" ]; then rm -f "completion/fish-completion.fish.install"; fi + if [ -f "completion/zsh-completion.zsh.install" ]; then rm -f "completion/zsh-completion.zsh.install" ; fi + if [ -f "manuals/manpage.6.gz" ]; then rm -f "manuals/manpage.6.gz" ; fi + if [ -f "manuals/manpage.es.6.gz" ]; then rm -f "manuals/manpage.es.6.gz" ; fi + if [ -f "ponysay.info.gz" ]; then rm -f "ponysay.info.gz" ; fi + if [ -f "ponysay.py.install" ]; then rm -f "ponysay.py.install" ; fi clean-old: - if [ -f "ponysaytruncater" ]; then rm -f "ponysaytruncater" ; fi + if [ -f "ponysaytruncater" ]; then rm -f "ponysaytruncater"; fi ## Scripts for maintainers diff --git a/completion/bash-completion.sh b/completion/bash-completion.sh index 26e11342..11b99eab 100644 --- a/completion/bash-completion.sh +++ b/completion/bash-completion.sh @@ -8,28 +8,18 @@ _ponysay() options='-v -h -l -f -W -q' COMPREPLY=( $( compgen -W "$options" -- "$cur" ) ) - if [ $prev = "-f" ]; then - COMPREPLY=() - - sysponies=/usr/share/ponysay/ponies/ - usrponies=~/.local/share/ponysay/ponies/ - if [[ $TERM = "linux" ]]; then - sysponies=/usr/share/ponysay/ttyponies/ - usrponies=~/.local/share/ponysay/ttyponies/ - fi - - [ -d $sysponies ] && COMPREPLY+=( $( compgen -W "$(ls --color=no $sysponies | sed -e 's/.pony//g')" -- "$cur" ) ) - [ -d $usrponies ] && COMPREPLY+=( $( compgen -W "$(ls --color=no $usrponies | sed -e 's/.pony//g')" -- "$cur" ) ) + if [ $prev = "-f" ]; then + ponies=$('/usr/bin/ponysay.py' --onelist) + COMPREPLY=( $( compgen -W "$ponies" -- "$cur" ) ) + + elif [ $prev = "-q" ]; then + quoters=$('/usr/bin/ponysay.py' --quoters) + COMPREPLY=( $( compgen -W "$quoters" -- "$cur" ) ) elif [ $prev = "-W" ]; then cols=$(( `stty size | cut -d ' ' -f 2` - 10 )) COMPREPLY=( $cols $(( $cols / 2 )) 100 60 ) - elif [ $prev = "-q" ]; then - qcmd=/usr/lib/ponysay/pq4ps - quoters=$($qcmd -l) - COMPREPLY=( $( compgen -W "$quoters" -- "$cur" ) ) - fi } diff --git a/completion/fish-completion.fish b/completion/fish-completion.fish index 89f7a197..727460b4 100644 --- a/completion/fish-completion.fish +++ b/completion/fish-completion.fish @@ -3,43 +3,20 @@ # # Author: Elis Axelsson -if test $TERM = "linux" - set -g systempath /usr/share/ponysay/ttyponies/ - set -g homepath ~/.local/share/ponysay/ttyponies/ -else - set -g systempath /usr/share/ponysay/ponies/ - set -g homepath ~/.local/share/ponysay/ponies/ -end - -if test -d $systempath - set -g systemponies (ls --color=no $systempath | sed -e 's/\.pony//' -e 's/_.*//' | perl -pe 's/([a-z])([A-Z])/\1\\\ \2/' ) -end - -if test -d $homepath - set -g homeponies (ls --color=no $homepath | sed -e 's/\.pony//' -e 's/_.*//' | perl -pe 's/([a-z])([A-Z])/\1\\\ \2/' ) -end - - -set -g qcmd /usr/lib/ponysay/pq4ps -set -g quoters ($qcmd -l) +set -g ponies ('/usr/bin/ponysay.pl' --onelist) +set -g quoters ('/usr/bin/ponysay.pl' --quoters) complete -c ponysay -s h --description "Help of ponysay" complete -c ponysay -s v --description "Version of ponysay" complete -c ponysay -s l --description "List pony files" complete -c ponysay -s L --description "List pony files with alternatives" -complete -c ponysay -s f -a "$homeponies $systemponies" --description "Select a pony" +complete -c ponysay -s f -a "$ponies" --description "Select a pony" complete -c ponysay -s q -a "$quoters" --description "Select ponies for MLP:FiM quotes" complete -c ponysay -s W -a "Integer" --description "The screen column where the message should be wrapped" -set -e systempath -set -e homepath - -set -e systemponies -set -e homeponies - -set -e qcmd +set -e ponies set -e quoters diff --git a/ponysay.py b/ponysay.py index 1c3bef2e..97c36978 100755 --- a/ponysay.py +++ b/ponysay.py @@ -38,6 +38,17 @@ for ponydir in _ponydirs: ponydirs.append(ponydir) +''' +The directories where quotes files are stored +''' +quotedirs = [] +_quotedirs = [INSTALLDIR + '/share/ponysay/quotes/', os.environ['HOME'] + '/.local/share/ponysay/quotes/'] +for quotedir in _quotedirs: + if os.path.isdir(quotedir): + quotedirs.append(quotedir) + + + ''' Argument parsing ''' @@ -46,6 +57,8 @@ parser = argparse.ArgumentParser(description = 'Ponysay, like cowsay with ponies parser.add_argument('-v', '--version', action = 'version', version = '%s %s' % ('ponysay', VERSION)) parser.add_argument('-l', '--list', action = 'store_true', dest = 'list', help = 'list pony files') parser.add_argument('-L', '--altlist', action = 'store_true', dest = 'linklist', help = 'list pony files with alternatives') +parser.add_argument( '--quoters', action = 'store_true', dest = 'quoters', help = 'list ponies with quotes (visible in -l and -L)') # for shell completions +parser.add_argument( '--onelist', action = 'store_true', dest = 'onelist', help = 'list pony files in one columns') # for shell completions parser.add_argument('-f', '--pony', action = 'append', dest = 'pony', help = 'select a pony (either a file name or a pony name)') parser.add_argument('message', nargs = '?', help = 'message to ponysay') @@ -56,16 +69,20 @@ class ponysay(): def __init__(self, args): if args.list: self.list() elif args.linklist: self.linklist() + elif args.quoters: self.quoters() + elif args.onelist: self.onelist() else: self.print_pony(args) ''' - Returns a set with all ponies that have quotes and is displayable + Returns a set with all ponies that have quotes and are displayable ''' def __quoters(self): quotes = [] quoteshash = set() - _quotes = [item[:item.index('.')] for item in os.listdir(INSTALLDIR + '/share/ponysay/quotes/')] + _quotes = [] + for quotedir in quotedirs: + _quotes += [item[:item.index('.')] for item in os.listdir(INSTALLDIR + '/share/ponysay/quotes/')] for quote in _quotes: if not quote == '': if not quote in quoteshash: @@ -84,6 +101,9 @@ class ponysay(): return ponies + ''' + Returns one .pony-file with full path, names is filter for names, also accepts filepaths + ''' def __getponypath(self, names = None): ponies = {} @@ -101,7 +121,9 @@ class ponysay(): Returns a list with all (pony, quote file) pairs ''' def __quotes(self): - quotes = os.listdir(INSTALLDIR + '/share/ponysay/quotes/') + quotes = [] + for quotedir in quotedirs: + quotes += [quotedir + item for item in os.listdir(quotedir)] rc = [] for ponydir in ponydirs: @@ -109,8 +131,9 @@ class ponysay(): if not pony[0] == '.': p = pony[:-5] # remove .pony for quote in quotes: - if ('+' + p + '+') in ('+' + quote + '+'): - rc.append((p, qoute)) + q = quote[quote.rindex('/') + 1:] + if ('+' + p + '+') in ('+' + q + '+'): + rc.append((p, quote)) return rc @@ -215,6 +238,37 @@ class ponysay(): print('\n'); + ''' + Lists with all ponies that have quotes and are displayable + ''' + def quoters(self): + last = "" + ponies = [] + for pony in self.__quoters(): + ponies.append(pony) + ponies.sort() + for pony in ponies: + if not pony == last: + last = pony + print(pony) + + + ''' + Lists the available ponies one one column without anything bold + ''' + def onelist(self): + last = "" + ponies = [] + for ponydir in ponydirs: # Loop ponydirs + ponies += os.listdir(ponydir) + ponies = [item[:-5] for item in ponies] # remove .pony from file name + ponies.sort() + for pony in ponies: + if not pony == last: + last = pony + print(pony) + + def print_pony(self, args): if args.message == None: msg = sys.stdin.read().strip()