aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xponysay.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/ponysay.py b/ponysay.py
new file mode 100755
index 0000000..cd5b184
--- /dev/null
+++ b/ponysay.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+'''
+ponysay.py - POC of ponysay in python
+Copyright (C) 2012 Elis "etu" Axelsson
+
+License: WTFPL
+'''
+
+import argparse
+import os
+import curses
+import sys
+import random
+
+
+version = 1.98
+if os.environ['TERM'] == 'linux':
+ ponydirs = ['/usr/share/ponysay/ttyponies/', os.environ['HOME'] + '/.local/share/ponysay/ttyponies/']
+else:
+ ponydirs = ['/usr/share/ponysay/ponies/', os.environ['HOME'] + '/.local/share/ponysay/ponies/']
+
+
+parser = argparse.ArgumentParser(description = 'Ponysay, like cowsay with ponies')
+
+parser.add_argument('-v', '--version', action = 'version', version='%s %s' % (__file__, version))
+parser.add_argument('-l', '--list', action = 'store_true', dest = 'list', help = 'list pony files')
+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')
+
+args = parser.parse_args()
+
+
+class ponysay():
+ def __init__(self, args):
+ if args.list:
+ self.list()
+ else:
+ self.print_pony(args)
+
+ def list(self): # List ponies
+ screen = curses.initscr()
+ termsize = screen.getmaxyx()
+
+ y = 0
+
+ for ponydir in ponydirs: # Loop ponydirs
+ screen.addstr(y, 0, 'ponyfiles located in ' + ponydir, curses.A_BOLD) # Print header
+ y = y + 1
+
+ ponies = os.listdir(ponydir)
+ ponies.sort()
+ width = len(max(ponies, key = len)) + 2 # Get the longest ponyfilename lenght + 2 spaces
+
+ x = 0
+ for pony in ponies:
+ screen.addstr(y, x, pony) # Print ponyfilename
+
+ x = x + width # Add width
+ if x > (termsize[1] - width): # If too wide, make new line
+ x = 0
+ y = y + 1
+
+ y = y + 2 # Increase y before the loop restart to make space for the next header
+
+ screen.addstr(y, 0, '') # Make newline at end of output
+ screen.refresh()
+
+ def print_pony(self, args):
+ if args.message == None:
+ msg = sys.stdin.read().strip()
+ else:
+ msg = args.message
+
+
+ if args.pony == None:
+ ponies = [] # Make array with direct paths to all ponies
+ for ponydir in ponydirs:
+ for ponyfile in os.listdir(ponydir):
+ ponies.append(ponydir + ponyfile)
+
+ pony = ponies[random.randrange(0, len(ponies) - 1)] # Select random pony
+
+ else:
+ for ponydir in ponydirs:
+ if os.path.isfile(ponydir + args.pony[0]):
+ pony = ponydir + args.pony[0]
+
+ os.system('cowsay -f ' + pony + ' "' + msg + '"')
+
+
+if __name__ == '__main__':
+ ponysay(args)
+