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, '-' * |
|
1039 | head = '%s%s%s\n%s%s%s\n%s' % (colors.topline, '-' * width, colorsnormal, | |
1038 |
exc, ' ' * ( |
|
1040 | exc, ' ' * (width - len(str(etype)) - len(pyver)), | |
1039 |
pyver, date.rjust( |
|
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( |
|
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 |
|
|
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