Mercurial > hg
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