diff options
author | jaseg <s@jaseg.de> | 2013-02-07 16:52:29 +0100 |
---|---|---|
committer | jaseg <s@jaseg.de> | 2013-02-07 16:52:29 +0100 |
commit | a72c728ab47d440b292ae9ed17a2b1524114d07f (patch) | |
tree | ac41a2ec62428db6f8b52bca5f2f4b46a48b19d2 | |
parent | e5a37f52ce067500f326d3b544ea3f80b77dc9bf (diff) | |
download | ponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.tar.gz ponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.tar.bz2 ponysay-a72c728ab47d440b292ae9ed17a2b1524114d07f.zip |
Added ponycenter.py, a simple tool that just centers a pony
-rwxr-xr-x | ponycenter.py | 39 |
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)) + |