aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjaseg <s@jaseg.de>2013-02-07 16:52:29 +0100
committerjaseg <s@jaseg.de>2013-02-07 16:52:29 +0100
commita72c728ab47d440b292ae9ed17a2b1524114d07f (patch)
treeac41a2ec62428db6f8b52bca5f2f4b46a48b19d2
parente5a37f52ce067500f326d3b544ea3f80b77dc9bf (diff)
downloadponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.tar.gz
ponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.tar.bz2
ponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.zip
Added ponycenter.py, a simple tool that just centers a pony
-rwxr-xr-xponycenter.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/ponycenter.py b/ponycenter.py
new file mode 100755
index 0000000..66e64fe
--- /dev/null
+++ b/ponycenter.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+import os,sys,time, itertools
+import argparse
+from subprocess import *
+try:
+ import re2 as re
+except:
+ import re
+
+'''
+Gets the size of the terminal in (rows, columns)
+
+@return (rows, columns):(int, int) The number or lines and the number of columns in the terminal's display area, [24, 80] if the size cannot be found
+'''
+def gettermsize():
+ return [int(x) for x in
+ next(itertools.chain(
+ (x for x in
+ (Popen(['stty', 'size'], stdout=PIPE, stdin=fd, stderr=PIPE).communicate()[0].split()
+ for fd in [sys.stdin, sys.stdout, sys.stderr])
+ if x),
+ [[24, 80]]
+ )
+ )
+ ]
+
+parser = argparse.ArgumentParser(description='Center stuff on terminals')
+parser.add_argument('string', nargs='*', type=str)
+args = parser.parse_args()
+
+for e in [sys.stdin] + args.string:
+ lines = [e] if isinstance(e, str) else e.readlines()
+ if lines:
+ width = max(map(len, map(lambda s: re.sub(r'\x1B\[[0-9;]+m|\$.*\$', '', s), lines)))
+ pad = int((gettermsize()[1]- width)/2)
+ for line in lines:
+ print(' '*pad + re.sub(r'\$.*\$|\n', '', line))
+