"""Utilities for dealing with "text"."""
from collections import defaultdict
+import logging
import math
import sys
from typing import List, NamedTuple, Optional
from ansi import fg, reset
+logger = logging.getLogger(__file__)
+
+
class RowsColumns(NamedTuple):
rows: int
columns: int
def get_console_rows_columns() -> RowsColumns:
"""Returns the number of rows/columns on the current console."""
- from exec_utils import cmd
- rows, columns = cmd("stty size").split()
+ from exec_utils import cmd_with_timeout
+ try:
+ rows, columns = cmd_with_timeout(
+ "stty size",
+ timeout_seconds=1.0,
+ ).split()
+ except Exception as e:
+ logger.exception(e)
+ raise Exception('Can\'t determine console size?!')
return RowsColumns(int(rows), int(columns))
string, width=subwidth, alignment=alignment, padding=padding
)
retval += string
+ while(len(retval) > width):
+ retval = retval.replace(' ', ' ', 1)
+ while(len(retval) < width):
+ retval = retval.replace(' ', ' ', 1)
return retval
padding = padding[0]
first, *rest, last = string.split()
w = width - (len(first) + 1 + len(last) + 1)
- retval = (
- first + padding + distribute_strings(rest, width=w, padding=padding)
- )
- while len(retval) + len(last) < width:
- retval += padding
- retval += last
- return retval
+ ret = first + padding + distribute_strings(rest, width=w, padding=padding) + padding + last
+ return ret
def justify_string(
return out
-class Indenter:
+class Indenter(object):
"""
with Indenter(pad_count = 8) as i:
i.print('test')