##// END OF EJS Templates
Use term width to determine header length
Vincent Woo -
Show More
@@ -124,6 +124,7 b' from IPython.utils import path as util_path'
124 from IPython.utils import py3compat
124 from IPython.utils import py3compat
125 from IPython.utils import ulinecache
125 from IPython.utils import ulinecache
126 from IPython.utils.data import uniq_stable
126 from IPython.utils.data import uniq_stable
127 from IPython.utils.terminal import get_terminal_size
127 from logging import info, error
128 from logging import info, error
128
129
129 import IPython.utils.colorable as colorable
130 import IPython.utils.colorable as colorable
@@ -1029,20 +1030,21 b' class VerboseTB(TBTools):'
1029 colors = self.Colors # just a shorthand + quicker name lookup
1030 colors = self.Colors # just a shorthand + quicker name lookup
1030 colorsnormal = colors.Normal # used a lot
1031 colorsnormal = colors.Normal # used a lot
1031 exc = '%s%s%s' % (colors.excName, etype, colorsnormal)
1032 exc = '%s%s%s' % (colors.excName, etype, colorsnormal)
1033 width = min(75, get_terminal_size()[0])
1032 if long_version:
1034 if long_version:
1033 # Header with the exception type, python version, and date
1035 # Header with the exception type, python version, and date
1034 pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable
1036 pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable
1035 date = time.ctime(time.time())
1037 date = time.ctime(time.time())
1036
1038
1037 head = '%s%s%s\n%s%s%s\n%s' % (colors.topline, '-' * 75, colorsnormal,
1039 head = '%s%s%s\n%s%s%s\n%s' % (colors.topline, '-' * width, colorsnormal,
1038 exc, ' ' * (75 - len(str(etype)) - len(pyver)),
1040 exc, ' ' * (width - len(str(etype)) - len(pyver)),
1039 pyver, date.rjust(75) )
1041 pyver, date.rjust(width) )
1040 head += "\nA problem occurred executing Python code. Here is the sequence of function" \
1042 head += "\nA problem occurred executing Python code. Here is the sequence of function" \
1041 "\ncalls leading up to the error, with the most recent (innermost) call last."
1043 "\ncalls leading up to the error, with the most recent (innermost) call last."
1042 else:
1044 else:
1043 # Simplified header
1045 # Simplified header
1044 head = '%s%s' % (exc, 'Traceback (most recent call last)'. \
1046 head = '%s%s' % (exc, 'Traceback (most recent call last)'. \
1045 rjust(75 - len(str(etype))) )
1047 rjust(width - len(str(etype))) )
1046
1048
1047 return head
1049 return head
1048
1050
@@ -1155,7 +1157,7 b' class VerboseTB(TBTools):'
1155
1157
1156 colors = self.Colors # just a shorthand + quicker name lookup
1158 colors = self.Colors # just a shorthand + quicker name lookup
1157 colorsnormal = colors.Normal # used a lot
1159 colorsnormal = colors.Normal # used a lot
1158 head = '%s%s%s' % (colors.topline, '-' * 75, colorsnormal)
1160 head = '%s%s%s' % (colors.topline, '-' * min(75, get_terminal_size()[0]), colorsnormal)
1159 structured_traceback_parts = [head]
1161 structured_traceback_parts = [head]
1160 if py3compat.PY3:
1162 if py3compat.PY3:
1161 chained_exceptions_tb_offset = 0
1163 chained_exceptions_tb_offset = 0
@@ -24,6 +24,7 b' import os'
24 import struct
24 import struct
25 import sys
25 import sys
26 import warnings
26 import warnings
27 import backports.shutil_get_terminal_size
27
28
28 from . import py3compat
29 from . import py3compat
29
30
@@ -120,37 +121,5 b' def freeze_term_title():'
120 ignore_termtitle = True
121 ignore_termtitle = True
121
122
122
123
123 if sys.platform == 'win32':
124 def get_terminal_size(defaultx=80, defaulty=25):
124 def get_terminal_size(defaultx=80, defaulty=25):
125 return backports.shutil_get_terminal_size.get_terminal_size((defaultx, defaulty))
125 """Return size of current terminal console.
126
127 This function try to determine actual size of current working
128 console window and return tuple (sizex, sizey) if success,
129 or default size (defaultx, defaulty) otherwise.
130
131 Dependencies: ctypes should be installed.
132
133 Author: Alexander Belchenko (e-mail: bialix AT ukr.net)
134 """
135 try:
136 import ctypes
137 except ImportError:
138 return defaultx, defaulty
139
140 h = ctypes.windll.kernel32.GetStdHandle(-11)
141 csbi = ctypes.create_string_buffer(22)
142 res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(h, csbi)
143
144 if res:
145 (bufx, bufy, curx, cury, wattr,
146 left, top, right, bottom, maxx, maxy) = struct.unpack(
147 "hhhhHhhhhhh", csbi.raw)
148 sizex = right - left + 1
149 sizey = bottom - top + 1
150 return (sizex, sizey)
151 else:
152 return (defaultx, defaulty)
153 else:
154 def get_terminal_size(defaultx=80, defaulty=25):
155 return defaultx, defaulty
156
@@ -197,6 +197,7 b' install_requires = ['
197 'traitlets',
197 'traitlets',
198 'prompt_toolkit>=0.58',
198 'prompt_toolkit>=0.58',
199 'pygments',
199 'pygments',
200 'backports.shutil_get_terminal_size',
200 ]
201 ]
201
202
202 # Platform-specific dependencies:
203 # Platform-specific dependencies:
General Comments 0
You need to be logged in to leave comments. Login now