Spaces:
Runtime error
Runtime error
| import os | |
| import sys | |
| import textwrap | |
| from box.reltools import pathjoin | |
| def get_width(): | |
| try: | |
| return os.get_terminal_size().columns | |
| except: | |
| return 80 | |
| def bat(path): | |
| path = path if os.path.isabs(path) else pathjoin(sys._getframe(1), path) | |
| with open(path, 'r') as f: | |
| contents = f.readlines() | |
| lines = contents | |
| max_line_number = len(lines) | |
| line_number_width = len(str(max_line_number)) | |
| gutter_padding = 2 # Padding on each side of the line number | |
| # Calculate the total width of the output | |
| terminal_width = get_width() | |
| gutter_width = line_number_width + 2 * gutter_padding + 1 # +1 for the vertical bar | |
| content_width = terminal_width - gutter_width - 1 # -1 for the space after the vertical bar | |
| # ANSI escape codes for dimming and resetting | |
| dim = "\033[2m" | |
| reset = "\033[0m" | |
| bold = "\033[1m" | |
| # Print the header | |
| print(f"{dim}{'β' * (gutter_width - 1)}β¬{'β' * (content_width + 1)}{reset}") | |
| print(f"{dim}{'':{gutter_width - 1}}β{reset} File: {bold}{path}{reset}") | |
| print(f"{dim}{'β' * (gutter_width - 1)}βΌ{'β' * (content_width + 1)}{reset}") | |
| # Print the file contents with line numbers and wrapping | |
| for i, line in enumerate(lines, start=1): | |
| line = line.rstrip('\n') | |
| wrapped_lines = textwrap.wrap(line, width=content_width) | |
| for j, wrapped_line in enumerate(wrapped_lines): | |
| if j == 0: | |
| print(f"{dim}{i:>{line_number_width + gutter_padding}}{' ' * gutter_padding}β{reset} {wrapped_line}") | |
| else: | |
| print(f"{dim}{'':{line_number_width + gutter_padding}}{' ' * gutter_padding}β{reset} {wrapped_line}") | |
| # Print the footer | |
| print(f"{dim}{'β' * (gutter_width - 1)}β΄{'β' * (content_width + 1)}{reset}") | |
| if __name__ == "__main__": | |
| bat(sys.argv[1]) | |
| # run.vim: vert term python % tmp/lorem_ipsum.txt | |