# HG changeset patch # User Yuya Nishihara # Date 1476972545 -32400 # Node ID 36581290290441804717e1f1a92fbb79b40a5feb # Parent 392633d7860ec9b6e0568def2ea0d303139900de 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. diff -r 392633d7860e -r 365812902904 mercurial/scmposix.py --- 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 diff -r 392633d7860e -r 365812902904 mercurial/scmutil.py --- 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' diff -r 392633d7860e -r 365812902904 mercurial/scmwindows.py --- 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() diff -r 392633d7860e -r 365812902904 mercurial/ui.py --- 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? diff -r 392633d7860e -r 365812902904 mercurial/win32.py --- 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