当实现显示两列的 CLI 时,一种可能的实现是用空格填充左列以对齐右列。示例实现:
from itertools import zip_longest
from shutil import get_terminal_size
left_lines = ["aaa", "bbb"]
right_lines = ["xxx", "yyy", "zzz"]
columns = min(get_terminal_size().columns, 80)
column_width = (columns - 1) // 2
for left, right in zip_longest(left_lines, right_lines, fillvalue=""):
assert len(left) <= column_width
assert len(right) <= column_width
print(left.ljust(column_width) + "|" + right)
结果:
aaa |xxx
bbb |yyy
|zzz
但是,这会导致无法从一列复制多行的问题。例如。当试图从左列复制“aaa”和“bbb”行时(在我的例子中,在 urxvt 中使用主选择或剪贴板),我得到:
aaa |xxx
bbb
是否有另一种实现可以避免这个问题,至少在某些终端仿真器中是这样?