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.
--- 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