aboutsummaryrefslogtreecommitdiff
path: root/ponycenter.py
blob: 66e64fe2993a0b54b94bb2391f437d962d733ae2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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))