curses' window.insnstr 是否在 Python 3 中用于宽字符?
Is curses' window.insnstr broken in Python 3 for wide characters?
使用 Python 3 的 ncurses 绑定打印宽字符时,使用 window.insnstr 时会压缩空格。这是重现问题的代码:
import curses
def main(window):
window.insnstr(0, 0, "insnstr", 80)
window.insnstr(1, 0, "赵启明 XXX", 80)
window.insnstr(2, 0, "001122 XXX", 80)
window.insnstr(3, 0, "赵启明 XXX", 80)
window.insnstr(4, 0, "001122 XXX", 80)
window.addnstr(6, 0, "addnstr", 80)
window.addnstr(7, 0, "赵启明 XXX", 80)
window.addnstr(8, 0, "001122 XXX", 80)
window.addnstr(9, 0, "赵启明 XXX", 80)
window.addnstr(10, 0, "001122 XXX", 80)
window.addnstr(11, 0, "Press any key to exit.", 80)
window.refresh()
window.get_wch()
if __name__ == "__main__":
curses.wrapper(main)
使用 tmux、Xterm 和 st,我得到以下输出:
insnstr
赵启明 XXX
001122 XXX
赵启明 XXX
001122 XXX
addnstr
赵启明 XXX
001122 XXX
赵启明 XXX
001122 XXX
Press any key to exit.
我希望两个块中的对齐方式相同。有趣的是,如果我用任何其他字符替换空格,对齐方式是一致的:
insnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX
addnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX
Press any key to exit.
根据您的浏览器字体,数字可能对齐也可能不对齐;请参考此屏幕截图以查看输出在终端仿真器中的外观:
这是 ncurses 库中的一个错误,在 Python 库的实现中,还是我误解了这个 curses 函数应该如何工作?
这看起来像是 ncurses 库中的一个错误:addstr 风格比 insert/delete 操作更频繁地使用,ncurses 必须做一些特殊的簿记来跟踪双角字符。
这已在 patch 6.0.20160220 中修复,最终将在您使用的任何包中。
使用 Python 3 的 ncurses 绑定打印宽字符时,使用 window.insnstr 时会压缩空格。这是重现问题的代码:
import curses
def main(window):
window.insnstr(0, 0, "insnstr", 80)
window.insnstr(1, 0, "赵启明 XXX", 80)
window.insnstr(2, 0, "001122 XXX", 80)
window.insnstr(3, 0, "赵启明 XXX", 80)
window.insnstr(4, 0, "001122 XXX", 80)
window.addnstr(6, 0, "addnstr", 80)
window.addnstr(7, 0, "赵启明 XXX", 80)
window.addnstr(8, 0, "001122 XXX", 80)
window.addnstr(9, 0, "赵启明 XXX", 80)
window.addnstr(10, 0, "001122 XXX", 80)
window.addnstr(11, 0, "Press any key to exit.", 80)
window.refresh()
window.get_wch()
if __name__ == "__main__":
curses.wrapper(main)
使用 tmux、Xterm 和 st,我得到以下输出:
insnstr
赵启明 XXX
001122 XXX
赵启明 XXX
001122 XXX
addnstr
赵启明 XXX
001122 XXX
赵启明 XXX
001122 XXX
Press any key to exit.
我希望两个块中的对齐方式相同。有趣的是,如果我用任何其他字符替换空格,对齐方式是一致的:
insnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX
addnstr
赵启明----------XXX
001122----------XXX
赵启明----------XXX
001122----------XXX
Press any key to exit.
根据您的浏览器字体,数字可能对齐也可能不对齐;请参考此屏幕截图以查看输出在终端仿真器中的外观:
这是 ncurses 库中的一个错误,在 Python 库的实现中,还是我误解了这个 curses 函数应该如何工作?
这看起来像是 ncurses 库中的一个错误:addstr 风格比 insert/delete 操作更频繁地使用,ncurses 必须做一些特殊的簿记来跟踪双角字符。
这已在 patch 6.0.20160220 中修复,最终将在您使用的任何包中。