Browse Source

tw.view: get_term_columns() -> get_term_dimensions()

The MMGen Project 2 years ago
parent
commit
ff578e3a0e
1 changed files with 15 additions and 12 deletions
  1. 15 12
      mmgen/tw/view.py

+ 15 - 12
mmgen/tw/view.py

@@ -71,6 +71,8 @@ class TwView(MMGenObject,metaclass=AsyncInit):
 	txid_w      = 64
 	sort_key    = 'age'
 	_display_data = {}
+	term_height = 0
+	term_width = 0
 	filters = ()
 
 	fp = namedtuple('fs_params',['fs_key','hdr_fs_repl','fs_repl','hdr_fs','fs'])
@@ -217,19 +219,20 @@ class TwView(MMGenObject,metaclass=AsyncInit):
 	def filter_data(self):
 		return self.data.copy()
 
-	def get_term_columns(self,min_cols):
-		from ..term import get_terminal_size,get_char_raw
+	def get_term_dimensions(self,min_cols):
+		from ..term import get_terminal_size,get_char_raw,_term_dimensions
 		while True:
-			cols = g.columns or get_terminal_size().width
+			ts = get_terminal_size()
+			cols = g.columns or ts.width
 			if cols >= min_cols:
-				return cols
+				return _term_dimensions(cols,ts.height)
 			if sys.stdout.isatty():
 				if g.columns:
 					die(1,'\n'+fmt(self.tcols_errmsg.format(g.columns,self.desc,min_cols),indent='  '))
 				else:
 					get_char_raw('\n'+fmt(self.twidth_errmsg.format(self.desc,min_cols),append=''))
 			else:
-				return min_cols
+				return _term_dimensions(min_cols,ts.height)
 
 	def compute_column_widths(self,widths,maxws,minws,maxws_nice={},wide=False):
 
@@ -259,17 +262,17 @@ class TwView(MMGenObject,metaclass=AsyncInit):
 			else:
 				return {k:0 for k in varws}
 
-		if wide:
-			return do_ret_max()
-
 		varws = {k:maxws[k] - minws[k] for k in maxws if maxws[k] > minws[k]}
 		minw = sum(widths.values()) + sum(minws.values())
 		varw = sum(varws.values())
 
-		term_cols = self.get_term_columns(minw)
-		self.cols = min(term_cols,minw + varw)
+		td = self.get_term_dimensions(minw)
+		self.term_height = td.height
+		self.term_width = td.width
+
+		self.cols = min(self.term_width,minw + varw)
 
-		if self.cols == minw + varw:
+		if wide or self.cols == minw + varw:
 			return do_ret_max()
 
 		if maxws_nice:
@@ -277,7 +280,7 @@ class TwView(MMGenObject,metaclass=AsyncInit):
 			varws_hp = {k: maxws_nice[k] - minws[k] if k in maxws_nice else varws[k] for k in varws}
 			varw_hp = sum(varws_hp.values())
 			widths_hp = get_freews(
-				min(term_cols,minw + varw_hp),
+				min(self.term_width,minw + varw_hp),
 				varws_hp,
 				varw_hp,
 				minw )