changeset 30314:365812902904

scmutil: extend termwidth() to return terminal height, renamed to termsize() It appears crecord.py has its own termsize() function. I want to get rid of it. The fallback height is chosen from the default of cmd.exe on Windows, and VT100 on Unix.
author Yuya Nishihara <yuya@tcha.org>
date Thu, 20 Oct 2016 23:09:05 +0900
parents 392633d7860e
children 0911191dc4c9
files mercurial/scmposix.py mercurial/scmutil.py mercurial/scmwindows.py mercurial/ui.py mercurial/win32.py
diffstat 5 files changed, 16 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/scmposix.py	Thu Oct 20 22:57:12 2016 +0900
+++ b/mercurial/scmposix.py	Thu Oct 20 23:09:05 2016 +0900
@@ -42,12 +42,12 @@
     else:
         return [os.path.expanduser('~/.hgrc')]
 
-def termwidth(ui):
+def termsize(ui):
     try:
         import termios
         TIOCGWINSZ = termios.TIOCGWINSZ  # unavailable on IRIX (issue3449)
     except (AttributeError, ImportError):
-        return 80
+        return 80, 24
 
     for dev in (ui.ferr, ui.fout, ui.fin):
         try:
@@ -58,9 +58,9 @@
             if not os.isatty(fd):
                 continue
             arri = fcntl.ioctl(fd, TIOCGWINSZ, '\0' * 8)
-            width = array.array('h', arri)[1]
-            if width > 0:
-                return width
+            height, width = array.array('h', arri)[:2]
+            if width > 0 and height > 0:
+                return width, height
         except ValueError:
             pass
         except IOError as e:
@@ -68,4 +68,4 @@
                 pass
             else:
                 raise
-    return 80
+    return 80, 24
--- a/mercurial/scmutil.py	Thu Oct 20 22:57:12 2016 +0900
+++ b/mercurial/scmutil.py	Thu Oct 20 23:09:05 2016 +0900
@@ -40,7 +40,7 @@
 
 systemrcpath = scmplatform.systemrcpath
 userrcpath = scmplatform.userrcpath
-termwidth = scmplatform.termwidth
+termsize = scmplatform.termsize
 
 class status(tuple):
     '''Named tuple with a list of files per status. The 'deleted', 'unknown'
--- a/mercurial/scmwindows.py	Thu Oct 20 22:57:12 2016 +0900
+++ b/mercurial/scmwindows.py	Thu Oct 20 23:09:05 2016 +0900
@@ -53,5 +53,5 @@
         path.append(os.path.join(userprofile, '.hgrc'))
     return path
 
-def termwidth(ui):
-    return win32.termwidth()
+def termsize(ui):
+    return win32.termsize()
--- a/mercurial/ui.py	Thu Oct 20 22:57:12 2016 +0900
+++ b/mercurial/ui.py	Thu Oct 20 23:09:05 2016 +0900
@@ -822,7 +822,7 @@
                 return int(encoding.environ['COLUMNS'])
             except ValueError:
                 pass
-        return scmutil.termwidth(self)
+        return scmutil.termsize(self)[0]
 
     def formatted(self):
         '''should formatted output be used?
--- a/mercurial/win32.py	Thu Oct 20 22:57:12 2016 +0900
+++ b/mercurial/win32.py	Thu Oct 20 23:09:05 2016 +0900
@@ -347,23 +347,25 @@
     pid = _kernel32.GetCurrentProcessId()
     _user32.EnumWindows(_WNDENUMPROC(callback), pid)
 
-def termwidth():
+def termsize():
     # cmd.exe does not handle CR like a unix console, the CR is
     # counted in the line length. On 80 columns consoles, if 80
     # characters are written, the following CR won't apply on the
     # current line but on the new one. Keep room for it.
     width = 80 - 1
+    height = 25
     # Query stderr to avoid problems with redirections
     screenbuf = _kernel32.GetStdHandle(
                   _STD_ERROR_HANDLE) # don't close the handle returned
     if screenbuf is None or screenbuf == _INVALID_HANDLE_VALUE:
-        return width
+        return width, height
     csbi = _CONSOLE_SCREEN_BUFFER_INFO()
     if not _kernel32.GetConsoleScreenBufferInfo(
                         screenbuf, ctypes.byref(csbi)):
-        return width
+        return width, height
     width = csbi.srWindow.Right - csbi.srWindow.Left  # don't '+ 1'
-    return width
+    height = csbi.srWindow.Bottom - csbi.srWindow.Top + 1
+    return width, height
 
 def _1stchild(pid):
     '''return the 1st found child of the given pid